Hauptmenü

repeatsame

Begonnen von Gisbert, 31 Dezember 2020, 13:05:59

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo Damian,

gibt es im Ausführungsteil eine Möglichkeit die Ausführung mehrfach, aber unterschiedlich oft auszuführen? repeatsame führt alle Ausführungen gleich oft aus, und es gibt anscheinend nicht sowas repeatsame 2,1,1,...:1:...

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Frank_Huber

Hallo Gisbert,

Das geht pro Zweig: https://fhem.de/commandref_DE.html#DOIF_repeatsame
Aber wenn ich deinen Post richtig verstehe brauchst Du es auch pro Kommando IM Zweig, richtig?
Das geht imho nicht.

Grüße & guten Rutsch
Frank

Gisbert

#2
Zitat von: Frank_Huber am 31 Dezember 2020, 14:05:29
Hallo Gisbert,

Das geht pro Zweig: https://fhem.de/commandref_DE.html#DOIF_repeatsame
Aber wenn ich deinen Post richtig verstehe brauchst Du es auch pro Kommando IM Zweig, richtig?
Das geht imho nicht.

Grüße & guten Rutsch
Frank

Hallo Frank,
ja, das ist richtig.
In der Zwischenzeit habe ich eine Lösung gefunden, die getestet bei mir funktioniert. Ich frage im Ausführungsteil ab, ob cmd_count kleiner als die gewünschte Zahl ist. Das hört sich ohne Beispiel etwas verdrechselt an, ein Beispiel sieht so aus:
defmod Bad.Alarm DOIF (($md le "06-01" or $md ge "09-01") and (0.1*[?Temp.OG:Badezimmer]+1.75*[Temp.OG:Badezimmer:diff20]) <= 0 or [Temp.OG:Badezimmer] < 20.0) \
((set Pushover.Nachricht msg 'Badezimmer' 'Das Fenster im Bad steht wahrscheinlich offen')) \
((set PushNotifier.Nachricht message Badezimmer_Das Fenster im Bad steht wahrscheinlich offen)) \
(set Pushbullet.Nachricht message Das Fenster im Bad steht wahrscheinlich offen | Badezimmer) \
(IF ([$SELF:cmd_count] < 2) (set DLNA_f47b5e48e6d6 channel 5)) \
(IF ([$SELF:cmd_count] < 2) (define temp.TV.exit at +00:00:12 set DLNA_f47b5e48e6d6 stop)) \
DOELSEIF ((0.1*[?Temp.OG:Badezimmer]+1.75*[Temp.OG:Badezimmer:diff20]) > 0 or [Temp.OG:Badezimmer] >= 20.0)
attr Bad.Alarm devStateIcon cmd_1:fts_window_2w_open@red cmd_2:fts_window_2w@gray
attr Bad.Alarm do always
attr Bad.Alarm event_Readings diff20: {round([Temp.OG:Badezimmer:diff20],2)}
attr Bad.Alarm repeatsame 2:1

Damit werden die Push-Nachrichten zweimal aufs Handy geschickt (;) doppelt hält besser, also hier insgesamt 6 Nachrichten, da 3 Dienste bemüht werden ;D), aber auf dem Fernseher kommt die Nachricht nur einmal an. Ich weiß, der Spieltrieb ist mal wieder mit mir durchgegangen.

Viele Grüße Gisbert

PS: Falls jemand noch eine elegantere Lösung einfällt, dann gerne posten.
Edit: Um mögliche, clevere Vorschläge nicht zu verhindern, warte ich noch etwas mit dem [Gelöst] im Eingangs-Thread.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Damian

Wie schon erkannt: repeatsame funktioniert nicht mit Befehlssequenzen.

Ich würde Wiederholungen mit zeitlicher Verzögerung mit set_Exec realisieren. Für Wiederholungen ohne zeitliche Verzögerung, würde ich mir fhem_set_repeat("<Befehl>",<Anzahl) als Perlfunktion basteln. Dafür müsste man DOIF im Perlmodus sinnvollerweise nutzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF