Hauptmenü

Was ist hier falsch??

Begonnen von musicnrw, 27 Juli 2023, 07:48:16

Vorheriges Thema - Nächstes Thema

betateilchen

#15
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.


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Nobbynews

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.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Nobbynews

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).

betateilchen

#21
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

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?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

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).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Pfriemler

#25
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 ...
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

rabehd


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...
Auch funktionierende Lösungen kann man hinterfragen.

musicnrw

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