NEWS
Как подключить устройство, включающееся внешним скрипт (php)?
- 
					
					
					
					
 Есть устройство, которое включается-выключается php-скриптом. Можно ли создать это устройство в iobroker подключив через драйвер javascript? Покажите пример пожалуйста. Какие есть другие варианты? (При условии что внешний скрипт это "черный ящик",- исходный код не доступен). 
- 
					
					
					
					
 вопрос не о чем, что за устройство, как подключено? 
- 
					
					
					
					
 вопрос не о чем, что за устройство, как подключено? ` 
 Не важно какое устройство - цель не заменить код (php), а просто вызывать внешнюю программу php.Само устройство 7 -канальная розетка, работающая через COM-порт. Понятно, что можно переписать код действующего скрипта, но пока хватит вызова внешней программы с обработкой стандартного вывода. 
- 
					
					
					
					
 вопрос не о чем, что за устройство, как подключено? ` 
 Не важно какое устройство - цель не заменить код (php), а просто вызывать внешнюю программу php.Само устройство 7 -канальная розетка, работающая через COM-порт. Понятно, что можно переписать код действующего скрипта, но пока хватит вызова внешней программы с обработкой стандартного вывода. ` 
 Php скрипт то как данные принимает?
- 
					
					
					
					
 Есть устройство, которое включается-выключается php-скриптом. Можно ли создать это устройство в iobroker подключив через драйвер javascript? Покажите пример пожалуйста. Какие есть другие варианты? (При условии что внешний скрипт это "черный ящик",- исходный код не доступен). ` 
 Если скрипт отдает какое то одно значениеcreateState ( 'blabla','' ); var request = require ( 'request' ); request ('http://192.168.1.11/script.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { setState ( blabla, body ); } });
- 
					
					
					
					
 вопрос не о чем, что за устройство, как подключено? ` 
 Не важно какое устройство - цель не заменить код (php), а просто вызывать внешнюю программу php.Само устройство 7 -канальная розетка, работающая через COM-порт. Понятно, что можно переписать код действующего скрипта, но пока хватит вызова внешней программы с обработкой стандартного вывода. Php скрипт то как данные принимает?
 Всё таки толкаете меня по пути перезаписи кода? ` > $port=$argv[1]; $act=$argv[2]; if ($act == 1) $act = "ON"; else $act = "OFF" ; $device="/dev/ttyUSB1"; exec('/bin/stty -F '.$device.' cs8 9600 -crtscts -parenb -cstopb'); // Open port $fp = fopen($device, "r+"); if (!$fp) { echo "Error opening port, try attempt 2"; sleep(1000); $fp = fopen($device, "r+"); if (!$fp) { echo "Error opening port, try attemp 3"; sleep(1000); $fp = fopen($device, "r+"); if (!$fp) { echo "Error opening port. Contact admin"; die(); } } } function myread_port() { $myresult = ''; $myc = ''; global $fp; stream_set_blocking($fp,0); $timeout=microtime(1)+0.5; while (microtime(1)<$timeout) { $myc=fgetc($fp); if($myc === false){ usleep(5); continue; } $myresult .= $myc; } return $myresult; } $cmd="#PWD123456#"."OUT".$port."=".$act."\r"; echo "\n$cmd\n"; fwrite($fp, $cmd); $result = myread_port(); echo "$result"; ` 
- 
					
					
					
					
 Не важно какое устройство - цель не заменить код (php), а просто вызывать внешнюю программу php. Само устройство 7 -канальная розетка, работающая через COM-порт. Понятно, что можно переписать код действующего скрипта, но пока хватит вызова внешней программы с обработкой стандартного вывода. Php скрипт то как данные принимает?
 Всё таки толкаете меня по пути перезаписи кода? ` `
 Костылей можно наделать, но все ровно придётся скрипт а ещё лучше драйвер если устройств несколько делать. Это устройство серийное?Вот так я временно дергал данные из базы и отправлял их в ioBroker(предварительно создаём переменную createState ( 'temp_in_bathroom2','' );) через драйвер simple-api $result = $ab->select_line("SELECT dev_value temp_bathroom2 FROM tmp_".$temp_bathroom2['ListID']." WHERE ContID=".$temp_bathroom2['ContID']." ORDER BY dev_date DESC LIMIT 1"); $temp_bathroom2 = $result['temp_bathroom2']; $fp=fopen("http://192.168.1.11:8087/set/javascript.0.temp_in_bathroom2?value=$temp_bathroom2","r"); fclose($fp);
- 
					
					
					
					
 $cmd="#PWD123456#"."OUT".$port."=".$act."\r"; ну вот хоть какая то информация. просто выводи в ком порт команды из своего js скрипта 
- 
					
					
					
					
 Есть устройство, которое включается-выключается php-скриптом. Можно ли создать это устройство в iobroker подключив через драйвер javascript? Покажите пример пожалуйста. Какие есть другие варианты? (При условии что внешний скрипт это "черный ящик",- исходный код не доступен). ` 
 Допустим есть два php скриптаhttp://someip/set.php?state=VALUE , где VALUE может быть "on" и "off" и http://someip/get.php который возвращает состояние устройства Тогда скрипт будет выглядеть так: var request = require('request'); var getURL = 'http://someip/get.php'; var setURL = 'http://someip/set.php?state='; // function for control blackbox function setBlackBox(value) { value = (value === 'on' || value === '1' || value === 1 || value === 'true' || value === true) ? 'on' : 'off'; request(setURL + value); } // function for read state of blackbox function pollValue() { request(getURL, function (error, response, body) { if (!error && response.statusCode == 200) { setState('blackBox', (body.indexOf('1') !== -1 || body.indexOf('on') !== -1), true); } }); } // after that the state is created function start() { // poll every 10 seconds the state schedule('*/10 * * * * *'/* every 10 seconds */, function () { pollValue(); }); // or just // setInterval(pollValue, 10000); // subscribe to detect control actions on({id: 'blackBox', change: 'any'}, function (obj) { if (!obj.state.ack) { setBlackBox(obj.state.val); } }); } // simple way to create createState('blackBox', start); // OR // createState( // 'blackBox', // ID of variable. In this case ID will be javascript.0.blackBox // false, // Initial value // false, // Force creation, even if exist (to overwrite description) // { // name: 'My black box', // Full text name of variable // type: 'boolean', // type of variable: number, string, boolean, array, object, mixed, file // role: 'switch' // you can see possible roles here https://github.com/ioBroker/ioBroker/blob/master/doc/SCHEMA.md#state-commonrole // }, // null, // you can define here user specific object // start); // go after creation
- 
					
					
					
					
 А не проще? exec - execute some OS command, like "cp file1 file2" exec (cmd, callback)Пример: exec ('/home/smarthome/scripts/com_port.php'); 
- 
					
					
					
					
 А не проще? exec - execute some OS command, like "cp file1 file2" exec (cmd, callback)Пример: exec ('/home/smarthome/scripts/com_port.php'); ` Отлично! Этот вариант работает. Следующий вопрос - зная как включать-выключать устройство через вызов внешней программы - как создать устройство чтобы его можно было подключить в vis-е к элементу "Bulb on/off"? 
- 
					
					
					
					
 А не проще? exec - execute some OS command, like "cp file1 file2" exec (cmd, callback)Пример: exec ('/home/smarthome/scripts/com_port.php'); ` Отлично! Этот вариант работает. Следующий вопрос - зная как включать-выключать устройство через вызов внешней программы - как создать устройство чтобы его можно было подключить в vis-е к элементу "Bulb on/off"? ` 
 Я же написал. Тебе только надо подправить функцию setBlackBox и выбросить поллинг// function for control blackbox function setBlackBox(value) { exec ('/home/smarthome/scripts/com_port.php'); } // after that the state is created function start() { // subscribe to detect control actions on({id: 'blackBox', change: 'any'}, function (obj) { if (!obj.state.ack) { setBlackBox(obj.state.val); } }); } // simple way to create createState('blackBox', start);
- 
					
					
					
					
 Простой вызов exec отрабатывается, скрипт запускается (без функций и логики). К элементу bulb назначил javascript.0.gsm7_1. В vis-e при клике статус меняется, но скрипты не запускаются. Код: function set_gsm_7_1_Off(value) { exec ('/usr/bin/php -f /var/www/scripts/roz.php 1 0'); } function set_gsm_7_1_On(value) { exec ('/usr/bin/php -f /var/www/scripts/roz.php 1 1'); } // after that the state is created function start() { // subscribe to detect control actions on({id: 'gsm7_1', change: 'any'}, function (obj) { if (obj.state.ack === true) { set_gsm_7_1_On(obj.state.val); } if (obj.state.ack === false) { set_gsm_7_1_Off(obj.state.val); } }); } // simple way to create createState('gsm7_1', start);
- 
					
					
					
					
 Рабочий код: function set_gsm_7_1(value) { if (value === true) { exec ('/usr/bin/php -f /var/www/scripts/roz.php 1 1'); } if (value === false) { exec ('/usr/bin/php -f /var/www/scripts/roz.php 1 0'); } } // after that the state is created function start() { // subscribe to detect control actions on({id: 'gsm7_1', change: 'any'}, function (obj) { if (!obj.state.ack ) { console.log('Val: ' + obj.state.val); set_gsm_7_1(obj.state.val); } }); } // simple way to create createState('gsm7_1', start);
 
		
	