Zitat von Hannatz
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Neues Plugin: Logikprozessor.pl
Einklappen
X
-
Also ich kann dir zwar nich weiter helfen, bei mir funktioniert aber mittlerweile zumindest (offenbar) die IF-Logik. Meine Vergleiche waren nicht ok. "gt" und "lt" sind String-Vergleiche und "<" sowie ">" sind numerische Vergleiche und daher richtig.
Der Timer ging bei mir ja auch nicht - möglicherweise is da ein Bug drin oder die "Doku" dazu falsch... Ich warte hier auch auf Rückmeldung
Aktuell hab ich zu Testzwecken noch Cool drin und transmit_changes_only auf "0". Mein Melder sendet jede Minute einen Helligkeitswert. Wenn ich zu Ende geprüft habe, dann kommt cool raus und transmit changes only kommt auf "1" - der Melder soll dann auch nur alle 30Min+ was senden.
Ich hätte hier aber insbesondere mangels einer richtigen Doku auf mehr Unterstützung gehofft :-/
Vielleicht kannst du ähnlich wie ich vorgehen und IF-Logiken zusammen mit Helligkeitswerten nehmen. Ich wollts ja auch via Timer lösen, aber der Timer ging bei mir auch nich wie gesagt...
Code:%logic=( LED_Fluter => { receive => '0/0/4', transmit => '0/0/1', transmit_changes_only => 0, cool => 120, translate => sub { if ($input < 40) {return 1;} if ($input > 70) {return 0;} else {return undef;} }, }, );
Zuletzt geändert von Saargebeat; 18.11.2017, 15:59.
Kommentar
-
Zitat von Hannatz Beitrag anzeigen
Ich schieb das Thema noch mal nach oben, ist leider etwas untergegangen. Jemand ne Idee was ich falsch gemacht habe?
time=>['00:01-05:29'] ist unvollständig. Wenn man ein Intervall und keinen Zeitpunkt angibt, dann muss man auch sagen, wie oft wiederholt werden muss (z.B. +5m für alle fünf Minuten), damit sich wieder Zeitpunkte ergeben. Glaube aber nicht, dass es das ist was du willst. Wenn du sagen willst, tue in einem bestimmten Intervall nichts oder was anderes, dann musst du das in der translate-sub abhandeln.
Kommentar
-
Zitat von Saargebeat Beitrag anzeigenIch wollts ja auch via Timer lösen, aber der Timer ging bei mir auch nich wie gesagt...
Kommentar
-
"timer" löst eine Logik zu bestimmten Zeiten aus. Das möchtest du ja nicht, sondern nur die Reaktion auf einen anderen Trigger zu bestimmten Zeiten ausschließen.
D.h. du müsstest die Zeit in deiner "translate" Anweisung unterbringen. Ich habe das nicht mehr genau im Kopf, aber ich meine, der Logikprozessor kennt eine Variable $hour, die du in eine IF-Abfrage einbauen könntest. So etwas wie if ... $hour < 6 ... , um in der Zeit zwischen 0 und vor 6 Uhr etwas zu tun oder nicht zu tun.
- Likes 1
Kommentar
-
Zitat von Saargebeat Beitrag anzeigenok nur aus Interesse... wo liegt mein Fehler vom Timer?
Du hast aber die neueste Version aus dem Github installiert, oder?
Kommentar
-
Zitat von Saargebeat Beitrag anzeigenJap hab die neuste Version - evt. schaut ja der Programmierer davon hier iwann mal wieder rein und checkt die Sache :-)
Evtl. hilft auch selber debuggen, wenn es schneller gehen soll.
Kommentar
-
Ok sorry, Entwickler :-)
Da die IF-Geschichte mir erstmal reicht, gehts aktuell nur um den Vorwitz wo denn der Fehler lag. Ich setz jetzt erstmal ein bisschen Hoffnung in die EDOMI-Geschichte, auch wenn ich die Logikengine für den Wiregate auch höchst interessant finde.
Da muss ich mich aber denk ich noch ein bisschen mit Perl beschäftigen, bevor ich da was reissen kann mit
Kommentar
-
Logik für Hauswirtschaftsraum, Waschmaschine und Trockner
Hallo ich möchte mit dem Logikprozessor gerne eine etwas aufwändigere Logik umsetzen. Nun bin ich nicht der Fachmann dazu, versuche mich aber daran und baue auf eure Hilfe für Tipps und Verbesserungen.
Die ursprüngliche Logik habe ich hier http://www.knx-home.net/wiki/index.php?title=Beispiele gefunden.
Entgegen dem Beispiel schalte ich mein Licht im HWR von Hand, sollte ja aber nicht viel Unteerschied sein.
Der erste Teilabschnitt ist
wenn das Licht im HWR länger als 30 sec an ist, sollen die Steckdosen von WM und Trockner eingeschaltet werden.
Mein Vorschlag:
%logic=(
HWR => {
receive=>'GALichtRm',
transmit=>['GASteckdoseWMs', 'GASteckdoseTrochners'],
translate=>sub{
if ($input -> [1] < "30") {return 1;}
else {return 0;}
},
);
passt das so?
LG
AndreZuletzt geändert von katerina; 16.01.2018, 13:13.
Kommentar
-
Zitat von katerina Beitrag anzeigenpasst das so?
stair => { receive=>'1/2/9', transmit=>'1/2/9', delay=>600, translate => sub { return ($input eq 1) ? 0 : 'cancel';}, },
Kommentar
-
Ich mag' diese Einzeiler nicht, weil sie sehr unübersichtlich rüberkommen. Man schmeisse eine Handvoll Satzzeichen zu Perl und es macht eine if-then-Abfrage draus
So finde ich das schöner:
Code:HWR => { receive=>'GALichtRm', transmit=>['GASteckdoseWMs', 'GASteckdoseTrochners'], translate=>sub{ if ($input eq 1) {return 1;} else {return 'cancel' ;} },
Kommentar
Kommentar