FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: musicnrw am 27 Juli 2023, 07:48:16

Titel: Was ist hier falsch??
Beitrag von: musicnrw am 27 Juli 2023, 07:48:16
Hallo zusammen,
ich zweifle langsam an meinen (zugegebenermaßen beschränkten) FHEM-Kenntnissen.
Ich möchte ein Gerät ausschalten, an den Werktagen zu einer anderen Zeit als am Wochenende. Dazu habe ich folgende Definitionen gemacht:
define RegalWohnzimmer_Werktags_OFF at *22:30:00 {if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5 ) {fhem("set ESPEasy_28 off")} }

define RegalWohnzimmer_Wochenende_OFF at *23:30:00 {if($wday == 6 || $wday == 7 ) {fhem("set ESPEasy_28 off")} }

Nur - es funktioniert nict, es wird nicht ausgeschaltet. Ich finde den Fehler einfach nicht...

Danke für Eure Hilfe!
Thomas
Titel: Aw: Was ist hier falsch??
Beitrag von: rabehd am 27 Juli 2023, 08:16:59
Steht was im Log?
Schaltet der Befehl set ESPEasy_28 off wenn Du ihn über die Befehlzeile eingibst?
Funktioniert das at wenn Du nur einen Wochentag prüfst?

Wie wäre es mit einem List?
Titel: Aw: Was ist hier falsch??
Beitrag von: Beta-User am 27 Juli 2023, 08:21:55
Falsch sind mind. (Doppelt genäht):

- Der Thread-Titel
- "define" gepostet statt list/raw-list/"copy for forum"
- das Verständnis für den korrekten Wertebereich für $wday
- es ist unklar, ob der Ausführungsteil nie klappt (Syntaxproblem?) oder ob es (im log?) weitere Hinweise gibt?

Sonstiges:
- "Werktag" und "Wochenende" wäre ggf. besser mit !$we bzw. $we abzugrenzen (holiday2we)
- WeekdayTimer wäre eine weitere Option, das "in einem" zu notieren.
Titel: Aw: Was ist hier falsch??
Beitrag von: rabehd am 27 Juli 2023, 08:58:40
Wenn wir bei Alternativen sind, ich finde das komplett im einem DOIF am Besten.
Titel: Aw: Was ist hier falsch??
Beitrag von: musicnrw am 27 Juli 2023, 09:58:14
Hallo,
danke an die, die konstruktive Vorschläge machen.
set ESPEasy_28 off in der Eingabezeile funktioniert.

Das verrückte ist, dass ich die Zeile quasi kopiert habe aus der Definition für ein anderes Gerät und nur die Zeit-, Wochentags- und Gerätedefinitionen angepasst habe.

Und wie würde das "komplett in einen DOIF" aussehen?
Titel: Aw: Was ist hier falsch??
Beitrag von: Beta-User am 27 Juli 2023, 12:24:14
Danke für die freundliche Rückmeldung...

Nochmal zum debuggen: copy for forum wirft bei mir das hier aus:
define RegalWohnzimmer_Werktags_OFF at *22:30:00 {if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5 ) {fhem("set ESPEasy_28 off")} }
#  COMMAND    {if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5 ) {fhem("set ESPEasy_28 off")} }
#  DEF        *22:30:00 {if($wday == 1 || $wday == 2 || $wday == 3 || $wday == 4 || $wday == 5 ) {fhem("set ESPEasy_28 off")} }
#  FUUID      64c24452-f33f-d171-974e-2e8e05d08c10ef59
#  NAME      RegalWohnzimmer_Werktags_OFF
#  NR        22679
#  PERIODIC  yes
#  RELATIVE  no
#  REP        -1
#  STATE      Next: 22:30:00
#  TIMESPEC  22:30:00
#  TRIGGERTIME 1690489800
#  TRIGGERTIME_FMT 2023-07-27 22:30:00
#  TYPE      at
#  eventCount 1
#  .attraggr:
#  .attrminint:
#  READINGS:
#    2023-07-27 12:17:54  state          Next: 22:30:00
#
setstate RegalWohnzimmer_Werktags_OFF Next: 22:30:00
setstate RegalWohnzimmer_Werktags_OFF 2023-07-27 12:17:54 state Next: 22:30:00
Ergo ist die Syntax an sich wohl ok.

Wenn man nur den Teil unter COMMAND in die Eingabezeile wirft, kommt "Please define ... first" raus, was auch keine Überraschung ist, weil es dieses Device bei mir ja in der Tat nicht gibt.

Also nochmal die "unkonstruktive" Frage: Welchen Wertebereich kann $wday annehmen?
(Tipp: es ist keine Überraschung, falls es sonntags nicht funktioniert!)
Titel: Aw: Was ist hier falsch??
Beitrag von: rabehd am 27 Juli 2023, 14:15:47
Zitat von: musicnrw am 27 Juli 2023, 09:58:14Und wie würde das "komplett in einen DOIF" aussehen?

nur als Auszug.defmod Regel_Arbeit DOIF ([00:38|Mo]) (set ....
DOELSE ()
attr Regel_Arbeit do always
attr Regel_Arbeit weekdays So,Mo,Di,Mi,Do,Fr,Sa,WE,AT
Bei Dir AT und WE
Titel: Aw: Was ist hier falsch??
Beitrag von: betateilchen am 27 Juli 2023, 14:20:13
Zitat von: rabehd am 27 Juli 2023, 08:58:40Wenn wir bei Alternativen sind, ich finde das komplett im einem DOIF am Besten.

Mir wird schlecht... *kotz*
Titel: Aw: Was ist hier falsch??
Beitrag von: betateilchen am 27 Juli 2023, 14:38:58
Die Aufgabe ist mal wieder nicht auf das einfachste heruntergebrochen.
"Schalte die Regalbeleuchtung um 23:30 Uhr aus, ausser an Werktagen, da eine Stunde früher"

define at1 at *22:30 {fhem("set ESPEasy_28 off") if !$we}
define at2 at *23:30 {fhem("set ESPEasy_28 off")}

Fertig.

Zitat von: Beta-User am 27 Juli 2023, 08:21:55- "Werktag" und "Wochenende" wäre ggf. besser mit !$we bzw. $we abzugrenzen (holiday2we)


Was holiday2we hier für eine Rolle spielen soll, habe ich nicht verstanden.
Titel: Aw: Was ist hier falsch??
Beitrag von: musicnrw am 27 Juli 2023, 14:57:25
Hallo Beta-User,
Du hast recht, wenn ich jetzt sehe, dass ich den Sonntag nicht mit "wday == 0" beschreibe, was definitiv mein Fehler war. Nichtsdestotrotz: Jedoch funktioniert es gestern nicht und vorgestern nicht, und da war Dienstag und Mittwoch, und für diese Tage hätte die Definition (eigentlich) passen sollen.

An Betateilchen: Danke für Deine konstruktive Hilfe. Ich werde es später ausprobieren!

Gruß, Thomas

 
Titel: Aw: Was ist hier falsch??
Beitrag von: rabehd am 27 Juli 2023, 15:02:39
Zitat von: betateilchen am 27 Juli 2023, 14:38:58Die Aufgabe ist mal wieder nicht auf das einfachste heruntergebrochen.
"Schalte die Regalbeleuchtung um 23:30 Uhr aus, ausser an Werktagen, da eine Stunde früher"

define at1 at *22:30 {fhem("set ESPEasy_28 off") if !$we}
define at2 at *23:30 {fhem("set ESPEasy_28 off")}

Fertig.



und jetzt wird mir schlecht  ;D
Titel: Aw: Was ist hier falsch??
Beitrag von: betateilchen am 27 Juli 2023, 15:07:56
Zitat von: musicnrw am 27 Juli 2023, 14:57:25Jedoch funktioniert es gestern nicht und vorgestern nicht, und da war Dienstag und Mittwoch, und für diese Tage hätte die Definition (eigentlich) passen sollen.

Dein Werktags-at aus dem ersten Beitrag hier funktioniert bei mir einwandfrei, habe das gerade mit 15:05 als Ausführungszeit gestestet.
Titel: Aw: Was ist hier falsch??
Beitrag von: betateilchen am 27 Juli 2023, 15:14:12
Zitat von: rabehd am 27 Juli 2023, 15:02:39und jetzt wird mir schlecht

Ich brauche nur zwei Zeilen in der Konfiguration, um die gestellte Aufgabe zu lösen. Theoretisch könnte ich das auch in einer einzigen Zeile machen, aber ich wollte es nachvollziehbar machen.

Wieviele Zeilen brauchst Du mit DOIF?
Du hast ja in Deinem Auszug schon 3 Zeilen FHEM (1 * define + 2 * attr)
Titel: Aw: Was ist hier falsch??
Beitrag von: betateilchen am 27 Juli 2023, 15:24:39
Zitat von: betateilchen am 27 Juli 2023, 15:14:12Theoretisch könnte ich das auch in einer einzigen Zeile machen

Irgendwer wird kommen und den Beweis einfordern, deshalb...

define at3 at *22:30:00 {my $cmd ="set ESPEasy_28 off";; if (!$we) { fhem $cmd } else { fhem "define at3a at +01:00:00 $cmd" }}

Aus dem fahrenden Zug und nur mit Tablet ist sowas echt anstrengend 😀
Titel: Aw: Was ist hier falsch??
Beitrag von: Nobbynews am 27 Juli 2023, 15:38:12
Dann würde ich aber für das temporäre at at3a die Definition mit defmod machen.
Sonst kommt wieder die Frage nach dem roten ? auf.

Titel: Aw: Was ist hier falsch??
Beitrag von: betateilchen am 27 Juli 2023, 15:43:23
Zitat von: Nobbynews am 27 Juli 2023, 15:38:12Dann würde ich aber für das temporäre at at3a die Definition mit defmod machen.
Sonst kommt wieder die Frage nach dem roten ? auf.

Probier es doch erstmal aus, bevor Du so einen Käse schreibst.


Titel: Aw: Was ist hier falsch??
Beitrag von: Beta-User am 27 Juli 2023, 15:44:30
Zitat von: Nobbynews am 27 Juli 2023, 15:38:12Dann würde ich aber für das temporäre at at3a die Definition mit defmod machen.
Sonst kommt wieder die Frage nach dem roten ? auf.
+1 für defmod, aber nicht wegen des "roten Fragezeichens"... (=> einmalig auszuführendes at ;) )

Zitat von: betateilchen am 27 Juli 2023, 14:38:58Was holiday2we hier für eine Rolle spielen soll, habe ich nicht verstanden.
Das war nur als weiteres Stichwort gedacht, um den weiteren Vorteil der $we-Logik zu erwähnen, dass man es eben in weiterem Umfang wie nur mit "06" in der Hand hat, wann $we ist, und wann eben nicht...
Titel: Aw: Was ist hier falsch??
Beitrag von: Nobbynews am 27 Juli 2023, 15:53:15
Zitat von: betateilchen am 27 Juli 2023, 15:43:23Probier es doch erstmal aus, bevor Du so einen Käse schreibst.
Das hatte ich in der Tat dann falsch im Kopf und deswegen nicht ausprobiert.
Titel: Aw: Was ist hier falsch??
Beitrag von: betateilchen am 27 Juli 2023, 15:54:46
Einen Vorteil des defmod kann ich in diesem Fall überhaupt nicht erkennen.

Und ausserdem unterscheidet das rote Fragezeichen alleine nicht nach define und/oder defmod.
Titel: Aw: Was ist hier falsch??
Beitrag von: Beta-User am 27 Juli 2023, 16:17:20
Zitat von: betateilchen am 27 Juli 2023, 15:54:46Einen Vorteil des defmod kann ich in diesem Fall überhaupt nicht erkennen.
In diesem Fall ist es ggf. (nur) dann relevant, wenn man FHEM zwischen 22:30 Uhr und der Ausführungszeit des temporären at neu startet (ungeprüft).

Es geht eher um's Prinzip: Wenn man in solchen Fällen immer defmod nimmt, vermeidet man ggf. in den kritischeren Fällen das "das klappt so nicht"...

ZitatUnd ausserdem unterscheidet das rote Fragezeichen alleine nicht nach define und/oder defmod.
Das hatte ich auch nicht behauptet.
Titel: Aw: Was ist hier falsch??
Beitrag von: Nobbynews am 27 Juli 2023, 16:20:07
Zitat von: betateilchen am 27 Juli 2023, 15:54:46Und ausserdem unterscheidet das rote Fragezeichen alleine nicht nach define und/oder defmod.
Nee, das liegt wohl an den Unterschieden zwischen Statefile und Config-File.
Jetzt hab ich es begriffen.

Zitatwenn kein * angegeben wird, wird der Befehl nur einmal ausgeführt und der entsprechende at Eintrag danach gelöscht. In diesem Fall wird der Befehl im Statefile gespeichert (da er nicht statisch ist) und steht nicht im Config-File (siehe auch save).
Titel: Aw: Was ist hier falsch??
Beitrag von: betateilchen am 27 Juli 2023, 16:28:32
Zitat von: Beta-User am 27 Juli 2023, 16:17:20In diesem Fall ist es ggf. (nur) dann relevant, wenn man FHEM zwischen 22:30 Uhr und der Ausführungszeit des temporären at neu startet (ungeprüft).

Und was soll dann schlimmes passieren? Bei einem "shutdown restart" landet das Ding im Statefile, wird nach dem Neustart um 23:30 Uhr ausgeführt und verschwindet.

Die Wahrscheinlichkeit, dass es zwischen 22:30 Uhr und 23:30 Uhr nochmal 22:30 Uhr wird, geht gegen Null.


ZitatEs geht eher um's Prinzip: Wenn man in solchen Fällen immer defmod nimmt, vermeidet man ggf. in den kritischeren Fällen das "das klappt so nicht"...

Mir geht es auch ums Prinzip. Und wenn es keinen expliziten Grund gibt, defmod zu verwenden, nehme ich das prinzipiell nicht. Hast Du mal den Code zu defmod in fhem.pl angeschaut?

ZitatDas hatte ich auch nicht behauptet.

Das galt auch nicht Dir.
Titel: Aw: Was ist hier falsch??
Beitrag von: Beta-User am 27 Juli 2023, 16:45:33
Zitat von: betateilchen am 27 Juli 2023, 16:28:32Und was soll dann schlimmes passieren? Bei einem "shutdown restart" landet das Ding im Statefile, wird nach dem Neustart um 23:30 Uhr ausgeführt und verschwindet.

Die Wahrscheinlichkeit, dass es zwischen 22:30 Uhr und 23:30 Uhr nochmal 22:30 Uhr wird, geht gegen Null.
Hmmm, irgendwie hatte ich im Hinterkopf, dass at ggf. nachgeholt werden, wenn FHEM neu gestartet wird. Von daher wird es zwar nicht nochmal 22:30 Uhr, aber das at würde trotzdem nochmal ausgeführt - daher das "ungetestet"...
ZitatMir geht es auch ums Prinzip. Und wenn es keinen expliziten Grund gibt, defmod zu verwenden, nehme ich das prinzipiell nicht. Hast Du mal den Code zu defmod in fhem.pl angeschaut?
Schon länger nicht mehr, aber mir ist schon klar, dass defmod einen gewissen overhead erzeugt, den man dann nicht braucht, wenn man sicher ist, dass es nichts zu löschen gibt.

Aber lassen wir es gut sein, oder?
Titel: Aw: Was ist hier falsch??
Beitrag von: betateilchen am 27 Juli 2023, 16:56:07
Naja, lass uns mal bei der Logik bleiben, das macht doch Spaß.

Zitat von: Beta-User am 27 Juli 2023, 16:45:33irgendwie hatte ich im Hinterkopf, dass at ggf. nachgeholt werden, wenn FHEM neu gestartet wird. Von daher wird es zwar nicht nochmal 22:30 Uhr, aber das at würde trotzdem nochmal ausgeführt

Da brauchst Du nix zu prüfen, da reicht Nachdenken.

Denk noch mal genau über das nach, was Du da geschrieben hast. Insbesondere über die Frage, welches at Deiner Meinung nach nochmal ausgeführt werden könnte.

Das (wiederholende) at um 22:30 wurde bereits ausgeführt, bei einem Neustart wird es also auf 22:30 des Folgetags berechnet.

Das einmal auszuführende at um 23:30 wurde noch nicht ausgeführt.

Und bevor jetzt die Korinthenkacker um die Ecke kommen:
Selbst für den Fall, dass FHEM um 23:29:59 neugestartet wird, passiert bei einem regulären Neustart nix Schlimmes.
Titel: Aw: Was ist hier falsch??
Beitrag von: Beta-User am 27 Juli 2023, 17:10:40
Wie geschrieben: Hatte es nicht geprüft, ob "das at" - gemeint war das wiederholende, was sich eigentlich aus dem Gesamtzusammenhang einigermaßen zwanglos hätte ergeben sollen - am "Starttag" ggf. nochmal ausgeführt wird, wenn es eigentlich bereits "durch" ist. Wenn das nicht der Fall ist, ist ja alles gut...

(Ansonsten versuche ich grade, meinem Androiden beizubringen, wie er Wireguard mit IPv6 möglichst auf der Fritzbox verbindet, ohne dass ich "noch einen Server" aufziehen muss (habe neuerdings so einen "DS-lite"-Kack...); das beansprucht mich grade hinreichend).
Titel: Aw: Was ist hier falsch??
Beitrag von: Pfriemler am 27 Juli 2023, 18:09:41
Zitat von: betateilchen am 27 Juli 2023, 15:24:39define at3 at *22:30:00 {my $cmd ="set ESPEasy_28 off";; if (!$we) { fhem $cmd } else { fhem "define at3a at +01:00:00 $cmd" }}
Aus dem fahrenden Zug und nur mit Tablet ist sowas echt anstrengend 😀

Nicht schlecht. Aber später ist das für einen wenig geübten FHEM-Nutzer anstrengend, weil er nicht kapiert was da eigentlich passieren soll.
Es ist gerade der Vorteil eines mehrzeiligen (ja, wen kümmert's dass es mehr Zeilen sind?) DOIFs, dass man das so schreiben kann, dass es auch in drei Jahren noch "selbstsprechend" ist. Vor allem wenn man noch einen Kommentar einbaut.
Mit einem DOIF geht das übrigens auch locker in einer Zeile. Und für mich ist das deutlich lesbarer.

edit: wegen der o.g. Attribute im DOIF: Sie sind hier nicht erforderlich.
- do always ist automatisch impliziert bei DOIFs mit nur einem Ausführungszweig (wie hier)
- das weekdays-Attribut ist nur erforderlich, wenn man andere als zweibuchstabige Standardabkürzungen nimmt. "Mo Di Mi ..." bzw. "Mo Tu We..." kann DOIF allein.

defmod RegalWohnzimmer_Off DOIF ([22:30|Mo Di Mi Do Fr] or [23:30|Sa So]) (set ESPEasy_28 off)
Jedem Tierchen ...
Titel: Aw: Was ist hier falsch??
Beitrag von: rabehd am 27 Juli 2023, 18:21:00

Wieviele Zeilen brauchst Du mit DOIF?
Du hast ja in Deinem Auszug schon 3 Zeilen FHEM (1 * define + 2 * attr)
[/quote]

Es gibt immer viele Wege zum Ziel. Meine Antwort hat eigentlich schon Pfriemler gegeben.
Mir ist wichtig, dass ich nicht eine Vielzahl von Devices habe und das ich später noch weiß was die alle tun.
Ich wollte auch nur die Möglichkeiten ergänzen, an der Diskussion was besser, schöner... ist beteilige ich mich nicht.

Egal ob das Wetter aufs Gemüt schläg...
Titel: Aw: Was ist hier falsch??
Beitrag von: musicnrw am 28 Juli 2023, 10:11:20
Hallo zusammen,
irre, was sich da entwickelt hat.
Wenn Ihr Euren Wettbewerb im Zusammenfassen von Befehlen in einer Code-Zeile weitertreiben wollt,...bitte sehr.
Der Verständlichkeit, gerade für Gelegenheitsanwender dient es garantiert nicht (daher hatte ich es ja auch in den Anfängerbereich gepostet).

Egal, ich habs gelöst. Der Vorschlag
define at1 at *22:30 {fhem("set ESPEasy_28 off") if !$we}
define at2 at *23:30 {fhem("set ESPEasy_28 off")}
führt zum gewünschten Ergebnis, ich verstehe es, es ist übersitlich, Thema abgehakt und geschlossen.

Danek an die, die zur Lösung konstruktiv und zielorientiert beigetragen haben.

Thomas