Ankündigung

Einklappen
Keine Ankündigung bisher.

Fragen zur LBS Erstellung

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

    #91
    So, die Lösung war einfacher als erwartet:

    PHP-Code:
    ###[LBS]###
    <?
    function LB_LBSID($id) {
        if ($E=logic_getInputs($id)) {
            if ($E[1]['refresh']==1) {
                $lbsNo=1999996;
                $file='/var/tmp/EDOMI_LBSID_'.$lbsNo.'.id';                                
                if (!file_exists($file)) file_put_contents($file,$id);
                $idg=file_get_contents($file);
                logic_setVar($id,2,$idg);
                logic_setVar($idg,3,$E[1]['value']);
                if (logic_getVar($id,3)!=$E[1]['value']) {
                    file_put_contents($file,$id);
                    logic_setVar($id,3,$E[1]['value']);
                }
                if (logic_getVar($id,1)==0) logic_callExec(LBSID,$id);
            }
        }
    }
    ?>
    ###[/LBS]###
    Ich prüfe nach dem setzen der Variable ob der Wert übernommen wurde, wenn nicht wird die id des aktiven LBS genommen.....

    Kommentar


      #92
      Habe nun meine Homematic - Edomi Anbindung soweit abgeschlossen und bin gerade beim Testen.

      Läuft soweit ohne Komplikationen.

      Bevor ich die LBSen dann veröffentliche muss ich unbedingt folgende Frage geklärt haben.

      Bei der Installation des benötigten Pakets "yum install php-xmlrpc" werden folgende Pakete geupgraded:

      Code:
      ================================================================================
       Package             Arch            Version                Repository     Size
      ================================================================================
      Installing:
       php-xmlrpc          x86_64          5.3.3-49.el6           base           58 k
      Updating for dependencies:
       php                 x86_64          5.3.3-49.el6           base          1.1 M
       php-cli             x86_64          5.3.3-49.el6           base          2.2 M
       php-common          x86_64          5.3.3-49.el6           base          530 k
       php-devel           x86_64          5.3.3-49.el6           base          513 k
       php-gd              x86_64          5.3.3-49.el6           base          111 k
       php-mysql           x86_64          5.3.3-49.el6           base           86 k
       php-pdo             x86_64          5.3.3-49.el6           base           80 k
       php-soap            x86_64          5.3.3-49.el6           base          145 k
      
      Transaction Summary
      ================================================================================
      Install       1 Package(s)
      Upgrade       8 Package(s)
      Also es wird php von Version 5.3.3-48.e16_8 auf 5.3.3-49.el6 geupgraded

      In meinem Test System habe ich keine Probleme.

      Birgt es sonst welche Gefahren?

      Kann ich die LBSen mit ruhigem Gewissen mit der Update Anleitung veröffentlichen?

      Schöne Grüße
      Gernot

      Kommentar


        #93
        Die PHP-Version 5.3.3 müsste die Richtige sein ...
        Wenn ich mich nicht irre, ist diese nötig damit der bcompiler (Code-Verschlüsselung) oder wie das auch immer heisst, läuft - derzeit für Edomi sehr wichtig
        Danke und LG, Dariusz
        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

        Kommentar


          #94
          Danke für die rasche Info. Werde mal die LBS Pakete schnüren. Hilfe ergänzen und noch etwas testen.

          Kommentar


            #95
            Hallo Zusammen,

            Wenn im LBS-Teil steht:

            PHP-Code:
            ....
            logic_setOutput($id,2,1);
            logic_setOutput($id,1,2);
            ... 
            Wäre doch zu erwarten das an A2 zuerst "1" kommt und dann an A1 "2".
            Tatsächlich kommt bei mir aber A1 "2" vor A2 "1".

            Ich hätte aber gerne (aus kosmetischen Gründen) das zuerst A2 gesendet wird und dann A1. Kann ich das beeinflussen?

            Kommentar


              #96
              Die zweite Stelle in Klammer sagt aus welcher Ausgang das ist 2 = A2, 1=A1 ...
              Die dritte Stelle gibt den Wert am jeweiligen Ausgan an ...

              Zitat von hx5 Beitrag anzeigen
              Ich hätte aber gerne (aus kosmetischen Gründen) das zuerst A2 gesendet wird und dann A1. Kann ich das beeinflussen?
              Theoretisch nur dann wenn im Code zuerst A2, danach A1 getriggert wird
              Danke und LG, Dariusz
              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

              Kommentar


                #97
                Zitat von coliflower Beitrag anzeigen
                Die zweite Stelle in Klammer sagt aus welcher Ausgang das ist 2 = A2, 1=A1 ...
                Die dritte Stelle gibt den Wert am jeweiligen Ausgan an ...
                Das ist mir schon klar.

                Theoretisch nur dann wenn im Code zuerst A2, danach A1 getriggert wird
                Ja eben, das meine ich doch getan zu haben, nur das Erwartete bleib aus:

                PHP-Code:
                ###[LBS]###
                <?
                function LB_LBSID($id) {
                    if ($E=logic_getInputs($id)) {
                        if ($E[1]['refresh']==1 && !isEmpty($E[1]['value'])) {
                            logic_setOutput($id,2,1);
                            logic_setOutput($id,1,2);
                        }
                    }
                }
                ?>
                ###[/LBS]###
                Bringt im Ausgangs-Log beim Triggern: "2" und dann "1". Erwartet hätte ich: "1" und dann "2".

                Kommentar


                  #98
                  Sorry, dann habe ich dich falsch verstanden.
                  Keine Ahnung aber so ins Blaue ... Falls usleep() oder so ähnlich im LBS Teil möglich - dann den nächsten Schritt ein wenig verzögern ?
                  Danke und LG, Dariusz
                  GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                  Kommentar


                    #99
                    "xsleep" im LBS-Teil ist keine gute Idee, damit schlaeft dann naemlich die komplette Logik-Engine.
                    In der Hilfe steht uebrigens, dass tatsaechlich nicht der Ausgang sondern alle Eingaenge die mit dem entsprechenden Ausgang verbunden sind gesetzt werden, evtl hat das beobachtete Verhalten damit zu tun.

                    Auf jeden Fall: wenn "sleep", dann nur im EXEC-Teil und wenn eh schon da, dann kann man auch mal logic_setOutputQueued probieren, vielleicht laeuft es damit "vorhersehbarer".

                    Kommentar


                      hx5 Ich glaube du must unterscheiden wann dein LBS die Ausgänge setzt und wann diese Information beim nächsten LBS der an diesem Ausgang hängt ankommt.
                      Laut gaert ist das nicht vorher bestimmbar (also zumindest nich 100%).

                      Im zweifel mit Verzögern arbeiten, mach ich auch so wenn es wichtig ist.
                      Gruß
                      Michael

                      Kommentar


                        Die Logik arbeitet stets Eventbasierend, d.h. die verknüpften Eingänge (Ausgänge gibt es in der Tat nicht wirklich) werden "irgendwann" gesetzt (Ereignis) - nicht synchron zum LBS-Code. Die Verzögerung hängt quasi vom Zufall ab, genauer von der Komplexität der Logik und von der Reihenfolge (ID) der Bausteine.

                        Wenn Du also einen "Ausgang" setzt, erhalten irgendwann (sobald wie möglich) die verknüpften Eingänge (ja, ggf. plural) einen Wert angeliefert und triggern ggf. den zugehörigen Baustein. Eine feste Reihenfolge gibt es in einem solchen Ereignis-getriggerten System nicht.
                        EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                        Kommentar


                          Danke für eure Antworten.

                          Ich habe es jetzt mal mit setState:

                          PHP-Code:
                          ###[LBS]###
                          <?
                          function LB_LBSID($id) {
                              if ($E=logic_getInputs($id)) {
                                  if (logic_getState($id)==1) {
                                      logic_setOutput($id,1,2);
                                      logic_setState($id,0);
                                  }
                                  if ($E[1]['refresh']==1 && !isEmpty($E[1]['value'])) {
                                      logic_setOutput($id,2,1);
                                      logic_setState($id,1);
                                  }
                              }
                          }
                          ?>
                          ###[/LBS]###
                          gemacht und nach ersten Test funktioniert das auch zuverlässig und ist wahrscheinlich CPU-schonender als einen neuen Prozess (Exec) zu starten.

                          Kommentar


                            EDOMI ist Ereignisorientiert, d.h. ist ist völlig egal in welcher Reihenfolge du die in einem LBS die Ausgänge beschreibst, denn die Logik Engine bestimmt die Reihenfolge der Abarbeitung der LBS. Dabei ist es völlig unerheblich in welcher Reihenfolge du Ausgänge beschrieben hast. Die Ausgänge eines LBS sind ja eigentlich nur Verbindungen zu Eingängen anderer LBS. D.h. die Reihenfolge der Abarbeitung deiner beiden logic_setOutput() liegt nur daran, welchen LBS EDOMI zuerst ausführt, den der dein erstes logic_setOutput() empfängt oder der, der das zweite empfängtg. Genau das weisst du aber vorher nicht. usleep() wie von Michael schon angemerkt ist im LBS Teil keine gute Idee und würde das Problem auch hier nicht lösen. Im EXEC könnte das anders sein, da ja die Logikschleife unabhängig vom EXEC Skript weiterläuft. Wenn du dort ein usleep() zwischen dem esten und zweiten Signal machst, dann sollte das erste Signal bereits von der Logikengine abgearbeitet sein, becor du das zweite schickst. Hängt natürlich davon ab, wie lange du sleepst. Ist aber nicht wirklich deterministisch. Wenn dadurch mal ein Fehler auftritt suchst du dir nen Wolf.

                            Wenn es nur kosmetische Gründe sind, dann würde ich sagen: Vergiß es wieder. Wenn es funktionale Gründe sind, dann musst du es anders lösen. Im letzteren Fall könntest du ja mal genauer beschreiben, was der konkrete Anwendungsfall ist.

                            EDIT: hab wohl zu lange für die Antwort gebraucht

                            Kommentar


                              Zitat von gaert Beitrag anzeigen
                              Eine feste Reihenfolge gibt es in einem solchen Ereignis-getriggerten System nicht.
                              Aber mit setState erreiche ich ja zumindest das der zweite "Ausgang" erst beim nächsten Event gesetzt wird und somit auf jeden Fall nach dem ersten 'refresh' Durchgang, oder?

                              Kommentar


                                Zitat von jonofe Beitrag anzeigen

                                EDIT: hab wohl zu lange für die Antwort gebraucht
                                Danke trotzdem

                                Kommentar

                                Lädt...
                                X