Seite 22 von 26

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 14. Jul 2021 10:20
von Cyrelian
udo1toni hat geschrieben: 8. Jul 2021 12:50 Ich denke nicht, dass Du mit den externen Daten glücklich wirst, egal wieviele Account oder Systeme Du Dir da hinstellst.

Die Daten von Astro werden kalkuliert, die Frequenz kannst Du einstellen (ich habe hier 300 Sekunden eingestellt, das reicht für meine Zwecke vollkommen). Bei openweathermap hast Du aber keinerlei Kontrolle über die Aktualität der Daten.
Wenn Du z.B. Beschattung anhand von Bewölkung steuern willst, wäre ein Lichtsensor deutlich effizienter und genauer.
Hi,

hier muss ich Udo zu 100% zustimmen. Ich habe mir jetzt auf Grund der "ungenauen" Wetterdaten eine eigene Wetterstation(Wind. Regen, UV, Temp. und Luftdruck) und einen Lichtsensor geholt.

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 14. Jul 2021 11:20
von eagledata
Cyrelian hat geschrieben: 14. Jul 2021 10:20 Ich habe mir jetzt auf Grund der "ungenauen" Wetterdaten eine eigene Wetterstation(Wind. Regen, UV, Temp. und Luftdruck) und einen Lichtsensor geholt.
Hi, darf ich fragen was du da genommen hast? Grad mit den Bewölkungsdaten hab ich auch so meine Problem für die Verschattung.

Alex

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 14. Jul 2021 17:55
von Cyrelian
Hi,

zwei Xiaomi Lichtsensoren, angebunden via Deconz.

CU
Cyrelian

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 18. Jul 2021 10:43
von TomW80
TomW80 hat geschrieben: 22. Jun 2021 21:22 Wie kann ich nachdem die Jalousien die Posion angefahren haben, die Lamellen noch auf eine gewünschte Position bringen?
Hat das evtl. schon jemand realisiert?
Habe jetzt folgende Anpassung gemacht und es funktioniert. :)

Code: Alles auswählen

//-------------  Verschattung starten --------------------

val shadingStart = [GroupItem shutter |

        val String logPrefix = "Verschattung aktivieren - "

                val Map<String, Number> targetHights = newHashMap ( 
                "EG_Gaestezimmer_Rollo" -> 50,                  
                "EG_Wohnzimmer_Rollo" -> 50,                  
                "Jalousie_Wohnzimmer_3M1" -> 100,             
                "Lamelle_Wohnzimmer_3M1" -> 75,
                "Jalousie_Esszimmer_West_4M1" -> 100,
                "Jalousie_Esszimmer_West_4M2" -> 100,
                "Jalousie_Esszimmer_Sued_4M3" -> 100,
                "Jalousie_Esszimmer_Sued_4M4" -> 100,
                "Lamelle_Esszimmer_West_4M1" -> 100,
                "Lamelle_Esszimmer_West_4M2" -> 100,
                "Lamelle_Esszimmer_Sued_4M3" -> 100,
                "Lamelle_Esszimmer_Sued_4M4" -> 100,
                "Jalousie_Kueche_5M1" -> 50,
                "Lamelle_Kueche_5M1" -> 100,
                "Rollo_OG_Bad_Osten" -> 50,                  
                "Rollo_OG_Kind2_Sueden" -> 50,                  
                "Rollo_OG_Kind2_Osten" -> 50,                  
                "Rollo_OG_Buero" -> 50,                         
                "Rollo_OG_Kind1_Westen" -> 45,                 
                "Rollo_OG_Kind1_Sueden" -> 50                  
                )
                // Rollladen werden geschlossen
                logInfo("rules", logPrefix + "Grenzwert wurden erreicht, Rollladen werden geschlossen")


                shutter.allMembers.forEach[ blind |
                
                    var String[] blindtyp = blind.name.toString().split('_') // String am _ splitten

                    if (blindtyp.get(0) != "Lamelle")
                    {
                        if ((blind.state as Number) < targetHights.get(blind.name.toString()).intValue) {
                            logInfo("rules", logPrefix + "Fahre Rollladen (" + blind.name.toString() + ") auf (" + targetHights.get(blind.name.toString()).intValue + ") %" )
                            blind.sendCommand(targetHights.get(blind.name.toString()).intValue)
                        } else {
                            logInfo("rules", logPrefix + "Rollladen (" + blind.name.toString() + ") ist bereits weiter geschlossen (" + blind.state.toString() + "%) als er geschlossen werden sollte und wird daher ignoriert")
                        }
                    }
                    

                    if (blindtyp.get(0) == "Lamelle")
                    {
                        if ((blind.state as Number) < targetHights.get(blind.name.toString()).intValue) {
                        logInfo("rules", logPrefix + "Fahre Lamelle (" + blind.name.toString() + ") auf (" + targetHights.get(blind.name.toString()).intValue + ") %" )
                        blind.sendCommand(targetHights.get(blind.name.toString()).intValue)

                        } else {
                            logInfo("rules", logPrefix + "Lamelle (" + blind.name.toString() + ") ist bereits weiter geschlossen (" + blind.state.toString() + "%) als er geschlossen werden sollte und wird daher ignoriert")
                        }
                    }


                ]
                AutoShading_Start_last.postUpdate(now.toString())
    return true;
]

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 4. Aug 2021 08:25
von HansDampf
Quautiputzli hat geschrieben: 15. Jun 2021 06:55 Bin mir nicht ganz sicher, ob ich das richtig mache.

Muss ich von:

Code: Alles auswählen

val Boolean isRainLastHour = (Wetter_Regen.maximumSince(now.minusHours(1), "influxdb").state >= (minPrecip))
val Boolean isCloudLastHour = (Wetter_Bewolkung.averageSince(now.minusHours(1), "influxdb")as Number >= (cloudHysteresis))
auf:

Code: Alles auswählen

val Boolean isRainLastHour = (Wetter_Regen.maximumSince(now.minusHours(1).state) >= (minPrecip))
val Boolean isCloudLastHour = (Wetter_Bewolkung.averageSince(now.minusHours(1)as Number) >= (cloudHysteresis))
abändern, oder was muss da alles raus?

Zumindest bei der Temp gibt es noch ein Problem, da bei mir die Werte mit Einheit daherkommen. Mit diesem code

Code: Alles auswählen

val Boolean isTemperature = ((Wetter_Aussentemperatur.state as Number).floatValue < (Wetter_Aussentemperatur.minimumSince(now.minusHours(1), "influxdb").state as DecimalType -(temperatureHysteresis)))
gibt es diesen Fehler:

Code: Alles auswählen

2021-06-14 20:20:50.743 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Rollo_auto-2' failed: Could not cast 23.58 °C to org.openhab.core.library.types.DecimalType; line 238, column 90, length 88 in Rollo_auto
Wie muss ich die rule ändern, damit die vergangenen Werte richtig ausgewertet werden? Werden die in der Persistence auch mit Einheit gespeichert?


Bei dem Regen und den Wolken bin ich mir auch nicht sicher ob das so passt. Auch die sind bei mir mit Einheit. Die Wolken werden z.B. mit "35 %" angezeigt, wenn man auf Analyse klickt jedoch mit "0.35" Beim Regen scheint es um den Faktor 1000 zu wenig sein. Sollte ich dort lieber auf Werte ohne Einheit umstellen?
Wie hast du es gelöst? isTemperature = habe das gleiche Problem.

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 4. Aug 2021 16:11
von Quautiputzli
Hi, ich hab die Items tatsächlich abgeändert in Werte ohne Einheit.

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 6. Aug 2021 15:32
von HansDampf
Quautiputzli hat geschrieben: 4. Aug 2021 16:11 Hi, ich hab die Items tatsächlich abgeändert in Werte ohne Einheit.
Danke und kannst du das noch posten?

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 7. Aug 2021 12:33
von Quautiputzli
Also, hab nochmal nachgesehen. Temperatur ist bei mir als "Number:Temperature" angelegt.
Bild_2021-08-07_123054.png
in der rule sieht es folgendermaßen aus:

Code: Alles auswählen

val Boolean isTemperature = ((Wetter_Aussentemperatur.state as Number).floatValue < (Wetter_Aussentemperatur.minimumSince(now.minusHours(1)).state as Number).floatValue -(temperatureHysteresis))
Ich habe keine influxdb. Nur rrd4j ohne spezielle Einstellungen.

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 11. Aug 2021 08:38
von HansDampf
Folgende Zeile produziert bei mir die untenstehende Fehlermeldung. Mein Gefühl sagt mir, es liegt an dem Wert der aus der InfluxDB geholt wird?
Home_Current_Temperature wird in der InfluxDB gespeichert.

Code: Alles auswählen

val Boolean isTemperature = ((Home_Current_Temperature.state as Number).floatValue < (Home_Current_Temperature.minimumSince(now.minusHours(1), "influxdb").state as DecimalType - (temperatureHysteresis)))

Code: Alles auswählen

2021-08-11 07:11:14.242 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'shutter-2' failed: Could not cast 13.32 °C to org.openhab.core.library.types.DecimalType; line 291, column 91, length 89 in shutter
Kann jemand ein Fehler sehen?

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Verfasst: 11. Aug 2021 17:07
von udo1toni
Steht ja direkt in englisch da. influxdb speichert die Einheit mit ab. Die Meldung “Could not cast 13.32 °C…” besagt genau das. Der Wert ist eben kein DecimalType, sondern ein QuantityType. Number ist der Überbegriff. Im ersten Teil des Vergleichs verwendest Du die korrekte Form ( (… as Number).floatValue) und genau so muss das auch für den aus der Datenbank extrahierten Wert eingegeben werden.


Gesendet von iPad mit Tapatalk