Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker 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)?

Geplant Angeheftet Gesperrt Verschoben ioBroker драйвера
14 Beiträge 6 Kommentatoren 2.3k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • A Offline
    A Offline
    andrey99986
    schrieb am zuletzt editiert von
    #1

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

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

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

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

    1 Antwort Letzte Antwort
    0
    • V Offline
      V Offline
      Vlad_k
      schrieb am zuletzt editiert von
      #2

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

      1 Antwort Letzte Antwort
      0
      • A Offline
        A Offline
        andrey99986
        schrieb am zuletzt editiert von
        #3

        @Vlad_k:

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

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

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

        1 Antwort Letzte Antwort
        0
        • I Offline
          I Offline
          instalator
          schrieb am zuletzt editiert von
          #4

          @andrey99986:

          @Vlad_k:

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

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

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

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

          http://blog.instalator.ru/

          1 Antwort Letzte Antwort
          0
          • H Offline
            H Offline
            Haus
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • A Offline
              A Offline
              andrey99986
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • H Offline
                H Offline
                Haus
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • V Offline
                  V Offline
                  Vlad_k
                  schrieb am zuletzt editiert von
                  #8

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

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

                  1 Antwort Letzte Antwort
                  0
                  • BluefoxB Offline
                    BluefoxB Offline
                    Bluefox
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • V Offline
                      V Offline
                      vtec
                      schrieb am zuletzt editiert von
                      #10

                      А не проще?

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

                      Пример:

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

                      1 Antwort Letzte Antwort
                      0
                      • A Offline
                        A Offline
                        andrey99986
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • BluefoxB Offline
                          BluefoxB Offline
                          Bluefox
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          0
                          • A Offline
                            A Offline
                            andrey99986
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            0
                            • A Offline
                              A Offline
                              andrey99986
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              368

                              Online

                              32.4k

                              Benutzer

                              81.4k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe