Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Logikprozessor.pl

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

    Zitat von Hannatz Beitrag anzeigen
    Hey Fry,

    das ist zwar richtig, war aber nicht das Problem! Hatte nach ein paar Fehlversuchen immer beide Dateien offen und jeweils geändert neu hochgeladen, erst die .conf und dann das Plugin selber. Dort lustig immer eine Leerzeile raus und beim nächsten Mal wieder rein...
    Kann ich bestätigen. Bei mir das selbe.

    Kommentar


      Hallo Fry,

      zu später Stunde hier mal mein Problem, irgendwie checke ich das mit der Variable $workingday noch nicht so recht...?!

      Code:
          
      PM_Sperre_Ein => { transmit=>'1/0/99', timer=>{ time=>['09:00+1h-18:00'], $workingday }, translate => 1 },
      PM_Sperre_Aus => { transmit=>'1/0/99', timer=>{ time=>['04:30+30-8:45','18:05'], $workingday }, translate => 0 },
      Was mache ich falsch? Diese beiden Zeilen sollen halt nur an Werktagen laufen, hab schon versucht denen ein '1' bzw '0' mitzugeben, aber das war auch nicht richtig.

      Danke und Gruß,
      Hannatz

      Kommentar


        ...und hier noch ein Problem:

        Code:
        TV_per_Licht => { receive=>'1/1/33', transmit=>['1/1/54','1/1/51'], translate => 1, debug=>1 },
        Laut KNX Log wird nur auf der 1/1/54 geschrieben, nicht aber auf der 51:
        Code:
        2013-02-09 20:30:19.684,A_GroupValue_Write,1.1.254,1/1/54,01,1,,1.001,0,low,7,T_DATA_XXX_REQ,0
        Das Plugin-Log sagt folgendes:
        Code:
        2013-02-09 20:30:19.594,Logikprozessor,1.1.26 1/1/33:1 -> $logic{TV_per_Licht}{receive}(Logik) -> [1/1/54,1/1/51]:1 gesendet ,0.6s,
        Was läuft da falsch? Beide Adressen sind identisch in der eibga.conf eingetragen, hab´s extra per Weboberfläche noch mal geprüft...

        Bin für jede Hilfe dankbar,
        Gruß Hannatz

        Kommentar


          Zitat von Hannatz Beitrag anzeigen
          Hallo Fry,

          zu später Stunde hier mal mein Problem, irgendwie checke ich das mit der Variable $workingday noch nicht so recht...?!

          Code:
              
          PM_Sperre_Ein => { transmit=>'1/0/99', timer=>{ time=>['09:00+1h-18:00'], $workingday }, translate => 1 },
          PM_Sperre_Aus => { transmit=>'1/0/99', timer=>{ time=>['04:30+30-8:45','18:05'], $workingday }, translate => 0 },
          Was mache ich falsch? Diese beiden Zeilen sollen halt nur an Werktagen laufen, hab schon versucht denen ein '1' bzw '0' mitzugeben, aber das war auch nicht richtig.

          Danke und Gruß,
          Hannatz
          $workingday funktioniert nur in einer Subroutine (translate=>sub { ... }).

          Du möchtest wahrscheinlich sowas wie
          Code:
          timer => {time=>['04:30+30min-08:45','18:05'], workingday=>1 }, translate=>0},
          VG, Fry

          Kommentar


            Zitat von Hannatz Beitrag anzeigen
            Was läuft da falsch? Beide Adressen sind identisch in der eibga.conf eingetragen, hab´s extra per Weboberfläche noch mal geprüft...
            Wenn das Plugin meldet, es habe an beide Adressen gesendet, dann wurde knx_write zweimal aufgerufen. Warum knx_write nicht sendet ... da fällt mir nur wieder die eibga.conf ein. Kannst du die Ausschnitte mal posten?

            VG, Fry

            Kommentar


              Wenn das Plugin meldet, es habe an beide Adressen gesendet, dann wurde knx_write zweimal aufgerufen. Warum knx_write nicht sendet ... da fällt mir nur wieder die eibga.conf ein. Kannst du die Ausschnitte mal posten?
              Hmm, gestern Abend habe ich festgestellt, dass das Plugin ohne Änderungen nun doch funktioniert. Hätte vielleicht einfach meinen Eintrag von weiter oben lesen sollen, da steht ja das Problem des "Reboots" beschrieben.
              Naja, rebootet habe ich zwar nicht, aber scheinbar braucht es dennoch 1-2 Tage Warmlaufzeit (das Plugin selber habe ich immer wieder neu gespeichert um es zu initialisieren).

              Du möchtest wahrscheinlich sowas wie
              Code:
              Code:
              timer => {time=>['04:30+30min-08:45','18:05'], workingday=>1 }, translate=>0},
              VG, Fry
              Habe ich mal aktiviert, danke!

              Gruß Hannatz

              Kommentar


                Ich bräuchte auch leider Hilfe, leider habe ich Schwierigkeiten mit der Timefunktion



                Code:
                eibga.conf -> Status Garangentor
                [0/3/0]
                DPTId=1
                DPTSubId=1.009
                name=Rueckmeldung Garagentor zu
                
                
                 garagentor => { receive=>'0/3/0', transmit=>'15/0/4', 
                                  timer=>{ time=>['08:00','10:00','09:00+2m-09:30','13:00+1h-20:00'], weekend=> 1 },
                                  translate => sub { $input<1 ? 1 : undef } , debug=>1},
                Auf die GA 0/3/0 wird der Status des Garangentors gesendet ( 0 => offen, 1 => geschlossen)

                Die GA 0/3/0 sendet alle 60 Sekunden den Status des Garagentors.

                Nun möchte ich die Meldung über Garagentor "offen" an die transmitGA 15/0/4 nur zu bestimmten Zeitpunkten senden. Das klappt aber nicht.

                Alle 60 Sekunden wird die Logik "garagentor" ausgeführt (nämlich immer dann, wenn der Status des Garagentors über den Bus gesendet wird). Meine Logik für die Zeitintervalle wird völlig ignonieriert.


                Verstehe das einfach nicht.

                So, Nachtrag, hab jetzt mal das in der Config eingetragene Beispiel eingesetzt:

                Code:
                     garagentor => { receive=>'0/3/0', transmit=>'15/0/4', 
                                  timer=>{ time=>['08:00','10:00','09:00+2m-09:30','18:00+1h-20:00'], 
                                             day_of_month=>'8..14', day_of_week=>'Di' },
                                  translate => sub { $input==0 ? 1 : undef } , debug=>1},
                Kriege aber folgende Fehler im Log

                Code:
                2013-03-17 15:00:28.500,Ansagen.pl,default:Garagentor silence,0s, 2013-03-17 15:00:28.507,Logikprozessor.pl,,0s,Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at (eval 756) line 512.  2013-03-17 15:00:33.038,Logikprozessor.pl,,0s,Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at (eval 758) line 512.  2013-03-17 15:00:43.933,Logikprozessor.pl,,0s,Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) at (eval 760) line 512.

                Kommentar


                  Bitte Doku lesen!

                  Konkret glaube ich, du erreichst dein Ziel, indem du "receive" durch "fetch" ersetzt.

                  Wobei ich nicht 100% verstanden habe, was du eigentlich brauchst. Aber vielleicht gibt das die richtige Richtung.

                  Bitte poste mal, ob das dein Problem löst.

                  Viel Glück,
                  Fry

                  Kommentar


                    Kurios, sehr cool, das wars:

                    Code:
                         garagentor => { fetch=>'0/3/0', transmit=>'15/0/4', 
                                           timer=>{ time=>['08:00','10:00','09:00+2m-09:30','17:00+5m-20:00'], weekend=>1}, 
                                         translate => sub { if(defined $input && int($input) == 0) { 1; } else {return undef;}},debug=>1},
                    Log:

                    Code:
                    2013-03-17 17:13:26.237,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'garagentor' um 17:15.
                    2013-03-17 17:15:27.268,Logikprozessor.pl,Naechster Aufruf der Timer-Logik 'garagentor' um 17:20. 2013-03-17 17:15:27.269,Logikprozessor.pl,$logic{garagentor}{transmit}(Logik) -> 15/0/4:1 gesendet (Timer) ,0s, 2013-03-17 17:15:27.274,mpd_Player_6003.pl,Cycle retvalue,0s, 2013-03-17 17:15:28.233,Ansagen.pl,lfd_radio ->  -> export MPD_HOST=192.168.2.111; export MPD_PORT=6608; /usr/bin/mpc add "Ansagen/Beep/03.wav" "Ansagen/Ereignisse/Garagentor.wav" "Ansagen/silence.wav"
                    Ich hab die Doku gelesen, ich dachte jedoch, dass selbst wenn über Bustrafficc die Statusmeldung vom Garagentor alle 60 Sekunden auf den Bus gesendet wird, dass die meine Logik "garagentor" dieses ignoriert, weil ja das Zeitintervall dieses nicht zugelassen hätte.

                    OK, hab ich wohl was missverstanden, ich dachte immer recieve bedeutet, dass er die GA auslesen soll.


                    Nachtrag: Also muss mal wirklich sagen, dieses Plugin ist sagenhaft GEEEEIL ! Hab jetzt noch weitere Logiken eingebaut, RadioWecker, Temperatur, Muellabfuhr etc. -> Logiken, danach hab ich lange gesucht, warum hab ich das Plugin erst jetzt gefunden ?

                    Kommentar


                      [CG] Bekomme die Steuerung per Temperatur nicht hin?

                      Hallo,

                      ich versuche seit einer weile, mein Rollo per Temp zu steuern.
                      Ich die Außentemperatur zu groß soll der Rollo runter fahren.

                      Ich habe mir hierzu das Beispiel mit der Brause angeschaut und versucht zu übernehmen.

                      Code:
                      aussen_zu_warm => { receive => '14/5/1', transmit => '0/0/66', transmit_changes_only => 1, translate => sub { return ($input gt 2) ? 70 : 20 }, debug => 1 },
                      Wenn ich das Beispiel richtig verstehe wird , die Temperatur (14/5/1) mit 2 Verglicht.
                      Wenn die Temperatur( der Wert steht wohl im $input) größer als 2 ist wir 20 gesendet, wenn die Zahl kleiner ist wird 70 gesendet.
                      Egal ob ich gt 20 oder gt 1 eintrage. (Aussen aktuell ca. 5 Grad)

                      Bei mir wird aber immer 70 gesendet
                      Hier die Ausgabe vom Debug
                      Code:
                      2013-03-23 16:46:54.684,Logikprozessor.pl,0.0.0 14/5/1:5.18 -> $logic{aussen_zu_warm}{receive}(Logik) -> 0/0/66:70 gesendet ,0s,
                      Mein eigendliches Ziel ist:

                      Es soll die Raumtemperatur mit der Außentemperatur verglichen werden.
                      Wenn der Raum kälter (bis 24 Grad) ist als aussen soll der Rolladen nicht bewegt werden.
                      Ist es im Raum >24 und ausen auch >=24 dann soll der Rollo zu fahren
                      --
                      Gruß
                      Lothar

                      Kommentar


                        So nun kann ich mir selber antworten.

                        Es scheint an dem Vergleich mit gt zu liegen.

                        wenn ich anstatt "gt" ">" benutze funktioniert es.

                        Diese Variante funktionier.
                        Code:
                        aussen_zu_warm => { receive => '14/5/1', transmit => '0/0/66', transmit_changes_only => 1, translate => sub {
                                return ( $input > 24 ) ? 100 : 0;
                                }, debug => 1 },
                        --
                        Gruß
                        Lothar

                        Kommentar


                          transmit_changes_only =&gt; 1 zeigt keine Wirkung

                          Hallo,

                          die Option transmit_changes_only => 1 soll dach verhindern, das wenn sich der Status nicht ändert auch nichts gesendet wird.
                          Laut Logfile wird immer das gleiche Ergebnis sehr regelmäßig gesendet.

                          Code:
                          2013-03-24 09:11:28.626,Logikprozessor.pl,0.0.0 14/5/1:10.06 -> $logic{aussen_zu_warm}{receive}(Logik) -> 0/0/66:0 gesendet ,0s,
                          2013-03-24 09:12:43.827,Logikprozessor.pl,0.0.0 14/5/1:10.5 -> $logic{aussen_zu_warm}{receive}(Logik) -> 0/0/66:0 gesendet ,0s,
                          2013-03-24 09:13:59.165,Logikprozessor.pl,0.0.0 14/5/1:10.37 -> $logic{aussen_zu_warm}{receive}(Logik) -> 0/0/66:0 gesendet ,0s,
                          Hier die zugehörige Konfig.
                          Code:
                          aussen_zu_warm => {
                                  receive => '14/5/1',
                                  transmit => '0/0/66',
                                  transmit_changes_only => 1,
                                  translate => sub {
                                          return ( $input > 24 ) ? 100 : 0;
                                  },
                                  debug => 1
                                  },
                          --
                          Gruß
                          Lothar

                          Kommentar


                            Hallo zusammen,

                            jetzt muss ich mich doch auch mal mit einer Frage melden, nachdem Wiregate und Logikprozessor schon länger wunderbar bei mir laufen.

                            Momentan habe ich eine Logik, die sich nicht 100%ig so verhält, wie ich es erwarte. Folgender Code öffnet ein Fenster in Abhängigkeit von Innen- und Außentemperatur:

                            Code:
                            fenster_vorrat => { receive=>['5/5/10','5/6/0'], transmit=>'4/0/5', translate => sub {
                              if ($input->[1] gt 14) {
                                return 1;
                              } else {
                                if ($input->[0] gt 15) {
                                  return 0;
                                } else {
                                  if ($input->[0] lt 13) {
                                    return 1;
                                  } else {
                                    return undef;
                                  };
                                };
                              };
                            } , debug=>1} ,
                            Mein Problem liegt jetzt hier:

                            Kommt ein Telegramm auf 5/5/10 (Innen), wird die 5/6/0 (Aussen) gelesen und korrekt gerechnet => 0 ist Fenster Auf

                            Kommt jedoch auf 5/6/0 ein Telegramm (siehe Zeile 4-6), schein die 5/5/10 nicht korrekt nachgelesen zu werden.

                            Dazu ist zu sagen dass 5/5/10 ein WG-Temperatur-Fühler ist, daher wohl auch kein Lese-Telegramm auf dem Bus. Ich kann somit aber nicht checken, ob der Fühler ausgewertet wird, oder nicht.

                            Auf jeden Fall hätte ich auch in den Fällen 4-6 (s.u.) eine 0 als Ergebnis erwartet, da sich die Werte inhaltlich nicht verändert haben, nur der Auslöser ist ein anderer.

                            Ich hatte auch schon gt/lt durch </> ersetzt, bringt auch nix.

                            Code:
                            0.0.0 5/5/10:17.25 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:0 gesendet 
                            0.0.0 5/5/10:17.5 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:0 gesendet 
                            0.0.0 5/5/10:17.25 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:0 gesendet
                            1.1.35 5/6/0:12.8 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:1 gesendet 
                            1.1.35 5/6/0:12.9 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:1 gesendet 
                            1.1.35 5/6/0:12.8 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:1 gesendet
                            Vielen Dank für Eure Hilfe
                            Beste Grüße, Dirk

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

                            Kommentar


                              Grundsätzlich ist "int(blabla) > 15" sauberer als "blabla gt 15". Aber das ist nicht der wichtigste Punkt hier.

                              Ergänze mal "eibd_cache=>300", aktiviere im WG den eibd-Cache und lasse die Innentemperatur zyklisch alle 5min oder besser noch etwas häufiger senden.

                              Dann findet die Logik den letzten Cache-Wert, wenn sie ihn braucht, und sollte funktionieren.

                              VG, Fry

                              Kommentar


                                Hallo Fry,

                                habe Deine Empfehlungen ausprobiert, es scheint aber noch was zu fehlen, klappt immer noch nicht, je nach Absender geht das Fesnter ständig auf und zu.

                                Ich poste nochmal die Config im aktuellen Stand:

                                Code:
                                fenster_vorrat => { receive=>['5/5/10','5/6/0'], transmit=>'4/0/5',  translate => sub { 
                                      if (int($input->[1]) > 14) { 
                                        return 1; 
                                      } else { 
                                        if (int($input->[0]) > 15) { 
                                          return 0; 
                                        } else { 
                                          if (int($input->[0]) < 13) { 
                                            return 1; 
                                          } else { 
                                            return undef; 
                                          }; 
                                        }; 
                                      }; 
                                    } , debug=>1, eibd_cache=>300, transmit_changes_only => 1 } ,
                                Code:
                                5/5/10:18.25 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:0 gesendet ,0.3s,
                                5/6/0:14.3 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:1 gesendet ,0.3s,
                                5/5/10:18 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:0 gesendet ,0.3s,
                                5/5/10:18 -> $logic{fenster_vorrat}{receive}(Logik) -> ARRAY(0x9eec140):0 unverändert -> nichts zu senden ,0.3s,
                                5/6/0:14.2 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:1 gesendet ,0.3s,
                                5/5/10:18 -> $logic{fenster_vorrat}{receive}(Logik) -> 4/0/5:0 gesendet ,0.3s,
                                5/5/10:18 -> $logic{fenster_vorrat}{receive}(Logik) -> ARRAY(0x9f1ca20):0 unverändert -> nichts zu senden ,0.3s,
                                Beste Grüße, Dirk

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

                                Kommentar

                                Lädt...
                                X