Hallo zusammen,
ich sitze gerade über der Optimierung (Geschwindigkeit) meiner SPS Funktionen.
Ich habe ein Dummy Licht_Sofa was ein und ausgeschaltet werden kann.
Beim Einschalten des dummys möchte ich, dass für 5s das Device S7Licht_Sofa_ein angesteuert wird.
Leider funktioniert on-for-timer nicht, da wie ich gelesen habe das Attribut follow-on-for-timer fehlt.
Also habe ich versucht das ganze über define xxx at zu lösen.
Hier mein notify:
Licht_Sofa {
fhem ("set S7Licht_Sofa_ein on ;; define a1 at +00:00:05 set S7Licht_Sofa_ein off")
}
Beim Einschalten von Licht_Sofa wird S7Licht_Sofa auch eingeschaltet, aber es wird nicht nach 5s ausgeschaltet.
Wo liegt das Problem?
Im Event Monitor sehe ich nur zum Zeitpunkt des einschalten von Licht_Sofa einen Eintrag. Es wird also nicht immer wieder zyklisch ausgelöst.
Danke für die Hilfe.
Gruß Martin
Und wie sieht es aus, wenn du die Befehle einzeln "verpackst"?
Licht_Sofa {
fhem("set S7Licht_Sofa_ein on") ;; fhem("define a1 at +00:00:05 set S7Licht_Sofa_ein off")
}
Wir denn das at angelegt? Zum Testen ruhig mal die Zeit länger machen um testen zu können, ob es angelegt wird.
Frage mich auch gerade, ob bei einer Perl Anweisung in "" die doppelten ; gebraucht werden.
ZitatFrage mich auch gerade, ob bei einer Perl Anweisung in "" die doppelten ; gebraucht werden.
Auf der command line bzw. über telnet ja, im DEF Editor nicht.
Ein sleep ist an der Stelle aber sinnvoller, da FHEM sonst auch zum Speichern der Konfig auffordert. Perl ist auch nicht notwendig.
defmod n notify Licht_Sofa:on set S7Licht_Sofa_ein on;; sleep 5;; set S7Licht_Sofa_ein off
Heißt das Device, das geschaltet werden soll wirklich "S7Licht_Sofa_ein"?
Zitat von: martin2day am 01 Februar 2017, 10:01:42
Hallo zusammen,
ich sitze gerade über der Optimierung (Geschwindigkeit) meiner SPS Funktionen.
Ich habe ein Dummy Licht_Sofa was ein und ausgeschaltet werden kann.
Beim Einschalten des dummys möchte ich, dass für 5s das Device S7Licht_Sofa_ein angesteuert wird.
Leider funktioniert on-for-timer nicht, da wie ich gelesen habe das Attribut follow-on-for-timer fehlt.
Also habe ich versucht das ganze über define xxx at zu lösen.
Hier mein notify:
Licht_Sofa {
fhem ("set S7Licht_Sofa_ein on ;; define a1 at +00:00:05 set S7Licht_Sofa_ein off")
}
Beim Einschalten von Licht_Sofa wird S7Licht_Sofa auch eingeschaltet, aber es wird nicht nach 5s ausgeschaltet.
Wo liegt das Problem?
Im Event Monitor sehe ich nur zum Zeitpunkt des einschalten von Licht_Sofa einen Eintrag. Es wird also nicht immer wieder zyklisch ausgelöst.
Danke für die Hilfe.
Gruß Martin
Hi Martin,
habe das gerade nachgestellt mit zwei dummys, funktioniert beim mir so:
define nty_Licht_Sofa notify Licht_Sofa {fhem ("set S7Licht_Sofa_ein on ;; define a1 at +00:00:05 set S7Licht_Sofa_ein off")}
Ich bin immer vorsichtig mit strukturierenden Zeilenumbrüchen, vor allem am DEF Ende - allzuoft geht es dann einfach nicht.
Sinnvoll ist diese notify allerdings so nicht!
Gruß Otto
alternativ könnte man mit einem sleep arbeiten, wenn es sich nur um 5 Sekunden handelt. Um mal eine Alternative zu nennen :)
Hallo zusammen,
vielen Dank für die viele Hilfe.
1. In meinem Code ist der Fehler das doppelte ;;, einfach funktioniert es.
2. Die Anweisung mit dem sleep sieht noch einfacher aus und man muss auch nicht zw. fhem und perl hin und her springen.
Aber auch hier funktioniert der Code bei mir nur wenn ich die einfachen ; nutze.
Gruß Martin
Bei einem sleep musst du allerdings beachten, es gibt das Perl Sleep und das FHEM Sleep. Perl blockiert FHEM für den Sleep Zeitraum, wo hingegen das FHEM Sleep nicht blockiert, wenn sich daran eine weitere Anweisung schließt. http://fhem.de/commandref_DE.html#sleep
Zitat von: martin2day am 01 Februar 2017, 13:19:39
Hallo zusammen,
vielen Dank für die viele Hilfe.
1. In meinem Code ist der Fehler das doppelte ;;, einfach funktioniert es.
2. Die Anweisung mit dem sleep sieht noch einfacher aus und man muss auch nicht zw. fhem und perl hin und her springen.
Aber auch hier funktioniert der Code bei mir nur wenn ich die einfachen ; nutze.
Gruß Martin
Hallo Martin,
ein ; trennt die Befehle. Beim define in der Kommandozeile muss man es "schützen" in dem man ;; schreibt. Damit landet eines davon wirklich in der DEF.
Also so wie ich es geschrieben habe ist es richtig, wenn Du deine DEF anschaust ist dann genau eins drin.
Mit dem zweiten ; wird nämlich dieser Befehl an S7Licht_Sofa_ein gesendet
on ; define a1 at +00:00:05 set S7Licht_Sofa_ein off
Kann man mit einem dummy schön sehen.
Wobei der ganze Overhead mit fhem und den Klammern in dem Fall völlig überflüssig ist, es reicht:
DEF
Licht_Sofa set S7Licht_Sofa_ein on ; define a1 at +00:00:05 set S7Licht_Sofa_ein off
Du bist und bleibst in fhem, du musst nicht auf perl Ebene wechseln um dann wieder auf fhem zu gehen.
Gruß Otto