Somfy-Rolladen rauf und runter bei Sonnenauf- und -untergang?

Begonnen von madmax25, 09 Februar 2025, 18:27:41

Vorheriges Thema - Nächstes Thema

madmax25

Nachdem ich nun schon ein paar Wochen meinen somfy-Rolladen per PC und Android auf und zu fahren kann, will ich den nun automatisch zum Sonnenauf- und -untergang steuern.
Der bisherige Abschnitt in FHEM sieht so aus:
define BalkonRolladen SOMFY 000001
attr BalkonRolladen cmdIcon on:remotecontrol/black_btn_CHDOWN off:remotecontrol/black_btn_CHUP go-my:remotecontrol/black_btn_MEMORY
attr BalkonRolladen devStateIcon open:shutter_open closed:shutter_closed go-my:shutter_5
attr BalkonRolladen model somfyshutter
attr BalkonRolladen room Draussen->Balkon
attr BalkonRolladen webCmd on:go-my:off
#   ADDRESS    000001
#   DEF        000001
#   FUUID      679479dd-f33f-2e04-5734-08e1d37a83286bcd
#   IODev      CUL433
#   NAME       BalkonRolladen
#   NR         71
#   STATE      closed
#   TYPE       SOMFY
#   move       stop
#   CODE:
#     1          000001
#   READINGS:
#     2025-02-09 17:43:33   IODev           CUL433
#     2025-02-06 15:44:44   enc_key         A3
#     2025-02-06 15:44:44   exact           200
#     2025-02-06 15:44:45   parsestate      on
#     2025-02-06 15:44:44   position        200
#     2025-02-06 15:44:45   received        40
#     2025-02-06 15:44:44   rolling_code    0063
#     2025-02-06 15:44:44   state           closed
#
setstate BalkonRolladen closed
setstate BalkonRolladen 2025-02-09 17:43:33 IODev CUL433
setstate BalkonRolladen 2025-02-06 15:44:44 enc_key A3
setstate BalkonRolladen 2025-02-06 15:44:44 exact 200
setstate BalkonRolladen 2025-02-06 15:44:45 parsestate on
setstate BalkonRolladen 2025-02-06 15:44:44 position 200
setstate BalkonRolladen 2025-02-06 15:44:45 received 40
setstate BalkonRolladen 2025-02-06 15:44:44 rolling_code 0063
setstate BalkonRolladen 2025-02-06 15:44:44 state closed


Im Wiki habe ich folgende Zeile gefunden:
define a_gardenLight_morning_off at *{sunrise()} set gardenLight off
Wenn ich das richtig verstehe, brauche ich demnach für meinen Rolladen folgende define-Zeilen:

define BalkonRolladen_off at *{sunrise()} set BalkonRolladen offund
define BalkonRolladen_on at *{sunset()} set BalkonRolladen on
Falls das richtig ist (ist es das?), stellt sich jedoch immer noch die Frage, woher bekommt FHEM die Uhrzeiten für Sonnenauf- und -untergang, da diese ja jeden Tag anders sind?
Da müsste doch, wie ich vermute, in die runde Klammer nach "sunrise" bzw. "sunset" noch eine Variable rein, die ich aber noch nicht gefunden habe.
Wer weiß bitte, wie es richtig geht?

betateilchen

#1
Grundsätzlich sind Deine at Definitionen schon korrekt.

sunrise() wird zu zwei Zeitpunkten berechnet:

1. beim Starten von FHEM, ausgehend von der dann aktuellen Uhrzeit
2. nach der Ausführung des at wird die nächste Ausführungszeit automatisch berechnet, das wird durch das * bestimmt, das ein "wiederholendes at" kennzeichnet

Du musst Dir also darüber keine Gedanken machen, FHEM nimmt Dir das komplett ab.

Ja, man kann in die Klammer von sunrise() auch Parameter mitgeben, die haben aber nicht mit der automatischen Neuberechnung zu tun.

Eine Beschreibung der möglichen Parameter für sunrise() findest Du in der commandref zum zugehörigen Modul https://commandref.fhem.de/#SUNRISE_EL
Diese Parameter sind alle optional!

Wichtig ist nur, dass Du Deine Standortdaten (latitude/longitude) im device global korrekt gepflegt hast.

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

madmax25

Also in die runden Klammern brauche ich dann nichts eintragen, richtig?

Im Wiki steht "sunrise" oder "sunrise_rel" (welches ist besser?).
Bei "sunrise" heißt es dort, dass für den nächsten Tag 24 Stunden dazukommen.
Ist das nur ungenau beschrieben, oder kommen da wirklich nur genau 24 Stunden dazu?
Ich frage, weil normalerweise unterscheiden sich die Auf- und Untergänge pro Tag um ca. 3 Minuten.
Demnach würde in der ersten Jahreshälfte ein täglich größer und nach der Sonnwende wieder kleiner werdender Fehler entstehen.
Oder wird das in FHEM berücksichtigt?

betateilchen

Du denkst viel zu kompliziert.

Die Uhrzeiten für Sonnenauf- und -untergang werden selbstverständlich für Deinen Standort exakt berechnet.
Die 24 Stunden beziehen sich auf etwas anderes. Wenn Du jetzt (19:40 Uhr) die Funktion sunrise() aufrufst, bekommst Du als Ergebnis 31:14:55 was erstmal komisch aussieht. Aber daran erkennt man, dass es sich um die Sonnenaufgangszeit von morgen handelt. Zieht man davon 24 Stunden ab, bekommt man als Ergebnis 07:14:55 Uhr.
Diese Zeit würde man auch im at in einem INTERNAL sehen:

TRIGGERTIME_FMT 2025-02-10 07:14:55
Über all das musst Du Dich aber als Anwender überhaupt nicht kümmern, das macht FHEM von sich aus korrekt.

Ob man sunrise(), sunrise_abs() oder sunrise_rel() verwendet, kommt auf den Anwendungsfall an. Für Dein wiederholendes at ist sunrise() die beste Wahl.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

madmax25

#4
Wenn ich das eingerichtet habe, gilt das ganzjährig, aber was, wenn ich das im Winter nicht brauche?
Kann ich die beiden neuen define's auch irgendwie deaktivieren, ohne sie zu löschen? (EDIT: Hat sich erledigt: Ich muss nur bei "set" den "BalkonrolladenOn" und "BalkonrolladenOff" von "active" auf "inactive" setzen)

Anm.: Ich lasse den Rolladen im Winter ganz gerne mal zu und öffne den dann nur bei Bedarf manuell (mit dem somfy-Sender oder per PC bzw. Handy).
Ich habe nämlich festgestellt, dass mir das im Schlafzimmer, vor dem sich Balkon und Rolladen befinden, ca. 4°C bringt, die ich weniger heizen muss.

EDIT:
Ich habe inzwischen bemerkt, dass es nicht
define BalkonRolladen_off ...sondern
define BalkonRolladenOff ...und entsprechend
define BalkonRolladenOn ...anstatt
define BalkonRolladen_on ...heißen muss, weil FHEM bei den Namen keinen _ akzeptiert.

betateilchen

Zitat von: madmax25 am 09 Februar 2025, 20:34:45weil FHEM bei den Namen keinen _ akzeptiert.

Diese Behauptung ist definitiv falsch.
Erlaubte Zeichen im Namen von devices sind:

  • die Buchstaben a-z
  • die Buchstaben A-Z
  • die Ziffern 0-9
  • der Dezimalpunkt .
  • der Unterstrich _
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

madmax25

#6
Aber warum hat mir FHEM den Befehl erst akzeptiert, nachdem ich den _ rausgenommen habe?
Ist das vielleicht eine Besonderheit des at-Befehls?

EDIT:
Ich habe es gerade nochmal getestet, indem ich den Namen in einem der bereits vorhandenen Befehle geändert habe. Komischerweise hat es dieses Mal geklappt. Ich habe keine Ahnung, warum mir der _ beim ersten Versuch verweigert wurde.

betateilchen

Zitat von: madmax25 am 10 Februar 2025, 12:06:24Aber warum hat mir FHEM den Befehl erst akzeptiert, nachdem ich den _ rausgenommen habe?

Die Frage wäre einfacher zu beantworten, wenn Du hier die vollständige Fehlermeldung gepostet hättest, die Du beim Versuch des define erhalten hast.

Zitat von: madmax25 am 10 Februar 2025, 12:06:24Ist das vielleicht eine Besonderheit des at-Befehls?

Nein. Die Prüfung auf gültige Namen erfolgt an zentraler Stelle in FHEM und nicht modulspezifisch.

Außerdem ist at kein "Befehl".


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

madmax25

Das würde ich gerne nachtragen, aber leider bekomme ich die Meldung nicht mehr, weil es wie ich im "EDIT:" meines vorherigen Beitrage berichtete, bei der Änderung dann doch geklappt hat. Soweit ich mich erinnere wurden da nur die zulässigen Zeichen gemeldet, also Groß- und Klein-Buchstaben, aber keine Zeichen.

Ich werde noch ein wenig experimentieren und sobald ich die Meldung wieder bekomme, werde ich sie ergänzen.

Zum at-Befehl:
Sorry, ich meinte damit den "Befehl mit dem at".

Noch eine kurze Zwischenfrage:
Kann ich mehrere Befehle zur gleichen Zeit ausführen lassen oder müssen die unterschiedliche Zeiten bekommen?
Was ich damit meine, wenn ich z.B. den Rolladen zum Sonnenuntergang runterfahren will und meine Schreibtischlampe zum gleichen Zeitpunkt einschalten will, macht das FHEM oder muss ich die beiden Kommandos zeitlich trennen?

betateilchen

Zitat von: madmax25 am 10 Februar 2025, 13:39:13Kann ich mehrere Befehle zur gleichen Zeit ausführen lassen

Soviele Du möchtest. Du kannst die sogar innerhalb eines einzigen at devices angeben.

Das sind FHEM Grundlagen. Nachzulesen in der Anfänger-Dokumentation und in der commandref (dort sogar mit Beispielen für at!) https://commandref.fhem.de/#command
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

madmax25

Ich habe gerade mal einen Testlauf gemacht, mit zwei Lampen (=Funksteckdosen) und zwei Somfy-Antrieben zum Sonnenuntergang (minus 1800, weil es da schon gut gedämmert hat). Offenbar sendet FHEM die Kommandos nacheinander, da leichte Verzögerungen (je ca. 1 Sek.) zwischen den Devices erkennbar waren.

Hat jedenfalls hervorragend geklappt.
Was ich nach dem Testlauf vorläufig nicht brauche, habe ich im at-Block auf "inactive" gesetzt.

betateilchen

Die Verzögerung kommt nicht von FHEM, sondern höchstwahrscheinlich von der jeweils zuständigen Funkhardware. FHEM selbst führt die Befehle ohne Verzögerung hintereinander aus. Es sei denn, Du hättest absichtlich eine Pause in die Befehlskette eingebaut.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

madmax25

Eingebaut habe ich nichts derartiges. Ja, dann war es vermutlich der CUL-Stick, der alles nacheinander gesendet hat.