Ankündigung

Einklappen
Keine Ankündigung bisher.

Telenot LBS--jemand Lust

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Hm, verstehe ich gerade nicht.

    Also müsste ich die ganze Funktion noch in eine Variable packen???

    Edit:
    gaert, die Funktion rufe ich doch auf mit einer 1 auf Eingang 1, habe ich im LBS Teil stehen
    Zuletzt geändert von benji; 23.08.2016, 20:30.

    Kommentar


      #17
      Du definierst die Funktion, aber rufst sie nicht auf.

      Wenn du vor deinem setLogicLinkAusgang() ein

      PHP-Code:
      $con telnetOpen($ip,$port$timeout); 
      machst, dann rufst du sie auch auf.
      Aber nicht vergessen vorher auch $timeout zu definieren.

      EDIT: Du solltest besser alles posten, was du programmiert hast, dann wird es klarer. LBS und EXEC kennen sich nicht und laufen völlig unabhängig. Variablen aus dem LBS Teil sind im EXEC Teil nicht bekannt.
      Zuletzt geändert von jonofe; 23.08.2016, 20:36.

      Kommentar


        #18
        This post was intentionally left blank
        Zuletzt geändert von jonofe; 23.08.2016, 20:37.

        Kommentar


          #19
          Ah ok hab ich verstanden.

          Nach Änderung kommt allerdings folgendes im FehlerLog und auf meinem Ausgang kommt noch nichts an.

          Code:
           
           2016-08-23 21:37:34	453423	?	10319	Datei: /var/edomi-backups/_public/www/shared/php/base.php | Fehlercode: 2 | Zeile: 250 | utf8_decode() expects parameter 1 to be string, resource given	ERROR

          Kommentar


            #20
            Vermutlich hast Du $con als Wert "in" einen Ausgang gegeben?! $con ist ein Ressource-Handler, kein Wert...
            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

            Kommentar


              #21
              $con ist halt eine Resource und keine String. Es ist eine connection. Du musst danach irgendwie die Daten aus dieser connection auslesen. z.B. mit den telnetWait funktionen, die Christian erwähnt hat. Oder wie gesagt, nimm die while Schleife aus meinem Wetterstation LBS, da ist alles schon fertig drin, denn so scheint das ein steiniger Weg zu werden.

              Kommentar


                #22
                Hi,

                ich bekomme die Daten jetzt in EDOMI, allerdings in ascii. Jetzt wollte ich mit einer Funktion ascii2hex alles umwandeln. Allerdings kommt dabei nicht das richtige raus. Diese function sollte doch passen oder?? Hier der Code.

                Code:
                <?php
                
                function ascii2hex($ascii) {
                  $hex = '';
                  for ($i = 0; $i < strlen($ascii); $i++) {
                    $byte = strtoupper(dechex(ord($ascii{$i})));
                    $byte = str_repeat('0', 2 - strlen($byte)).$byte;
                    $hex.=$byte." ";
                  }
                  return $hex;
                }
                
                
                // configuration
                $myIP = '192.168.84.200';  // IP wo dieses Skript gestartet wird
                $ip = '192.168.84.118';    // IP wo ser2net läuft
                $port = 4002;            // Port auf dem ser2net lauscht
                
                // connection
                $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
                $bind = socket_bind($sock,$myip );
                socket_connect($sock, $ip, $port);
                socket_set_nonblock($sock);
                socket_set_option($sock,SOL_SOCKET,SO_KEEPALIVE,1);
                
                // read loop
                while (1) 
                {
                    $buf = socket_read($sock,2048);     // read data from socket
                    if ($buf!='')                       
                
                
                
                
                        {
                        echo ascii2hex('$buf');
                        }    
                        
                    usleep(100000);
                }
                
                
                
                
                
                ?>

                Kommentar


                  #23
                  Lass mal die Hochkommata um $buf weg. Ansonsten wandelt der den String '$buf' in hex um und nicht den Inhalt der Variablen.

                  Kommentar


                    #24


                    logisch....sollte ich eigentlich wissen. Lernt man ja relativ am Anfang wenn man mit php startet.

                    Kommentar


                      #25
                      Ich wollte jetzt telnet Funktion von Edomi nutzen um zu senden. Habe den Code umgeschrieben, leider sendet er aber nichts.... hab ich noch irgendwo ein Fehler bzgl dem $con Handle???

                      Der vergleich vor dem telnetSend wird mit "1" auf Ausgang 2 getiggert.

                      Code:
                      ###[LBS]###
                      <?
                      function LB_LBSID($id) {
                          $E=getLogicEingangDataAll($id);
                          $ip = $E[2]['value'];
                          if (getLogicElementVar($id,1)!=1) {
                                 setLogicElementVar($id,1,1);                    
                              if ($E=getLogicEingangDataAll($id))
                                  if (!filter_var($ip, FILTER_VALIDATE_IP) === false)
                                         callLogicFunctionExec(LBSID,$id);              
                          } else setLogicLinkAusgang($id,1,1);
                      }
                      
                       
                      ?>
                      ###[/LBS]###
                      
                      
                      ###[EXEC]###
                      
                      <?
                      require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                      
                      set_time_limit(0);    //Script soll maximal 2 Sekunden laufen
                      
                      sql_connect();
                      
                      
                      function ascii2hex($ascii) {
                        $hex = '';
                        for ($i = 0; $i < strlen($ascii); $i++) {
                          $byte = strtoupper(dechex(ord($ascii{$i})));
                          $byte = str_repeat('0', 2 - strlen($byte)).$byte;
                          $hex.=$byte." ";
                        }
                        return $hex;
                      }
                      
                      
                      function telnetOpen($ip,$port,$timeout) {
                          //Öffnet eine Telnet-Session
                          //$ip: IP-Adresse
                          //$Port: Telnet-Port
                          //$timeout: Timeout in Sekunden
                          //return: Connection-Handler, oder false=Fehler
                          $con=fsockopen($ip,$port,$timeout);
                          if ($con) {
                              stream_set_blocking($con,0);
                              return $con;
                          } else {
                              return false;
                          }
                      }
                      
                      function telnetSend($con,$n) {
                          //Sendet in eine Telnet-Session
                          //$con: Connection-Handler
                          //$n: Inhalt (String)
                          //return: false=Fehler, sonst Anzahl der geschriebenen Bytes
                          return fwrite($con,$n."\r\n");
                      }
                      
                      $E=getLogicEingangDataAll($id);
                      $ip = $E[2]['value'];
                      $port = $E[3]['value'];
                      $myip = $E[4]['value'];
                      $timeout = '30';
                      $n = 'hh';
                      
                      
                      // connection
                      $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
                      $bind = socket_bind($sock,$myip );
                      socket_connect($sock, $ip, $port);
                      socket_set_nonblock($sock);
                      socket_set_option($sock,SOL_SOCKET,SO_KEEPALIVE,1);
                      
                      // read loop
                      while (1)
                      {
                          $buf = socket_read($sock,2048);     // read data from socket
                          if ($buf!='')                      
                          {
                           setLogicLinkAusgang($id,1,ascii2hex($buf));
                          }
                          
                          if($buf=='hh@B')
                          {
                           setLogicLinkAusgang($id,2,1);
                           $con= telnetOpen($ip,$port,$timeout);
                           telnetSend($con,$n);
                          }
                          
                          usleep(100000);
                      }
                      
                      
                      
                      
                      sql_disconnect();
                      
                      ?>
                      ###[/EXEC]###

                      Kommentar


                        #26
                        Im LBS-Teil ist zwei mal:
                        $E=getLogicEingangDataAll($id)
                        Beim ersten ist das ; zuviel stattdessen fehlt ein { am Ende und ein if davor ..
                        Und ein paar fehlende } im am ende ..
                        Den EXEC habe ich nicht angeschaut ...
                        Zuletzt geändert von coliflower; 26.08.2016, 19:49.
                        Danke und LG, Dariusz
                        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                        Kommentar


                          #27
                          Ich würde Dir für den Anfang empfehlen, Dein Script erstmal eigenständig zu entwickeln und zu testen - also nicht als LBS, sondern unabhängig von EDOMI. Einfach irgendwo die PHP-Datei speichern und mit "php <Dateiname>" ausführen...
                          EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                          Kommentar


                            #28
                            Rein von der Syntax her, der LBS vielleicht so:

                            PHP-Code:
                            <?php

                            function LB_LBSID($id) {
                                if (
                            $E=getLogicEingangDataAll($id)) {
                                    
                            $ip $E[2]['value'];
                                    if (!
                            filter_var($ipFILTER_VALIDATE_IP) === false) {
                                        if (
                            getLogicElementVar($id,1)!=1) {
                                           
                            setLogicElementVar($id,1,1);                    
                                           
                            callLogicFunctionExec(LBSID,$id);
                                        }
                                      
                                    } else {
                                        
                                    
                            setLogicLinkAusgang($id,1,1);
                                    }
                                }    
                            }
                             
                            ?>
                            Danke und LG, Dariusz
                            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                            Kommentar


                              #29
                              Hi,

                              LBS Teil korrigiert. Ich hab das Skript schon so ohne edomi getestet. Wollte ja die Telnet function von edomi nutzen. Ich hatte vergessen diese in den Exec Teil zu inkludieren. telnet_inc.php ist ja standardmäßig nicht im EXEC

                              werde jetzt mal weiter testen.


                              Gruß

                              Kommentar


                                #30
                                Hi,

                                wer kann mir etwas zu dieser Fehlermeldung sagen???

                                Code:
                                  [TABLE="border: 0, cellpadding: 0, cellspacing: 0"]
                                 	 		[TR]
                                 			[TD]2016-08-27 14:43:26[/TD]
                                 			[TD]666938[/TD]
                                 			[TD]?[/TD]
                                 			[TD]31757[/TD]
                                 			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000168.php | Fehlercode: 2 | Zeile: 3 | Could not redefine function telnetOpen[/TD]
                                 			[TD]ERROR[/TD]
                                 		[/TR]
                                 		[TR]
                                 			[TD]2016-08-27 14:43:26[/TD]
                                 			[TD]667896[/TD]
                                 			[TD]?[/TD]
                                 			[TD]31757[/TD]
                                 			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000168.php | Fehlercode: 2 | Zeile: 3 | Could not redefine function telnetSend[/TD]
                                 			[TD]ERROR[/TD]
                                 		[/TR]
                                 		[TR]
                                 			[TD]2016-08-27 14:43:26[/TD]
                                 			[TD]677836[/TD]
                                 			[TD]?[/TD]
                                 			[TD]31757[/TD]
                                 			[TD]Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000168.php | Fehlercode: 2 | Zeile: 3 | Could not redefine function telnetWait2[/TD]
                                 			[TD]ERROR[/TD]
                                 		[/TR]
                                 	 [/TABLE]

                                Kommentar

                                Lädt...
                                X