Re: Wetterstation HB-UNI-SEN-WEA
Verfasst: 02.09.2018, 09:07
Und was machst du, wenn nach einem Reset die ersten 99mm Regen fallen?
Heimautomation mit ELV HomeMatic und FHZ Funk-Hauszentralen
https://homematic-forum.de/forum/
Code: Alles auswählen
! Luftdruck Tendenz berechnen
! Ingo Pirker 02.06.2018
! Ergänzt für RaspberryMatic fossi_bear 16.09.2018
! Script alle 30min aufrufen
! folgende Systemvariablen müssen erstellt werden:
! Luftdruck_aktuell Type = Zahl | Wertebeteich = 0 - 65000 | Maßeinheit = hPa
! Luftdruck_tendenz Type = Wertliste | Wertebeteich = st|fa;st|gleich;steigend;fa|stark st;gleichbleibend;fa|st;fa|gleich;fallend;st|stark fa
! Luftdruck_Bedeutung Type = Wertliste | Wertebeteich = stürmisch;regnerisch;wechselhaft;sonnig;sehr trocken
! Luftdruck_30 Type = Zahl | Wertebeteich = 0 - 65000 | Maßeinheit = hPa
! Luftdruck_60 Type = Zahl | Wertebeteich = 0 - 65000 | Maßeinheit = hPa
! Luftdruck_90 Type = Zahl | Wertebeteich = 0 - 65000 | Maßeinheit = hPa
! Luftdruck_120 Type = Zahl | Wertebeteich = 0 - 65000 | Maßeinheit = hPa
! Luftdruck_150 Type = Zahl | Wertebeteich = 0 - 65000 | Maßeinheit = hPa
! Luftdruck_180 Type = Zahl | Wertebeteich = 0 - 65000 | Maßeinheit = hPa
!Quelle: https://rechneronline.de/barometer/
!Bedeutung Variable Luftdruck_tendenz:
! 0 = 1.+ 2. Std. steigend, 3. Std. fallend --> (st|fa)
! 1 = 1.+ 2. Std. steigend, 3. Std.gleichbleibend --> (st|gleich)
! 2 = Alle 3 Stunden steigend --> (steigend)
! 3 = 1. Std. fallend, 2.+ 3. Std. steigend --> (fa|stark st)
! 4 = Alle 3 Stunden gleichbleibend --> (gleichbleibend)
! 5 = 1.+ 2. Std. fallend, 3. Std. steigend --> (fa|st)
! 6 = 1.+ 2. Std. fallend, 3. Std. gleichbleibend --> (fa|gleich)
! 7 = Alle 3 Stunden fallend --> (fallend)
! 8 = 1. Std. steigend, 2.+ 3. Std. fallend --> (st|stark fa)
!Bedeutung Variable Luftdruck_Bedeutung:
! <= 980hPa = sehr tief, stürmisch --> (stürmisch)
! 980 - 1000hPa = tief, regnerisch --> (regnerisch)
! 1000 - 1020hPa = normal, wechselhaft --> (wechselhaft)
! 1020 - 1040hPa = hoch, sonnig --> (sonnig)
! >= 1040 = sehr hoch, sehr trocken --> (sehr trocken)
boolean debug = false; !debug true/false
var konstLD = 0.042; !Wert für definition von Konstanten Luftdruck (ca. 0,042hPa/h | 0,504hPa/12h)
if (debug == true){
!var LDsensor = 927.900; !Luftdruck vom Sensor simulieren
var LDsensor = dom.GetObject("BidCos-RF.XXWEA00001:1.AIR_PRESSURE").Value(); !oder echten Sensor verwenden !!!!!ACHTUNG - Seriennummer anpassen!!!!!
}
else {
var LDsensor = dom.GetObject("BidCos-RF.XXWEA00001:1.AIR_PRESSURE").Value(); !Luftdruck vom Sensor auslesen !!!!!ACHTUNG - Seriennummer anpassen!!!!!
}
dom.GetObject("Luftdruck_aktuell").State(LDsensor); !Variable - Luftdruck_aktuell auslesen
!Luftdruck Bedeutung ermitteln
if (LDsensor < 980) {
if (debug == true) {WriteLine("Luftdruck Bedeutung = sehr tief, stürmisch");}
dom.GetObject("Luftdruck_Bedeutung").State(0);
}
if ((LDsensor >= 980) && (LDsensor < 1000)) {
if (debug == true) {WriteLine("Luftdruck Bedeutung = tief, regnerisch");}
dom.GetObject("Luftdruck_Bedeutung").State(1);
}
if ((LDsensor >= 1000) && (LDsensor < 1020)) {
if (debug == true) {WriteLine("Luftdruck Bedeutung = normal, wechselhaft");}
dom.GetObject("Luftdruck_Bedeutung").State(2);
}
if ((LDsensor >= 1020) && (LDsensor < 1040)) {
if (debug == true) {WriteLine("Luftdruck Bedeutung = hoch, sonnig");}
dom.GetObject("Luftdruck_Bedeutung").State(3);
}
if (LDsensor >= 1040) {
if (debug == true) {WriteLine("Luftdruck Bedeutung = sehr hoch, sehr trocken");}
dom.GetObject("Luftdruck_Bedeutung").State(4);
}
var LD30 = dom.GetObject("Luftdruck_30").Value(); !Variable - Luftdruck_30 auslesen
var LD60 = dom.GetObject("Luftdruck_60").Value(); !Variable - Luftdruck_60 auslesen
var LD90 = dom.GetObject("Luftdruck_90").Value(); !Variable - Luftdruck_90 auslesen
var LD120 = dom.GetObject("Luftdruck_120").Value(); !Variable - Luftdruck_120 auslesen
var LD150 = dom.GetObject("Luftdruck_150").Value(); !Variable - Luftdruck_150 auslesen
var LD180 = dom.GetObject("Luftdruck_180").Value(); !Variable - Luftdruck_180 auslesen
if (debug == true) {
WriteLine("Luftdruck Sensor = " #LDsensor #"hPa");
WriteLine("Luftdruck vor 30min = "#LD30#"hPa");
WriteLine("Luftdruck vor 60min = "#LD60#"hPa");
WriteLine("Luftdruck vor 90min = "#LD90#"hPa");
WriteLine("Luftdruck vor 120min = "#LD120#"hPa");
WriteLine("Luftdruck vor 150min = "#LD150#"hPa");
WriteLine("Luftdruck vor 180min = "#LD180#"hPa");
}
!Berechnung Stunde#3
var LDmin; !Hilfe für gleichbleibenden Luftdruck berechnen
var LDmax; !Hilfe für gleichbleibenden Luftdruck berechnen
var Stunde1; !0 = unverändert | 1 = gestiegen | 2 = gesunken
var Stunde2; !0 = unverändert | 1 = gestiegen | 2 = gesunken
var Stunde3; !0 = unverändert | 1 = gestiegen | 2 = gesunken
LDmin = LDsensor - konstLD;
LDmax = LDsensor + konstLD;
if (debug == true) {
WriteLine("Luftdruck Stunde#3 min = "# LDmin#"hPa");
WriteLine("Luftdruck Stunde#3 max = "# LDmax#"hPa");
}
!Luftdruck auswerten Stunde#3
if ((LD60 >= LDmin) && (LD60 <= LDmax)) {
if (debug == true) {WriteLine("Luftdruck Stunde#3 ist unverändert");}
Stunde3 = 0;
}
elseif (LDsensor < LD60) {
if (debug == true) {WriteLine("Luftdruck Stunde#3 ist gesunken");}
Stunde3 = 2;
}
elseif (LDsensor > LD60) {
if (debug == true) {WriteLine("Luftdruck Stunde#3 ist gestiegen");}
Stunde3 = 1;
}
!Berechnung Stunde#2
LDmin = LD60 - konstLD;
LDmax = LD60 + konstLD;
if (debug == true) {
WriteLine("Luftdruck Stunde#2 min = "# LDmin# "hPa");
WriteLine("Luftdruck Stunde#2 max = "# LDmax# "hPa");
}
!Luftdruck auswerten Stunde#2
if ((LD120 >= LDmin) && (LD120<= LDmax)) {
if (debug == true) {WriteLine("Luftdruck Stunde#2 ist unverändert");}
Stunde2 = 0;
}
elseif (LD60 < LD120) {
if (debug == true) {WriteLine("Luftdruck Stunde#2 ist gesunken");}
Stunde2 = 2;
}
elseif (LD60 > LD120) {
if (debug == true) {WriteLine("Luftdruck Stunde#2 ist gestiegen");}
Stunde2 = 1;
}
!Berechnung Stunde#1
LDmin = LD120 - konstLD;
LDmax = LD120 + konstLD;
if (debug == true) {
WriteLine("Luftdruck Stunde#1 min = "# LDmin# "hPa");
WriteLine("Luftdruck Stunde#1 max = "# LDmax# "hPa");
}
!Luftdruck auswerten Stunde#1
if ((LD180 >= LDmin) && (LD180 <= LDmax)) {
if (debug == true) {WriteLine("Luftdruck Stunde#1 ist unverändert");}
Stunde1 = 0;
}
elseif (LD120 < LD180) {
if (debug == true) {WriteLine("Luftdruck Stunde#1 ist gesunken");}
Stunde1 = 2;
}
elseif (LD120> LD180) {
if (debug == true) {WriteLine("Luftdruck Stunde#1 ist gestiegen");}
Stunde1 = 1;
}
if (debug == true) {
WriteLine("St1= "# Stunde1 #" | St2 = "# Stunde2 #" | St3 = "# Stunde3);
var x = 0;
x = Stunde3 + Stunde2 + Stunde1;
WriteLine("St1+2+3 = "# x);
}
!Auswertung
if ((Stunde1 == 1) && (Stunde2 == 1) && (Stunde3 == 2)){
if (debug == true) {WriteLine("steigend | fallend");}
dom.GetObject("Luftdruck_tendenz").State(0);
}
elseif ((Stunde1 == 1) && (Stunde2 == 1) && (Stunde3 == 0)){
if (debug == true) {WriteLine("steigend | gleichbleibend");}
dom.GetObject("Luftdruck_tendenz").State(1);
}
elseif ((Stunde1 == 1) && (Stunde2 == 1) && (Stunde3 == 1)){
if (debug == true) {WriteLine("steigend");}
dom.GetObject("Luftdruck_tendenz").State(0);
}
elseif ((Stunde1 == 2) && (Stunde2 == 1) && (Stunde3 == 1)){
if (debug == true) {WriteLine("fallend | stark steigend");}
dom.GetObject("Luftdruck_tendenz").State(3);
}
elseif ((Stunde1 == 0) && (Stunde2 == 0) && (Stunde3 == 0)){
if (debug == true) {WriteLine("gleichbleibend");}
dom.GetObject("Luftdruck_tendenz").State(4);
}
elseif ((Stunde1 == 2) && (Stunde2 == 2) && (Stunde3 == 1)){
if (debug == true) {WriteLine("fallend | steigend");}
dom.GetObject("Luftdruck_tendenz").State(5);
}
elseif ((Stunde1 == 2) && (Stunde2 == 2) && (Stunde3 == 0)){
if (debug == true) {WriteLine("fallend | gleichbleibend");}
dom.GetObject("Luftdruck_tendenz").State(6);
}
elseif ((Stunde1 == 2) && (Stunde2 == 2) && (Stunde3 == 2)){
if (debug == true) {WriteLine("fallend");}
dom.GetObject("Luftdruck_tendenz").State(7);
}
elseif ((Stunde1 == 1) && (Stunde2 == 2) && (Stunde3 == 2)){
if (debug == true) {WriteLine("steigend | stark fallend");}
dom.GetObject("Luftdruck_tendenz").State(8);
}
!Messwerte jeweil um 30 min nach hinten versetzen
LD180=LD150; dom.GetObject("Luftdruck_180").State(LD180);
LD150=LD120; dom.GetObject("Luftdruck_150").State(LD150);
LD120=LD90; dom.GetObject("Luftdruck_120").State(LD120);
LD90=LD60; dom.GetObject("Luftdruck_90").State(LD90);
LD60=LD30; dom.GetObject("Luftdruck_60").State(LD60);
LD30=LDsensor; dom.GetObject("Luftdruck_30").State(LD30);
if (debug == true) {
WriteLine("Werte um 30mim nach hinten versetzt");
}
WriteLine("fertig");
Du könntest auch einfach den Anemometer-Radius halbieren. Also nur die Hälfte in der WebUI eintragen.bigscreen hat geschrieben: ↑12.09.2018, 18:35Hallo,
jetzt habe ich auch wieder ein Stück weitergebaut. Allerdings habe ich ein Anemometer, das pro Umdrehung 2 mal den Reedkontakt schliest. Deshalb meine Frage, wo wird der Wert für die Windgeschwindigkeit ausgerechnet? Wenn es, wie ich glaube, in Zeile 403 bis 408 ist, versteh ich es nicht ganz und würde mich über eine kurze Erklärung freuen.
Viele Grüße
Johannes
Ja. Mach mal aus dem "uint8_t uvindex;" ein uint16_t.