Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    zwei Werte senden

    Hallo zusammen,

    ich häng mich auch mal hier mit meinem Problemchen ran:
    ich möchte bei Empfang auf einer GA zwei (oder mehrere) GAs schreiben. Ganz am Anfang wird ja beschrieben, dass das aus guten Gründen in EINER Logik nicht geht, aber mehrere Logiken auf die gleiche GA hören können sollten - richtig?
    Ich habe deshalb zwei Logiken erstellt:
    Code:
    abwesendSzeneTag => {
        receive=>'0/7/1', 
        transmit=>'11/0/1',
        translate => sub{
            return ($input == 0) ? 1:undef;
        }
    }
    
    abwesendLichtAus => {
        receive=>'0/7/1', 
        transmit=>'1/0/0',
        translate => sub{
            return ($input == 0) ? 0:undef;
        }
    }
    Jede einzeln (die andere ist jeweils auskommentiert) funktioniert wie gewünscht; sind jedoch beide gleichzeitig aktiv, erhalte ich diese Fehlermeldung:
    config error: syntax error at (eval 2267) line 25, near "} abwesendLichtAus" Can't use global @_ in "my" at (eval 2267) line 28, near "=@_" syntax error at (eval 2267) line 30, near "; }"
    Hat jemand 'ne Idee oder noch besser Lösung?
    Danke schon mal....
    CU,
    Mathias

    Kommentar


      Hi,

      Zitat von gindler Beitrag anzeigen
      Ganz am Anfang wird ja beschrieben, dass das aus guten Gründen in EINER Logik nicht geht, aber mehrere Logiken auf die gleiche GA hören können sollten - richtig?
      Das stimmt so nicht (mehr). Schau mal hier unter Punkt 18: Open Automation / Code / [r2169] /wiregate/plugin/generic/conf.d/Logikprozessor.conf

      Allerdings nützt dir das in dem Falle nichts, da du ja offensichtlich unterschiedliche Werte auf die 2 GAss senden willst. Also solltest du deine 2 Logiken weiter nutzen. Und zwar so: es fehlt ein "," zwischen den zwei Logiken:

      Zitat von gindler Beitrag anzeigen
      Ich habe deshalb zwei Logiken erstellt:
      Code:
      abwesendSzeneTag => {
          receive=>'0/7/1', 
          transmit=>'11/0/1',
          translate => sub{
              return ($input == 0) ? 1:undef;
          }
      }[COLOR="Red"],[/COLOR]
      
      abwesendLichtAus => {
          receive=>'0/7/1', 
          transmit=>'1/0/0',
          translate => sub{
              return ($input == 0) ? 0:undef;
          }
      }[COLOR="red"],[/COLOR]
      Mach am besten an die letzte Logik auch ein Komma, dann vergisst du es beim nächsten Hinzufügen einer Logik nicht ;-)

      VG
      Micha

      Kommentar


        Hi Micha,

        vielen Dank für den Zaunpfahl-Wink!
        Hat mir sehr geholfen - Läuft....
        CU,
        Mathias

        Kommentar


          Hallo zusammen,

          ich will über den Gradienten der Luftfeuchtigkeit im Bad eine Duscherkennnung realisieren, was auch gut funktioniert, d.h. ich werte einfach aus, ob sich die Luftfeuchtigkeit mehr als 10% pro 5min ändert.
          Mit der Info soll dann u.a. eine Intervallsteuerung der Lüftungsanalage erfolgen, d.h. ich wollte hier einfach eine Treppenlichtfunktion hernehmen.

          Leider wird die Treppenlichtfunktion nie ausgeführt und nun habe ich im Verdacht, dass es nicht gut ist, dass ich auf eine Adresse die das Wiregate aus dem Logikprozessor sendet eine andere Logik hänge. Kann das jemand bestätigen/dementieren, ich finde auf die Schnelle keine passende Info im WG-Forum.
          Andere Lösungsvorschläge und Hinweise zu Denkfehlern sind natürlich auch sehr willkommen...

          Unten noch die beiden relevanten Logiken.

          Danke & schöne Grüße
          Christian

          Code:
              # Lüftungsbedarf wenn Gradient der Luftfeuchtigkeit > 2%/min
              LueftungBedarfHumidityGradientBadOG => {
                  receive => '3/4/35',
                  transmit => '3/3/201',
                  translate => sub { return( $input > 2 ) ? 1 : undef }},
              # Nach 1800s den Lueftungsbedarf zurücknehmen
              LueftungBedarfHumidityGradientDelayBadOG => {
                  receive => '3/3/201',
                  transmit => '3/3/201',
                  delay => 1800,
                  translate => 0 },

          Kommentar


            Hi,
            der delay-Timer wird immer wieder resettet, wenn die Logik erneut ausgeführt wird - so wie ein Treppenlicht immer wieder neu den Timer startet, wenn der Lichtschalter nochmal gedrückt wird.
            VG,
            Fry

            Kommentar


              Neue Features des Logikprozessors:

              Hallo zusammen,
              es freut mich außerordentlich, dass der Logikprozessor einige Freunde gefunden hat. Deshalb stelle ich nach längerer Zeit des stillen Weiterarbeitens hier ein Update vor.

              WICHTIGE VORAUSSETZUNG: der "if/while"-Patch, der "plugin_cache"-Patch und der "precompile"-Patch des /usr/sbin/wiregated.pl sind mittlerweile bei mir fest drin. Diese Patches führen dazu, dass der Logikprozessor, wie auch andere Plugins, rasend schnell wird. Deshalb teste ich nichts mehr "ohne"! Wer diese Patches noch nicht hat => im Anhang ist mein wiregated.pl. Vorsicht aber: die vor wenigen Wochen vorgestellten VOC-Sensoren von Elabnet werden von diesem wiregated.pl nicht unterstützt (da ich diese Sensoren nicht habe, hab ich sie auch nicht unterstützt). Es kann sich ja evtl. mal jemand die Mühe machen, die letzte Elabnet-Version und diese Version zusammenzumischen. (Ich hoffte eigentlich, dass Elabnet das irgendwann mal macht).

              Hier die neuen Features des Logikprozessors:

              "followup". Dies ist als Option (followup=>...) als auch als Funktion (followup(...)) verfügbar und ziemlich mächtig: damit kann eine Logik eine oder mehrere andere Logiken als zeitversetzte Sequenz aufrufen. Der Zeitversatz kann dabei auch analog der timer-Option als Uhrzeit/Wochentag usw spezifiziert werden. So habe ich damit einen Wecker mit Lautstärke-Fade-in über Multiroom-Audio realisiert.

              delay-Timer und followup-timer können nun per return 'cancel' auch geloescht werden, wenn sie schon laufen.

              execute_on_input_changes_only - sollte selbsterklärend sein, Logik wird nur ausgeführt, wenn sich an den Inputwerten was geändert hat

              Es sollten ALLE bisherigen Logiken unverändert funktionieren, mit einer Ausnahme: Memory-Logiken, denn es gibt eine WICHTIGE Änderung des Defaultverhaltens bei Lesetelegrammen: Statt wie bisher, dass Logiken auf der transmit-Adresse auf Lesetelegramme antworten (mit ignore_read_requests=>1 abschaltbar), ist es nun so, dass sie NICHT antworten, außer reply_to_read_requests=>1 ist spezifiziert. Das alte Verhalten war einfach störend irgendwann...

              Fürs Debuggen lege ich noch zwei nützliche Plugins bei: Debug_Logiken.pl und Debug_Timer.pl . Man nutzt diese, indem man sie in /etc/wiregate/plugin/generic ablegt und bei Bedarf mit "touch /etc/wiregate/plugin/generic/Debug_Timer.pl" auslöst. Der wiregated.pl sieht das neue Zugriffsdatum nach touch, führt das Debug-Plugin aus, und man bekommt in /var/log/... einen Ausdruck der aktuell gültigen Logiken bzw. aktuell laufenden Timer.

              Have fun,
              Fry
              Angehängte Dateien

              Kommentar


                Zitat von Fry Beitrag anzeigen
                Es kann sich ja evtl. mal jemand die Mühe machen, die letzte Elabnet-Version und diese Version zusammenzumischen. (Ich hoffte eigentlich, dass Elabnet das irgendwann mal macht).
                Haben wir bereits, zumindest in dem noch in Entwicklung befindlichen PL38 - so wie schon vor längerer Zeit versprochen.

                Da das PL38 ein sehr umfassendes Feature- und Performance-Update wird - Patch trifft es nicht mehr - ist es leider auch sehr aufwändig. Es wird nicht nur neue Sensoren sondern auch den neuen Professional Busmaster berücksichtigen, umfangreiche Verbesserungen bei der 1-Wire Fehlersuche usw. mit sich bringen.

                Da wir immer noch daran arbeiten, kann ich noch keinen Release-Termin nennen.

                lg

                Stefan

                Kommentar


                  Das hört sich sehr gut an!
                  Fry

                  Kommentar


                    Zitat von Fry Beitrag anzeigen
                    der delay-Timer wird immer wieder resettet, wenn die Logik erneut ausgeführt wird
                    Hallo Fry,

                    soweit klar, aber eigentlich sollte der Trigger nicht dauernd gesendet werden, d.h. die erste Logik sollte max 2-3x eine "1" senden und danach nichts. Die Luftfeuchtigkeit steigt (ohne Lüftung) beim Duschen eben sehr schnell von ~50% auf ~90% an und bleibt dann relativ konstant, d.h. der Gradient ist kurze Zeit messbar hoch und bei konst. Luftfeuchtigkeit wieder nahe null - klar.

                    Ich prüfe mal die Logs, ob die erste Logik doch noch sendet.

                    Danke & Grüße
                    Christian

                    Kommentar


                      Zitat von StefanW Beitrag anzeigen
                      Haben wir bereits, zumindest in dem noch in Entwicklung befindlichen PL38 - so wie schon vor längerer Zeit versprochen.
                      Hi Stefan,
                      ohne euch in irgendeiner Weise drängeln zu wollen - anbei die bei mir aktuelle Version des wiregated.pl. Gegenüber der oben geposteten Version ist noch ein Bugfix bezüglich encode/decode DPT10 (Uhrzeiten) hinzugekommen.
                      Viele Grüße
                      Fry
                      Angehängte Dateien

                      Kommentar


                        Hallo zusammen,

                        nachdem ich heute morgen unsanft von den fahrenden Jalousien geweckt wurde, weil der Ostermontag nicht als Feiertag gestezt war (Fry hatte es Anfang des Jahres schon gepostet, ich habs nicht eingebaut), hab ich mal eine bayerische Version der @holidays erstellt (inkl. 15.8.) - den 24./31.12. hab ich in der Regel auch frei:

                        Code:
                        my @holidays=(1,6,121+$leapyear,227+$leapyear,276+$leapyear,305+$leapyear,358+$leapyear,359+$leapyear,360+$leapyear,365+$leapyear,$J-2,$J+1,$J+39,$J+49,$J+50,$J+60);
                        Beste Grüße, Dirk

                        ________________________________________
                        Haus ist fertig - KNX wird's nie werden ;-)

                        Kommentar


                          Zitat von dirk13 Beitrag anzeigen
                          Hallo zusammen,

                          nachdem ich heute morgen unsanft von den fahrenden Jalousien geweckt wurde, weil der Ostermontag nicht als Feiertag gestezt war (Fry hatte es Anfang des Jahres schon gepostet, ich habs nicht eingebaut), hab ich mal eine bayerische Version der @holidays erstellt (inkl. 15.8.) - den 24./31.12. hab ich in der Regel auch frei:

                          Code:
                          my @holidays=(1,6,121+$leapyear,227+$leapyear,276+$leapyear,305+$leapyear,358+$leapyear,359+$leapyear,360+$leapyear,365+$leapyear,$J-2,$J+1,$J+39,$J+49,$J+50,$J+60);
                          Ich wäre (immernoch) dafür, das irgendwie "individualisierbar" zu machen. Also die bundesweiten Feiertage (@holidays) in Logikprozessor.pl und sowas wie @customHolidays (in %settings?) in Logikprozessor.pl.conf ?! Dann könnte man auch den eigenen Urlaub entsprechend eintragen. Wäre das denkbar/sinnvoll?

                          VG
                          Micha

                          Kommentar


                            Zitat von Fry Beitrag anzeigen
                            Hi Stefan,
                            ohne euch in irgendeiner Weise drängeln zu wollen - anbei die bei mir aktuelle Version des wiregated.pl. Gegenüber der oben geposteten Version ist noch ein Bugfix bezüglich encode/decode DPT10 (Uhrzeiten) hinzugekommen.
                            Viele Grüße
                            Fry
                            Hallo Fry,

                            danke für deine Version. Damit läuft die ganze Sache doch wesentlich geschmeidiger. Einige der Patches hatte ich auch schon eingebaut. Aber bei weitem nicht alles.
                            Ich hatte zusätzlich nur noch JuMi2006s Patch mit "plugin_subscribe_read" und "plugin_subscribe_write" eingebaut .
                            Deine modifizierte Version habe ich hier mal angehangen.

                            Gruß
                            Angehängte Dateien

                            Kommentar


                              Ok, JuMis Patch habe ich nun auch bei mir lokal übernommen (vielen Dank!).
                              Sobald ElabNet diese Änderungen in einem offiziellen PL übernimmt, werde ich den Logikprozessor und alle anderen Plugins so patchen, dass sie das auch nutzen => wird dadurch nochmal ein klein wenig performanter werden.
                              VG, Fry

                              Kommentar


                                Zitat von mivola Beitrag anzeigen
                                Ich wäre (immernoch) dafür, das irgendwie "individualisierbar" zu machen. Also die bundesweiten Feiertage (@holidays) in Logikprozessor.pl und sowas wie @customHolidays (in %settings?) in Logikprozessor.pl.conf ?! Dann könnte man auch den eigenen Urlaub entsprechend eintragen. Wäre das denkbar/sinnvoll?
                                Ja, sowohl denkbar als auch sinnvoll. Werde ich dann gemeinsam mit dem $plugin_subscribe_read/write einarbeiten. Dank %plugin_cache verursacht sowas auch keine Performanceeinbußen, weil es ja nur einmal (beim Start des Logikprozessors) eingelesen wird.

                                VG, Fry

                                Kommentar

                                Lädt...
                                X