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:
Danke...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
-
Ungetestet, aber mit Erklärungsversuch: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
VGCode: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
-
Danke für den Hinweis, das ist mir gar nicht aufgefallen. So geht das natürlich auch nicht. das "return cancel" ist eine neue Anweisung, die nur ausgeführt wird, falls das vorherige "if" nicht true ist (denn sonst wäre die sub ja schon beendet).Zitat von Wookie81 Beitrag anzeigenIch kenn mich jetzt mit diesem Perl-Zeug nicht so aus, aber ist
der else Zweig oder eine Antwort für die zweite Transmit Adresse? Zweiteres geht so weit ich weiß nicht, es wird immer der gleiche Wert an alle Adresse versendet.Code:, return "cancel"
Richtig sollte also sein:
VGCode: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:
Im Klartext: Sobald auf der 0/7/1 eine "1" ankommt, soll das Script ausgeführt werden.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
-
Ich habe mal sowas ähnliches (allerdings außerhalb des Logikprozessors) gemacht: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);
Das kann ich dir leider nicht sagen - ich denke aber eher nicht...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
-
Ich verstehe noch nicht so recht, was du nun eigentlich wirklich machen willst? Was ist denn das "oben genannte Problem"? Meinst du "Wert von einer GA empfangen und auf anderer GA senden"? Was hat das aber mit der Lamellenverstellung zu tun?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
-
Ich versuche es mal: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
-
OK, ich versuche es mal: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.
- mit dem trigger sagst du, du erwartest einen beliebigen Wert auf 1/2/3 und eine 1 auf 1/3/1. Und zwar in genau dieser Reihenfolge und innerhalb von 10 Sekunden.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