set_Exec() und mehrere Geräte schalten

Begonnen von Sirel, 09 Oktober 2023, 00:18:50

Vorheriges Thema - Nächstes Thema

Sirel

Hallo zusammen,
ich bekomme es nicht hin, bei der Nutzung des internen Timers im Perl Modus zwei Geräte gleichzeitig zu schalten.

Die Zeile sieht so aus:

{
set_Exec("$DEVICE_timer",'$count == 0 ? 300: (300/$count)','fhem_set ("xxxtelegram message ".::com_control." ".::AttrVal("$DEVICE","alias",""). " ist noch offen")', '$count < 9'); set_State("cmd_1",0)
}

Ich würde gerne noch eine Nachricht über den MQTT Broker verschicken, nachdem die Telegram Nachricht raus ist. Wie bekomme ich das hin. Bisher habe ich es nur hinbekommen, dass der MQTT Aufruf noch mit an der Nachricht hang, oder ich habe Fehlermeldungen produziert.

Vielen Dank vorab und Grüße,
Max

Damian

Du hast hier einen Block definiert. Dieser wird erst dann ausgeführt, wenn ein Trigger zuschlägt. Ich sehe in deinem Block aber keine Triggerangaben.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sirel

#2
Hi Damian,
den Trigger habe ich im Posting weggelassen. Wenn das Fenster offen ist, wird der Ausführungsblock he triggert.
Der Block funktioniert dank Deiner Hilfe auch tadellos.

< Fenster wurde geöffnet >
{
if (["^FTK_:open|255"] and AttrVal("$DEVICE","room","") !~ /Garage|Garten/ and [rgr_Bewohner] !~ /gotosleep/)
{
set_Exec("$DEVICE_timer",'$count == 0 ? 300: (300/$count)','fhem_set ("xxxtelegram message ".::com_control." ".::AttrVal("$DEVICE","alias",""). " ist noch offen")', '$count < 9'); set_State("cmd_1",0)
}
}

< Fenster wurde geschlossen >
{
if (["^FTK_:clos(e|ed)|0"] and AttrVal("$DEVICE","room","") !~ /Garage|Garten/)
{
del_Exec("$DEVICE_timer")
}
}

Jetzt wollte ich aber, wenn der trigger auslöst, neben der telegram Nachricht noch eine Message per MQTT verschicken.
Ich weiß nur nicht wie ich das in den Block bewerkstellige?

Beste Grüße und besten Dank vorab,
Max

Damian

Das ist der Befehl, der ausgeführt wird:

'fhem_set ("xxxtelegram message ".::com_control." ".::AttrVal("$DEVICE","alias",""). " ist noch offen")'
dort kannst du noch andere Perl-Funktionen einfügen:

'mqttsenden ("bla bla");fhem_set ("xxxtelegram message ".::com_control." ".::AttrVal("$DEVICE","alias",""). " ist noch offen")'
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sirel

Hi Damian,
wie immer besten Dank.
Eine Verständnisfrage habe ich aber noch:
Warum kommt in diesem Beispiel mqttsenden ohne ein fhem_set aus?

Ich hatte das Wiki so verstanden, dass fhem_set das eigentlich >Set< MQTT publish Blabla" ersetzt?

Besten Dank vorgab und schönes Wochenende,
Max

Damian

Es war ja nur ein allgemeines Beispiel für eine Perlfunktion "mqttsenden", die man zuvor definiert haben muss.

Du kannst natürlich fhem_set ("MQTT publish blabla") statt mqttsenden ("blabla") schreiben.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF