[gelöst] Frage zu "sleep device:event"

Begonnen von AnBad, 14 Dezember 2022, 19:36:52

Vorheriges Thema - Nächstes Thema

AnBad

Hallo,

laut commandref ist es ja möglich ein sleep command statt mit einer Zeit in Sekunden mit einem regex zu erstellen.

Soweit funktioniert das auch bei mir.

Aber wie erstellt mein eine sleep in der Form:

sleep device:reading:event

?

Das bekomme ich leider nicht hin, bzw. bin mir nicht sicher, ob es funktioniert, was ich soweit gemacht habe. Das sleep legt ja kein Device an, so dass ich es kontrollieren könnte. Könnte mir jemand bitte helfen?

Vielen Dank und schönen Abend!!

Otto123

#1
Hi,

das geht analog notify Suchmuster, Du kannst den Event im Eventmonitor nehmen und Dir ein notify erzeugen lassen. Das gleiche Suchmuster kannst Du auch bei sleep nehmen.

Wenn Du einen Namen angibst bekommst Du auch ein device, welches Du anzeigen kannst :) (zumindest mit cancel)
Beispiel:
sleep ZADONIXS1:smbRunning:.1 waitZADONIXS1; set st_Rechner on

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

AnBad

OK,
vielen Dank, dass muss ich mit Suchmuster entsprechend einem notify testen.
Das Möglichkeit mit einem Namen und cancel habe ich auch verstanden.
Was meinst Du jedoch mit Anzeigen und Cancel, das versteht ich nicht.
Viele Grüße

Otto123

einfach cancel in der Kommandozeile listet Dir die aktiven sleep's - ok auch die ohne Namen :)
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

AnBad

Hallo,
funktioniert, prima!! Auch das Anzeigen mit "cancel".
Vielen Dank und schönes WE!

mediastudio

define Pumpen_intervall_2 notify di_pump:.* {\
    my $handauto_2 = Value("Pumpen_intervall_H_A");;\
    if ($handauto_2 eq "on") \
    {fhem ("set PV_Steckdose_5 on ")}\
    if ($handauto_2 eq "off") \
    {fhem ("sleep 15;; set PV_Steckdose_5 off")}\


mediastudio

Hallo,
Ich möchte "sleep" nicht mit einem festen Wert sondern mit einer Variablen versehen.
{fhem ("sleep Value("P_weckzeit");; set PV_Steckdose_5 off")}\
Leider funktioniert das nicht, wer könnte mir da helfen.

Das funktioniert:
define Pumpen_intervall_2 notify di_pump:.* {\
    my $handauto_2 = Value("Pumpen_intervall_H_A");;\
    if ($handauto_2 eq "on") \
    {fhem ("set PV_Steckdose_5 on ")}\
    if ($handauto_2 eq "off") \
    {fhem ("sleep 15;; set PV_Steckdose_5 off")}\
}

Otto123

#7
Moin,

der sleep Befehl selbst braucht die Zeit im Format wie es in der commandref steht. Du kannst diese vorher auslesen und die Variable wird im Befehl aufgelöst. (ungetestet)
Edit: beim nachlesen festgestellt:
Das ist falsch:
{my $sleep_time=fhem ("Value('P_weckzeit')");; fhem ("sleep $sleep_time;; set PV_Steckdose_5 off")}Das wäre syntaktisch richtig:
{my $sleep_time=Value('P_weckzeit');; fhem ("sleep $sleep_time;; set PV_Steckdose_5 off")}

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

mediastudio

Hallo Otto,
es sollte ganz einfach nur ein Zeitschalter sein, der eine Pumpe (Pumpe für Durchfluss Solarmatten Pool)
nach Vorgabe einer Zeit immer EIN und AUS schalten. Ich habe das mal getestet, leider noch keinen Erfolg. Die Steckdose wird Eingeschaltet und im gleichen Moment wieder Aus. Sleep wird so nicht abgewartet.

Funktion der Schaltung: Wenn der HAND/AUTO Schalter auf Hand steht dann kann die Pumpe vorab eingeschaltet werden oder bei dem nächsten Interval vom Taktgeber, die Pumpe läuft dann immer.
Wenn der HAND/AUTO Schalter auf Automatik steht schaltet die Pumpe nach der vorgegebenem Zeit.
Der Zeit für "hdi_pump DOIF ([00:01-23:59,+00:00:30])" soll auch noch über eine variable  vordefinierbar sein dieser Wert ist immer doppelt so hoch wie der "Sleep Abschaltwert".

Ich gebe hier mal meinen Code.

##############################
# Taktgeber Zeit in Minuten  #
##############################
define di_pump DOIF ([00:01-23:59,+00:00:30])(set PV_Steckdose_5 on-for-timer 5)
attr di_pump do always
attr di_pump room PUMPE


######################################################
# Steckdose Pumpe interval Zeitgesteuert EIN und AUS #
######################################################
define PV_Steckdose_5 dummy
attr PV_Steckdose_5 alias Steckdose Pumpen intervall
attr PV_Steckdose_5 devStateIcon on:power.on off:power.off
attr PV_Steckdose_5 group Powerline 5
attr PV_Steckdose_5 icon funk_steckdose.png
attr PV_Steckdose_5 room PUMPE
attr PV_Steckdose_5 setList on off
attr PV_Steckdose_5 userReadings http {sonoff_http("192.168.10.152" ,ReadingsVal("PV_Steckdose_5","state","0") =~/^on/?1:0)}

#############################################
#####    Vorgabe Wert für Sleep    ##########
#############################################
define Impuls_Zeit dummy
attr Impuls_Zeit alias Vorgabe Wert für Sleep
#attr Impuls_Zeit cmdState warten|alarm
attr Impuls_Zeit readingList P_zeit
attr Impuls_Zeit room PUMPE
attr Impuls_Zeit setList P_zeit:0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50,55,60
attr Impuls_Zeit webCmd P_zeit


#########################################
# Pumpen intervall HAND / AUTO #
#########################################
define Pumpen_intervall_H_A dummy
attr Pumpen_intervall_H_A alias HAND / AUTO
attr Pumpen_intervall_H_A devStateIcon on:power.on off:power.off
attr Pumpen_intervall_H_A group Pumpen intervall
#attr Pumpen_intervall_H_A icon eco-touch-pro.png
attr Pumpen_intervall_H_A room PUMPE
attr Pumpen_intervall_H_A setList off on

define Pumpen_intervall_2 notify di_pump:.* {\
    my $handauto_2 = Value("Pumpen_intervall_H_A");;\
    my $sleep_time=fhem ("Value('P_zeit')");;\
    if ($handauto_2 eq "on") \
    {fhem ("set PV_Steckdose_5 on ")}\
    if ($handauto_2 eq "off") \
    {fhem ("sleep $sleep_time;; set PV_Steckdose_5 off")}\



Otto123

#9
Hi,

Value() liest den Wert von STATE aus, Du setzt aber ein Reading. Du musst es so auslesen, falls ich es richtig verstanden habe:
ReadingsNum('Impuls_Zeit','P_zeit',5)https://fhem.de/commandref.html#perl

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

mediastudio

Hallo Otto,
super, der Hinweis "ReadingsNum('Impuls_Zeit','P_zeit',5)" war Gold richtig.
Ich habe es nun in "my $sleep_time= ReadingsVal("Impuls_Zeit","P_zeit","0")" geändert und nun funktioniert es.
Hier mal der Code der jetzt läuft:

define Pumpen_intervall_2 notify di_pump:.* {\
    my $handauto_2 = Value("Pumpen_intervall_H_A");;\
    my $sleep_time= ReadingsVal("Impuls_Zeit","P_zeit","0");;\
    if ($handauto_2 eq "on") \
    {fhem ("set PV_Steckdose_5 on ")}\
    if ($handauto_2 eq "off") \
    {fhem ("sleep $sleep_time;; set PV_Steckdose_5 off")}\


Besten Dank.

Otto123

und warum die Zahl mit ReadingsVal() ?  ::)
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

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

mediastudio

Hallo,
ich kann nur sagen das ich alles andere ausprobiert habe, sleep funktioniert bei mir jetz in der Form.
Alles andere hat die Steckdose eingeschaltet aber dann nicht AUS und der andere Fall Steckdose schaltet EIN
und sofort wieder AUS. Das der restliche Code ansonsten funktionsfähig war, zeigte sich wenn ich vorab sleep mit einem
Wert belegte. Nun mir ist damit geholfen da es Funktioniert.
Ich bin begeistert und danke nochmal für die Hilfe.

Ich bin jetzt an einer neuen Aufgabe "Ring Doorbell" ich brauche den Stream auf meinem Server, ob das mit FHEM so möglich ist,
habe ich noch nicht rausbekommen. ich habe noch nicht alles gelesen.

Otto123

Dann probiere doch bitte mal in der FHEM Kommandozeile folgende Befehle aus. Ich kann mir nicht vorstellen, dass beide Konstrukte unterschiedliche Werte liefern:
{ReadingsNum('Impuls_Zeit','P_zeit',5)}{ReadingsVal("Impuls_Zeit","P_zeit","0")}{ReadingsVal("Pumpen_intervall_H_A",'state','Error')}{Value("Pumpen_intervall_H_A")}Wenn ich richtig liege, wirst Du irgendwann drauf kommen, warum die Empfehlung doch besser ist als Deine Variante.  ;) 
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