Readings und sunset/sunrise mit at funktionieren manchmal

Begonnen von lunepi, 02 April 2025, 22:24:56

Vorheriges Thema - Nächstes Thema

lunepi

Moin,

ich habe mir diverse dummy device angelegt und dort 2 Uhrzeiten  mit setReading eingetragen. Diese wollte ich dann mit hilfe von at zum ein bzw. ausschalten von Lampen bzw. Steckdosen nutzen. Simple bei Sonnenuntergang einschalten und an Hand des Readings wieder ausschalten. Das gleiche Morgens, mit Hilfe des REadings einschalten und dann zu Sonnen aufgang wieder aus.

Beispiel für abends
defmod WZ_L1_abends at *{sunset_abs("REAL")} set FuSt.HC30A on-till [WZ_L1_timer:abends_time]
attr WZ_L1_abends computeAfterInit 0

bzw. für morgens

defmod WZ_L1_morgens at *{ReadingsVal("WZ_L1_timer","morgens_time","06:31:00")} { if( !isday()) { fhem("set FuSt.HC30A on-till " .sunrise_abs("REAL")) }}
attr WZ_L1_morgens computeAfterInit 0

Alle 10 Steckdosen die ich schalten möchte habe ich genauso aufgesetzt und entsprechend die Dummy devices mit den readings erzeugt.

Das Problem ist bei manchen funktionert es, bei manchen nicht. Manche Lampen springen zur rechten Zeit an aber nicht aus. Manche machen exakt das was ich will. Andere werden nicht eingeschaltet. Abends oder morgens scheint dabei keine Rolle zu spielen. Ich habe es wie man sieht mit ReadingsVal und dem direkten Zugriff auf die Variable gespielt. Ich habe computeAfterInit mit 0 und 1 ausprobiert, wobei wenn ich es richtig verstanden habe der Wert eigentlich keine Rolle spielt.

Wo ist der Fehler?

Gruß Christian

Otto123

Hallo Christian,
Zitat von: lunepi am 02 April 2025, 22:24:56Ich habe computeAfterInit mit 0 und 1 ausprobiert, wobei wenn ich es richtig verstanden habe der Wert eigentlich keine Rolle spielt.
Beim zweiten Beispiel würde er beim Neustart von FHEM eine Rolle spielen, beim ersten Beispiel spielt er keine Rolle
ZitatcomputeAfterInit
Falls perlfunc() im timespec Readings or Statusinformationen benögt, dann wird sie eine falsche Zeit beim FHEM-Start zurückliefern, da zu diesem Zeitpunkt die Readings noch nicht aktiv sind. Mit gesetztem computeAfterInit wird perlfunc nach Setzen aller Readings erneut ausgeführt. (Siehe Forum #56706)

Die _abs Funktionen im at zu nehmen ist kontraproduktiv, sunrise() oder sunset() liefern für das at die richtigen Werte ( auch wenn sie manchmal verwirrend aussehen)

Du musst Dir die Details (das list) anschauen, dort könnte man eventuell mehr sehen, wann ein at anspringen würde.

Wenn Du bei sunrise "REAL" verwendest solltest Du das auch bei isday() tun, Default ist nämlich "CIVIL"
ZitatSUNRISE_EL geht von einem Höhenwinkel der Sonne bezogen zum Horizont, h, von -6° aus. Dieser Wert bedeutet, dass die Sonne 6° unter dem Horizont steht und Lesen im Freien ohne künstliche Beleuchtung nicht mehr möglich ist (civil twilight, bürgerliche Dämmerung). SUNRISE_EL speichert diesen Wert in $defaultaltit.
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

frober

Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

betateilchen

Zitat von: frober am 03 April 2025, 12:39:30Warum nimmst du nicht den weekdaytimer?

Vielleicht, weil ein at im Durchschnitt 728 Mal flexibler und einfacher in der Handhabung ist?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

frober

#4
Zitat von: betateilchen am 03 April 2025, 13:10:54
Zitat von: frober am 03 April 2025, 12:39:30Warum nimmst du nicht den weekdaytimer?

Vielleicht, weil ein at im Durchschnitt 728 Mal flexibler und einfacher in der Handhabung ist?

ZitatAlle 10 Steckdosen die ich schalten möchte habe ich genauso aufgesetzt und entsprechend die Dummy devices mit den readings erzeugt

10 Dummys und 20 at ist einfacher und flexibler?!?  8)
OK flexibel ist es schon... ;D

Da nimmt man wenigstens eine structure...
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rabehd

Wer weiss denn, ob die alle zur gleichen Zeit geschaltet werden sollen?
Ich habe die Zeiten nicht in Dummys, sondern als Userreading.
Auch funktionierende Lösungen kann man hinterfragen.

lunepi

Moin Otto,

Danke erstmal für die erhellende Antwort.

Zitat von: Otto123 am 03 April 2025, 11:40:22Die _abs Funktionen im at zu nehmen ist kontraproduktiv, sunrise() oder sunset() liefern für das at die richtigen Werte ( auch wenn sie manchmal verwirrend aussehen)
Ja das hatte ich gesehen... aber wat der Bur nich kennt versucht er nicht. Wenn ich die command reference dann aber richtig verstehe muss man dann
at +*{sunrise()}verwenden?  Ach ne das war mit sunset_rel().
Nagut ich versuch das mal mit sunrise().
Zitat von: Otto123 am 03 April 2025, 11:40:22Wenn Du bei sunrise "REAL" verwendest solltest Du das auch bei isday() tun, Default ist nämlich "CIVIL"
:-[ - Verdammt, heute morgen hatte ich bei einigen Lampen, die nicht angeschaltet waren und den definierten Einschaltzeiten gedacht, ob es da tatsächlich nicht ein Clash gibt. Bingo, das wird es in gewesen sein. Ich hab is_day() immer nur so benutzt, mir war gar nicht klar, dass der die gleichen Optionen nutzt wie sunset() bzw. sunrise().

Gruß Christian

lunepi

Zitat von: frober am 03 April 2025, 17:41:0610 Dummys und 20 at ist einfacher und flexibler?!?  8)
OK flexibel ist es schon... ;D

Naja zum einen will ich unterschiedliche Einschalt bzw. Ausschaltzeiten nutzen und weil meine Frau die Zeiten gerne mal verstellen möchte, war dass jetzt meine Lösung, damit sie die Zeiten einfach über eine  Eingabezeile im Browser im Dummy device  setzen kann und ich diese im Hintergrund auslesen, setzen und nutzen kann.
Weekdaytimer hatte ich vorher aber da habe ich es nicht hinbekommen, dass die Lampe aus bleibt wenn die Einschaltzeit im Laufe des Frühjahrs irgendwann nach dem Sonnenaufgang liegt.
Und so aufwendig ist ein kleines Skript, was erstmal die gewünschte Grundconfig mit allen at's und dummy's anlegt auch nicht.

Wenn ich auch überzeugt bin, dass es bestimmt viel bessere bzw elegantere Lösungen gibt. Aber das ist halt erstmal(!) meine Lösung, die ich bis hierhin hinbekommen habe. 
Hinweise wie es besser geht nehme ich gerne an.
(Sofern ich diese verstehe ;) )

Gruß Christian


frober


Zitat von: lunepi am 03 April 2025, 22:43:54Naja zum einen will ich unterschiedliche Einschalt bzw. Ausschaltzeiten nutzen und weil meine Frau die Zeiten gerne mal verstellen möchte...
Hättest du diesen Kontext gleich geschrieben...

Zitatdamit sie die Zeiten einfach über eine  Eingabezeile im Browser im Dummy device  setzen kann
Widgetoverwrite

https://wiki.fhem.de/wiki/FHEMWEB/Widgets
Damit kannst du mit time direkt die Zeit wählen. Vielleicht ist das eine Option.
Ansonsten kannst du die Readings etc. in jedes Device einbauen und die Dummys sparen.

Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

lunepi

Moin,

Morgens war es tatsächlich das Probelm mit dem isday("REAL") das läuft jetzt wie geschmiert. Danke Otto.

Aber Abends verstehe ich es nicht.

Dieses schaltet abends wie gewünscht:

Internals:
  COMMAND    set FuSt.HC31C on-till [MB_L1_timer:abends_time]
  DEF        *{sunset("REAL")} set FuSt.HC31C on-till [MB_L1_timer:abends_time]
  FUUID      67eef3af-f33f-cb93-c07e-903c8bfd0b876915
  NAME      MB_L1_abends
  NR        374
  NTM        20:00:54
  PERIODIC  yes
  RELATIVE  no
  REP        -1
  STATE      Next: 20:00:54
  TIMESPEC  {sunset("REAL")}
  TRIGGERTIME 1743962454
  TRIGGERTIME_FMT 2025-04-06 20:00:54
  TYPE      at
  eventCount 2
  READINGS:
    2025-04-05 19:59:07  state          Next: 20:00:54
Attributes:
  computeAfterInit 0
  room      Zeiten

Dieser nicht:

Internals:
  COMMAND    set FuSt.HC30A on-till [WZ_L1_timer:abends_time]
  DEF        *{sunset("REAL")} set FuSt.HC30A on-till [WZ_L1_timer:abends_time]
  FUUID      67eef3c7-f33f-cb93-5306-7d2d17ac2280ada5
  NAME      WZ_L1_abends
  NR        383
  NTM        20:00:54
  PERIODIC  yes
  RELATIVE  no
  REP        -1
  STATE      Next: 20:00:54
  TIMESPEC  {sunset("REAL")}
  TRIGGERTIME 1743962454
  TRIGGERTIME_FMT 2025-04-06 20:00:54
  TYPE      at
  eventCount 2
  READINGS:
    2025-04-05 19:59:07  state          Next: 20:00:54
Attributes:
  computeAfterInit 0
  room      Zeiten
Das sind nur 2 Beispiel devices. BEide kann ich probemlos via FHEM "set DEV on" schalten, es ist also kein Kommunikationsprobelm zwischen FHEM und dem  Device. Beide sind die gleiche billge Baumarksteckdosen. Wenn ich manuell set on-till setze funktioniert es.

Wenn alle devices so nicht funktionieren würde, wäre es ja klar. Aber warum einige devices so funktionieren und anderen nicht ist mir schleierhaft.

Hat jemand noch ne Idee, was ich tun,testen ändern oder kann?

Gruß Christian

betateilchen

Was steht denn im Logfile zu dem Thema?

Entweder die resultierende timespec aus WZ_L1_timer ist falsch oder der set-Befehl wird erst gar nicht aufgerufen.

Poste doch mal ein list von WZ_L1_timer.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

frank

vielleicht mal zeitlich etwas entzerren, also nicht alle zur exakt selben Zeit schalten.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html