(gelöst) ASC Brightness mit Dummy aus UV-Wert und Sonnenstrahlung

Begonnen von ch.eick, 11 Juli 2019, 19:48:03

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,

ich habe frei nach diesem Beispiel  aus dem FHEMWiki mal etwas versucht und komme nicht weiter:
Zitat
Die nachfolgenden Beispiele sind ohne Trigger notiert. In der Regel sollte jedoch geprüft werden, ob nicht ein solcher Trigger gesetzt werden kann. Dies ist insbesondere in den Fällen sinnvoll, in denen in einem Gerät sehr viele Readings vorhanden sind, die ggf. zu unterschiedlichen Zeitpunkten aktualisiert werden. Das erste Beispiel wäre daher besser so zu schreiben:
attr ElbePegelSchoena userReadings Pegel:value.* { ReadingsVal("ElbePegelSchoena","value",0) }

Mein berechneter Wert soll nun ebenfalls einem userReadings zugewiesen werden und zwar, wenn sich Einer der Werte ändert.

defmod AR_O_Brightness_Test dummy
attr AR_O_Brightness_Test readingList state
attr AR_O_Brightness_Test room Rollos
attr AR_O_Brightness_Test userReadings Brightness:ASC_Astro:SunAlt.* {ReadingsVal("wetter_II","solarRadiation",0)*0.3 + ReadingsVal("wetter_II","solarUV",0)*0.5 + ReadingsVal("ASC_Astro","SunAlt",0)*0.8}


Brightness:ASC_Astro:SunAlt.*
Hierbei ist Brightness der Name des userReadings und
ASC_Astro:SunAlt.* das device mit dem sich ändernden Wert "SunAlt"

Wird die Formel in der fhem Kommandoeingabe eingegeben bekomme ich bereits einen Zahlenwert geliefert.

{ReadingsVal("wetter_II","solarRadiation",0)*0.3 + ReadingsVal("wetter_II","solarUV",0)*0.5 + ReadingsVal("ASC_Astro","SunAlt",0)*0.8}

==> 51.22


Die Frage ist nun, wie muss der Trigger angegeben werden, damit hinterher das readings "Brightness" im Dummy geschrieben wird.

Welche anderen Möglichkeiten würde es noch geben?
Ich wollte versuchen nur mit dem Dummy aus zu kommen, wenn es geht.

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

amenomade

#1
Ein Userreading kann nur vom selben Device getriggert werden.
Um ein Device abhängig von einem anderen Device zu aktualisieren, nutz man ein notify
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

Danke, dann probiere ich das morgen mal aus.

Gesendet von meinem SM-G930F mit Tapatalk

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hallo nochmal,

ich habe meine Zahlen Jonglage nochmals verändert und werde das jetzt mal mit dem bedürfniss nach Beschattung in der Realität abgleichen, damit ich für die Brightness Werte im ASC entsprechende Schwellwerte setzen kann.

Und so siehts dann jetzt aus:

ASC_Brightness ist ein Dummy als Device im ASC für die Beschattung

Internals:
   CFGFN     
   FUUID      5d283cc7-f33f-81e9-4514-7d518b34dd64080d
   NAME       ASC_Brightness
   NR         11948
   STATE      324.375
   TYPE       dummy
   READINGS:
     2019-07-12 11:56:49   state           324.375
Attributes:
   room       Rollos


ASC_Brightness_calc ist meine Zahlen Jonglage, ohne mathematischen oder wissenschaftlichen Hintergrund.
Es geht hierbei nur darum einen Zahlenwert in einem limitierten Bereich zu bekommen.
Hier wäre der Platz für Eure Ideen :-)

Internals:
   CFGFN     
   DEF        ASC_Astro:SunAlt.* {fhem "set ASC_Brightness ".( (ReadingsVal("wetter_wolfskehlen_II","solarRadiation",0)*0.5 +1) * (ReadingsVal("wetter_wolfskehlen_II","solarUV",0)*0.8 +1) /4) }
   FUUID      5d283d2b-f33f-81e9-fdb9-fe47aa9028aa3556
   NAME       ASC_Brightness_calc
   NOTIFYDEV  ASC_Astro
   NR         11959
   NTFY_ORDER 50-ASC_Brightness_calc
   REGEXP     ASC_Astro:SunAlt.*
   STATE      2019-07-12 11:56:49
   TRIGGERTIME 1562925409.3513
   TYPE       notify
   READINGS:
     2019-07-12 11:27:32   state           active
Attributes:
   room       Rollos


Zur Beschreibung des Ablaufs:
1) bei Änderung des readings ASC_Astro:SunAlt reagiert das notify und setzt den fhem Befehl ab.
    ASC_Astro wird zyklisch aktualisiert und liefert z.B. die Sonnenposition und Sonnenhöhe (SunAlt)
    Steht die Sonne höher am Himmel kann es auch wärmer sein und die Sonne zum Fenster herein lunzen.

2) Mein Brightness Wert (der hat bei mir nicht wirklich was mit Brightness zu tun ;-) ) setzt sich nun wie folgt zusammen.

    solarRadiation ist die Strahlungsintensität von 0 - 1000
    solarUV ist der UV Faktor, der den Sonnenbrand verursacht

    und dann noch die Zahlen Jonglage, damit sich beides zu einem Wert vereint :-) Die Faktoren und Zahlen sind reine Bauchentscheidungen.

3) Nun wird das ganze dann dem Dummy ASC_Brightness zugewiesen

4) Sobald das ASC Modul nun im shading in/out Modus ist wird das zugewiesene Brightness Device (mein Dummy) zu rate gezogen.

5) Dei jedem Rollo habe ich somit einen variablen Entscheidungsanteil, der sich ein wenig an den Wetter daten orientieren kann.

6) Im ASC und den ASC Attributen der Rollos kann dann nun durch die
    - Winkeldaten der Fenster (aus dem Astro Modul SunAz), dem
    - Höhenwinkel der Sonne (SunAlt), der
    - Außentemperatur (bei mir aus der Luft Wärme Pumpe, die im Süden in der vollen Sonne steht) und dem
    - Brightness Wert (aus Sonnenstrahlung und UV Index)
    eine Entscheidung für die Beschattung getroffen werden.

7) Nun müssen nur die individuellen, persönlichen Vorlieben gefunden werden, um die passenden Werte im FHEM einzutragen.
    Hier bietet es sich dann wirklich an, an einem Mustertag die Werte mal neben der Hausarbeit mit zu schneiden.

Viel Spaß
    Christian

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hallo zusammen,

falls jemand interesse hat habe ich das ganze noch etwas verfeinert und nutze jetzt drei Wetterstationen mit einem Durchschnittswert. Das hat die Spitzen bei Bewölkung in dem Wert etwas geglättet und die Rollos fahren nicht so häufig.

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hallo eurofinder,

danke für Dein Interesse. Ich stell dann hier noch die aktuellen RAW Devices zur Verfügung.

ASC_Brightness

defmod ASC_Brightness dummy
attr ASC_Brightness group ASC Environment
attr ASC_Brightness icon sani_solar_temp
attr ASC_Brightness readingList brightness
attr ASC_Brightness room Rollos
attr ASC_Brightness setList brightness:slider,0,100,1000
attr ASC_Brightness sortby 06
attr ASC_Brightness stateFormat brightness

setstate ASC_Brightness 8
setstate ASC_Brightness 2019-08-17 10:23:49 brightness 8


ASC_Brightness_calc ist ein notify, das auf den Sonnenstand des Astro Device reagiert.
Somit hängt die Häufigkeit der Berechnung vom Intervall des Astro Device ab.

defmod ASC_Brightness_calc notify ASC_Astro:SunAlt.* {fhem "setreading ASC_Brightness brightness ".(sprintf("%4.0f", (((ReadingsVal("wetter_<Ort>_II","solarRadiation",0)*0.5 +1) * (ReadingsVal("wetter_<Ort>_II","solarUV",0)*0.8 +1) /4) + ((ReadingsVal("wetter_<Ort>_III","solarRadiation",0)*0.5 +1) * (ReadingsVal("wetter_<Ort>_III","solarUV",0)*0.8 +1) /4) + ((ReadingsVal("wetter_<Ort>_IV","solarRadiation",0)*0.5 +1) * (ReadingsVal("wetter_<Ort>_IV","solarUV",0)*0.8 +1) /4) + ReadingsVal("ASC_Brightness","brightness",0) ) / 4 ))}
attr ASC_Brightness_calc group ASC Environment
attr ASC_Brightness_calc icon access_keypad_2
attr ASC_Brightness_calc room Rollos
attr ASC_Brightness_calc sortby 07

setstate ASC_Brightness_calc 2019-08-17 10:23:49
setstate ASC_Brightness_calc 2019-08-09 15:32:10 state active

In der Zahlen Jonglage wird der Durchschnitt der drei Wetterstationen und vom bisherigen Wert berechnet. Das glättet die Kurve und beseitigt ein wenig den Effekt von schwankender Bewölkung.
Die Faktoren 0.5 und 0.8 geben eine gewisse Gewichtung der Werte.
Das +1 verhindert einen Null Wert.
Und die Division durch 4 ist ein frei erfundener Wert, um die Zahlenwerte nicht zu hoch werden zu lassen. Ich hab lieben nur Werte zwischen 0 und ca. 1000 :-)
Im angehängten Bild sind mal Beispielkurven. Hier habe ich für die Anzeige nochmals durch 10 dividiert, dann sieht es hübscher im Verhältnis zu den Temperaturen aus.
Wz,Az,Sc sind Raumbezeichnungen, die mit "position" das "shading in/out" zeigen. Das klappt nicht so ganz optimal, da die Werte nicht allzuhäufig auftreten.
Die Positionsdarstellungen gegen 19:30 im Diagramm sind von der "privacy" Fahrt und vom "day close" beim Sonnenuntergang. Hier sieht man auch den Darstellungsfehler, da die Linie nach dem "day close" im Diagramm fehlt. Das passiert aufgrund des Tageswechsels bei der Diagrammerstellung.
An dem dargestellten Tag ist nur das Ost Fenster beschattet worden, die anderen Fenster haben andere Schwellwerte, die nicht erreicht wurden. Der WAF ist super ;-)

Das sind nun die ASC Attribute mit Relevanz für "shading", die ich verwendet habe  im Device AR_O_Rollo_FSB61
Das Fenster ist im Osten, für die anderen Fenster sind die Werte natürlich unterschiedlich.

attr AR_O_Rollo_FSB61 ASC_BrightnessSensor ASC_Brightness:brightness
attr AR_O_Rollo_FSB61 ASC_Pos_Reading position
attr AR_O_Rollo_FSB61 ASC_Shading_Angle_Left 15
attr AR_O_Rollo_FSB61 ASC_Shading_Angle_Right 40
attr AR_O_Rollo_FSB61 ASC_Shading_Direction 90
attr AR_O_Rollo_FSB61 ASC_Shading_MinMax_Elevation 16
attr AR_O_Rollo_FSB61 ASC_Shading_Min_OutsideTemperature 20
attr AR_O_Rollo_FSB61 ASC_Shading_Pos 60
attr AR_O_Rollo_FSB61 ASC_Shading_StateChange_Cloudy 180
attr AR_O_Rollo_FSB61 ASC_Shading_StateChange_Sunny 200
attr AR_O_Rollo_FSB61 ASC_Up astro


Dann noch das Astro device

defmod ASC_Astro Astro
attr ASC_Astro group ASC Environment
attr ASC_Astro icon telescope
attr ASC_Astro interval 600
attr ASC_Astro recomputeAt NewDay,SunRise,SunSet,AstroTwilightEvening,AstroTwilightMorning,CivilTwilightEvening,CivilTwilightMorning,CustomTwilightEvening,CustomTwilightMorning
attr ASC_Astro room Rollos
attr ASC_Astro sortby 08


Für das Astro Device sind dann noch diese Attribute in der fhem.cfg zu setzen

attr global altitude xx
attr global latitude yy
attr global longitude zz


Von diesen Wetter Devices habe ich drei mit UV Index und SolarRadiation in meiner Nähe gesucht.
Eine Station ist direkt in meinem Ort wetter_<Ort>_I , hat jedoch nicht die benötigten Werte und wird somit nur für die Wettersituation bei uns verwendet.
II,III,IV sind dann Stationen mit UV und SolarRadiation

defmod wetter_<Ort>_II HTTPMOD http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=<Wetterstation bei wunderground> 900
attr wetter_<Ort>_II userattr event-on-change-reading reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex reading11Name reading11Regex reading12Name reading12Regex reading13Name reading13Regex reading14Name reading14Regex reading15Name reading15Regex reading16Name reading16Regex reading17Name reading17Regex reading18Name reading18Regex
attr wetter_<Ort>_II alias wetter_<Ort>_II
attr wetter_<Ort>_II event-on-change-reading dewpointTemperature,humidity,preciptodaymetric,pressure,solarRadiation,solarUV,temperature,windDegrees,windGust,windSpeed,precip1hrmetric
attr wetter_<Ort>_II group ASC Environment
attr wetter_<Ort>_II icon weather_sunrise
attr wetter_<Ort>_II reading01Name cloudiness
attr wetter_<Ort>_II reading01Regex cloudiness id="NN" percent="([\d\.]+)
attr wetter_<Ort>_II reading02Name date
attr wetter_<Ort>_II reading02Regex date date" content="([\d\.]+)
attr wetter_<Ort>_II reading03Name dewpointTemperature
attr wetter_<Ort>_II reading03Regex <dewpoint_c>([\d\.]+)
attr wetter_<Ort>_II reading04Name fog
attr wetter_<Ort>_II reading04Regex fog id="FOG" percent="([\d\.]+)
attr wetter_<Ort>_II reading05Name heatindex
attr wetter_<Ort>_II reading05Regex <heat_index_c>([\d\.]+)
attr wetter_<Ort>_II reading06Name humidity
attr wetter_<Ort>_II reading06Regex <relative_humidity>([\d\.]+)
attr wetter_<Ort>_II reading07Name precip1hrmetric
attr wetter_<Ort>_II reading07Regex <precip_1hr_metric>([\d\.]+)
attr wetter_<Ort>_II reading08Name preciptodaymetric
attr wetter_<Ort>_II reading08Regex <precip_today_metric>([\d\.]+)
attr wetter_<Ort>_II reading09Name pressure
attr wetter_<Ort>_II reading09Regex <pressure_mb>([\d\.]+)
attr wetter_<Ort>_II reading10Name solarRadiation
attr wetter_<Ort>_II reading10Regex <solar_radiation>([\d\.]+)
attr wetter_<Ort>_II reading11Name solarUV
attr wetter_<Ort>_II reading11Regex <UV>([\d\.]+)
attr wetter_<Ort>_II reading12Name temperature
attr wetter_<Ort>_II reading12Regex <temp_c>([-]*[\d\.]+)
attr wetter_<Ort>_II reading13Name time
attr wetter_<Ort>_II reading13Regex time Zeit([\d\:]+)
attr wetter_<Ort>_II reading14Name windChill
attr wetter_<Ort>_II reading14Regex <windchill_c>([\d\.]+)
attr wetter_<Ort>_II reading15Name windDegrees
attr wetter_<Ort>_II reading15Regex <wind_degrees>([\d\.]+)
attr wetter_<Ort>_II reading16Name windDirection
attr wetter_<Ort>_II reading16Regex <wind_dir>([\d\.]+)
attr wetter_<Ort>_II reading17Name windGust
attr wetter_<Ort>_II reading17Regex <wind_gust_mph>([\d\.]+)
attr wetter_<Ort>_II reading18Name windSpeed
attr wetter_<Ort>_II reading18Regex <wind_mph>([\d\.]+)
attr wetter_<Ort>_II room Informationen->Wetter,Rollos
attr wetter_<Ort>_II sortby 03
attr wetter_<Ort>_II stateFormat temperature | solarRadiation | solarUV

setstate wetter_<Ort>_II 17.6 | 44 | 0.0
setstate wetter_<Ort>_II 2019-08-17 10:19:12 dewpointTemperature 15.9
setstate wetter_<Ort>_II 2019-08-09 19:32:42 heatindex 27
setstate wetter_<Ort>_II 2019-08-17 10:19:12 humidity 90
setstate wetter_<Ort>_II 2019-08-17 10:19:12 precip1hrmetric 0.1
setstate wetter_<Ort>_II 2019-08-17 10:19:12 preciptodaymetric 0.0
setstate wetter_<Ort>_II 2019-08-17 10:19:12 pressure 1006.7
setstate wetter_<Ort>_II 2019-08-17 10:19:12 solarRadiation 44        <======= Das muss die Wetterstation bereit stellen.
setstate wetter_<Ort>_II 2019-08-17 10:19:12 solarUV 0.0                     <======= Auf der WEB Seite muss man Bei den Stationen in der Nähe nachschauen.
setstate wetter_<Ort>_II 2019-08-17 10:19:12 temperature 17.6
setstate wetter_<Ort>_II 2019-08-17 10:19:12 windDegrees 187
setstate wetter_<Ort>_II 2019-08-17 10:19:12 windGust 3.4
setstate wetter_<Ort>_II 2019-08-17 10:19:12 windSpeed 3.1
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

eurofinder

RPI3+; Raspbian Buster Lite; RPI-RF-MOD; piVCCU3, HMIP-eTRV-2, HmIP-SWDO, HmIP-SRH, HmIP-STHO, HmIP-SLO

ch.eick

Hallo zusammen,
es ist zwar schon einige Jahre alt, jedoch verwende ich das Abblenden mit den Rollos immernoch.
Wunderground hat natürlich seit dem letzten Sommer mal wieder die Seite, die man ohne Zugang abfragen kann verändert, aber Regex kann es trotzdem lesen :-)

In diesem Beispiel gehe ich auf den letzten Eintrag in der Tabelle
defmod x HTTPMOD https://www.wunderground.com/dashboard/pws/<stationID> 900
attr x userattr reading08OExpr reading10OExpr reading12OExpr reading15OMap
attr x DbLogExclude .*
attr x DbLogInclude solarRadiation,solarUV,temperature
attr x alias <Euer Name>
attr x disable 0
attr x enableControlSet 1
attr x event-on-change-reading solarRadiation,solarUV,temperature
attr x group ASC Environment
attr x icon weather_sunrise
attr x reading01Name date
attr x reading01Regex Summary<.*>([[:alpha:]]{1,9} [\d]{1,2}, [\d]{4})<\/strong
attr x reading02Format %.1f
attr x reading02Name dewpointTemperature
attr x reading02OExpr UConv::f2c($val,2)
attr x reading02Regex stationID(?!.*stationID).*dewptAvg":([\d+\.]+)
attr x reading03Name dewpointTemperature_EN
attr x reading03Regex stationID(?!.*stationID).*dewptAvg":([\d+\.]+)
attr x reading04Format %.0f
attr x reading04Name humidity
attr x reading04Regex stationID(?!.*stationID).*humidityAvg":([\d+\.]+)
attr x reading05Name precip1hrmetric
attr x reading05Regex stationID(?!.*stationID).*precipRate":([\d+\.]+)
attr x reading06Name preciptodaymetric
attr x reading06Regex stationID(?!.*stationID).*precipTotal":([\d+\.]+)
attr x reading07Format %.2f
attr x reading07Name pressure
attr x reading07OExpr UConv::inhg2hpa($val,2)
attr x reading07Regex stationID(?!.*stationID).*pressureMin":([\d+\.]+)
attr x reading08Format %.2f
attr x reading08Name pressure_EN
attr x reading08Regex stationID(?!.*stationID).*pressureMin":([\d+\.]+)
attr x reading09Name solarRadiation
attr x reading09Regex stationID(?!.*stationID).*solarRadiationHigh":([\d+\.]+)
attr x reading10Name solarUV
attr x reading10Regex stationID(?!.*stationID).*uvHigh":([\d+\.]+)
attr x reading11Format %.1f
attr x reading11Name temperature
attr x reading11OExpr UConv::f2c($val,2)
attr x reading11Regex stationID(?!.*stationID).*tempAvg":([\d+\.]+)
attr x reading12Format %.1f
attr x reading12Name temperature_EN
attr x reading12Regex stationID(?!.*stationID).*tempAvg":([\d+\.]+)
attr x reading13Format %.1f
attr x reading13Name windChill
attr x reading13OExpr UConv::f2c($val,2)
attr x reading13Regex stationID(?!.*stationID).*windchillAvg":([\d+\.]+)
attr x reading14Format %.1f
attr x reading14Name windChill_EN
attr x reading14Regex stationID(?!.*stationID).*windchillAvg":([\d+\.]+)
attr x reading15Name windDirection
attr x reading15Regex stationID(?!.*stationID).*winddirAvg":([\d+\.]+)
attr x reading17Format %.0f
attr x reading17Name windSpeed
attr x reading17OExpr UConv::mph2kph($val,1)
attr x reading17Regex stationID(?!.*stationID).*windspeedAvg":([\d+\.]+)
attr x reading18Name windSpeed_EN
attr x reading18Regex stationID(?!.*stationID).*windspeedAvg":([\d+\.]+)
attr x reading19Name windGust
attr x reading19OExpr UConv::mph2kph($val,1)
attr x reading19Regex stationID(?!.*stationID).*windgustAvg":([\d+\.]+)
attr x reading20Name windGust_EN
attr x reading20Regex stationID(?!.*stationID).*windgustAvg":([\d+\.]+)
attr x reading21Name expires_date
attr x reading21Regex stationID(?!.*stationID).*expiresAt":"([\d+-]+)
attr x reading22Name expires_time_UTC
attr x reading22Regex stationID(?!.*stationID).*expiresAt":".*T([\d+:]+)
attr x room Informationen->Wetter,Rollos
attr x sortby 03
attr x stateFormat T: temperature °C | F: humidity % | W: windSpeed km/h | D: pressure hPa | U: solarUV | R: solarRadiation W/m²
attr x timeout 5

VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick