Wettersensor HMIP-SWO-PR: Fakten und Fragen

HMIP lokale Installation

Moderator: Co-Administratoren

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von Germa » 16.02.2021, 21:10

Hallo zusammen,

Der große Wettersensor von Homematic IP fristet in den Foren irgendwie ein geringfügiges Dasein. Seit Tagen beschäftige ich mich mit dem Gerät auf der CCU3 und dem Auslesen der Werte. Einige Hilfe dazu hat mir dieses Forum bereits geliefert, an anderen Stellen komme ich einfach nicht weiter. Ich tue mich schwer mit der Script-Programmierung, habe mir aber mit Hilfe von Alchy, Black und einigen anderen ambitionierten Profis ein bisschen Verständnis angeeignet. Also fasse ich mal zusammen, was ich bisher weiß:

Ausgangslage:
Ich möchte bei Aktualisierung des Sensors (schickt ja alle drei Minuten die Werte)* (siehe unten) selbst definierte Systemvariablen füllen, sie heißen bei mir
Sonnenschein_heute
Sonnenschein_gestern
Regenmenge_heute
Regenmenge_gestern
Regenbeginn
TempAussen
Dazu kommen etliche Min- und Max- Angaben und Aktualisierungszeiten, dazu mehr weiter unten und im nächsten post.

Nach dem Anlernen liefert der Sensor folgende Datenpunkte:
56755 HmIP-RF.xxxxxxxxxxxx:1
56756 HmIP-RF.xxxxxxxxxxxx:1.ACTUAL_TEMPERATURE
56758 HmIP-RF.xxxxxxxxxxxx:1.HUMIDITY
56760 HmIP-RF.xxxxxxxxxxxx:1.ILLUMINATION
56762 HmIP-RF.xxxxxxxxxxxx:1.RAINING --> Regenbeginn
56763 HmIP-RF.xxxxxxxxxxxx:1.RAIN_COUNTER --> Gesamtregenmenge
56766 HmIP-RF.xxxxxxxxxxxx:1.SUNSHINEDURATION --> Gesamtsonnenscheindauer
56769 HmIP-RF.xxxxxxxxxxxx:1.WIND_DIR
56770 HmIP-RF.xxxxxxxxxxxx:1.WIND_DIR_RANGE
56773 HmIP-RF.xxxxxxxxxxxx:1.WIND_SPEED
Die Ise-IDs sind dann natürlich bei jedem anders.

Versteckt dazu werden folgende interne Systemvariablen erzeugt, die man mit einem Script hier im Forum von Alchy auslesen kann:
svHmIPRainCounter_56755_xxxxxxxxxxxx:1
svHmIPRainCounterOldVal_56755
svHmIPRainCounterToday_56755
svHmIPRainCounterYesterday_56755
svHmIPSunshineCounter_56755_xxxxxxxxxxxx:1
svHmIPSunshineCounterOldVal_56755
svHmIPSunshineCounterToday_56755
svHmIPSunshineCounterYesterday_56755

Dazu werden drei versteckte Programme angelegt, die in der CCU unter > Programme - systeminterne Programme einblenden < zum Vorschein kommen.
Sie heißen
- prgDailySunshineRainCounter_56755 (wird von eq-3 vorgegeben 7 Uhr morgens täglich ausgeführt, habe ich auf 00:01 Uhr geändert)
- prgRainCounter_56755_56755_xxxxxxxxxxxx:1 (Ausführung jedes Mal, wenn Werte geschickt werden)
- prgSunshineCounter_56755_xxxxxxxxxxxx:1 (Ausführung jedes Mal, wenn Werte geschickt werden)

In prgRainCounter.... kann man mit ein paar ergänzten Zeilen von Alchy die aktuelle Regenmenge in die eigene Variable schreiben viewtopic.php?t=43666. Das sieht dann bei mir so aus und funktioniert auch:

Code: Alles auswählen

object chn = dom.GetObject('56755');
object oOverflow = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER_OVERFLOW');
object oRainCounter = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER');
object oSysVarRain = dom.GetObject('svHmIPRainCounter_56755_xxxxxxxxxxxx:1');
object oSysVarRainOldVal = dom.GetObject('svHmIPRainCounterOldVal_56755');
object oSysVarCounterToday =  dom.GetObject('svHmIPRainCounterToday_56755');
object oSysVarCounterYesterday =  dom.GetObject('svHmIPRainCounterYesterday_56755');
!
!eigene sysVar deklarieren und dem Objekt zuweisen
object oSysVarMyCounterToday = dom.GetObject('Regenmenge_heute');
!
boolean overFlowFlag = oOverflow.Value();
real devVal = oRainCounter.Value();
real devValMax = oRainCounter.ValueMax();
real oldDevVal = oSysVarRainOldVal.Value();
real diffVal = 0.0;
real sysVarVal = oSysVarRain.Value();
real sysVarTodayVal = oSysVarCounterToday.Value();
real todayTotal = 0.0;
integer tmp_devVal = (devVal.ToString().ToFloat() * 1000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 1000).ToInteger();
if (overFlowFlag == false) {
! Normal conditions
if (tmp_oldDevVal <= tmp_devVal) {
diffVal = devVal - oldDevVal;
}
! Device has rebooted
if (tmp_oldDevVal > tmp_devVal) {
diffVal = devVal;
}
} else {
!overFlow is true
if (tmp_oldDevVal > tmp_devVal) {
! An device overflow has occured
diffVal = (devVal + devValMax) - oldDevVal;
} else {
! Once the overflow flag has been set it will only be false when the device reboots
! Therefore this is the normal condition after an device overflow
diffVal = devVal - oldDevVal;
}
}
if (tmp_devVal != 0) {
oSysVarRainOldVal.State(devVal);
oSysVarRain.State(sysVarVal + diffVal);
}
todayTotal = sysVarTodayVal + diffVal;
if (todayTotal >= 1440.0) {todayTotal = 0.0;}
oSysVarCounterToday.State(todayTotal);
!
!Werte in die eigenen sysvar schreiben
oSysVarMyCounterToday.State(todayTotal);
Analog dazu funktioniert das auch genauso mit dem Sonnenscheinscript prgSunshineCounter....

In das dritte Script "prgDailySunshineRainCounter_56755" habe ich das Auslesen der Regenmenge_gestern und Sonnenschein_gestern eingebaut, denn das muss ja nur einmal täglich in die Variable geschrieben werden. Sieht dann so aus:

Code: Alles auswählen

object chn = dom.GetObject('56755');
object oSysVarSunshineCounterToday = dom.GetObject('svHmIPSunshineCounterToday_56755');
object oSysVarSunshineCounterYesterday = dom.GetObject('svHmIPSunshineCounterYesterday_56755');
object oSysVarRainCounterToday = dom.GetObject('svHmIPRainCounterToday_56755');
object oSysVarRainCounterYesterday = dom.GetObject('svHmIPRainCounterYesterday_56755');
if (oSysVarSunshineCounterYesterday && oSysVarSunshineCounterToday) {oSysVarSunshineCounterYesterday.State(oSysVarSunshineCounterToday.Value());}if (oSysVarSunshineCounterToday) {oSysVarSunshineCounterToday.State(0);}if (oSysVarRainCounterYesterday && oSysVarRainCounterToday) {oSysVarRainCounterYesterday.State(oSysVarRainCounterToday.Value());}if (oSysVarRainCounterToday) {oSysVarRainCounterToday.State(0);}

!eigene Systemvariable für Regenmenge_gestern beschreiben
object oSysVarMyRainCounterYesterday = dom.GetObject('Regenmenge_gestern');
oSysVarMyRainCounterYesterday.State(oSysVarRainCounterYesterday.Value());

!eigene Systemvariable für Sonnenschein_gestern beschreiben
object oSysVarMySunshineCounterYesterday = dom.GetObject('Sonnenschein_gestern');
oSysVarMySunshineCounterYesterday.State(oSysVarSunshineCounterYesterday.Value());
Auch schaffe ich es, den Datenpunkt für Regenbeginn bei einsetzendem Regen auszulesen:

Code: Alles auswählen

!Regenbeginn aus Wettersensor abfragen und in Variable "Regenbeginn" schreiben
var  RegBeg = dom.GetObject("HmIP-RF.*******:1.RAINING").Value();
dom.GetObject("Regenbeginn").State(RegBeg);
Ob das mit der Detektion des beginnenden Regens klappt, habe ich noch nicht herausgefunden ... ich werde berichten.
Das Auslesen der Werte für die Temperatur erfolgt auf gleiche Weise.

Für folgende Variablen möchte ich die Werte ermitteln:
Regenbeginn.Zeit
TempAussenMin
TempAussenMax
TempAussenMin.Zeit
TempAussenMax.Zeit
WindMax
Da habe ich schon einige Anregungen hier im Forum gefunden und werde nochmal weiter probieren ... ich werde scheitern :D und Euch dann im nächsten post mit meinen Problemen dazu befeuern.

Helligkeit
Wie aus mehreren Foren erfahren geht es auch mir so, dass bei strahlendem Sonnenschein der Helligkeitssensor morgens einfach auf Vollausschlag Wert 100000 springt und dort auch für mehrere Stunden bleibt. Links dazu:
https://de.elv.com/forum/merkwuerdige-w ... nsor-16535
oder auch
viewtopic.php?t=52103
Bekleben will ich meinen Sensor aber nicht. Ich bin auf Firmware 1.0.18 und hoffe, dass eq-3 in Kürze nachbessert. Unverständlich eigentlich, denn ich habe auch den Helligkeitssensor HmIP-SLO und bei dem funktioniert das seit langer Zeit tadellos und vor allem mit gemittelten Werten klasse.

* wie ich festgestellt habe, liefert der Sensor seine Werte im Abstand zwischen 2-3 Minuten und zwar nach einem mehr oder weniger festen Zickzackmuster-Zeitabstand (siehe Dateianhang)
Dateianhänge
Sendeabstand.jpg
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von Germa » 19.02.2021, 11:27

sooo, hat dann doch besser geklappt als gedacht :D
Angelehnt an Jürgens Script viewtopic.php?p=581409#p581409 habe ich das auf meine Bedürfnisse angepasst und erweitert:

Code: Alles auswählen

!--- Wetterwerte aus Wettersensor HMIP-SWO-PR auslesen und in var schreiben ---
var curTemp = datapoints.Get("HmIP-RF.********:1.ACTUAL_TEMPERATURE").Value(); ! aktuelle Temperatur
var curWind = datapoints.Get("HmIP-RF.********:1.WIND_SPEED").Value(); !aktuelle Windgeschwindigkeit
var maxTemp = dom.GetObject("TempAussenMax").Value();          ! Heutige Maximale Temperatur
var minTemp = dom.GetObject("TempAussenMin").Value();          ! Heutige Minimale Temperatur
var tMit = (dom.GetObject("TempAussenMittelwert").Value())*1.00;        ! *1.00 um Kommastellen zu erhalten
object zMaH = dom.GetObject("TempAussenMax.Zeit").Value();             ! Zeitpunkt der MaxTempHeute
object zMiH = dom.GetObject("TempAussenMin.Zeit").Value();             ! Zeitpunkt der MinTempHeute
var tDif =  0.1; ! Bereich in dem "Tendenz = konstant =" angezeigt wird (Bei 0.05 = zwischen +0,05°C und -0,05°C Abweichung)
var n    =  5.00; ! Wie schnell der Mittelwert sich dem Istwert annähert. >der Wert muss mind 02.00 sein, sinnvoll 5.00 - 10.00
                  ! Bei 02.00= wird die Diff. pro Durchgang halbiert /Bei 10.00= wird die Diff. pro Durchgang um ein 1/10 kleiner)
var maxWind = dom.GetObject("WindMax").Value();

! -- aktuelle Temperatur in Variable schreiben
dom.GetObject("TempAussen").State(curTemp);

! -- Min/Max ,--------------Minimale/Maximale Temperatur wird ermittelt
if (maxTemp < curTemp)
 {
   dom.GetObject("TempAussenMax").State(curTemp);
   dom.GetObject("TempAussenMax.Zeit").State(system.Date("%H:%M Uhr"));
 }

 if ((minTemp) > (curTemp))
 {
   dom.GetObject("TempAussenMin").State(curTemp);
   dom.GetObject("TempAussenMin.Zeit").State(system.Date("%H:%M Uhr"));
 }

! -- Tendenz --------------Schwankungen werden gedämpft und dann die Richtung ermittelt
tMit = ((((n - 1) * (tMit)) + (curTemp)) / n);
dom.GetObject("TempAussenMittelwert").State(tMit);
if     ((tMit - curTemp) > tDif) {dom.GetObject("TempAussenTendenz").State("__  fällt   __");}
elseif ((curTemp - tMit) > tDif) {dom.GetObject("TempAussenTendenz").State("++  steigt  ++");}
else                          {dom.GetObject("TempAussenTendenz").State("=  konstant  =");}

! -- maximalen Wind in Variable schreiben
if (maxWind < curWind)
 {
   dom.GetObject("WindMax").State(curWind);
   dom.GetObject("WindMax.Zeit").State(system.Date("%H:%M Uhr"));
 }

!Regenbeginn in Variable schreiben
var  RegBeg = dom.GetObject("HmIP-RF.********:1.RAINING").Value();
dom.GetObject("Regenbeginn").State(RegBeg);
if (RegBeg == true)
{
  var RegBegTime = dom.GetObject("Regenbeginn").Timestamp().Format("%d.%m. %H:%M");
  dom.GetObject("Regenbeginn.Zeit").State(RegBegTime);
}                                                                      
Dieses Script habe ich in ein Programm eingefügt, welches bei jeder Aktualisierung des Wettersensors gestartet wird, also so alle 2-3 Minuten.
Alle Namen in " " müsst Ihr dafür durch Eure Namen ersetzen. Meine Systemvariablen dafür heißen entsprechend:
Regenbeginn
Regenbeginn.Zeit
TempAussen
TempAussenMax
TempAussenMax.Zeit
TempAussenMin
TempAussenMin.Zeit
TempAussenMittelwert
TempAussenTendenz
WindMax
WindMax.Zeit

Einige dieser Variablen habe ich dem Sensorkanal zugeordnet und so erscheinen die Werte dann in der WebUI auch in der Ansicht des Sensors (siehe Bild unten).
WebUI Ansicht.JPG
Variablen.JPG
Und natürlich müssen die beiden Kanäle Eures Wettersensors entsprechend eingetragen werden:
HmIP-RF.********:1.ACTUAL_TEMPERATURE
HmIP-RF.********:1.WIND_SPEED
HmIP-RF.********:1.RAINING

In einem zweiten Script werden dann kurz VOR Mitternacht die Werte von heute auf Werte_gestern geschoben und aktuelle Startwerte für den neuen Tag gesetzt:

Code: Alles auswählen

!--- Wetterwerte von heute auf gestern schieben und var mit aktuellen Werten neu starten ---
var curTemp = datapoints.Get("HmIP-RF.********:1.ACTUAL_TEMPERATURE").Value();
var curWind = datapoints.Get("HmIP-RF.********:1.WIND_SPEED").Value();
dom.GetObject("TempAussenMax_gestern").State(dom.GetObject("TempAussenMax").Value());
dom.GetObject("TempAussenMax.Zeit_gestern").State(dom.GetObject("TempAussenMax.Zeit").Value());
dom.GetObject("TempAussenMin_gestern").State(dom.GetObject("TempAussenMin").Value());
dom.GetObject("TempAussenMin.Zeit_gestern").State(dom.GetObject("TempAussenMin.Zeit").Value());
dom.GetObject("WindMax_gestern").State(dom.GetObject("WindMax").Value());
dom.GetObject("WindMax.Zeit_gestern").State(dom.GetObject("WindMax.Zeit").Value());
dom.GetObject("WindMax").State(curWind);
dom.GetObject("TempAussenMax").State(curTemp-1);
dom.GetObject("TempAussenMin").State(curTemp+1);
dom.GetObject("TempAussenMittelwert").State(curTemp);
dom.GetObject("TempAussenMax.Zeit").State(system.Date("%H:%M Uhr"));
dom.GetObject("TempAussenMin.Zeit").State(system.Date("%H:%M Uhr"));     
Die zusätzlichen Systemvariablen dafür lauten bei mir entsprechend:
TempAussenMax_gestern
TempAussenMax.Zeit_gestern
TempAussenMin_gestern
TempAussenMin.Zeit_gestern
WindMax_gestern
WindMax.Zeit_gestern

Anmerkungen:
Der Temperaturbereich der Variablen liegt zwischen -40°C und +55°C.
Damit die Min-Max-Berechnung funktioniert, muss vor dem Start der Scripte die Minimaltemperatur auf jeden Fall über der aktuellen Temperatur liegen und die Maximaltemperatur unter der aktuellen Temperatur. In einigen Foreneinträgen wird deswegen bei jedem Scriptaufruf des zweiten Scripts TempAussenMax = -40°C gesetzt und TempAussenMin = +55°C, denn dann ist diese Bedingung ja auf jeden Fall gegeben. Das wollte ich aber nicht, da ich dann bei der grafischen Auswertung jedes Mal die Maximalausschläge drin habe. Ich setze also Max und Min auf die aktuelle Temperatur -1 bzw. +1, dann klappt es auch.

Nach einigen Testtagen scheint alles sauber zu laufen. Falls jemand Fehler findet, immer her damit.
Falls einer von Euch Programmierprofis sich bei meinem Anfänger-Code die Haare rauft :x , bitte gerne Korrektur.
Zuletzt geändert von Germa am 03.03.2021, 10:39, insgesamt 1-mal geändert.
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

Marcus_70
Beiträge: 26
Registriert: 23.01.2021, 14:40
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 7 Mal
Danksagung erhalten: 2 Mal

Re: Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von Marcus_70 » 19.02.2021, 11:55

Hallo,
cool, bin auch Anfänger und habe auch eine HMIP-SWO-PR Wetterstation,
ich werde mir das ganze mal am Wochenende ansehen.

Ich hab bereits die zweiten HMIP-SWO-PR , da ich den ersten zurückgeschickt habe.
Die errste hatte mir keine Regenmenge oder einen korrekten Regenzustand angzeigt :? .

Die neue ist seit einer Woche im Einsatz und zeigt meines Erachtens nun zuverlässigere Werte an.
Mit einem konventionellen Regenmesser habe ich das ganze aber noch nicht verglichen.

Wie sind deine Erfahrungen?

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von Germa » 19.02.2021, 12:31

ich habe dazu noch seit einigen Jahren das Netatmo System, die Temperaturen sind so ziemlich exakt die gleichen.
Beim Regen kann ich noch nicht soviel Erfahrungswerte bieten, weil ich die HMIP-SWO auch erst seit 10 Tagen habe. Beim ersten Regen war der Regenmesser noch vereist, beim zweiten und dritten Regen die letzten Tage habe ich soviel an den Werten der Scripte herumprobiert, dass ich nicht mehr sehen kann, wie die tatsächlichen Werte waren. Ich werde weiter berichten
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von dtp » 19.02.2021, 14:22

Nutze auch einen HmIP-SWO-PR. Hab ihn im Juli 2019 im Austausch zu einem OC3-Kombisensor auf dem Dach montiert. Seitdem war noch kein Batteriewechsel notwendig. Auch sonst bin ich mit dem Teil bisher sehr zufrieden.

Ein Tracking der Daten mache ich aber nicht in der CCU. Das übernimmt der ioBroker samt SQL-Datenbank. Im ioBroker habe ich dann auch die Möglichkeit, mir die Daten entsprechend grafisch aufbereitet als Diagramme anzusehen.

Mal eine Frage. Wozu nutzt ihr denn die in den zusätzlich angelegten Systemvariablen gespeicherten Daten? Würde mich mal interessieren.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von Germa » 19.02.2021, 18:30

hauptsächlich nutze ich die Variablen, um auf meinem Flur-Tablet mit AIO Creator die Daten komfortabel anzeigen lassen zu können.
Für die Verlässlichkeit der Daten will ich aktuell auch Abgleiche machen mit dem Netatmo Sensor.
Später sollen dann mal Rolladen und Terrassenmarkise mit den Werten gesteuert werden
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

Jan_Stfbg
Beiträge: 54
Registriert: 05.05.2019, 08:41
System: CCU
Wohnort: 35460
Hat sich bedankt: 17 Mal

Re: Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von Jan_Stfbg » 19.02.2021, 22:46

Germa hat geschrieben:
19.02.2021, 11:27
sooo, hat dann doch besser geklappt als gedacht :D
Angelehnt an Jürgens Script viewtopic.php?p=581409#p581409 habe ich das auf meine Bedürfnisse angepasst und erweitert:

Code: Alles auswählen

!--- Wetterwerte aus Wettersensor HMIP-SWO-PR auslesen und in var schreiben ---
var curTemp = datapoints.Get("HmIP-RF.********:1.ACTUAL_TEMPERATURE").Value(); ! aktuelle Temperatur
var curWind = datapoints.Get("HmIP-RF.********:1.WIND_SPEED").Value(); !aktuelle Windgeschwindigkeit
var maxTemp = dom.GetObject("TempAussenMax").Value();          ! Heutige Maximale Temperatur
var minTemp = dom.GetObject("TempAussenMin").Value();          ! Heutige Minimale Temperatur
var tMit = (dom.GetObject("TempAussenMittelwert").Value())*1.00;        ! *1.00 um Kommastellen zu erhalten
object zMaH = dom.GetObject("TempAussenMax.Zeit").Value();             ! Zeitpunkt der MaxTempHeute
object zMiH = dom.GetObject("TempAussenMin.Zeit").Value();             ! Zeitpunkt der MinTempHeute
var tDif =  0.1; ! Bereich in dem "Tendenz = konstant =" angezeigt wird (Bei 0.05 = zwischen +0,05°C und -0,05°C Abweichung)
var n    =  5.00; ! Wie schnell der Mittelwert sich dem Istwert annähert. >der Wert muss mind 02.00 sein, sinnvoll 5.00 - 10.00
                  ! Bei 02.00= wird die Diff. pro Durchgang halbiert /Bei 10.00= wird die Diff. pro Durchgang um ein 1/10 kleiner)
var maxWind = dom.GetObject("WindMax").Value();

! -- aktuelle Temperatur in Variable schreiben
dom.GetObject("TempAussen").State(curTemp);

! -- Min/Max ,--------------Minimale/Maximale Temperatur wird ermittelt
if (maxTemp < curTemp)
 {
   dom.GetObject("TempAussenMax").State(curTemp);
   dom.GetObject("TempAussenMax.Zeit").State(system.Date("%H:%M Uhr"));
 }

 if ((minTemp) > (curTemp))
 {
   dom.GetObject("TempAussenMin").State(curTemp);
   dom.GetObject("TempAussenMin.Zeit").State(system.Date("%H:%M Uhr"));
 }

! -- Tendenz --------------Schwankungen werden gedämpft und dann die Richtung ermittelt
tMit = ((((n - 1) * (tMit)) + (curTemp)) / n);
dom.GetObject("TempAussenMittelwert").State(tMit);
if     ((tMit - curTemp) > tDif) {dom.GetObject("TempAussenTendenz").State("__  fällt   __");}
elseif ((curTemp - tMit) > tDif) {dom.GetObject("TempAussenTendenz").State("++  steigt  ++");}
else                          {dom.GetObject("TempAussenTendenz").State("=  konstant  =");}

! -- maximalen Wind in Variable schreiben
if (maxWind < curWind)
 {
   dom.GetObject("WindMax").State(curWind);
   dom.GetObject("WindMax.Zeit").State(system.Date("%H:%M Uhr"));
 }

!Regenbeginn in Variable schreiben
var  RegBeg = dom.GetObject("HmIP-RF.********:1.RAINING").Value();
dom.GetObject("Regenbeginn").State(RegBeg);
if (RegBeg == true)
{
  var RegBegTime = dom.GetObject("Regenbeginn").Timestamp().Format("%d.%m. %H:%M");
  dom.GetObject("Regenbeginn.Zeit").State(RegBegTime);
}                                                                      
Dieses Script habe ich in ein Programm eingefügt, welches bei jeder Aktualisierung des Wettersensors gestartet wird, also so alle 2-3 Minuten.
Alle Namen in " " müsst Ihr dafür durch Eure Namen ersetzen. Meine Systemvariablen dafür heißen entsprechend:
Regenbeginn
Regenbeginn.Zeit
TempAussen
TempAussenMax
TempAussenMax.Zeit
TempAussenMin
TempAussenMin.Zeit
TempAussenMittelwert
TempAussenTendenz
WindMax
WindMax.Zeit

Einige dieser Variablen habe ich dem Sensorkanal zugeordnet und so erscheinen die Werte dann in der WebUI auch in der Ansicht des Sensors (siehe Bild unten).
WebUI Ansicht.JPG
Variablen.JPG
Und natürlich müssen die beiden Kanäle Eures Wettersensors entsprechend eingetragen werden:
HmIP-RF.********:1.ACTUAL_TEMPERATURE
HmIP-RF.********:1.WIND_SPEED
HmIP-RF.********:1.RAINING

In einem zweiten Script werden dann kurz nach Mitternacht die Werte von heute auf Werte_gestern geschoben und aktuelle Startwerte für den neuen Tag gesetzt:

Code: Alles auswählen

!--- Wetterwerte von heute auf gestern schieben und var mit aktuellen Werten neu starten ---
var curTemp = datapoints.Get("HmIP-RF.********:1.ACTUAL_TEMPERATURE").Value();
var curWind = datapoints.Get("HmIP-RF.********:1.WIND_SPEED").Value();
dom.GetObject("TempAussenMax_gestern").State(dom.GetObject("TempAussenMax").Value());
dom.GetObject("TempAussenMax.Zeit_gestern").State(dom.GetObject("TempAussenMax.Zeit").Value());
dom.GetObject("TempAussenMin_gestern").State(dom.GetObject("TempAussenMin").Value());
dom.GetObject("TempAussenMin.Zeit_gestern").State(dom.GetObject("TempAussenMin.Zeit").Value());
dom.GetObject("WindMax_gestern").State(dom.GetObject("WindMax").Value());
dom.GetObject("WindMax.Zeit_gestern").State(dom.GetObject("WindMax.Zeit").Value());
dom.GetObject("WindMax").State(curWind);
dom.GetObject("TempAussenMax").State(curTemp-1);
dom.GetObject("TempAussenMin").State(curTemp+1);
dom.GetObject("TempAussenMittelwert").State(curTemp);
dom.GetObject("TempAussenMax.Zeit").State(system.Date("%H:%M Uhr"));
dom.GetObject("TempAussenMin.Zeit").State(system.Date("%H:%M Uhr"));     
Die zusätzlichen Systemvariablen dafür lauten bei mir entsprechend:
TempAussenMax_gestern
TempAussenMax.Zeit_gestern
TempAussenMin_gestern
TempAussenMin.Zeit_gestern
WindMax_gestern
WindMax.Zeit_gestern

Anmerkungen:
Der Temperaturbereich der Variablen liegt zwischen -40°C und +55°C.
Damit die Min-Max-Berechnung funktioniert, muss vor dem Start der Scripte die Minimaltemperatur auf jeden Fall über der aktuellen Temperatur liegen und die Maximaltemperatur unter der aktuellen Temperatur. In einigen Foreneinträgen wird deswegen bei jedem Scriptaufruf des zweiten Scripts TempAussenMax = -40°C gesetzt und TempAussenMin = +55°C, denn dann ist diese Bedingung ja auf jeden Fall gegeben. Das wollte ich aber nicht, da ich dann bei der grafischen Auswertung jedes Mal die Maximalausschläge drin habe. Ich setze also Max und Min auf die aktuelle Temperatur -1 bzw. +1, dann klappt es auch.

Nach einigen Testtagen scheint alles sauber zu laufen. Falls jemand Fehler findet, immer her damit.
Falls einer von Euch Programmierprofis sich bei meinem Anfänger-Code die Haare rauft :x , bitte gerne Korrektur.
soo, ich warte dann jetzt mal ab.
Kannst Du nochmal für Deine Scripte die Ausführungsdefinition angeben?
Ich habe leider nichts gefunden, dass am 01.01. eines Jahres die Sonnenscheinstunden und die Regenmenge automatisch auf "0" gesetzt werden. Kannst Du noch eine Variable dafür machen und im Script implementieren?

Schonmal riesigen Dank für die Anleitung, ich hoffe auch bei mir funktioniert dann jetzt alles. :-)

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von Germa » 20.02.2021, 11:56

meinst Du mit "Ausführungsdefinition", wie die Programme aussehen?
Das wären dann diese beiden:
Wetterdaten holen.JPG
korrigiert:
Wetterdaten reset.JPG
Wenn Du im zweiten Script zum Beispiel am Ende die folgenden Zeilen einfügst (natürlich passend für Deinen Sensor), dann werden bei der nächtlichen Aktualisierung am 01.Januar die beiden gewünschten Werte auf 0 gesetzt:

Code: Alles auswählen

string curDate = system.Date("%d.%m");
if(curDate.EndsWith("01.01"))
  {
  dom.GetObject("svHmIPRainCounter_56755_00185********:1").State(0);
  dom.GetObject("svHmIPSunshineCounter_56755_00185********:1").State(0);
  }                  
Ise-Id 56755 natürlich auch mit Deiner ise id ersetzen
Zuletzt geändert von Germa am 24.02.2021, 11:07, insgesamt 2-mal geändert.
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

Jan_Stfbg
Beiträge: 54
Registriert: 05.05.2019, 08:41
System: CCU
Wohnort: 35460
Hat sich bedankt: 17 Mal

Re: Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von Jan_Stfbg » 20.02.2021, 22:35

Germa hat geschrieben:
20.02.2021, 11:56
meinst Du mit "Ausführungsdefinition", wie die Programme aussehen?
Das wären dann diese beiden:
Wetterdaten reset.JPG
Wetterdaten holen.JPG
Wenn Du im zweiten Script zum Beispiel am Ende die folgenden Zeilen einfügst (natürlich passend für Deinen Sensor), dann werden bei der nächtlichen Aktualisierung am 01.Januar die beiden gewünschten Werte auf 0 gesetzt:

Code: Alles auswählen

string curDate = system.Date("%d.%m");
if(curDate.EndsWith("01.01"))
  {
  dom.GetObject("svHmIPRainCounter_56755_00185********:1").State(0);
  dom.GetObject("svHmIPSunshineCounter_56755_00185********:1").State(0);
  }                  
Ise-Id 56755 natürlich auch mit Deiner ise id ersetzen
Ja genau super, Danke Dir. Jetzt warte ich mal die nächsten Tage ab und dann freue ich mich bestimmt. :lol:

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: Wettersensor HMIP-SWO-PR: Fakten und Fragen

Beitrag von Germa » 22.02.2021, 09:57

hab noch einen Fehler gefunden:
Das Programm für das Schieben der alten Werte auf gestern muss vor 00:00 Uhr erfolgen, sonst werden, wenn z.B. genau um 0 Uhr neue Werte vom Sensor geliefert werden, die ein TempAussenMin kleiner als TempAussen haben, diese Werte um 00:02 Uhr in TempAussenMin_gestern geschoben.
Also besser 23:59 Uhr das Programm starten, dann klappt es
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

Antworten

Zurück zu „HomeMatic IP mit CCU“