Zitat von tger977
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Neues Plugin: Logikprozessor.pl
Einklappen
X
-
Hallo,
ich steh irgendwie grad auf dem Schlauch. Ich möchte eine Resetbedingung für meine Lüftung erstellen die genau dann greift wenn keine Präsenz erkannt ist (--> input0 oder 1 ==0) und die Lüfter nicht den Status 7 haben (input 2). Falls irgendein anderer Status kommt möchte ich den delay Trigger resetieren.
Wie kann ich in der Sub Anweisung dies korrekt abfragen und im Falle aller anderen Kombinationen dann den delay Timer immer über "cancel" resetieren?
Bisheriger Versuch:
Code:LueftungEGKuecheAUTOohnePraesenz => {receive=>['7/5/4','7/5/3','8/1/1'], transmit=>['8/1/2','8/1/1'], delay=>1800, translate=>sub{return 0 if int($input->[0]==0 || $input->[1]==0 && $input->[2]!=7), return "cancel"}, debug=>1},
Gruß
AndiGruß
Andi
Kommentar
-
Zitat von tger977 Beitrag anzeigenWie kann ich in der Sub Anweisung dies korrekt abfragen und im Falle aller anderen Kombinationen dann den delay Timer immer über "cancel" resetieren?
- das "int()" muss um die einzelnen Werte, nicht um den ganzen boolschen Ausdruck (rote Klammer)
- ich habe den boolschen Ausdruck nochmal separat (blau) geklammert, damit klar wird, wie "||" und "&&" zusammenspielen
- lass dir mit plugin_log() die Eingangswerte ins Log schreiben
Code:LueftungEGKuecheAUTOohnePraesenz => {receive=>['7/5/4','7/5/3','8/1/1'], transmit=>['8/1/2','8/1/1'], delay=>1800, translate=>sub{ plugin_log($plugname, "input0: ".$input->[0]); return 0 if ([COLOR="blue"][B]([/B][/COLOR][B][COLOR="Red"]int([/COLOR][/B]$input->[0][COLOR="red"][B])[/B][/COLOR]==0 || int($input->[1])==0[COLOR="Blue"][B])[/B][/COLOR] && int($input->[2])!=7), return "cancel"}, debug=>1},
Micha
Kommentar
-
Zitat von Wookie81 Beitrag anzeigenIch kenn mich jetzt mit diesem Perl-Zeug nicht so aus, aber ist
Code:, return "cancel"
Richtig sollte also sein:
Code:LueftungEGKuecheAUTOohnePraesenz => {receive=>['7/5/4','7/5/3','8/1/1'], transmit=>['8/1/2','8/1/1'], delay=>1800, translate=>sub{ plugin_log($plugname, "input0: ".$input->[0]); return 0 if ((int($input->[0])==0 || int($input->[1])==0) && int($input->[2])!=7); return "cancel";}, debug=>1},
Micha
Kommentar
-
string an timer übergeben?
Hallo,
da mich immer noch nicht eine überschaubare Lösung für eine zeitgesteuerte Logik in Abhängigkeit vom Sonnenaufgang / -untergang +- x Minuten interessiert, habe ich mir in die conf-Datei eine Subroutine eingebaut, welche mir eine entsprechende Zeitangabe der Form hh:mm zurückgibt.
Gibt es eine Möglichkeit, ein solches string-Konstrukt einem timer mitzugeben?
...timer=>{'&sonnUntergang(x)'}... anstatt ...timer=>{'19:13'}...
wobei hier das x für die Abweichung in Minuten vom Sonnenuntergang steht.Viele Grüße Jens
Kommentar
-
Bash Scriptaufruf
Hallo!
wie kann ich vom Logikprozessor aus ein Bash-Script aufrufen, sobald auf eine GA ein bestimmter Wert ankommt? In Pseudocode:
Code:run_script => { receive=>'0/7/1', _system_call_ => sub { if(defined $input && int($input) == 1) { system '/bin/bash /usr/local/bin/myscript &'; } else {return undef;}}, debug=>1, },
Unter welchem Benutzer würde ein derart aufgerufenes Script eigentlich laufen? Root?"Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren." - Benjamin Franklin
Kommentar
-
Zitat von wuestenfuchs Beitrag anzeigenIm Klartext: Sobald auf der 0/7/1 eine "1" ankommt, soll das Script ausgeführt werden.
Code:my $command = "net rpc SHUTDOWN -C \"Feierabend!\" -f -I ".$ip_address." -U ".$user."%".$password; my $status = system($command);
Zitat von wuestenfuchs Beitrag anzeigenUnter welchem Benutzer würde ein derart aufgerufenes Script eigentlich laufen? Root?
VG
Micha
Kommentar
-
Wert von einer GA empfangen und auf anderer GA senden
Moin zusammen,
versuch nun schon seit einiger Zeit eine Lösung für oben genanntes Problem zu finden.
Dachte mir der Logikprozessor hätte da was passendes auf Lager, aber irgendwie klappt das bei mir alles nicht.
Muss dazu gestehen das ich, was Plugins angeht, noch recht jungfräulich bin
Habe den aktuellen Logikprozessor aus dem SVN in das Verzeichnis kopiert und die GA´s sind auch importiert.
Hab dann ein paar Sachen ausprobiert:
Treppenlicht:
stair => { receive=>'3/4/25', transmit=>'3/7/55', delay=>1, translate => $input, },
multiplizieren:
mal1 => { receive=>'3/4/25', transmit=>'3/7/55', translate => sub { 2*$input; }, },
Als Hintergrund für die Funktion:
Der BMS Aktor MCU-06 sendet keine Rückmeldung über die Positionen. Nun wollte ich mit einem Infotrigger (CV) die Lamellenverstellung machen. Dies funktioniert aber wohl nur, wenn ich auf "Info" die aktuelle Position habe.
Für Tips oder andere Anregungen wie ihr es mit der Lamellenverstellung gelöst habt, wäre ich sehr dankbar!
Gruß
Kay
Kommentar
-
Zitat von Litze Beitrag anzeigenversuch nun schon seit einiger Zeit eine Lösung für oben genanntes Problem zu finden.
...
Als Hintergrund für die Funktion:
Der BMS Aktor MCU-06 sendet keine Rückmeldung über die Positionen. Nun wollte ich mit einem Infotrigger (CV) die Lamellenverstellung machen. Dies funktioniert aber wohl nur, wenn ich auf "Info" die aktuelle Position habe.
Versuch es bitte mal noch etwas klarer zu beschreiben.
VG
Micha
Kommentar
-
Zitat von mivola Beitrag anzeigenVersuch es bitte mal noch etwas klarer zu beschreiben.
Ich gebe meinem Raffstore einen Wert für die Lamellenverstellung vor.
Z.B. 1/2/3 - DPT 5.001 - 50%
Nun fährt dieser die Position an, meldet diese mir aber nicht, sondern nur "Position erreicht" auf GA 1/3/1 - 1
Nun würde ich am liebsten folgende Logic haben:
GA 1/2/3 sendet 50% -> GA 1/3/1 meldet position erreicht => Logik sendet auf GA 1/2/4 50% (als Rückmeldung)
Meine erste Überlegung war einfach nach dem senden auf GA 1/2/3 - 50% eine Rückmeldung von der Logik auf GA 1/2/4 zu haben.
So kann ich dann in der Visu anzeigen lassen auf welche Position die Lamellen oder auch Rollläden (hab beides) gerade sind.
Kommentar
-
Zitat von Litze Beitrag anzeigenIch versuche es mal:
Ich gebe meinem Raffstore einen Wert für die Lamellenverstellung vor.
Z.B. 1/2/3 - DPT 5.001 - 50%
Nun fährt dieser die Position an, meldet diese mir aber nicht, sondern nur "Position erreicht" auf GA 1/3/1 - 1
Nun würde ich am liebsten folgende Logic haben:
GA 1/2/3 sendet 50% -> GA 1/3/1 meldet position erreicht => Logik sendet auf GA 1/2/4 50% (als Rückmeldung)
Meine erste Überlegung war einfach nach dem senden auf GA 1/2/3 - 50% eine Rückmeldung von der Logik auf GA 1/2/4 zu haben.
So kann ich dann in der Visu anzeigen lassen auf welche Position die Lamellen oder auch Rollläden (hab beides) gerade sind.
Code:lamelleStatus => { trigger=>['1/2/3', '1/3/1==1', 'within 10s', 'all_in_order'], fetch=>'1/2/3', transmit=>'1/2/4', translate=>sub{$input}, debug=>1},
- mit fetch holst du dir den zuletzt auf 1/2/3 gesendeten Wert in die $input-Variable
- diesen Wert gibst du dann durch translate wieder auf der transmit-Adresse aus
Schau mal ob es funktioniert. Das ganze ist natürlich ungetestet ;-)
VG
Micha
Kommentar
Kommentar