Zitat von Hannatz
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Neues Plugin: Logikprozessor.pl
Einklappen
X
-
Hallo Fry,
zu später Stunde hier mal mein Problem, irgendwie checke ich das mit der Variable $workingday noch nicht so recht...?!
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.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 },
Danke und Gruß,
Hannatz
Kommentar
-
...und hier noch ein Problem:
Laut KNX Log wird nur auf der 1/1/54 geschrieben, nicht aber auf der 51:Code:TV_per_Licht => { receive=>'1/1/33', transmit=>['1/1/54','1/1/51'], translate => 1, debug=>1 },
Das Plugin-Log sagt folgendes: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
Was läuft da falsch? Beide Adressen sind identisch in der eibga.conf eingetragen, hab´s extra per Weboberfläche noch mal geprüft...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,
Bin für jede Hilfe dankbar,
Gruß Hannatz
Kommentar
-
$workingday funktioniert nur in einer Subroutine (translate=>sub { ... }).Zitat von Hannatz Beitrag anzeigenHallo Fry,
zu später Stunde hier mal mein Problem, irgendwie checke ich das mit der Variable $workingday noch nicht so recht...?!
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.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 },
Danke und Gruß,
Hannatz
Du möchtest wahrscheinlich sowas wie
VG, FryCode:timer => {time=>['04:30+30min-08:45','18:05'], workingday=>1 }, translate=>0},
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?Zitat von Hannatz Beitrag anzeigenWas läuft da falsch? Beide Adressen sind identisch in der eibga.conf eingetragen, hab´s extra per Weboberfläche noch mal geprüft...
VG, Fry
Kommentar
-
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.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?
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).
Habe ich mal aktiviert, danke!Du möchtest wahrscheinlich sowas wie
Code:
VG, FryCode:timer => {time=>['04:30+30min-08:45','18:05'], workingday=>1 }, translate=>0},
Gruß Hannatz
Kommentar
-
Ich bräuchte auch leider Hilfe, leider habe ich Schwierigkeiten mit der Timefunktion
Auf die GA 0/3/0 wird der Status des Garangentors gesendet ( 0 => offen, 1 => geschlossen)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},
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:
Kriege aber folgende Fehler im LogCode: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},
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
-
Kurios, sehr cool, das wars:
Log: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},
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.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"
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.
Wenn ich das Beispiel richtig verstehe wird , die Temperatur (14/5/1) mit 2 Verglicht.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 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
Mein eigendliches Ziel ist: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,
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 => 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.
Hier die zugehörige Konfig.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,
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:
Mein Problem liegt jetzt hier: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} ,
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.
Vielen Dank für Eure HilfeCode: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 gesendetBeste 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


Kommentar