FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: martin2day am 01 Februar 2017, 10:01:42

Titel: define xxx at funktioniert nicht
Beitrag 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
Titel: Antw:define xxx at funktioniert nicht
Beitrag von: digiart am 01 Februar 2017, 10:13:34
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")
}
Titel: Antw:define xxx at funktioniert nicht
Beitrag von: Amenophis86 am 01 Februar 2017, 12:14:04
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.
Titel: Antw:define xxx at funktioniert nicht
Beitrag von: dev0 am 01 Februar 2017, 12:28:43
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"?
Titel: Antw:define xxx at funktioniert nicht
Beitrag von: Otto123 am 01 Februar 2017, 12:37:31
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
Titel: Antw:define xxx at funktioniert nicht
Beitrag von: Amenophis86 am 01 Februar 2017, 13:02:52
alternativ könnte man mit einem sleep arbeiten, wenn es sich nur um 5 Sekunden handelt. Um mal eine Alternative zu nennen :)
Titel: Antw:define xxx at funktioniert nicht
Beitrag 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
Titel: Antw:define xxx at funktioniert nicht
Beitrag von: Amenophis86 am 01 Februar 2017, 13:32:57
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
Titel: Antw:define xxx at funktioniert nicht
Beitrag von: Otto123 am 01 Februar 2017, 14:20:35
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