Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

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

Beitrag von Cyrelian »

hi,

aus diesem Grund nehme ich zwei Wetterdienste und ermittle dann den Durchschnittswert der letzten Stunde. Ich muss sagen, dass läuft super.
Die Daten von openweathermap waren mir einfach zu grob. Wie Peter schon sagt, 20%,40%...usw. Zusätzlich hole ich jetzt noch Daten mit ForecastIO.
Alles zusammen weg schreiben und dann durchschnitt ermitteln.

CYA
Cyrelian

jensilein
Beiträge: 34
Registriert: 24. Feb 2018 09:11

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

Beitrag von jensilein »

Hi Cyrelian.

das wollte ich auch machen, aber irgendwie bekomme ich die Daten von ForecastIo nicht richtig eingebunden. Einen API-Key habe ich und auch soweit alles eingerichtet, aber irgendwie bekomme ich die Daten nicht rein. Hast Du noch einen Tipp bzw. eine kurze Anleitung für die erfolgreiche Einrichtung von ForecastIo?

VG

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

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

Beitrag von Cyrelian »

Hi,

eigentlich relativ "straightforward".
Das "alte" Weather-Binding installiert. Die weather.cfg angepasst:

Code: Alles auswählen

# The apikey for the different weather providers, at least one must be specified
# Note: Hamweather requires two apikeys: client_id=apikey, client_secret=apikey2
apikey.ForecastIo=XXXXXXXXXXXXXXXXXXXXX
#apikey.WorldWeatherOnline=
#apikey.Hamweather=
#apikey2.Hamweather=
#apikey.Meteoblue=

# location configuration, you can specify multiple locations

location.home.name=Parkstrasse
location.home.latitude=XXXXXXXX
location.home.longitude=XXXXXXXXX
location.home.provider=ForecastIo
location.home.language=de
location.home.updateInterval=10
und dann die ITEMS:

Code: Alles auswählen

/* -------------  Dark Sky ITEMS --------------------
 */

// atmosphere
Number   Humidity    	  "Luftfeuchtigkeit [%d %%]"	<humidity>	{weather="locationId=home, type=atmosphere, property=humidity"}
Number   Visibility    	  "Sichtweite [%.2f km]"					{weather="locationId=home, type=atmosphere, property=visibility"}
Number   Pressure    	  "Luftdruck [%.2f mb]"			<pressure>	{weather="locationId=home, type=atmosphere, property=pressure"}
String   Pressure_Trend   "Luftdrucktendenz [%s]"  		<pressure>	{weather="locationId=home, type=atmosphere, property=pressureTrend"}
Number   Ozone            "Ozone [%d ppm]"    						{weather="locationId=home, type=atmosphere, property=ozone"}
Number   UV_Index         "UV Index"        					    {weather="locationId=home, type=atmosphere, property=uvIndex, scale=0"}

// clouds
Number   Clouds   "Aktuelle Bewölkung [%.0f %%]"  <sun_clouds> {weather="locationId=home, type=clouds, property=percent"}

// condition
String   Condition        "Condition [%s]"      									{weather="locationId=home, type=condition, property=text"}
String   Condition_ID     "Condition id [%s]"   									{weather="locationId=home, type=condition, property=id"}
DateTime ObservationTime  "Beobachtungszeit [%1$td.%1$tm %1$tH:%1$tM Uhr]"  		{weather="locationId=home, type=condition, property=observationTime"}
DateTime LastUpdate       "Letztes Update [%1$td.%1$tm %1$tH:%1$tM Uhr]"  <time>  	{weather="locationId=home, type=condition, property=lastUpdate"}
String   CommonId         "Wetter aktuell [MAP(weather_de.map):%s]"       <time>	{weather="locationId=home, type=condition, property=commonId"}

// precipitation
Number   Rain          		"Aktueller Niederschlag (Regen)  [%.2f mm/h]"  <rain> {weather="locationId=home, type=precipitation, property=rain"}
Number   Snow          		"Aktueller Niederschlag (Schnee)  [%.2f mm/h]" <snow> {weather="locationId=home, type=precipitation, property=snow"}
Number   Precip_Probability "Precip probability [%d %%]"  				   <rain> {weather="locationId=home, type=precipitation, property=probability"}

// temperature
Number   Temperature      "Aktuelle Aussentemperatur [%.2f °C]" <temperature>   {weather="locationId=home, type=temperature, property=current"}
Number   Temp_Feel        "Gefühlte Temperatur [%.2f °C]"  		<temperature>	{weather="locationId=home, type=temperature, property=feel"}
Number   Temp_Dewpoint    "Taupunkt [%.2f °C]"          		<temperature>	{weather="locationId=home, type=temperature, property=dewpoint"}

// min and max values only available in forecasts
Number   Temp_Min         "Tagestemperatur min [%.2f °C]"   <temperature> {weather="locationId=home, type=temperature, property=min"}
Number   Temp_Max         "Tagestemperatur max [%.2f °C]"   <temperature> {weather="locationId=home, type=temperature, property=max"}
String   Temp_MinMax      "Tagestemperatur Min/Max [%s °C]" <temperature> {weather="locationId=home, type=temperature, property=minMax"}

// wind
Number   Wind_Speed           "Windgeschwindigkeit [%.2f km/h]"    	<wind>	{weather="locationId=home, type=wind, property=speed"}
Number   Wind_Speed_Beaufort  "Windgeschwindigkeit (Beaufort) [%d]" <wind> 	{weather="locationId=home, type=wind, property=speed, unit=beaufort"}
String	 Wind_Direction       "Windrichtung [%s]"      						{weather="locationId=home, type=wind, property=direction"}
Number   Wind_Degree          "Wind degree [%.0f °]"    					{weather="locationId=home, type=wind, property=degree"}
Number   Wind_Gust            "Windbö [%.2f km/h]"    						{weather="locationId=home, type=wind, property=gust"}
Number   Wind_Gust_Beaufort   "Windbö (Beaufort) [%d]"  					{weather="locationId=home, type=wind, property=gust, unit=beaufort"}
Number   Wind_Chill           "Windkühle [%.2f °C]"     					{weather="locationId=home, type=wind, property=chill"}
Das wars.

CU
Cyrelian

jensilein
Beiträge: 34
Registriert: 24. Feb 2018 09:11

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

Beitrag von jensilein »

Hi Cyrelian,

vielen Dank für die Antwort. Genau so wie Du es beschreibst, habe ich es eingerichtet, aber verdammt Axt, es will auf diese Weise nicht funktionieren. Ich habe dann in der OpenHAB Community glücklicherweise noch einen alternativen Weg gefunden, der prima funktioniert, und zwar über das http-Binding. Hier mal der Link zu dem Beitrag, falls es jemanden interessieren sollte:

https://community.openhab.org/t/darksky ... json/70817

Damit kann ich mir jetzt auch einen Bewölkungs-Mittelwert aus zwei verschiedenen Provider-Daten berechnen :)

Eine Frage habe ich noch zur Berücksichtigung der Bewölkung in Deiner rule. Was genau machst Du mit der "durchschnittlichen Bewölkung der letzten Stunde"? Lese ich die rule richtig, dass Du prüfst, ob die durchschnittliche Bewölkung der letzten Stunde größer/gleich dem CloudHysterese-Sollwert ist und falls das so sein sollte, dann wird die Verschattung beendet? Für das Abfahren der Rollos berücksichtigst Du die durchschnittliche Bewölkung der letzten Stunde hingegen nicht?

VG

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

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

Beitrag von Cyrelian »

jensilein hat geschrieben: 19. Aug 2019 21:04 Eine Frage habe ich noch zur Berücksichtigung der Bewölkung in Deiner rule. Was genau machst Du mit der "durchschnittlichen Bewölkung der letzten Stunde"? Lese ich die rule richtig, dass Du prüfst, ob die durchschnittliche Bewölkung der letzten Stunde größer/gleich dem CloudHysterese-Sollwert ist und falls das so sein sollte, dann wird die Verschattung beendet? Für das Abfahren der Rollos berücksichtigst Du die durchschnittliche Bewölkung der letzten Stunde hingegen nicht?

VG
Hi,

absolut korrekt. Genau so wie du es beschrieben hast.

CU
Cyrelian

DerMalte
Beiträge: 1
Registriert: 26. Aug 2019 10:19

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

Beitrag von DerMalte »

Hi Cyrelian,
versuche gerade die Rollosteuerung mit der Rule von Seite 5 ganz unten bei mir zu Konfigurieren.

Kannst Du bitte nochmal deine aktuelle Rollosteuerung.items und die dazugehörige Sitemap hier posten oder PM ?

Dankö

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

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

Beitrag von Cyrelian »

Hi Malte,

klar, kein Thema. here you go :D :

ITEMS:

Code: Alles auswählen

/* -------------  Rollladensteuerung --------------------
 */

// -------------  Manuell --------------------

Switch 		ManualShading 						"Manuelle Verschattung an/aus" 					(gInitializeOff)

// -------------  Automatic --------------------

Switch 		AutoShading		 					"Automatische Verschattung" 															(gShading,gInitializeOn)
Switch		AutoShading_end						"Rollladen automatisch öffnen"															(gShading,gInitializeOn)
Number		AutoShading_Temp_min 				"Temperatur größer [%d °C]"												<temperature>	(gShading)
Number		AutoShading_Temp_raise				"Temperatur zum hochfahren der Rollladen [%d °C]"						<temperature>	(gShading)
Number		AutoShading_Temp_diff 				"Temperaturunterschied der letzten Stunde [- %d °C]"					<temperature>	(gShading)
Number		AutoShading_Cloudiness_max 			"Bewölkung weniger als [%d Prozent]"									<sun_clouds>	(gShading)
Number		AutoShading_Cloudiness_Hyst			"Durchschn. Bewölkung der letzten Stunde größer gleich [%d Prozent]"	<sun_clouds>	(gShading)
Number		AutoShading_Rain_min				"Mindestregenmenge der letzten Stunde größer gleich [%.2f mm/h]"		<sun_clouds>	(gShading)
Number		AutoShading_Azimuth_east 			"Sonnenrichtung / Azimuth (Ost) größer gleich [%d °]"					<compass>		(gShading)
Number		AutoShading_Azimuth_south			"Sonnenrichtung / Azimuth (Süd) größer gleich [%d °]"					<compass>		(gShading)
Number		AutoShading_Azimuth_west 			"Sonnenrichtung / Azimuth (West) größer gleich [%d °]"					<compass>		(gShading)
Number		AutoShading_Elevation_end 			"Sonnenhöhe / Elevation kleiner gleich [%d °]"							<niveau>		(gShading)
DateTime	AutoShading_Start_last 				"Letzte Ausführung (Rollladen ab) [%1$td.%1$tm %1$tH:%1$tM Uhr]"		<time> 			(gShading)
DateTime	AutoShading_End_last				"Letzte Ausführung (Rollladen hoch) [%1$td.%1$tm %1$tH:%1$tM Uhr]"		<time> 			(gShading)

RULE:

Code: Alles auswählen

// Values und Variablen für die Verschattung

//val Number blindClosed = 100
//val Number blindOpen = 0
//val Number blindTranslucent = 35

var Number closingAzimuth_west = 181
var Number closingAzimuth_south = 111
var Number closingAzimuth_east = 65

var Number closingCloudiness = 20   
val Number cloudHysteresis = 45         //die Mindestbewölkung in der letzten Stunde
var Number openingTemperature = 22
val Number temperatureHysteresis = 4    //Temperaturabfall von min. 4 Grad in der letzten Stunde
val Number minPrecip = 5                //die Mindestmenge an Regen in der letzten Stunde

var boolean isActiveWest = false
var boolean isActiveEast = false
var boolean isActiveSouth = false


/* -------------  Verschattung FUNKTIONEN --------------------
*/
//-------------  Verschattung starten --------------------

val shadingStart = [GroupItem shutter |

        val String logPrefix = "Verschattung aktivieren - "
        var boolean log = true

                val Map<String, Number> targetHights = newHashMap ( 
                "KuecheRollladenTuer" -> 58,
                "SchlafzimmerRollladenTuer" -> 100,
                "BadezimmerRollladen" -> 55,
                "WohnzimmerRollladenEsstisch" -> 65,
                "WohnzimmerRollladenTuer" -> 68,
                "WohnzimmerRollladenBalkon" -> 100
                )

                if ((Temperature.state as Number).floatValue <= (AutoShading_Temp_min.state as Number)) {
                        //if (log) logInfo ("Lambda", logPrefix + "Mindesttemperatur von (" + AutoShading_Temp_min.state.toString() + ") wurde nicht erreicht. Aktuelle Temperatur (" + Temperature.state.toString() + ")")
                        if (log) logInfo ("Lambda", logPrefix + "Mindesttemperatur von ({}) wurde nicht erreicht. Aktuelle Temperatur ({}) ", AutoShading_Temp_min.state, Temperature.state)
                        return false;
                }

                if ((Clouds.state as Number).floatValue > (AutoShading_Cloudiness_max.state as Number)) { 
                        //if (log) logInfo ("Lambda", logPrefix + "Aktuelle Bewoelkung (" + Clouds.state.toString() + ") ueberschreitet den eingestellten Grenzwert von (" + AutoShading_Cloudiness_max.state.toString() + ")")
                        if (log) logInfo ("Lambda", logPrefix + "Aktuelle Bewoelkung ({}) ueberschreitet den eingestellten Grenzwert von ({})", Clouds.state, AutoShading_Cloudiness_max.state)
                        return false;
                }

                if ((Elevation.state as Number) <= (AutoShading_Elevation_end.state as Number)) {
                        //if (log) logInfo ("Lambda", logPrefix + "Elevation für das Beenden der Verschattung (" + AutoShading_Elevation_end.state.toString() + ") ist groesser als aktuelle (" + Elevation.state.toString() + ")")
                        if (log) logInfo ("Lambda", logPrefix + "Elevation für das Beenden der Verschattung ({}) ist groesser als aktuelle ({}) ", AutoShading_Elevation_end.state, Elevation.state)
                        return false;
                }

                // Rollladen werden geschlossen
                if (log) logInfo("Lambda", logPrefix + "Grenzwert wurden erreicht, Rollladen werden geschlossen")

                shutter.members.forEach[ blind |
                    if ((blind.state as Number) < targetHights.get(blind.name.toString()).intValue) {
                        logInfo ("Lambda", logPrefix + "Fahre Rollladen (" + blind.name.toString() + ") auf (" + targetHights.get(blind.name.toString()).intValue + ") %" )
                        blind.sendCommand(targetHights.get(blind.name.toString()).intValue)
                        //Pushnachricht versenden
                        sendPushoverMessage(pushoverBuilder("Verschattung für " + blind.name.toString + " aktiviert, schließen auf " + targetHights.get(blind.name.toString()).toString() + " %"))
                    } else {
                        logInfo ("Lambda", logPrefix + "Rollladen ist bereits weiter geschlossen (" + blind.state.toString() + "%) als er geschlossen werden sollte und wird daher ignoriert")
                    }
                ]
                AutoShading_Start_last.postUpdate(now.toString())
    return true;
]

//-------------  Verschattung beenden -------------------

val shadingEnd = [GroupItem shutter |

        val String logPrefix = "Verschattung deaktivieren - "
        var boolean log = true

                    val Map<String, Number> targetHights = newHashMap ( 
                    "KuecheRollladenTuer" -> 58,
                    "SchlafzimmerRollladenTuer" -> 100,
                    "BadezimmerRollladen" -> 55,
                    "WohnzimmerRollladenEsstisch" -> 65,
                    "WohnzimmerRollladenTuer" -> 68,
                    "WohnzimmerRollladenBalkon" -> 100
                     )
                    
                    // Rollladen öffnen
                    if (log) logInfo ("Lambda", logPrefix + "Rollladen werden geoeffnet")
                    shutter.allMembers.forEach[blind|
                        if((blind.state as Number).intValue == targetHights.get(blind.name).intValue) {
                            logInfo ("Lambda", logPrefix + "Oeffne Rollladen: " + blind.name.toString())
                            blind.sendCommand(UP)
                            //Pushnachricht versenden                        
                            sendPushoverMessage(pushoverBuilder("Verschattung für (" + blind.name.toString() + ") beendet, Rollladen wird geöffnet."))
                        } else {
                            logInfo ("Lambda", logPrefix + "Rollladen: (" + blind.name.toString() + ") wird nicht geoeffnet, da dieser zwischenzeitlich manuell verändert wurde.")
                        }    
                    ]                         
                    // Letzte Ausführung mit entsprechendem Zeitstempel belegen
                    AutoShading_End_last.postUpdate(now.toString())
                    
                    //Variablen zurücksetzen
                    isActiveWest = false
                    isActiveEast = false
                    isActiveSouth = false
    return true;
]

/* -------------  Verschattung RULES --------------------
*/
//-------------  Verschattung starten --------------------

rule "Verschattung starten"
when
    Item Azimuth changed
then
    val String logPrefix = "Verschattung aktivieren - "
    
    //Prüfung auf: Verschattungsautomatik an / ob es Tag ist / Präsenz / Jahreszeit
    if ((AutoShading.state == ON && IsDay.state == ON) && (DinesiPhone_Presence.state == OFF && OllisiPhone_Presence.state == OFF) && (Jahreszeit.state=="SPRING" || Jahreszeit.state=="SUMMER")) {
               
            if (AutoShading_Start_last.state === NULL) {
                if (log) logInfo(logPrefix, 'Letzte Ausführung unbekannt, Belegung mit Initialwert (-1 Tag)')
                    AutoShading_Start_last.postUpdate(now.minusDays(1).toString())
                }
            
            //var String timeNow = now.toString().substring(0,10)
            //var String timeLastStart = AutoShading_Start_last.state.toString().substring(0,10)
            
            // Items für Sitemap füllen
            if (AutoShading_Azimuth_east == "NULL" ||  AutoShading_Azimuth_south == "NULL" || AutoShading_Azimuth_west == "NULL" ){
                    AutoShading_Azimuth_east.postUpdate(closingAzimuth_west)
                    AutoShading_Azimuth_south.postUpdate(closingAzimuth_south)
                    AutoShading_Azimuth_west.postUpdate(closingAzimuth_west)
                    AutoShading_Temp_diff.postUpdate(temperatureHysteresis)
                    AutoShading_Cloudiness_Hyst.postUpdate(cloudHysteresis)
                    AutoShading_Rain_min.postUpdate(minPrecip)
            }
            
            //Azimuth ist größer als 181° (WEST)
            if (!isActiveWest) { 
                if ((Azimuth.state as Number).floatValue > (closingAzimuth_west)) {
                    if (log) logInfo (filename, logPrefix + "Verschattung für Rollläden WEST")
                    isActiveWest = shadingStart.apply(gRollladenWest)
                    return;
                }      
            } else {
                     if (log) logInfo (filename, logPrefix + "Verschattung für Rollläden WEST bereits aktiviert")
                } 
        
            //Azimuth ist größer als 111° (SÜD)
           if (!isActiveSouth) { 
                if ((Azimuth.state as Number).floatValue > (closingAzimuth_south) && (Azimuth.state as Number).floatValue < (closingAzimuth_west)) {
                    if (log) logInfo (filename, logPrefix + "Verschattung für Rollläden SÜD")
                    isActiveSouth = shadingStart.apply(gRollladenSouth)
                    return;
                }
           } else {
                     if (log) logInfo (filename, logPrefix + "Verschattung für Rollläden SÜD bereits aktiviert")
                }

            //Azimuth ist größer als 65° (OST)
            if (!isActiveEast) { 
                if ((Azimuth.state as Number).floatValue > (closingAzimuth_east) && (Azimuth.state as Number).floatValue < (closingAzimuth_south)) {
                    if (log) logInfo (filename, logPrefix + "Verschattung für Rollläden OST")
                    isActiveEast = shadingStart.apply(gRollladenEast)
                return;
                }
            } else {
                     if (log) logInfo (filename, logPrefix + "Verschattung für Rollläden OST bereits aktiviert")
                }
    
    } else {
            if (log) logInfo(filename, logPrefix + "Verschattung wird nicht ausgeführt, da einer der folgenden Parameter matched: Verschattung deakiviert, es ist Nacht, Herbst oder Winter oder Anwesenheit erkannt.")
           }

end

//-------------  Verschattung beenden --------------------

rule "Verschattung beenden"
when 
    Item Elevation changed
then   
    if ((AutoShading_end.state == ON && IsDay.state == ON) && (Jahreszeit.state=="SPRING" || Jahreszeit.state=="SUMMER")) {
                    
            val String logPrefix = "Verschattung deaktivieren - "
            
            val boolean isRainLastHour = (Rain.maximumSince(now.minusHours(1), "influxdb").state >= (minPrecip))
            if (log) logInfo(filename, logPrefix + "Rain " + isRainLastHour)
            
            val boolean isCloudLastHour = (Clouds.averageSince(now.minusHours(1), "influxdb")as Number >= (cloudHysteresis))
            if (log) logInfo(filename, logPrefix + "Clouds " + isCloudLastHour )
            
            val boolean isTemperature = ((Temperature.state as Number).intValue < (Temperature.minimumSince(now.minusHours(1), "influxdb").state as DecimalType -(temperatureHysteresis)))
            if (log) logInfo(filename, logPrefix + "Temperatur " + isTemperature)
            
            
            if (AutoShading_End_last.state === NULL) {
                if (log) logInfo(logPrefix, "Letzte Ausführung unbekannt, Belegung mit Initialwert (-1 Tag)")
                    AutoShading_End_last.postUpdate(now.minusDays(1).toString())
                }

            var String timeNow = now.toString().substring(0,10)
            var String timeLastEnde = AutoShading_End_last.state.toString().substring(0,10)

            if (timeLastEnde == timeNow) {
                if (log) logInfo(filename, logPrefix + "Beende, da heute bereits ein automatisches Hochfahren stattfand")
                return;
            }

            if (!isActiveWest && !isActiveEast && !isActiveSouth) {
                if (log) logInfo(filename, logPrefix + "Beende, da heute noch keine automatische Verschattung stattfand")
                return;
            }

            if (isTemperature) {
                if (log) logInfo (filename, logPrefix + "Verschattung beenden, Temperaturabfall von min. ({})° erkannt", temperatureHysteresis)
                shadingEnd.apply(gRollladen)
                return;
            }

            if ((Temperature.state as Number).floatValue > (AutoShading_Temp_raise.state as Number)) {
                if (log) logInfo(filename, logPrefix + "Beende, aktuelle Temperatur ({})° ueberschreitet den eingestellten Grenzwert zum hochfahren von ({})°",Temperature.state, AutoShading_Temp_raise.state )
                return;
            }

            if (isRainLastHour || isCloudLastHour) {
                if (log) logInfo (filename, logPrefix + "Verschattung beenden, Mindestregenmenge von ({}) mm oder druchschnittliche Bewölkung von ({}) % erreicht",minPrecip, cloudHysteresis)
                shadingEnd.apply(gRollladen)
                return;
            }
            if ((Elevation.state as Number) > (AutoShading_Elevation_end.state as Number)) {
               if (log) logInfo(filename, logPrefix + "Beende, aktuelle Elevation ({}) ueberschreitet den eingestellten Grenzwert von ({}) ", Elevation.state, AutoShading_Elevation_end.state)
               return;
            }
            if (isActiveWest || isActiveEast || isActiveSouth ) {
                if (log) logInfo (filename, logPrefix + "Verschattung beenden")
                shadingEnd.apply(gRollladen)
                return;
            }
        }            
end


/* -------------  Verschattung Variablen zurücksetzen wenn kein automtisches hochfahren erfolgt --------------------
*/

rule "Verschattung Variablen zurücksetzen"
when
        Time cron "15 59 23 * * ?"
then
        if (isActiveWest == true || isActiveEast == true || isActiveSouth == true) {
            isActiveWest = false
            isActiveEast = false
            isActiveSouth = false
        }
end
SITEMAP:

Code: Alles auswählen

Frame item=gRollladen label="Rollladensteuerung"{
				Switch	item=gRollladen label="Alle Rollläden" mappings=[UP="Hoch", STOP="X", DOWN="Runter"]					
				Text 	item=gShading label="Automatische Verschattung" icon="rollershutter" {
					Frame label="Verschattung aktivieren/deaktivieren" {
							Switch		item=AutoShading mappings=[ON="An", OFF="Aus"]
							Switch 		item=AutoShading_end mappings=[ON="An", OFF="Aus"]
						}
					Frame label="Verschattung starten, wenn..." {
							Setpoint 	item=AutoShading_Temp_min minValue=18 maxValue=40 step=1
							Text		item=Temperature valuecolor=[>27="red",>20="orange",>10="purple",>5="green",<=5="blue"]
							Setpoint	item=AutoShading_Cloudiness_max minValue=0 maxValue=100 step=5
							Text 		item=Clouds
							//Text		item=AutoShading_Azimuth_east	//minValue=45 maxValue=110 step=5
							//Text		item=AutoShading_Azimuth_south	//minValue=111 maxValue=180 step=5
							//Text	 	item=AutoShading_Azimuth_west 	//minValue=181 maxValue=340 step=5
							Default 	item=Azimuth
							Text		item=AutoShading_Start_last
						}
					Frame label="Verschattung beenden, wenn..." {
							Setpoint 	item=AutoShading_Elevation_end minValue=-20 maxValue=60 step=1
							Setpoint	item=AutoShading_Temp_raise minValue=15 maxValue=30 step=1
							Text		item=AutoShading_Temp_diff
							Text		item=AutoShading_Cloudiness_Hyst
							Text		item=AutoShading_Rain_min
							Default 	item=Elevation
							Text		item=AutoShading_End_last
							
						}
CU
Cyrelian

Knxpreiss
Beiträge: 1
Registriert: 21. Jan 2020 19:13

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

Beitrag von Knxpreiss »

Hallo zusammen,

erstmal Danke für diese Tolle Projekt.
Allerdings bekomme ich es nicht richtig zum Laufen und meine Kenntnisse sind auch ein wenig begrenzt. Ich hoffe Ihr verzeiht mit die unwissenden Fragen.
  • Beschattung Ost/Süd/West

Verstehe ich die .Rules Datei richtig das hier die Beschattungen freigeschaltet werden müssen?

Code: Alles auswählen

var boolean isActiveWest = true
var boolean isActiveEast = true
var boolean isActiveSouth = true
  • Fehlermeldung IsDay
Ich bekomme folgende Fehlermeldung im Log. Allerdings kann ich damit nichts anfangen. Kann mir jemand weiterhelfen?

Code: Alles auswählen

==> /var/log/openhab2/openhab.log <==

2020-01-22 15:29:00.023 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Verschattung starten': The name 'IsDay' cannot be resolved to an item or type; line 124, column 37, length 5
  • Gruppenadresse für die Beschattung
Werden die einzelnen Richtungen mit gRollladenWest usw. angesprochen?

Danke schon einmal für Hilfe

Benutzeravatar
udo1toni
Beiträge: 13859
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

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

Beitrag von udo1toni »

Code einfach kopieren, ohne ihn verstanden zu haben, ist nie eine gute Idee ;)
Die Fehlermeldung besagt, dass IsDay weder als Item noch als Variable gefunden wird. Ich hab mir jetzt die Rule nicht angeschaut ;) aber das ist der konkrete Fehler.

Am Rande: wenn man Variablen oder auch Konstanten definiert (var ...) und den Typ explizit angibt, gibt es zwei Möglichkeiten, nämlich die Definition also Objekt oder als Primitive. Dabei dauert die Definition als Primitive sehr viel länger (das liegt im Code im Hintergrund begründet), soll heißen, Objekte sind zu bevorzugen. Nicht jeder Typ ist in beiden Versionen verfügbar, teilweise differieren die Schlüsselworte etwas, im vorliegendne Fall (boolean) ist das Schlüsselwort aber identisch, nur mit einem Großbuchstaben am Anfang (der Großbuchstabe gilt für alle Objekte...) Besser wäre also die Definition so:

Code: Alles auswählen

var Boolean isActiveWest = true
var Boolean isActiveEast = true
var Boolean isActiveSouth = true
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

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

Beitrag von Cyrelian »

Knxpreiss hat geschrieben: 22. Jan 2020 15:32 Hallo zusammen,

erstmal Danke für diese Tolle Projekt.
Allerdings bekomme ich es nicht richtig zum Laufen und meine Kenntnisse sind auch ein wenig begrenzt. Ich hoffe Ihr verzeiht mit die unwissenden Fragen.
  • Beschattung Ost/Süd/West

Verstehe ich die .Rules Datei richtig das hier die Beschattungen freigeschaltet werden müssen?

Code: Alles auswählen

var boolean isActiveWest = true
var boolean isActiveEast = true
var boolean isActiveSouth = true
  • Fehlermeldung IsDay
Ich bekomme folgende Fehlermeldung im Log. Allerdings kann ich damit nichts anfangen. Kann mir jemand weiterhelfen?

Code: Alles auswählen

==> /var/log/openhab2/openhab.log <==

2020-01-22 15:29:00.023 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Verschattung starten': The name 'IsDay' cannot be resolved to an item or type; line 124, column 37, length 5
  • Gruppenadresse für die Beschattung
Werden die einzelnen Richtungen mit gRollladenWest usw. angesprochen?

Danke schon einmal für Hilfe
Hi,

dir Fehlen diese Items.

Code: Alles auswählen

Switch IsNight      "Es ist Nacht" <clearnight>        (gAstro)
Switch IsDay        "Es ist Tag" <clearday>            (gAstro)
Switch IsTwilight   "Es ist Dämmerung" <sun_clouds>    (gAstro)
Diese Schalter setze ich via Astro.

Ich habe die Rollläden eingeteilt und via gRollladenWest werden ALLE Rollladen auf der westlichen Seite des Hauses angesprochen. Die Zuordnung erfolgt in den einzelnen ITEMS.

CU
Cyrelian

Antworten