Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    #91
    Hallo Fry,

    komm erst jetzt zum Antworten, im Haus ist auch so noch einiges zu tun

    Das Problem hat sich erledigt. Ich hatte eigentlich alles so wie Du angeregt hast eingestellt.
    Heute hab ich noch einmal die aktuelle Version des Logikprozessors reinkopiert (war aber auch vorher dieselbe Version)...

    und JETZT GEHT ES!

    Nochmals vielen Dank!

    Jens
    Viele Grüße Jens

    Kommentar


      #92
      Damit die Änderungen in der Conf-Datei Wirkung enfalten, musst Du die Plugin-Datei abspeichern; vielleicht liegt es daran (ich bin jedenfalls bei meinen ersten Versuchen mit dem Logikprozessor daran gescheitert).

      Besten Dank Fry für dieses Plugin.
      Gruss
      Diego

      Kommentar


        #93
        Na prima, dass jetzt alles funktioniert.

        Ja, wenn man die conf-Datei geändert hat, lohnt sich ein touch /etc/wiregate/plugin/generic/Logikprozessor.pl, um die neue Datei zu "aktivieren".

        Allerdings _sollte_ der Logikprozessor bei _jedem_ Aufruf die conf-Datei prüfen, und falls die sich geändert haben sollte, das auch automatisch (in Form einer Reinitialisierung) berücksichtigen. Diese Funktion kann aber nicht dafür sorgen, dass bei einer geänderten conf-Datei das Plugin automatisch aufgerufen wird.

        Ich stelle das mal als Feature-Request an Makki, der hier hoffentlich mitliest: sobald die zugehörige conf-Datei geändert wird, sollte ein Plugin neu initialisiert werden.

        Grüße,
        Fry

        Kommentar


          #94
          Demokonfig. erweitert

          Hi Fry!

          Die Demokonfiguration im SVN habe ich nun angepasst, so dass diese sowohl prowl als auch transmit_changes_only zeigt.

          Gruß,
          Timo

          Kommentar


            #95
            Danke!
            Fry

            Kommentar


              #96
              @timov

              Die Prowl-Unterstützung ist klasse. Was mir nur noch fehlt, ist dass der Versand bedingt unterdrückt werden kann.

              Versucht hatte ich es mit:
              Code:
              ..., prowl => sub { if (!$input) { return undef; }; ... }
              Beispiel:
              Die Quadra schickt mir den Windalarm zyklisch alle 5 Minuten auf den Bus. Per Prowl möchte ich aber nur die Info erhalten, dass der Alaram ausgelöst hat.
              KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

              Kommentar


                #97
                Hallo zusammen,

                Neue Features:

                * Mit fetch=>'1/2/3' (auch hier ist wieder eine Liste ['1/2/3','1/2/4'] möglich) können weitere GAs definiert werden. Die werden nicht subscribed, aber vor Ausführung der Logik mit knx_read abgefragt und an $input angehängt. ($input ist wie gewohnt ein Skalar, falls nur eine GA in receive und fetch ZUSAMMEN definiert ist. Sobald es mehr als eine GA ist, wird $input zur Array-Referenz und kann als $input->[0], $input->[1] usw. genutzt werden. Das hilft bei vielen Logiken, um traffic zu reduzieren: wenn die Logik zwar von mehreren GAs abhängt aber nur von einer "getriggert" werden soll, so definiert man eben nur die eine in receive, die anderen in fetch.

                * Mit eibd_cache=>300 kann der zweite Parameter der knx_read-Aufrufe spezifiziert werden. Bis zu dieser Zeit (in s) wird der Wert aus dem Cache genommen, falls der Cache-Wert älter ist, wird ein Read-telegramm auf dem Bus abgesetzt.

                * Die Option recalc_on_request ändert das Verhalten, wenn Lesetelegramme auf die transmit-Adresse erhalten werden. Ohne die Option ist alles wie bisher: der letzte gesendete oder empfangene Wert auf der transmit-Adresse wird einfach wiederholt, und falls dieser undefiniert ist, wird die Logik neu ausgeführt und das Ergebnis gesendet. Mit recalc_on_request=>0 wird die Logik auch in dem letzten Fall NICHT ausgeführt, und mit recalc_on_request=>1 wird die Logik immer ausgeführt, das Ergebnis also neu berechnet.

                * Die Optionen transmit_on_startup=>1 fuehrt die Logik bei der Initialisierung einmal aus und sendet das Ergebnis auf transmit.
                Vorsicht: der Logikprozessor kann zwar leicht hunderte von Logiken verarbeiten (bei mir sind es aktuell >200 Einträge), aber diese Option kann ihn niederzwingen: da bei der Initialisierung alle Logiken einmal durchgegangen werden, kann es bei zu vielen Einträgen mit transmit_on_startup=>1 leicht dazu kommen, dass viele receive-Adressen abzufragen sind und das zum Timeout des Plugins führt. Aus diesem Grund werden alle Logiken erst initialisiert, bevor die Ausführung der Logiken mit transmit_on_startup=>1 beginnt.

                * timer-Option: Achtung verändertes Verhalten! Logiken mit timer-Option haben bisher alle Telegramme auf receive-GAs ignoriert. Das ist jetzt nicht mehr so. Auf diese Weise kann eine Logik sowohl auf Timer als auch auf Telegramme reagieren. Falls man das alte Verhalten wieder möchte, einfach in der Logikdefinition "receive" durch "fetch" ersetzen.

                Zum Schluss eine hübsche Anwendung, die für mich sehr nützlich ist: zur Aufzeichnung aller Werte, die auf eine GA gesendet werden, in einem rrd-File zur späteren Grafikerzeugung genügt eine Zeile:

                Code:
                myrrd => { receive=>'1/2/3', translate=>sub{update_rrd('myrrd','',$input)} },
                (Interessant in diesem Beispiel. es kommt ohne transmit=>... aus.)

                Auf diese Weise erzeuge ich einige zig Grafiken.

                * Noch ein Hinweis zu einer häufigen Fehlerursache: die Logiken müssen alle EINDEUTIGE Namen tragen, weil %logic ein Hash ist. Also keine Dopplungen!

                Wie immer neueste Version im SVN, wie immer "ohne Gewähr".

                Have fun,
                Fry

                PS. Ich wäre den Usern des Plugins übrigens dankbar, wenn ihr mal ein paar Beispiele eurer Anwendungen hier postet. Das könnte anderen helfden, den Anfang zu finden. Mein Wiregate verarbeitet momentan Logiken zur Auswertung der Fensterkontakte (Dreh/Kipp), zur Aufzeichnung von RRDs (siehe oben), zur Auswertung von S0-Impulsen von Stromzählern und -relais und zur Steuerung von Licht (Dimmwert bei Nacht etc).

                Kommentar


                  #98
                  Schicke Änderungen. Da muss ich bei Gelegenheit noch ein paar Logiken wieder umbauen. Danke @fry

                  Ich habe heute drei kleine Änderungen gepusht:
                  1. sendProwl() kann jetzt einfacher innerhalb der Logiken sub {} verwendet werden. Dort wird jetzt auch das Settings-Prowl-Hash beachtet. Das löst das von mir genannte Problem, nur noch bei Warnungen eine Prowl-Nachricht zu senden.
                  2. sendProwl() enkodiert jetzt [event, description, application] korrekt als UTF8. Damit werden jetzt Umlaute und Sonderzeichen korrekt übertragen.
                  3. Korrektur eines Tippfehlers in der Uhrzeit nicht lesbar Fehlermeldungen. Ab und zu kommt es bei mir vor, dass die Meldung ausgegeben wird und $date in dem Fall leer ist. ka warum??
                  KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

                  Kommentar


                    #99
                    Danke!
                    Ich habe die (kleineren) Konflikte mit meiner lokalen Version gefixt und auch noch ein Commit abgeschickt.
                    Fry

                    Kommentar


                      Zitat von dombn Beitrag anzeigen
                      Versucht hatte ich es mit:
                      Code:
                      ..., prowl => sub { if (!$input) { return undef; }; ... }
                      Beispiel:
                      Immer bedenken, dass in $input auch ein String wie "00" stehen kann. Daher bitte lieber sowas wie if(defined $input && int($input)==0) verwenden. Das ist robuster.
                      Fry

                      Kommentar


                        Zitat von Fry Beitrag anzeigen
                        […]Ich habe die (kleineren) Konflikte mit meiner lokalen Version gefixt und auch noch ein Commit abgeschickt.
                        Hab wieder gepullt. Leider hat das mit dem Konfliktauflösen nicht so gut funktioniert. Es sind dabei leider wieder die Fixes aus Commit 1119 rausgeflogen, so dass bei mir der Logikprozessor nicht mehr läuft (Perl-Syntaxfehler u.a. wg. fehlender Klammern bei groupaddress-Aufrufen).

                        Ich habe die jetzt per Patch wieder hinzugefügt. Soll ich das noch mal einchecken?

                        A propos: Sollen wir uns mal einen Thread im Beta-Forum aufmachen?
                        KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

                        Kommentar


                          Sehr seltsam. Klammern um Funktionsaufrufe sind in Perl keine Pflicht, solange die Funktion weiter oben zumindest deklariert (einfach mit sub groupaddress; ohne Body) ist. Bitte füge das mal bei dir oben in Logikprozessor ein, nimm die Klammern wieder raus (liest sich besser) und checke alle deine Änderungen wieder ein.
                          Ich sehe mir das dann mal an.
                          VG
                          Fry

                          Kommentar


                            Richtig. Bisher war die sub aber ja nur unterhalb deklariert. Ich hatte es auf die geklammerte Schreibweise umgestellt, da diese teilweise im Code auch schon so verwendet wurde (und es in meinen Augen übersichtlicher ist ). Das zum Thema »übersichtlicher« ist ein Glaubenskrieg und es ist ja dein Code. In sofern habe ich meine Änderungen (R1119) zurück genommen.

                            Hinzugefügt habe ich jetzt nur:
                            - »forward declaration« der sub groupaddress
                            - die defined-Prüfung für $logic{$t}{transmit}
                            (da ich einige Regeln/Logiken ohne transmit-Adresse habe)

                            Du findest es jetzt auch als R1123 im SVN.
                            KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

                            Kommentar


                              Prima, danke. Ich hoffe, auch die prowl-Funktionen (die ich bisher nicht nutze und daher nicht teste) sind jetzt wieder ok.

                              Gutes Teamwork!

                              Fry

                              Kommentar


                                Zitat von Fry Beitrag anzeigen
                                Prima, danke. Ich hoffe, auch die prowl-Funktionen (die ich bisher nicht nutze und daher nicht teste) sind jetzt wieder ok.
                                Sollten sie, sie sind ja von den letzten Revisionen nicht betroffen gewesen und unser Haus »quasselt« freundlich auf mein iOS-Geräte.

                                Danke auch für die gute Vor- und Weiterarbeit.
                                KNX: MDT, Gira TS3, Berker, Theben, PEAR, Preussen BWM, B.E.G., BMS Quadra, WireGate, Timberwolf 2500 | Baublog

                                Kommentar

                                Lädt...
                                X