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.2k

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

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

Как подключить устройство, включающееся внешним скрипт (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.
  • 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

                      693

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      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