define xxx at funktioniert nicht

Begonnen von martin2day, 01 Februar 2017, 10:01:42

Vorheriges Thema - Nächstes Thema

martin2day

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

digiart

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")
}
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

Amenophis86

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.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

dev0

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"?

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Amenophis86

alternativ könnte man mit einem sleep arbeiten, wenn es sich nur um 5 Sekunden handelt. Um mal eine Alternative zu nennen :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

martin2day

#6
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

Amenophis86

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
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Otto123

#8
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz