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

    HiHiHiHi :-)

    2016-02-06 18:28:01 030448 EXEC 13150 K02 THEN:40 Ok
    2016-02-06 18:28:01 030544 EXEC 13150 K03 mit:Computer Ok
    2016-02-06 18:28:01 030581 EXEC 13150 K04 THEN:1 Ok
    2016-02-06 18:28:01 279561 EXEC 13150 K05 THEN:http://10.0.100.150/%7Edariusz/iCont...omputer&p2=40/ ctx Resource id #1551 Ok
    2016-02-06 18:28:01 279676 EXEC 13150 http://10.0.100.150/%7Edariusz/iControl.php?c= Ok


    Und die Lautstärke werde zur Lautstärke …. DAAAAAAANKE !

    Und danke für die Erklärung wie das Tool anhand eines Beispiels funktioniert :-)))))))


    PHP-Code:
                        writeToTraceLog(0,true,'K02 THEN:'.$E[20]['value']);
                        if (
    $E[20]['value']!=0) {
                            
    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' => ))); // 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,'K05 THEN:'.$url.'apVolume&p1='.$E[35]['value'].'&p2='.$E[20]['value'].'/ ctx '.$ctx);
                                
    writeToTraceLog(0,true,$url);
                            }
                        } 
    Danke und LG, Dariusz
    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

    Kommentar


      Trigger (also [refresh]) gehören prinzipiell auch nicht wirklich in den EXEC-Teil, da dieser wie gesagt autonom läuft - ohne Kontrolle durch die Logik-Engine. Es müsste also der LBS-Teil laufen und bei einem Trigger eine Variable setzen usw.
      EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

      Kommentar


        @coliflower: Prima, ich freue mich sehr, dass es klappt.

        @gaert: Ja, nach 'ner Weile erfolglosem Coding liegt dann ja auch irgendwann auf der Hand... Aber ich bin weniger beim refresh drauf gekommen, sondern weil value (schon wieder) auf 0 zurück war, EXEC hat die kurze 1 nie gesehen. Daher mein Rat: Per Sequenz Trigger auslösen und dem Value damit eine höhere Wahrscheinlichkeit durch länger "1" geben. Aber Sicher bleibt nur das Setzen von Variablen im LBS und NICHTS vom Trigger im EXEC zu nutzen.

        Kommentar


          Zitat von gaert Beitrag anzeigen
          Trigger (also [refresh]) gehören prinzipiell auch nicht wirklich in den EXEC-Teil, da dieser wie gesagt autonom läuft - ohne Kontrolle durch die Logik-Engine. Es müsste also der LBS-Teil laufen und bei einem Trigger eine Variable setzen usw.
          Und wieso sagst du mir das jetzt :-(
          Du meintest, beim Querlesen, ist der Code OK ...
          Danke und LG, Dariusz
          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

          Kommentar


            Jetzt gehe ich „Weinverkosten“ - das habe ich mir verdient ;-)
            Danke und LG, Dariusz
            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

            Kommentar


              Hi coliflower,

              Christian macht hier eine bewundernswertes Simultan-Schach mit einer Menge Forenbeiträgen UND Weiterentwicklung parallel... Prio hat sicher letzteres. Für den anderen teil sind wir ja da. Ich habe auch nachts geflucht. Gehört dazu. Und Lernkurve auch. Bei jedem hier, denn edomi ist neu. Die "best-practise" erarbeitet sich hier noch Stück für Stück...
              Wäre ja was schönes für's Wiki...

              saegefisch

              Kommentar


                So isset

                Der EXEC-Teil ist NICHT(!) dazu gedacht, eine Logik nachzubilden - das habe ich gefühlte 1000 mal erwähnt Wie soll dies auch funktionieren? Das EXEC-Script läuft wie ein x-beliebiges Programm vollkommen losgelöst vom Hauptprozess. Bezüglich der "Refreshes" bedeutet dies: Wenn das Timing zufällig hinhaut, bekommt das EXEC-Script dies mit - andernfalls nicht.

                Im Gegensatz dazu ist der LBS-Teil KEIN eigenständiger Prozess, sondern wird im Kontext der Logik-Engine ausgeführt und synchronisiert. Mit jedem "Takt" wird der LBS-Teil ggf. aufgerufen und über die aktuellen Zustände (Refresh, etc.) informiert.
                EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                Kommentar


                  Hi Carsten,

                  der Wein gestern, der hatte was, ich habe Hohlraumsausen … ;-)

                  Ja, Edomi ist neu und in Gegensatz zu anderen Lösungen, entwickelt sich die „Anleitung/Wiki/Best-Practise“ noch … Ich hoffe dieser Thread hilft - vor allen - den Anfängern und oder Copy-Paste-Programmierern wie ich einer bin ;-)

                  Ich glaube ich habe ein anderes Problem … Beispiel:

                  2016-02-06 18:28:01 030448 EXEC 13150 K02 THEN:40 Ok
                  2016-02-06 18:28:01 030544 EXEC 13150 K03 mit:Computer Ok
                  2016-02-06 18:28:01 030581 EXEC 13150 K04 THEN:1 Ok
                  2016-02-06 18:28:01 279561 EXEC 13150 K05 THEN:http://10.0.100.150/%7Edariusz/iCont...omputer&p2=40/ ctx Resource id #1551 Ok
                  2016-02-06 18:28:01 279676 EXEC 13150 http://10.0.100.150/%7Edariusz/iControl.php?c= Ok
                  Der LBS verschickt das „Beispiel“ nun 10x pro Sekunde und mein Mac als Empfänger läßt das Kühlgebläse dauernd laufen, wenn ich Edomi runter fahre dann ist Ruhe :-((

                  Christian meinte dass der LBS nicht mehr auf ein Telegramm wartet sondern dass der kontinuierlich läuft … Ich vermute die 10x pro Sekunde hängen mit usleep(1000*100) zusammen.

                  Ist die einzige Lösung nur den usleep(1000*1000) auf eine Sekunde zu erhöhen oder gibt es eine feinere Lösung die auf den UDP wartet und erst bei HTTP sendet ?
                  Danke und LG, Dariusz
                  GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                  Kommentar


                    Zitat von gaert Beitrag anzeigen
                    Der EXEC-Teil ist NICHT(!) dazu gedacht, eine Logik nachzubilden - das habe ich gefühlte 1000 mal erwähnt Wie soll dies auch funktionieren? Das EXEC-Script läuft wie ein x-beliebiges Programm vollkommen losgelöst vom Hauptprozess. Bezüglich der "Refreshes" bedeutet dies: Wenn das Timing zufällig hinhaut, bekommt das EXEC-Script dies mit - andernfalls nicht.

                    Im Gegensatz dazu ist der LBS-Teil KEIN eigenständiger Prozess, sondern wird im Kontext der Logik-Engine ausgeführt und synchronisiert. Mit jedem "Takt" wird der LBS-Teil ggf. aufgerufen und über die aktuellen Zustände (Refresh, etc.) informiert.
                    In meinem Beispiel und grundsätzlich für HTTP … hieß es doch in EXEC-Teil zu lösen, oder ?
                    Danke und LG, Dariusz
                    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                    Kommentar


                      Ja klar - Webabfragen, UDP-Server, etc. gehören natürlich in den EXEC-Teil. Aber eben NICHT die Logik als solches - die gehört in den LBS-Teil.

                      Wirklich nicht böse gemeint, aber vielleicht solltest Du als selbsternannter Anfänger Dir zunächst mal ein kleineres Projekt vornehmen? Eine UDP/HTTP-Server/Client-Lösung und das auch noch im Kontext eines Fremdprogramms (EDOMI) ist vielleicht ein bisschen zu viel für den Anfang
                      EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                      Kommentar


                        Kann man und bringt das was wenn man es so macht …?


                        Dies hier in den LBS-Teile
                        PHP-Code:
                                            if ($E=getLogicEingangDataAll($id)) {
                                                                         
                                            if (
                        $E[20]['value']!=&& $E[20]['refresh']==1)) {
                                                if (!
                        isEmpty($E[35]['value'])==1) {
                                                
                        callLogicFunctionExec(LBSID,$id);
                                                }
                                            }
                                            } 

                        Und dies hier in den EXEC-Teil
                        PHP-Code:
                                            if ($E=getLogicEingangDataAll($id)) {
                                             
                                            
                        $url "http://".$E[34]['value']."/%7E".$E[33]['value']."/iControl.php?c=";            
                                                    
                                                    
                        $ctx=stream_context_create(array('http' => array('timeout' => )));
                                                    
                        $r=file_get_contents($url.'apVolume&p1='.$E[35]['value'].'&p2='.$E[20]['value'],0,$ctx);

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

                        Kommentar


                          Im Prinzip ist es so gedacht - allerdings würdest Du ja dann bei jedem Refresh den EXEC-Teil erneut instanzieren... In Deinem Fall ist es daher sinnvoll mit Variablen zu arbeiten (also die LBS-Variablen natürlich v#1...).
                          EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                          Kommentar


                            gaert
                            Hättest du es mir früher gesagt, dann hätte ich natürlich die Finger davon gelassen … am HS4 läuft das ganze eh schon, problemlos ;-)
                            Danke und LG, Dariusz
                            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                            Kommentar


                              OK, ab jetzt wird der LBS ins künstliche Komma versetzt und irgendwann - vielleicht - fortgesetzt, ich bin zu blöd dazu :-(
                              Gehe jetzt im den Kids in den Park :-)

                              Schönen Sonntag noch an alle :-) !
                              Danke und LG, Dariusz
                              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                              Kommentar


                                Aufgeben? Ts ts ts

                                Du kannst Dir's auch einfacher machen, indem Du überlegst was der LBS eigentlich machen soll - ich nehme mal folgendes an:

                                Wenn an einem Eingang ein anderer(!) Wert (im Vergleich zum Ist-Zustand) anliegt, soll ein HTTP-Request versendet werden.

                                [refresh] wird immer dann auf 1 gesetzt, wenn ein neuer(!) Wert eintrifft - egal, ob dieser anders ist oder nicht. Das ist in diesem Fall allerdings eher kontrakproduktiv, weil Du vermutlich nur bei einer Änderung z.B. der Lautstärke einen Request versenden willst.

                                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

                                EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                                Kommentar

                                Lädt...
                                X