Seite 1 von 1

Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 6. Sep 2019 20:57
von KlausGünther
Guten Abend Zusammen,

um es vorweg zu nehmen: ICH KOCHE

Eigentlich (Und eigentlich und Scheiße sind immer ganz nah beieinander), wollte ich "nur mal eben kurz" eine Formel einbauen
damit die Rolländen Zeitverzögert nach dem Sonnenuntergange runtergehen, das ganze im Winter später, im Sommer früher.
Mit ein bisschen rumrechnerei bin ich dazu gekommen, es ist eigentlicg ganz einfach: Tageslicht Dauer holen, Sinus draufpacken....
passt. Bissel rumgerechnet, geht. Zur Sommersonnenwende sinds dann 10 min Verzögerung, zur Sommersonnenwende 90min.
Aber Scheiße, ich bin zu BLÖD!!!

Code: Alles auswählen

rule "Zeitverzögerung  Rolläden"
    when
    Item LocalSun_Daylight_Duration received update
    then{
    var var1 = (((LocalSun_Daylight_Duration.state as DecimalType).floatValue)/600)
    var var2 = Math::sin(var1)    
    var var3 = Math::round(10/(var2^6))
    Rolladen_Timer.sendCommand(var3)
    }
end
Unter anderem folgende Fehlermeldung:
Could not cast 790 min to org.eclipse.smarthome.core.library.types.DecimalType


Vielleicht noch als Hinweis, das Item: LocalSun_Daylight_Duration kommt aus dem Astro Bindung in Minuten.
Und ich hätte den Wert für den Timer gerne als einfache Zahl ohne Nachkommastellen.

Wer kann mir helfen :-D (Mit google bin ich in den letzten anderthalb Stunden nicht weiter gekommen.

Re: Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 6. Sep 2019 21:18
von udo1toni
Nimm einfach as Number, statt as DecimalType.

Das Runden sollte mit (wert).intValue gehen.

Re: Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 6. Sep 2019 21:40
von KlausGünther
Wenn man es richtig macht. Gehts.

DANKE udo1toni!!!!!!!!!!!!!!!!!

Re: Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 7. Sep 2019 14:56
von peter-pan
Hab mal in euren Post "reingespickelt" und finde es interressant was diese Rule macht!... und hab sie mal "nachgebaut"

Code: Alles auswählen

rule "Zeitverzögerung  Rolläden"
    when
    Item SonnenDatenDaylightDuration received update
	or Item Dummy4 changed to ON
    then{
    var var1 = (((SonnenDatenDaylightDuration.state as Number).floatValue)/600)
    var var2 = Math::sin(var1)    
    var var3 = Math::round(10/Math.pow(var2,6))
    var var4 = Math.pow(var2,6)
    var var5 = 10/Math.pow(var2,6)
    var var6 = Math::round(Math.pow(var2,6))
	//    Rolladen_Timer.sendCommand(var3)
    logInfo("mathe1","Tageslichtdauer ist {} Triggering Item ist {}",SonnenDatenDaylightDuration.state, triggeringItem.name )
    logInfo("mathe1","var1 ist: {}, var2 ist: {}, var3 ist: {}, var4 ist: {}, var5 ist: {}, var6 ist: {}", var1,var2,var3,var4,var5,var6)
       }
end
Leider hab ich's nicht kapiert :oops: . Nach "LocalSun_Daylight_Duration" hat's leider aufgehört. Ich wäre neugierig, was es mit der Division, dem Sinus und dem Potenzieren auf sich hat, bzw. wie diese Werte zustande kommen. (Bin keine Matheleuchte).
Gruss,
Peter

Re: Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 7. Sep 2019 20:45
von KlausGünther
Also der Gedanke dahinter ist, dass die Rolläden zeitverzögert zum Sonnenuntergang runter gehen.
Dabei sollen sie im Sommer (Sommer-Sonnenwende) weniger Zeitverzögert runter gehen als im Winter
(Winter-Sonnenwende).
Jetzt könnte man relativ einfach eine Formel bauen, bei der dann je nach Monat der Zeitverzögerungswert
geändert wird. Beispielsweise: Wenn Juni, dann 10 Minuten, wenn Januar, dann 90 Minuten.
Dann hat man aber bei den Monatswechseln von jetzt auf gleich aber den Effekt, dass auf einmal die Rolläden
zum Vortag schlagartig anders runter gehen. Fand ich doof.

Jetzt kommen wir zur Mathematik. Wenn man sich auf eine Sinuskurve setzen würde und runter rutscht, wäre das ähnlich
wie bei einer Achterbahn wenn es nach dem ersten Hügel wieder runter geht. Erst gehts langsam, dann schnell, dann wieder
langsam.... Und den effekt nutze ich für die Zeitkorrektur.
https://de.wikipedia.org/wiki/Sinus_und_Kosinus

Und bei mir verhällt sich das so. (Mitlerweile habe ich die Formel angepasst). Ich möchte, dass zur Sommersonnenwende (kürzeste Nacht), die Rolladen 20min nach dem Sonnenuntergang runter gehen.
Zur Wintersonnenwende (längste Nacht) sollen es 90-120min sein. Die Variable dabei ist immer die
Länge des Tages oder der Nacht, ich habe mich für den Tag entschieden.
Und dann sind die 600 bzw. die "hoch 6" nur Korrekturen um die Funktion so zu beeinflussen, dass
am längsten die Tag die 20min das auch ca. bleiben, und bei kürzestem Tag da ungefähr 2 Stunden rauskommen.

Somit kommt da bei mir raus (20min, Hoch4 anstatt hoch6)
Sommersonnenwende, verzögerung 20,449 Minuten
Wintersonnenwende, verzögerung 80,66 Minuten

Bei Hoch 6 wären es 20,5 Minuten und 161 Minuten. Mann muss / kann also etwas spielen und gucken was für einen passt.

Ich hoffe das ich den Bogen zwischen einfach und "auch wirklich ganz richtig" gefunden habe.

Re: Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 7. Sep 2019 21:01
von peter-pan
Hallo Klaus-Günther,
vielen Dank für die Ausführungen. Das ist wirklich toll. Das werde ich gleich mal in deiner Testformel umsetzen.

Sehe ich das richtig, dass du diesen, errechneten, Wert als Item abspeicherst und dann in einer anderen Regel (Rolladensteuerung) verwendest ?

Re: Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 7. Sep 2019 22:51
von KlausGünther
Ob Du wirklich richtig siehst, siehst Du wenn das Licht an geht :-D

Spaß beiseite:

Das wäre der erste Teil, also in der Rules Datei für die Rolläden einmal am Tag die Verzögerung errechnen:

Code: Alles auswählen

rule "Zeitverzögerung  Rolläden"
    when
    Item LocalSun_Daylight_Duration received update
    then
    {
    var var1 = (((ITEM-DAUER-TAGESLICHT.state as Number).floatValue)/600)
    var var2 = (Math::sin(var1))    
    var var3 = ((20/(var2*var2*var2*var2*var2)).intValue)
    ITEM-ROLLADEN-TIMER.sendCommand(var3)
    }
end
Und das der Zweite, wo dann die Rolladen runter gehen wenn irgendwas passiert, bei mir wäre es dann so,
dass je nach dem ob der Rolladenmodus ON oder OFF ist, zwei verschiedene Szenarien ablaufen.

Code: Alles auswählen

rule "Rolladen Runter Sonnenuntergang"
when
   Channel 'astro:sun:local:daylight#event' triggered END
   then
    val Integer TIMER_VERZOEGERUNG = (ITEM-ROLLADEN-TIMER.state as DecimalType).intValue  
    if (ROLLADENMODUS.state==OFF){
    createTimer(now.plusMinutes(TIMER_VERZOEGERUNG))[
    Shutter_1.sendCommand(DOWN)
    ....
    ...
    ..
    .
    
Vermutlich wird das ein oder andere noch eleganter gehen, aber ich bin froh das alles so läuft wie es das tut und bin auch von berufswegen eher nicht der Programmierer.
Als Hinweis sei noch erlaubt, die Rolladen gehen hier im Haus, reih um unter, mehr oder weniger in so einer La Ola Welle :D

Re: Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 8. Sep 2019 10:35
von udo1toni
KlausGünther hat geschrieben: 7. Sep 2019 22:51 Als Hinweis sei noch erlaubt, die Rolladen gehen hier im Haus, reih um unter, mehr oder weniger in so einer La Ola Welle :D
Spielkind! ;)

Re: Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 8. Sep 2019 10:48
von KlausGünther
:D Erwischt

Re: Rolladen Zeitverzögerung - Problem mit der Formel

Verfasst: 8. Sep 2019 13:41
von sihui
KlausGünther hat geschrieben: 7. Sep 2019 22:51 Als Hinweis sei noch erlaubt, die Rolladen gehen hier im Haus, reih um unter, mehr oder weniger in so einer La Ola Welle :D
Bei mir auch :D