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)
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542)

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

Knallfrosch

#6
Leider bin ich auch mit folgenden Versuchen erfolglos:


([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 [16:00-23:00])
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542)
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542)

Obwohl aktuell vor 16 Uhr startet die Alexa-Routine.

Ok, @Damian schrieb das IF nicht mit Zeitangabe funktioniert....also auch folgendes getestet:

([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)
DOELSEIF ([3D_Drucker:ENERGY_Power] < 20 and [06:00-23:00])
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542-)
(set ECHO_G090U607835206H1 routine_play fhemprintend@amzn1.alexa.automation.d0aa3542)

Dann startet allerdings, obwohl die aktuelle Zeit im Zeitfenster 06-23 liegt, die Routine nicht.


Irgendwie checke ich meinen Fehler nicht.
Und auch die Beispiele die es im Wiki/commandref gibt, helfen mir nicht.


Grüße

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

Knallfrosch

Zitat von: rabehd am 27 Oktober 2025, 15:00:24und im welchem Zweig bist Du gelandet?

Naja, wenn ich das richtig verstanden habe endet die Bearbeitung am Ende des ersten DOELSIF, also nach
DOELSEIF ([3D_Drucker:ENERGY_Power] < 20)
(setreading 3D_Drucker_Zustand status 3D-Druck beendet)

Soweit so schlecht.

Aber ich möchte doch im festgelegten Zeitfenster nach dieser Ausführung auch die Alex-Routine starten lassen.


Keine Ahnung!
Diese kurzen Einwürfe helfen mir leider nicht weiter.


Grüße

Damian

#9
Naja, in der Reihenfolge wird es auch nicht funktionieren, denn < 20 trifft ja immer zu, wenn es unter 20 ist, dann kann das Modul nicht mehr zu der zeitbeschränkten Abfrage kommen, daher musst die zeitlich eingeschränkte Bedingung vorziehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF


Nobbynews

Oder auf Nummer sicher gehen, und die Uhrzeit zusätzlich verarbeiten. Dann sollte doch die Reihenfolge der Abfragen egal sein. Oder irre ich mich da?

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

DOELSEIF ([3D_Drucker:ENERGY_Power] < 20 and [?23:00-06:00])
(setreading 3D_Drucker_Zustand status 3D-Druck beendet)

DOELSEIF ([3D_Drucker:ENERGY_Power] < 20 and [?06:00-23:00])
(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)

Knallfrosch

Hallo,

danke!

Ja, ist natürlich ganz klar mit der Reihenfolge der Abfragen.....wenn man drauf gestoßen wird.

Ich habe es jetzt mal so aufgebaut:



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

DOELSEIF ([3D_Drucker:ENERGY_Power] < 20 and [?06:00-23:00])
(setreading 3D_Drucker_Zustand status 3D-Druck beendet)
(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)
DOELSEIF ([3D_Drucker:ENERGY_Power] < 20)
(setreading 3D_Drucker_Zustand status 3D-Druck beendet)

Ich konnte es aber noch nicht testen!
Werde ich aber nachher natürlich noch machen und berichten.


Grüße