Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. ioBroker драйвера
  5. Как подключить устройство, включающееся внешним скрипт (php)?

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Как подключить устройство, включающееся внешним скрипт (php)?

Scheduled Pinned Locked Moved ioBroker драйвера
14 Posts 6 Posters 2.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    Vlad_k
    wrote on last edited by
    #2

    вопрос не о чем, что за устройство, как подключено?

    1 Reply Last reply
    0
    • A Offline
      A Offline
      andrey99986
      wrote on last edited by
      #3

      @Vlad_k:

      вопрос не о чем, что за устройство, как подключено? `
      Не важно какое устройство - цель не заменить код (php), а просто вызывать внешнюю программу php.

      Само устройство 7 -канальная розетка, работающая через COM-порт.

      Понятно, что можно переписать код действующего скрипта, но пока хватит вызова внешней программы с обработкой стандартного вывода.

      1 Reply Last reply
      0
      • I Offline
        I Offline
        instalator
        wrote on last edited by
        #4

        @andrey99986:

        @Vlad_k:

        вопрос не о чем, что за устройство, как подключено? `
        Не важно какое устройство - цель не заменить код (php), а просто вызывать внешнюю программу php.

        Само устройство 7 -канальная розетка, работающая через COM-порт.

        Понятно, что можно переписать код действующего скрипта, но пока хватит вызова внешней программы с обработкой стандартного вывода. `
        Php скрипт то как данные принимает?

        Высокий уровень Децибел вреден для здоровья!

        http://blog.instalator.ru/

        1 Reply Last reply
        0
        • H Offline
          H Offline
          Haus
          wrote on last edited by
          #5

          @andrey99986:

          Есть устройство, которое включается-выключается 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 );
                  }
          });
          
          

          js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

          admin: 3.6.0

          javascript: 4.1.10

          web: 2.4.1 vis: 1.1.10

          cloud: 2.6.2

          Server: DELL FX170 / linux: Debian 9.5 Stretch

          Adapter: MegaD-2561, Mega-ES…

          1 Reply Last reply
          0
          • A Offline
            A Offline
            andrey99986
            wrote on last edited by
            #6

            @instalator:

            @andrey99986:

            @Vlad_k:

            вопрос не о чем, что за устройство, как подключено? `
            Не важно какое устройство - цель не заменить код (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"; `

            1 Reply Last reply
            0
            • H Offline
              H Offline
              Haus
              wrote on last edited by
              #7

              @andrey99986:

              @instalator:

              @andrey99986:

              Не важно какое устройство - цель не заменить код (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);
              
              

              js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

              admin: 3.6.0

              javascript: 4.1.10

              web: 2.4.1 vis: 1.1.10

              cloud: 2.6.2

              Server: DELL FX170 / linux: Debian 9.5 Stretch

              Adapter: MegaD-2561, Mega-ES…

              1 Reply Last reply
              0
              • V Offline
                V Offline
                Vlad_k
                wrote on last edited by
                #8

                $cmd="#PWD123456#"."OUT".$port."=".$act."\r";

                ну вот хоть какая то информация. просто выводи в ком порт команды из своего js скрипта

                1 Reply Last reply
                0
                • BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  wrote on last edited by
                  #9

                  @andrey99986:

                  Есть устройство, которое включается-выключается 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
                  
                  1 Reply Last reply
                  0
                  • V Offline
                    V Offline
                    vtec
                    wrote on last edited by
                    #10

                    А не проще?

                    exec - execute some OS command, like "cp file1 file2"
                    exec (cmd, callback)
                    

                    Пример:

                    exec ('/home/smarthome/scripts/com_port.php');

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      andrey99986
                      wrote on last edited by
                      #11

                      @vtec:

                      А не проще?

                      exec - execute some OS command, like "cp file1 file2"
                      exec (cmd, callback)
                      

                      Пример:

                      exec ('/home/smarthome/scripts/com_port.php'); `

                      Отлично! Этот вариант работает.

                      Следующий вопрос - зная как включать-выключать устройство через вызов внешней программы - как создать устройство

                      чтобы его можно было подключить в vis-е к элементу "Bulb on/off"?

                      1 Reply Last reply
                      0
                      • BluefoxB Offline
                        BluefoxB Offline
                        Bluefox
                        wrote on last edited by
                        #12

                        @andrey99986:

                        @vtec:

                        А не проще?

                        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);
                        
                        
                        1 Reply Last reply
                        0
                        • A Offline
                          A Offline
                          andrey99986
                          wrote on last edited by
                          #13

                          Простой вызов 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);
                          
                          1 Reply Last reply
                          0
                          • A Offline
                            A Offline
                            andrey99986
                            wrote on last edited by
                            #14

                            Рабочий код:

                            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);
                            
                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            745

                            Online

                            32.4k

                            Users

                            81.4k

                            Topics

                            1.3m

                            Posts
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            ioBroker Community 2014-2025
                            logo
                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Recent
                            • Tags
                            • Unread 0
                            • Categories
                            • Unreplied
                            • Popular
                            • GitHub
                            • Docu
                            • Hilfe