Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

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

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    700

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

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

Scheduled Pinned Locked Moved ioBroker драйвера
14 Posts 6 Posters 2.6k 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.
  • A Offline
    A Offline
    andrey99986
    wrote on last edited by
    #1

    Есть устройство, которое включается-выключается php-скриптом.

    Можно ли создать это устройство в iobroker подключив через драйвер javascript?

    Покажите пример пожалуйста.

    Какие есть другие варианты? (При условии что внешний скрипт это "черный ящик",- исходный код не доступен).

    1 Reply Last reply
    0
    • 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

                              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                              With your input, this post could be even better 💗

                              Register Login
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              667

                              Online

                              32.7k

                              Users

                              82.6k

                              Topics

                              1.3m

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

                              • Don't have an account? Register

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