Übernahme von Zeiten aus Dummy für Rolladensteuerung

Begonnen von Beta24, 04 Juli 2018, 11:26:02

Vorheriges Thema - Nächstes Thema

Beta24

Hallo zusammen,

ich bin neu auf dem Gebiet FHEM und habe folgende Anfängerfrage:

Mit Hilfe der sunrise/sunset-Funktion lasse ich mir den aktuellen Zeitpunk für Sonnenauf- bzw. Sonnenuntergang berechnen.
Die Zeit für Sonnenaufgang und -untergang ist dann im dummy "Sonnenaufgang" und im dummy "Sonnenuntergang" als Reading state bzw. im Internal STATE zu finden.
Das funktioniert auch soweit ohne Probleme und die errechneten Zeiten passen zur Realität.

Jetzt würde ich gern die Zeit für Sonnenauf/-untergamg gern benutzen, um meine Rolläden zu steuern (Rolläden werden ebenfalls per FHEM gesteuert).

Wenn ich es so probiere, funktioniert alles:
define Selected_Rollos_Astro_Down at *{sunset_abs("CIVIL")} set Rollo_EG_Wohnzimmer_4 dusk

Nun möchte ich aber die Zeit aus dem dummy Sonnenuntergang übernehmen statt hinter dem at-Befehl mir nochmal die Zeit des Sonnenuntergangs zu errechnen.
Ich habe es wie probiert, aber ich bekomme hier nur eine Fehlermeldung bzgl. timespec oder so.
define Selected_Rollos_Astro_Down at *{ReadingsVal("Sonnenuntergang","state","")} set Rollo_EG_Wohnzimmer_4 dusk
...und jetzt weiß ich nicht mehr weiter.

Hoffentlich könnt Ihr mir helfen, wie die Codezeile richtig aussehen muss.

Vielen Dank.

betateilchen

Bei mir werden die Zeitpunkte für Sonnenauf- und Untergang systemweit nur ein einziges Mal getriggert.


define at_sunrise at *{sunrise_abs("CIVIL")} trigger global sunrise
define at_sunset at *{sunset_abs("CIVIL")} trigger global sunset


Und alle Aktionen, die darauf reagieren sollen, werden per notify ausgelöst.


define n_sunrise_1 notify global:sunrise <führe irgendwas aus, wenn die Sonne aufgeht>
define n_sunrise_2 notify global:sunrise <führe noch irgendwas anderes aus, wenn die Sonne aufgeht>


Das erspart das mehrfache Errechnen der Zeiten. Und wenn man z.B. mal von "CIVIL" auf "REAL" umstellen möchte, muss man das nur an einer Stelle tun und nicht in sämtlichen abhängigen at-devices.

Und es ist eine Lösung, die ohne dummy auskommt  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta24

Danke für die Antwort.

Deine Lösung ist eine elegante Art...trotzdem würde ich gern wissen (...um zu lernen), was ich falsch mache und wie man eine Zeitangabe aus einem Dummy übernehmen kann, um im Zusammenhang mit einem at-Befehl etwas zu dieser Zeit auszuführen.

Danke. 

betateilchen

naja gut, fangen wir mal damit an...

*{ReadingsVal("Sonnenuntergang","state","")} set Rollo_EG_Wohnzimmer_4 dusk


  • bitte mal die Ausgabe von "list Sonnenuntergang" hier posten
  • der default Wert "" bei ReadingsVal() führte auf jeden Fall zu einem Fehler, weil das keine gültige Zeitangabe ist
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta24

OK...und schon mal Danke für die schnelle Hilfe.

Anbei die Routine zum "berechnen" der Zeit des Sonnenauf-/untergangs

define Sonnenaufgang dummy
attr Sonnenaufgang room Umwelt

define Sonnenuntergang dummy
attr Sonnenuntergang room Umwelt

define Sonnenaufgang_speichern at *00:05:00 {\
    my $s = sunrise_abs("CIVIL");;\
    fhem("set Sonnenaufgang $s");;\
    my $s = sunset_abs("CIVIL");;\
    fhem("set Sonnenuntergang $s");;\
}


und die Readings vom Dummy Sonnenuntergang im Anhang

Wird noch etwas benötigt ?

betateilchen

Naja, Dein Ansatz und Dein Plan ist an sich schon richtig.

Bei mir funktioniert folgendes problemlos (alles direkt in der FHEM Befehlszeile eingegeben:


define d_sr dummy
define d_ss dummy

{fhem("set d_sr ".sunrise('CIVIL'))}
{fhem("set d_ss ".sunset('CIVIL'))}

define at_rollo_down at *{ReadingsVal('d_ss','state','21:45')} <schliesse das Rollo irgendwie>



Ergebnis siehe screenshot im Anhang

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