Ankündigung

Einklappen
Keine Ankündigung bisher.

iTunes | Steuerung via Script über WebServer | Edomi

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

    Hallo Christian,

    als Rückmeldung zu deiner Idee in meiner Umsetzung, es funktioniert, der HTTP wird nicht zyklisch gesendet, nur bei Änderung … (ABER) ...

    2016-02-07 15:03:18 210036 EXEC 8287 K03 mit:Computer Ok
    2016-02-07 15:03:18 210146 EXEC 8287 K04 THEN:1 Ok
    2016-02-07 15:03:18 727205 EXEC 8287 K05 THEN:http://10.0.100.150/%7Edariusz/iCont...omputer&p2=30/ ctx Resource id #29 Ok

    2016-02-07 15:04:07 382433 EXEC 8287 K03 mit:Computer Ok
    2016-02-07 15:04:07 382536 EXEC 8287 K04 THEN:1 Ok
    2016-02-07 15:04:07 597271 EXEC 8287 K05 THEN:http://10.0.100.150/%7Edariusz/iCont...omputer&p2=70/ ctx Resource id #638324 Ok

    2016-02-07 15:05:38 977603 EXEC 8287 K03 mit:Computer Ok
    2016-02-07 15:05:38 977668 EXEC 8287 K04 THEN:1 Ok
    2016-02-07 15:05:39 220748 EXEC 8287 K05 THEN:http://10.0.100.150/%7Edariusz/iCont...omputer&p2=50/ ctx Resource id #1782199 Ok



    … LEIDER läuft der Edomi CPU ins unendliche, 100%+ (ROT) ...

    PHP-Code:
    <?php
    require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
    set_time_limit(0);
    sql_connect();

    if (
    $E=getLogicEingangDataAll($id)) {

        
    restore_error_handler();
        
    error_reporting(0);

        if (
    $socket socket_create(AF_INETSOCK_DGRAMSOL_UDP)) {
        
            if (
    socket_bind($socket,0,$E[31]['value'])) {


    $alterWertE1='';


                while (
    getSysInfo(1)>=1) {
                            
                    
    $len socket_recv($socket,$data,1024,MSG_DONTWAIT);    //das MSG_DONTWAIT ist der Trick ;)
                    
                    
    if ($len!==false) {        // UPD-Paket empfangen: Hier die Auswertung wie gehabt...
                        
                    
    } else {    // kein UDP-Paket empfangen: Hier könnten z.B. HTTP-Request verarbeitet werden
                                           
                        
    if ($E=getLogicEingangDataAll($id)) {
                         
                                
    $url "http://".$E[34]['value']."/%7E".$E[33]['value']."/iControl.php?c=";            
                               
                                   
    // L a u t s t ä r k e :
                                   
                            
    if ($alterWertE1 != $E[20]['value']) {    
                            
                                    
    writeToTraceLog(0,true,'K03 mit:'.$E[35]['value']);
                                    if (!
    isEmpty($E[35]['value'])==1) {
                                        
    writeToTraceLog(0,true,'K04 THEN:'.!isEmpty($E[35]['value']));
                                        
    $ctx=stream_context_create(array('http' => array('timeout' => )));
                                        
    $r=file_get_contents($url.'apVolume&p1='.$E[35]['value'].'&p2='.$E[20]['value'],0,$ctx);
                                        
    writeToTraceLog(0,true,'K05 THEN:'.$url.'apVolume&p1='.$E[35]['value'].'&p2='.$E[20]['value'].'/ ctx '.$ctx);
                                    
                    
    $alterWertE1 $E[20]['value']; //aktuellen Wert merken für zukünftige Vergleiche

                                    
    }
                                
                            }    
                        }   
                    }            
                }    
                
    usleep(1000*100);  //z.B. 100ms warten - wichtig, um die CPU-Last zu begrenzen!            
            
    }
        }
        
    socket_close($socket);
    }
    sql_disconnect();

    ?>
    Danke und LG, Dariusz
    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

    Kommentar


      Kein Wunder - usleep() befindet sich ja auch außerhalb der Schleife
      EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

      Kommentar


        Sche…..!
        Danke und LG, Dariusz
        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

        Kommentar


          Zitat von gaert Beitrag anzeigen

          Also kannst Du doch im EXEC-Teil etwas in dieser Art implementieren:

          PHP-Code:

          $alterWertE1
          ='';

          while...

          if (
          $alterWertE1 != $E[1]['value']) {
          //Request senden...
          $alterWertE1 $E[1]['value']; //aktuellen Wert merken für zukünftige Vergleiche


          Nur so eine Frage … würde auch folgendes Konstrukt funktionieren ?
          Ich vermute nein, sonst hättest du es vorgeschlagen ;-)

          PHP-Code:
          $E[1]['valueold']
          while ...
          if (
          $E[1]['value']!==$E[1]['valueold']) {
          // Request senden ... 


          Wie ist es aber wenn ich 1/0 steuern möchte …?

          PLAY: E2 mit A2
          PAUSE: E3 mit A3
          STOP: E4 mit A4

          im LBS-Teil würde ich sagen (für Play):

          If PLAY = 1 dann ist STOP und PAUSE = 0

          PHP-Code:
          function LB_LBSID($id) {
              if (
          $E=getLogicEingangDataAll($id)) {
                  if (
          $E[2]['value']!=&& $E[2]['refresh']==1) {
                       
          setLogicLinkAusgang($id,2,1);
                       
          setLogicLinkAusgang($id,3,0);
                       
          setLogicLinkAusgang($id,4,0); 

          Da der HTTP-Request im EXEC-Teil (Schleife) läuft und dort Logik „unerwünscht“ ist, fällt es mir derzeit nicht ein wie das 1/0 Thema zu lösen wäre ...

          Mit ...
          PHP-Code:

          $alterWertE2
          ='';

          while...

          if (
          $alterWertE2 != $E[2]['value']) {
          //Request senden...
          $alterWertE2 $E[2]['value']; //aktuellen Wert merken für zukünftige Vergleiche


          hätte ich dann bei E2 = 1 = wahr und der Request wird gesendet und die 1 gespeichert. Wenn auf E2 wieder eine 1 gesendet wird dann tut sich nichts weil alt = neu = 1

          Wenn ich die gleiche Logik für Pause und Stop anwende, dann habe ich dort auch die 1 ABER Play hätte dann noch immer die 1 anstatt 0 da entweder Pause oder Stop die 1 hat - nicht gut ...

          Oder gibt es die Möglichkeit in EXEC-Teil den Ausgang auszulesen Play = 1 und den Eingang für Pause/Stop auf 0 zu setzen ?

          Irgendwie fehlt mir der Ansatz :-(
          Danke und LG, Dariusz
          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

          Kommentar


            [valueold] hätte den gleichen Effekt wie [refresh], da dies ja auch von der Logikengine "gesetzt" wird. Taugt also nix im EXEC-Teil (im LBS-Teil natürlich schon...).

            Warum machst Du für Play/... nicht einfach etwas in dieser Art:

            E1: "Steuerung": 0=Stop, 1=Pause, 2=Play

            Der Gedanke dabei: Play/Stop/Pause schließen sich ja logischerweise gegenseitig aus - also warum mit "komplexen" IF-Statements 3 Eingänge verwalten...?
            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

            Kommentar


              E1: "Steuerung": 0=Stop, 1=Pause, 2=Play
              Du meinst nur ein EINGANG an den ich eine 0, 1, oder 2 als Wert schicke ? OK …. (aber)

              Wenn ich dann in der VISU drei Buttons habe (Play/Pause/Stop), wie soll man einer GA / KO die mit E1 verbunden ist den Wert 0, 1 oder 2 mitteilen damit der richtige
              Request gesendet wird ?

              ?c=play
              ?c=pause
              ?c=stop

              Oder kann ich am E1 des LBS mehrere Eingangsboxen für PLAY/PAUSE/STOP mit drei unterschiedlichen GAs verbinden und jede GA hätte dann den Initialwert 0, 1, oder 2 ?

              Danke und LG, Dariusz
              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

              Kommentar


                Dann sag halt dem jeweiligen Button in der Konfig welchen Wert er senden soll?

                Kommentar


                  Ich glaube, jetzt habe ich es gefunden …. ich war so auf den KO-Initialwert fixiert, dass ich diese Möglichkeit nicht gesehen habe
                  Auch wollte ich es universal lösen - eben mit 0/1 … so muss ich beschreiben was 0, 1, 2, …. ist ...
                  Bildschirmfoto 2016-02-08 um 17.31.42.png
                  Danke und LG, Dariusz
                  GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                  Kommentar


                    Wo ist das Problem? Z.B. die Lautstärke ist ja auch nicht nur 0 oder 1...

                    Ausserdem sparst du so einige Eingänge - macht den LBS übersichtlicher für den Nutzer.
                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar


                      macht den LBS übersichtlicher für den Nutzer.
                      Ich fände es so übersichtlicher, aber die Lösung zählt ;-)

                      Bildschirmfoto 2016-02-08 um 17.42.23.png
                      Danke und LG, Dariusz
                      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                      Kommentar


                        Machbar ist es ja durchaus - Du musst dann eben im LBS-Teil mit diversen Variablen arbeiten, die dann der EXEC-Teil auswertet...
                        EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                        Kommentar


                          saegefisch

                          Hallo Carsten,

                          der LBS befindet sich in der Endphase :-)
                          OK, Beschreibung (Hilfe) und einige Plausibilitätsprüfungen müssen noch gemacht werden ...

                          Leider fehlt mir noch der Punkt für:

                          EIN/AUS
                          PLAY
                          PAUSE
                          STOP
                          NEXT
                          BACK

                          da ich es gerne mit 1/0 anstatt eines Wertes (Stop=0, Play=1, usw.) lösen würde.
                          Es geht um Logik, damit wenn Play=1, Pause bzw. Stop nicht 1 sein kann ... (im LBS Teile wäre das weniger ein Problem, leider läuft der HTTP im EXEC-Teil).

                          Christian meinte, dass das mit Variablen zu lösen möglich ist (#206) ... Hast du nicht dein EXEC ('refresh') Problem mit Variablen gelöst ?
                          Ich muss zugeben, ich kann das nicht :-(

                          Hier der derzeitig Stand des LBS-Teils:
                          PHP-Code:
                          ###[LBS]###

                          <?php

                          function LB_LBSID($id) {
                              if (
                          getLogicElementVar($id,1)!=1) {
                                  
                          setLogicElementVar($id,1,1);
                                  
                          callLogicFunctionExec(LBSID,$id);
                              }
                          }

                          ?>

                          ###[/LBS]###


                          Und hier der Teil aus dem EXEC-Teil:
                          PHP-Code:
                                          } else {            



                          //    ---- HTTP-Requests | kein UDP-Paket empfangen | http SENDEN:
                                                                
                                              
                          if ($E=getLogicEingangDataAll($id)) {
                                              
                          //                         if (!isEmpty($E[34]['value'])) {
                          //                             if (filter_var($E[34]['value'],FILTER_VALIDATE_IP,FILTER_FLAG_IPV4) !==false) {          // IPv4-Format?
                          //                                 if (is_int($E[31]['value']) !==false) {                                                // Zahl?

                                                          
                          $url "http://".$E[34]['value']."/%7E".$E[33]['value']."/iControl.php?c=";
                                                          


                          //    ---- HTTP-Requests | iTunes | Steuerung:
                                                              
                          //                                 if ($E[2]['value'] ==0) {
                          //                                     $ctx=stream_context_create(array('http' => array('timeout' => 3 )));
                          //                                     $r=file_get_contents($url.'stop',0,$ctx);
                          //                                     writeToTraceLog(0,true,'iTunes E02 URL  :'.$url.'stop'.' Wert= '.$E[2]['value'].' / ctx '.$ctx);
                          //                                 }

                          //                                 if ($E[2]['value'] ==1) {
                          //                                     $ctx=stream_context_create(array('http' => array('timeout' => 3 )));
                          //                                     $r=file_get_contents($url.'play&p1='.$E[8]['value'].'&p2='.$E[9]['value'],0,$ctx);
                          //                                     writeToTraceLog(0,true,'iTunes E02 URL  :'.$url.'play&p1='.$E[8]['value'].'&p2='.$E[9]['value'].' / ctx '.$ctx);
                          //                                 }

                          //                                 if ($E[2]['value'] ==2) {
                          //                                     $ctx=stream_context_create(array('http' => array('timeout' => 3 )));
                          //                                     $r=file_get_contents($url.'pause',0,$ctx);
                          //                                     writeToTraceLog(0,true,'iTunes E02 URL  :'.$url.'pause'.' Wert= '.$E[2]['value'].' / ctx '.$ctx);
                          //                                 }
                                                              


                                                              
                          //                                  PLAY: mit &p1=fadein / &p2=3 [s] Verzögerung | 'play' erwartet "1"

                          //                                    
                          //                                         if ($E[2]['value']!=0 && $E[2]['refresh']==1) {
                          //                                         if ($E[8]['value']==1) {
                          //                                             $ctx=stream_context_create(array('http' => array('timeout' => 3 )));
                          //                                             $r=file_get_contents($url.'play&ap1=fadein&p2='.$E[9]['value'],0,$ctx);
                          //                                         } else {
                          //                                             $ctx=stream_context_create(array('http' => array('timeout' => 3 )));
                          //                                             $r=file_get_contents($url.'play',0,$ctx);
                          //                                         }
                          //                                     }
                          //                                    
                          //                                     PAUSE: 'pause' erwartet "1"
                          //                                    
                          //                                     if ($E[3]['value']!=0 && $E[2]['refresh']==1) {
                          //                                             $ctx=stream_context_create(array('http' => array('timeout' => 3 )));
                          //                                             $r=file_get_contents($url.'pause',0,$ctx);
                          //                                     }
                          //                                    
                          //                                     STOP: 'stop' erwartet "1"
                          //                                    
                          //                                     if ($E[4]['value']!=0 && $E[2]['refresh']==1) {
                          //                                             $ctx=stream_context_create(array('http' => array('timeout' => 3 )));
                          //                                             $r=file_get_contents($url.'stop',0,$ctx);
                          //                                     }
                          //                                    



                          //                                  NEXT: 'next' erwartet "1"
                          //                                    
                          //                                     if ($E[5]['value']!=0) {
                          //                                             $ctx=stream_context_create(array('http' => array('timeout' => 3 )));
                          //                                             $r=file_get_contents($url.'next',0,$ctx);
                          //                                     }
                          //                                    
                          //                                  BACK: 'back' erwartet "1"
                          //                                    
                          //                                     if ($E[6]['value']!=0) {
                          //                                             $ctx=stream_context_create(array('http' => array('timeout' => 3 )));
                          //                                             $r=file_get_contents($url.'back',0,$ctx);
                          //                                     }

                          //                                  MASTER Volume (z.B. Wert 45 übergeben) 'mainVolume'

                                                              
                          if ($alterWertE07 != $E[7]['value']) {
                                                                  
                          writeToTraceLog(0,true,'iTunes E07 Wert: '.$E[7]['value']);
                                                                  
                          $ctx=stream_context_create(array('http' => array('timeout' => )));
                                                                  
                          $r=file_get_contents($url.'mainVolume&p1='.$E[7]['value'],0,$ctx);
                                                                  
                          writeToTraceLog(0,true,'iTunes E07 Name: Master Volume');
                                                                  
                          writeToTraceLog(0,true,'iTunes E07 URL  : '.$url.'mainVolume&p1='.$E[7]['value'].' / ctx '.$ctx);
                                                                  
                          $alterWertE07 $E[7]['value'];
                                                              } 
                          Hast du eine Idee wie das zu lösen ist um die oben genannten Funktionen umsetzen zu können ?

                          DANKE vorab !
                          Zuletzt geändert von coliflower; 10.02.2016, 16:03.
                          Danke und LG, Dariusz
                          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                          Kommentar


                            Grundsätzlich: Ich habe letztlich keinen einzigen E-Wert mehr im EXEC-Teil verwendet, da ich damit nicht verlässlich erfolgreich war. Daher habe es wie folgt gemacht (bis ich eine ganz andere Lösung fand und es gar nicht mehr brauchte... )

                            [DEF]
                            ...
                            [v#1 = 0]
                            [v#2 = 0]
                            ...

                            im LBS z.B.: setLogicElementVar($id,1, $E[34]['value']); um in V1 mit E34 zu beschreiben
                            oder z.B: if ($E[34]['refresh']==1) { setLogicElementVar($id,1,1) } um in V2 verlässlich auf 1 zu setzen wenn E34 refreshed wurde und auch im EXEC-Teil noch verlässlich zur Verfügung steht

                            im EXEC kannst Du sicher sein, dass die Werte sauber gesetzt sind z.B: if (getLogicElementVar($id,2) == 1) { ... für den Rest habe ich nach 14h im Büro heute keine Lust mehr... sorry ...versuchs' mal selber mit obigem, sonst am WE wieder...

                            saegefisch

                            Kommentar


                              ... nach 14h im Büro heute ...
                              Das tut mir sehr leid, ich wollte dir keinen Streß verursachen :-(
                              Und danke dir für deinen Hinweis !
                              Danke und LG, Dariusz
                              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                              Kommentar


                                E$[id]['value'] ist auch im EXEC-Teil absolut "zuverlässig" verfügbar. Nur wie erwähnt diese Eigenschaften naturgemäß nicht: ['refresh'] und ['valueold']. ['valueold'] ist zwar auch "zuverlässig" verfügbar, hängt aber indirekt ja mit refresh zusammen...
                                Zuletzt geändert von gaert; 11.02.2016, 10:08.
                                EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                                Kommentar

                                Lädt...
                                X