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

    Keiner ein Idee

    Auf php.net wird das „genauso“ wie von Christian vorgeschlagen erklärt ...


    Beispiel #4 Nutzung von Stream-Contexten
    PHP-Code:
      <?php
    // Erzeugen eines Streams
    $opts = array(
      
    'http'=>array(
        
    'method'=>"GET",
        
    'header'=>"Accept-language: en\r\n" .
                  
    "Cookie: foo=bar\r\n"
      
    )
    );

    $context stream_context_create($opts);

    // Öffnen der Datei mit den oben definierten HTTP-Headern
    $file file_get_contents('http://www.example.com/'false$context);
    ?>

    Mein Teil (mittlerweile auf Minimum reduziert) :
    PHP-Code:
    if ($E=getLogicEingangDataAll($id)) {
                                    
    // L a u t s t ä r k e :
                                
        
    if ($E[20]['value']!=&& $E[20]['refresh']==1) {
            
    $ctx=stream_context_create(array('http' => array('timeout' => )));
            
    $r=file_get_contents('http://10.0.100.150/%7Edariusz/iControl.php?c=apVolume&p1=Computer&p2='.$E[20]['value'],0,$ctx);
        }


    Und hier der EXEC-Teil mit „Else"
    PHP-Code:
    ###[EXEC]###

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

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

    // Hier ein UDP-Listener, der  N I C H T  auf Datenpakte wartet. Die Schleife läuft also ständig durch!
    // WICHTIG: PHP-Fehlerbehandlung abschalten, sonst generiert socket_recv() "Warnungen", wenn keine Daten empfangen wurden

        
    restore_error_handler();
        
    error_reporting(0);

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

                while (
    getSysInfo(1)>=1) {
                
                    
    $len socket_recv($socket,$data,1024,MSG_DONTWAIT);
                    
                    if (
    $len!==false) {

                           
    // UPD-Paket empfangen: Hier die Auswertung wie gehabt...
                        
                        
    $data preg_replace("/[^A-Za-z0-9&=]/",'',$data);
                    
                        
    parse_str($data$output);  // $output = array();

                        
    if (array_key_exists('EA',       $output))    {setLogicLinkAusgang($id,1$output['EA']);}
                        if (
    array_key_exists('Play',   $output))    {setLogicLinkAusgang($id,2$output['Play']);}
                        if (
    array_key_exists('Pause',  $output))    {setLogicLinkAusgang($id,3$output['Pause']);}
                        if (
    array_key_exists('Stop',   $output))    {setLogicLinkAusgang($id,4$output['Stop']);}
                        if (
    array_key_exists('FF',     $output))    {setLogicLinkAusgang($id,5$output['FF']);}
                        if (
    array_key_exists('FR',     $output))    {setLogicLinkAusgang($id,6$output['FR']);}
                        if (
    array_key_exists('MastVol',$output))    {setLogicLinkAusgang($id,7$output['MastVol']);}
                        if (
    array_key_exists('LS1',    $output))    {setLogicLinkAusgang($id,10,$output['LS1']);}
                        if (
    array_key_exists('LS2',    $output))    {setLogicLinkAusgang($id,11,$output['LS2']);}
                        if (
    array_key_exists('LS3',    $output))    {setLogicLinkAusgang($id,12,$output['LS3']);}
                        if (
    array_key_exists('LS4',    $output))    {setLogicLinkAusgang($id,13,$output['LS4']);}
                        if (
    array_key_exists('LS5',    $output))    {setLogicLinkAusgang($id,14,$output['LS5']);}
                        if (
    array_key_exists('LS6',       $output))    {setLogicLinkAusgang($id,15,$output['LS6']);}
                        if (
    array_key_exists('LS7',    $output))    {setLogicLinkAusgang($id,16,$output['LS7']);}
                        if (
    array_key_exists('LS8',    $output))    {setLogicLinkAusgang($id,17,$output['LS8']);}
                        if (
    array_key_exists('LS9',    $output))    {setLogicLinkAusgang($id,18,$output['LS9']);}
                        if (
    array_key_exists('LS10',   $output))    {setLogicLinkAusgang($id,19,$output['LS10']);}
                        if (
    array_key_exists('LSV1',   $output))    {setLogicLinkAusgang($id,20,$output['LSV1']);}
                        if (
    array_key_exists('LSV2',   $output))    {setLogicLinkAusgang($id,21,$output['LSV2']);}
                        if (
    array_key_exists('LSV3',   $output))    {setLogicLinkAusgang($id,22,$output['LSV3']);}
                        if (
    array_key_exists('LSV4',   $output))    {setLogicLinkAusgang($id,23,$output['LSV4']);}
                        if (
    array_key_exists('LSV5',   $output))    {setLogicLinkAusgang($id,24,$output['LSV5']);}
                        if (
    array_key_exists('LSV6',   $output))    {setLogicLinkAusgang($id,25,$output['LSV6']);}
                        if (
    array_key_exists('LSV7',   $output))    {setLogicLinkAusgang($id,26,$output['LSV7']);}
                        if (
    array_key_exists('LSV8',   $output))    {setLogicLinkAusgang($id,27,$output['LSV8']);}
                        if (
    array_key_exists('LSV9',   $output))    {setLogicLinkAusgang($id,28,$output['LSV9']);}
                        if (
    array_key_exists('LSV10',  $output))    {setLogicLinkAusgang($id,29,$output['LSV10']);}

                        } else {            

                        
    // kein UDP-Paket empfangen: Hier könnten z.B. HTTP-Request verarbeitet werden
                                           
                        
    if ($E=getLogicEingangDataAll($id)) {
                                    
                               
    // L a u t s t ä r k e :
                                
                                
    if ($E[20]['value']!=&& $E[20]['refresh']==1) {
                                
    $ctx=stream_context_create(array('http' => array('timeout' => )))
                                
    $r=file_get_contents('http://10.0.100.150/%7Edariusz/iControl.php?c=apVolume&p1=Computer&p2='.$E[20]['value'],0,$ctx);
                            }
                        }
                    }    
                    
    usleep(1000*100);  //z.B. 100ms warten - wichtig, um die CPU-Last zu begrenzen!
                
    }
            }
        }
        
    socket_close($socket);
    }
    sql_disconnect();

    ?>

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

    Kommentar


      Also … über folgende „Methoden funktioniert es, über den LBS nicht :-(

      Webbrowser (sei es am Ziel- oder Quell-System)
      Terminal
      MBP:~ dariusz$ curl 'http://10.0.100.150/%7Edariusz/iControl.php?c=apVolume&p1=Computer&p2=30'
      In Edomi unter Konfiguration
      Bildschirmfoto 2016-02-06 um 14.01.21.png
      Danke und LG, Dariusz
      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

      Kommentar


        Schreibe doch einfach mal den URL-String ins Tracelog und schaue Dir dann an, ob's paßt. Erst dann kümmerst Du Dich um den eigentlichen Request - immer step by step
        EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

        Kommentar


          Schreibe doch einfach mal den URL-String ins Tracelog...
          Wo habe ich das überlesen wie das gehen soll …?
          Wieder ein neues Rätsel ?

          Wenn ich auf die GA 3/1/20 die 50 schreibe, dann sehe ich auch das Edomi-PA auf die GA die 50 schreibt, das war’s … sonst sieht man nichts in Trace-Log.

          Kann man nicht den selben Code in den LBS einfügen der unter Konfiguration verwendet wurde ?
          Danke und LG, Dariusz
          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

          Kommentar


            writeToTraceLog(0,true,$deinevariable); oder writeToTraceLog(0,true,'Ein Text'); um im TraceLog die richtige Verarbeitung zu prüfen. Später raus oder auskommentieren. Ohne die wäre ich nie angekommen, da man sonst nicht "rein gucken kann" oder den Programm-Fortschritt prüfen kann, es gibt ja kein "echo"-Befehl.

            Nachtrag: Ausgabe findet sich bei den beiden anderen Logs in der Verwaltung. Es öffnet sich für das Tracelog beim Klick ein neues Fenster. Wenn man das stehen lässt, kann man anschließend mit "auffrischen" des Fensters im Browser ganz wunderbar die Dinge verfolgen, ohne jedes Mal in dioe Verwaltung zu müssen. Gilt ja auch für ebenso für die anderen logs. Tracelog löscht sich mit jedem reboot.

            saegefisch
            Zuletzt geändert von saegefisch; 06.02.2016, 15:16. Grund: Ausgabe ergänzt

            Kommentar


              saegefisch
              DANKE für dein Input :-) !!

              Leider habe ich den ganzen Samstag damit versuch…. anstatt mit den Kids in den Park zu gehen und das Ergebnis ist NULL - bin nur mehr frustriert …

              Macht es dir was aus mir in den Teil meines Codes es zu zeigen ?
              Danke und LG, Dariusz
              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

              Kommentar


                Wenn ich das so mache, dann kommt nix in TracLog und wenn ich z.B. den Wert 90 abschicke dann sehe ich nur die 90 am Bus ..

                PHP-Code:
                if ($E[20]['value']!=&& $E[20]['refresh']==1) {
                if (!
                isEmpty($E[35]['value']) && !isEmpty($E[35]['refresh'])) {
                $ctx=stream_context_create(array('http' => array('timeout' => )));        // 3 Sekunden Timeout
                $r=file_get_contents($url.'apVolume&p1='.$E[35]['value'].'&p2='.$E[20]['value'],0,$ctx);  // komplette Antwort abwarten
                writeToTraceLog(0,true,$url);
                }


                bzw.
                writeToTraceLog(0,true,$r);

                Ich frage mich langsam ob ich überhaupt über das ELSE komme wenn ich was schicke …?
                Zuletzt geändert von coliflower; 06.02.2016, 15:42.
                Danke und LG, Dariusz
                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                Kommentar


                  Hey, nicht verzweifel! Ich habe tatsächlich die ganze(!) Nacht von DO auf Fr damit verbracht, genau mit diesen Fragen. Denn vermutlich steckt die Wahrheit in Deiner letzten Frage. Genau dafür spiecke ich in der Entwicklung alle(!) Verzweigungen mit TraceLog-Fähnchen, d.h. in jedem THEN und ELSE steckt ein eindeutiger Text wie "Kond03-ELSE". Und wo nötig auch zusätzlich mit Variablenausgabe. Kann man auch in eine Ausgabe mit einem '.' einfach konkatenieren, damit es nicht zu viel wird, z.B. writeToTraceLog(0,true,'Kond E35 - THEN:'.$url);
                  Im Trace siehst Du dann genau, wo Du vorbei kommst - und wo eben nicht. Der Rest war/ist/wird immer bleiben: Jugend forscht...

                  In dem Code-Schnipsel: welches ELSE?

                  Beste Grüße vom
                  saegefisch

                  Kommentar


                    PS: Am Ende habe ich das Zwiegespäch mit PHP - nach zugegeben langem Kampf im EXEC-Teil - gewonnen. Genau damit. Am Ende dann auskommentieren oder raus. Nur dauerhaft hilfreiche (und seltene) Infos oder Warnungen lasse ich drin.

                    Kommentar


                      In dem Code-Schnipsel: welches ELSE?
                      In Post #166, der gesamte EXEC-Teil ...

                      Wie würdest du es mit writeToTraceLog machen, am Code-Beispiel …?
                      Der Teil davor funktioniert … Wenn ich etwas an Edomit als Status sende dann übernimmt Edomi das und ich kann es in der VISU sehen ..
                      Wenn ich etwas senden möchte - nach ... } else { … } via HTTP senden möchte, dann entweder wird nichts geschickt oder etwas falsches dass am Mac nicht ankommt :-(

                      Ich überlege wirklich den Patienten LBS ins künstlich Koma zu versetzen und irgendwann weiter zu machen ...
                      Danke und LG, Dariusz
                      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                      Kommentar


                        writeToTraceLog(0,true,'K02 THEN:'.$E[20]['value'].'/'.$E[20]['refresh']);
                        if (
                        $E[20]['value']!=0 && $E[20]['refresh']==1) {
                        writeToTraceLog(0,true,'K03 mit:'.$E[35]['value'].'/'.$E[35]['refresh']);
                        if (!
                        isEmpty($E[35]['value']) && !isEmpty($E[35]['refresh'])) {
                        writeToTraceLog(0,true,'K03 THEN:'.isEmpty($E[35]['value']).'/'.isEmpty($E[35]['refresh']));
                        $ctx=stream_context_create(array('http' => array('timeout' => 3 ))); // 3 Sekunden Timeout
                        writeToTraceLog(0,true,'K03 THEN:'.$url.'apVolume&p1='.$E[35]['value'].'&p2='.$E[20]['value'].'/'.$ctx);
                        $r=file_get_contents($url.'apVolume&p1='.$E[35]['value'].'&p2='.$E[20]['value'],0,$ctx); // komplette Antwort abwarten
                        writeToTraceLog(0,true,$url);
                        }
                        }

                        ggf wird $ctx nicht im writeToTraceLog funktionieren...

                        Zuletzt geändert von saegefisch; 06.02.2016, 17:04.

                        Kommentar


                          ist ein wenig arbeit, aber ohne wäre ich nicht zum Ziel gekommen, da man (zumindest ich als völliger PHP-Neuling noch ohne Gefühl für die Sprache) sich manches anders denkt oder auch bin ich so auf Typenkonflikte gestoßen, die bei mir eine Zeitlang ausschlaggebend waren für "VERD****, warum will der ***** nicht!.... Ich habe schon eine Menge programmiert, aber doch in ganz anderem Umfeld und völlig anderer Denke. Und der ganze http-GET-Kram ist auch nicht immer ganz einfach.

                          Versuchs noch mal mit dem Aufwand für die vielen Meldungen an jeder Stelle, die Dir Probleme bereitet. Oft kommt da bereits die Lösung. Wenn nicht, dann ist manchmal eine Auszeit beim Entwickeln hilfreich. Nach ein paar Tagen blickt man anders drauf und hat die unweigerlichen Entwickler-Scheuklappen mal abgelegt. Und manchmal habe ich schon festgestellt: Verrannt. Anders neu anfangen. Manchmal war's auch nur ein ! oder eine -> das fehlt und alles ging dann perfekt...

                          Kommentar


                            DANKE !!

                            Ich bin kein Programmierer und hatte damit nie zu tun, hab ein wenig mit Apple-Script begonnen um iTunes steuern zu können (hab das in HS4 implementiert… Da ist SEND und EMPFANG implementiert).

                            Mit deiner Modifikation bekomme ich folgendes …
                            Scheint für mich so als der Wert 70 auf den Bus geschrieben werden, das sehe ich auch in im LBS-Eingang ...


                            2016-02-06 17:19:45 529175 KNX 10386 EDOMI @ DE | TUNNELING_REQUEST:L_Data.req / Typ: Write / SeqCounter: 30 / PA: 1.1.201 / GA: 3/1/20 = 70 / Raw: 06100420001604641e001100bce011c9191402008046 Ok
                            2016-02-06 17:19:45 540581 KNX 10386 ROUTER @ DE | TUNNELING_ACK / SeqCounter: 30 (30) / Raw: 06100421000a04641e00 Ok
                            2016-02-06 17:19:45 540920 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:45 585989 KNX 10386 ROUTER @ DE | TUNNELING_REQUEST:L_Data.con / Typ: Write / SeqCounter: 110 (110) / PA: 1.1.201 / GA: 3/1/20 = 70 / Raw: 06100420001604646e002e00bce011c9191402008046 Ok

                            2016-02-06 17:19:45 586095 KNX 10386 EDOMI @ DE | TUNNELING_ACK / Raw: 06100421000a04646e00 Ok

                            Das sagt mir jetzt nichts :-(
                            Außer dass die 70 als ‚value‘ und 0 als ‚refresh‘ erkannt werden ...

                            2016-02-06 17:19:45 641607 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:45 742141 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:45 842852 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:45 943218 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 044059 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 144721 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 245028 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 345700 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 446892 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 547468 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 648170 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 748970 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 849318 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:46 949894 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:47 050887 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:47 151709 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:47 252813 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:47 353722 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:47 454391 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:47 554919 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:47 655420 EXEC 10401 K02 THEN:70/0 Ok
                            2016-02-06 17:19:47 755744 EXEC 10401 K02 THEN:70/0 Ok


                            EDIT:

                            OK, das K03 für den Eingang 35 wird nicht ausgeworfen obwohl da „Computer“ steht …oder ?
                            Zuletzt geändert von coliflower; 06.02.2016, 17:40.
                            Danke und LG, Dariusz
                            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                            Kommentar


                              saegefisch
                              Ich glaube langsam verstehe ich das Tool ;-)
                              Langsam tut sich was ;-)
                              Werde berichten
                              Danke und LG, Dariusz
                              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                              Kommentar


                                Hey, prima, ein Schritt weiter. Denn mit "70/0" in...

                                if ($E[20]['value']!=0 && $E[20]['refresh']==1) {

                                gilt aus meiner Sicht: Erste Bedingung 70!=0 (wahr) und 0==1 (falsch). Damit wird das IF nicht wahr und alles mit K03 wird wohl nicht durchlaufen.

                                Möglicherweise kämpfst Du mit etwas, dass mich auch 2h gekostet hat: Zur Laufzeit von EXEC war value und Refersh des Triggers schon wieder 0 (da ich den Trigger in einer Befehlsreihe eines Visu-Elements unmittelbar wieder auf 0 zurück setze. (Exkurs: Hier wäre vermutlich das Auslösen einer Sequenz besser, um den Trigger wenigestens mal 1sek auf 1 zu lassen, bevor er wieder auf 0 zurück fällt.)
                                Ich habe als Lösung im LBS dann den Umweg gewählt, mit dem Trigger in eine Variable eine 1 zu schreiben, die blieb über die gesamte Laufzeit von EXEC dann sicher auf der 1. Und die habe ich dann im EXEC-Teil verwendet. Befehl in LBS: setLogicElementVar.../ in EXEC dann getLogicElementVar... (siehe Anleitung)

                                Kommentar

                                Lädt...
                                X