Wetter hat mich schon immer interessiert und daher lag es nahe, das ganze auch in unser Smart Home einzubinden.
Neben der normalen Installation von Openhab2 auf einem Raspberry Pi 3b+ bestand der Gedanke darin, eine
Wetterstation im Garten zu betrieben, die möglichst vergleichbare Werte (z.B. zu "richtigen" Stationen) liefert
und am besten Energieautark läuft.
Letzten Endes habe ich mich für Komponenten von Tinkerforge entschieden und da ich damit keinerlei Erfahrung habe,
möchte ich erst mal klein Anfangen.
Als Basis dient der Master Brick:
https://www.tinkerforge.com/de/doc/Hard ... ster-brick
der über die WiFi 2.0 Erweiterung mit dem Raspeberry spricht:
https://www.tinkerforge.com/de/doc/Hard ... nsion.html
Damit die ersten Daten ins System kommen sind am Master Brick folgende Bricklets für Luftdruck und Luftfeuchte angeschlossen:
https://www.tinkerforge.com/de/doc/Hard ... 2-bricklet
https://www.tinkerforge.com/de/doc/Hard ... ty_V2.html
Beide Bricklets können auch jeweils die Temperatur messen, somit könnte man das Theoretisch sogar doppelt machen.
Auf der Website vom DWD gibt's es eine Anleitung bzw. Beschreibung wie eine "offizielle" Wetterstation aussehen muss,
wieder Standort ist usw. Schnell war klar, der Garten ist zu klein, ich habe kein ISDN und auch keine Lust eine 230V Spannungsversorgung
zu verlegen. Ich habe daher "nur" eine kleine Box gebaut, die einer Wetterstation sagen wir mal ähnlich sieht. Grundmaße sind ca. 200x200
und steht auf einem Rohr im Blumebeet. ca. 1,8m über Grund.
Betrieben wir das ganze mit mitlerweile 5 Stück Solarzellen, 3 Stück Li-Ion Akkus und einem Laderegler der gleichzeitig
mit dem Solarstrom die Akkus laden kann und auch die Tinkerforge Bausteine betreibt. Oder halt den Akku leersaugt wenn
keine Sonne da ist.
https://www.waveshare.com/solar-power-manager.htm
Angefangen habe ich mit 3 Zellen (6V, 150mA, gibts in jedem gut sortiertem Elektronik Shop) und einer 18500 Li-Ion Zelle.
Leider war dann morgens um 5 der Strom "leer", somit habe ich einfach mal Leistung bzw. Kapazität nachgeworfen und bin
mal gespannt, wie lange das ganze jetzt läuft, spätestens im Winter könnte es spannend werden.
Im Moment hat die Station eine Akkukapazität von 9.000mA (Bei 3,7V) und 5 Stück Solarzellen á 6V mit je 150mA.
Die TF Bausteine brauchen insgesamt 160mA bei 5V, die Solarzellen liefern max. 4,5W und über das Datenblatt des Ladereglers sind
die Verluste bzw. Effizienzen angegeben, z.B. 78% beim Solaren laden. Vielleicht sollte man erwähnen das man auch noch über
eine USB Buchse zusätzlich Strom einspeisen kann wenn notwendig ? Theoretisch komme ich dann bei einem Ausnutzungsgrad von 60%
der Solarzellen darauf aus, dass es im Winter zur Wintersonnenwende halbwegs passen müsste (Rein=Raus), somit sollte erst mal ausreichend Puffer im Energiespeicher sein. Was die Praxis daraus macht, Stichwort Kälte, Wetter usw. wird sich zeigen.
Somit lasse ich mit in der Sitemap Werte für Luftdruck, Luftfeuchtigkeit und Temperatur direkt anzeigen. Werte für gefühlte Temperatur
und Taupunkt errechne ich über eine Rule. Vielleicht noch spannend, ich nutze das Tinkerforge Binding von "Theo" aus diesem
Thread:
https://github.com/theoweiss/openhab-ti ... /README.md
Die Konfiguration der TF-Bricklets habe ich einfach mit der PaperUI durchgeführt. Kurz und Schmerzlos.
Regel gefühlte Temperatur:
Code: Alles auswählen
rule "Gefühlte Temperatur berechnen"
when
Item Temperature changed
then
if (Temperature.state > 15)
{
var tempCurrent = (Temperature.state as Number).floatValue
var temphumidity = (Luftfeuchte.state as Number).floatValue
var hitzeindex = -8.784695 + 1.61139411*tempCurrent + 2.338549*temphumidity - 0.14611605*tempCurrent*temphumidity - 0.012308094*(tempCurrent*tempCurrent) - 0.016424828*(temphumidity*temphumidity) + 0.002211732 *(tempCurrent*tempCurrent)*temphumidity + 0.00072546*tempCurrent*(temphumidity*temphumidity) - 0.000003582*(tempCurrent*tempCurrent)*(temphumidity*temphumidity)
TempFeel.postUpdate(hitzeindex as Number)
}
else
{
var speedCurrent = Math.pow((((Wind_Speed_Mps.state as Number).floatValue) * 3.6), 0.16) //bei m/s aus 1.0 3.6 machen oder 1.0 bei km/h
var tempCurrent = (Temperatur.state as Number).floatValue
var tempfeel = (13.12 + 0.6215 * tempCurrent - 11.37 * speedCurrent + 0.3965 * tempCurrent * speedCurrent ).floatValue
TempFeel.postUpdate(tempfeel as Number)
}
end
Berechnung Taupunkt (Auch hier noch mal der Hinweis, der Urheber dieser Formel steht oben im LINK!)
Code: Alles auswählen
//------------------------------------------------------------------------------------------------------------------------
//
// Lambda: getDewPoint
//
// Berechnung des Taupunktes für eine gegebene Temperatur und Luftfeuchtigkeit
//
// Beschreibung:
// Die Luft ist ein Gemisch verschiedener Gase. Eines dieser Gase ist der Wasserdampf. Die Menge an
// Wasserdampf, die in der Luft enthalten sein kann, ist allerdings begrenzt. Je wärmer die Luft ist,
// desto mehr Wasserdampf kann in ihr enthalten sein.
//
// Die relative Luftfeuchtigkeit gibt an, wie viel Prozent des maximalen Wasserdampfgehaltes die Luft
// im Augenblick enthält. Da der maximale Wasserdampfgehalt mit steigender Temperatur ansteigt,
// fällt die relative Luftfeuchtigkeit mit steigender Temperatur (und umgekehrt).
//
// Die Taupunkttemperatur ist definiert als die Temperatur, bei der der aktuelle Wasserdampfgehalt in
// der Luft der maximale (100% relative Luftfeuchtigkeit) ist. Die Taupunkttemperatur ist damit eine von
// der aktuellen Temperatur unabhängige Größe. Eine Möglichkeit die Taupunkttemperatur zu messen
// ist das Abkühlen von Metall bis sich die Oberfläche mit Wasserdampf beschlägt. Dann ist die
// Temperatur des Metalls die Taupunkttemperatur.
//
// Es gibt keine exakte Formel zur Umrechnung der Taupunkttemperatur in die relative Luftfeuchtigkeit.
// Zur Erstellung des Taupunktrechners habe ich eine einfache Näherungsformel benutzt. Eine exakte
// Umrechnung ist nur mit experimentell ermittelten Tabellen möglich.
//
// Aus Temperatur und relativer Luftfeuchte bzw. Temperatur und Taupunkt lässt sich auch der
// absolute Feuchtegehalt der Luft in Gramm Wasserdampf pro Kubikmeter ausrechnen.
//
// Formeln:
// Die Grundlage der Berechnungen ist die Näherungsformel für den Sättigungsdampfdruck ( Gleichung 1 ),
// die sogenannte Magnusformel. Die relative Luftfeuchtigkeit ist definiert als das Verhältnis vom
// augenblicklichen Dampfdruck zum Sättigungsdampfdruck (umgeformte Gleichung 2). Bei der
// Taupunkttemperatur ist definitionsgemäß der Sättigungsdampfdruck gleich dem aktuellen Dampfdruck.
// Aus diesen beiden Definitionen folgt unmittelbar Gleichung 3, die Formel zur Berechnung der
// relativen Luftfeuchtigkeit aus der Taupunkttemperatur. Die 4. Gleichung beschreibt umgekehrt die
// Berechnung der Taupunkttemperatur aus der relativen Luftfeuchtigkeit und der aktuellen Temperatur.
// Diese 4. Gleichung ist im Grunde nichts anderes als die nach T aufgelöste 1. Gleichung , wobei für
// den Sättigungsdampfdruck der aktuelle Dampfdruck (und nicht der aktuelle Sättigungsdampfdruck)
// eingesetzt wird, so dass die Taupunkttemperatur und nicht die normale Temperatur als Ergebnis
// herauskommt. Aus der allgemeinen Gasgleichung ergibt sich die 5. Gleichung .
//
// Bezeichnungen:
// r = relative Luftfeuchte
// T = Temperatur in °C
// TK = Temperatur in Kelvin (TK = T + 273.15)
// TD = Taupunkttemperatur in °C
// DD = Dampfdruck in hPa
// SDD = Sättigungsdampfdruck in hPa
//
// Parameter:
// a = 7.5, b = 237.3 für T >= 0
// a = 7.6, b = 240.7 für T < 0 über Wasser (Taupunkt)
// a = 9.5, b = 265.5 für T < 0 über Eis (Frostpunkt)
//
// R* = 8314.3 J/(kmol*K) (universelle Gaskonstante)
// mw = 18.016 kg/kmol (Molekulargewicht des Wasserdampfes)
// AF = absolute Feuchte in g Wasserdampf pro m3 Luft
//
// Formeln:
// SDD(T) = 6.1078 * 10^((a*T)/(b+T))
// DD(r,T) = r/100 * SDD(T)
// r(T,TD) = 100 * SDD(TD) / SDD(T)
// TD(r,T) = b*v/(a-v) mit v(r,T) = log10(DD(r,T)/6.1078)
// AF(r,TK) = 10^5 * mw/R* * DD(r,T)/TK; AF(TD,TK) = 10^5 * mw/R* * SDD(TD)/TK
//
// Quelle: http://www.wetterochs.de/wetter/feuchte.html
//
// Danke an Stefan Ochs von www.wetterochs.de
//
//------------------------------------------------------------------------------------------------------------------------
val org.eclipse.xtext.xbase.lib.Functions$Function2<Double, Double, Double> getDewPoint = [
Double Temperature,
Double Humidity
|
var Double a
var Double b
var Double SDD
var Double DD
var Double v
var Double t = Temperature
var Double h = Humidity
if (t >= 0.0){ // T >= 0 °C
a = 7.5
b = 237.3
} else { // T < 0 °C über Wasser
a = 7.6
b = 240.7
}
SDD=(6.1078 * Math::pow(10.0, ((a*t)/(b+t))))
DD = (h/100.0*SDD)
v = Math::log10((DD/6.107))
return ((b*v)/(a-v))
]
rule "Taupunkt draußen"
when
Item Temperature received update
then
if (Temperature.state != NULL) && (Luftfeuchte.state != NULL))
{
var t = (Temperature.state as QuantityType<Number>).doubleValue
var h = (Luftfeuchte.state as QuantityType<Number>).doubleValue
Taupunkt_Outside.postUpdate(getDewPoint.apply(t, h))
}
end
Basis für die Regel des Taupunktes:
https://knx-user-forum.de/forum/support ... ich-lüften
Wetterstation im Garten
Tinkerforge zusammengebaut und erster Funktionstest
Sensoren und Laderegler nehmen das erste mal Platz im Holzkasten