DOIF, Ausführungen mit unterschiedlichen Bedingungen

Begonnen von Knallfrosch, 27 Oktober 2025, 00:53:02

Vorheriges Thema - Nächstes Thema

Knallfrosch

Hallo,

ich nutze folgendes DOIF:

([3D_Drucker:ENERGY_Power] > 100)
(setreading 3D_Drucker_Zustand status 3D-Druck läuft)
DOELSEIF ([3D_Drucker:ENERGY_Power] < 20)
(setreading 3D_Drucker_Zustand status 3D-Druck beendet)
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542)
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542)

Soweit so gut!

Nun würde ich aber gerne den 2. und 3. Set-Befehl des DOELSEIF nur ausführen, wenn die Uhrzeit ([06:00-23:00]) ist.

Wie kann ich das realisieren?

([3D_Drucker:ENERGY_Power] > 100)
(setreading 3D_Drucker_Zustand status 3D-Druck läuft)

DOELSEIF ([3D_Drucker:ENERGY_Power] < 20)
(setreading 3D_Drucker_Zustand status 3D-Druck beendet)
([06:00-23:00])
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542)
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542)

Funktioniert natürlich nicht!


Danke für die Hilfe.


Grüße



rabehd

Ernsthaft?
Ich sehe da schon zu Beginn in der Commander Beispiele.

Warum mischt Du Bedingungen und Ausführung?
Auch funktionierende Lösungen kann man hinterfragen.

Per

Du kannst in den Commands IF verwenden. Sonst müsstest du 3 Bedingungen nutzen und die Commands wiederholen, wäre mMn nicht so elegant.
Oder Perl Mode nehmen.

Knallfrosch

#3
Zitat von: rabehd am 27 Oktober 2025, 05:33:39Ernsthaft?
Ich sehe da schon zu Beginn in der Commander Beispiele.

Warum mischt Du Bedingungen und Ausführung?

Ernsthaft?
Ich sehe da schon zu Beginn nur das Ziel "zeigen, welch toller Hecht" man ist".

Warum sparst du dir die Antwort nicht, wenn du nicht bereit bist ordentlich zu helfen?


Zitat von: Per am 27 Oktober 2025, 07:30:42Du kannst in den Commands IF verwenden. Sonst müsstest du 3 Bedingungen nutzen und die Commands wiederholen, wäre mMn nicht so elegant.
Oder Perl Mode nehmen.

Danke für den Denkanstoss, aber ich bekomme das nicht umgesetzt.

([3D_Drucker:ENERGY_Power] > 50)
(setreading 3D_Drucker_Zustand status 3D-Druck läuft)

DOELSEIF ([3D_Drucker:ENERGY_Power] < 20)
(setreading 3D_Drucker_Zustand status 3D-Druck beendet)
IF ([06:00-23:00] eq "true")
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542-247e-4ae4-966f-ac0295396bcd)
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542-247e-4ae4-966f-ac0295396bcd)

Funktioniert nicht!


Also, falls jemand bereit ist mir zu helfen......

Danke im Voraus.



Grüße



PS: Wenn ich eine Lösung hätte oder den Fehler finden würde, würde ich nicht Fragen.  ;)

rabehd

Zitat von: Knallfrosch am 27 Oktober 2025, 10:46:36Warum sparst du dir die Antwort nicht, wenn du nicht bereit bist ordentlich zu helfen?
Was meinst Du mit ordentlich?
Ich habe Dir einen konkreten Hinweis zur Commadref gegeben.
Ich habe Dir gesagt was ich für falsch finde.

DOELSEIF ([3D_Drucker:ENERGY_Power] < 20)
(setreading 3D_Drucker_Zustand status 3D-Druck beendet)
IF ([06:00-23:00] eq "true")
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542-247e-4ae4-966f-ac0295396bcd)
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542-247e-4ae4-966f-ac0295396bcd)
Das wird NIE funktionieren.
Was willst Du?
Zitat(setreading 3D_Drucker_Zustand status 3D-Druck beendet)
und nur tagsüber kommt Alexa ins Spiel ? In dem Fall fehlt eine Klammer (auf und zu).
Grundsätzlich gilt: Bedigungen prüfen -> ToDo
Wenn Du IF in die Ausführung bringst (was möglich ist) dann gehört da auch die in DOIF üblich Klammer drum.
Auch funktionierende Lösungen kann man hinterfragen.

Damian

Also, IF funktioniert nicht mit Zeitangaben. Um mal konkreter zu werden: Du fügst einen weiteren DOELSEIF-Zweig hinzu und verknüpfst die Zeit mit "and" mit deinem ENERGY-Power-Vergleich.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF