Pimp the KS300 Wetterstation

Begonnen von Fossibaer, 05 Mai 2020, 21:22:03

Vorheriges Thema - Nächstes Thema

Fossibaer

Hallo liebes Forum.

Seit gut fünf Jahren bin ich im Besitz einer KS300, die ich über einen CUNO betrieben habe. Leider gab es immer wieder Ausfälle - Batterie alle, Funkstörung, CUNO nicht mit Openhab verbunden, usw.

Letzte Woche habe ich auf der Suche nach einem Sonnensensor ein Projekt gefunden, das auf Basis eine Temperaturdifferenz funktioniert. Super - einfach mal mit zwei DS18B20 am Wemos D1 mini mit ESPEasy probiert und geht. Bei Interesse kann ich das Projekt gern vorstellen. Den Sensor hab ic also an den Mast der KS300 geklippst und - wieder kein Funkempfang.

Dann ging mir das nicht mehr aus dem Kopf: Kann man die Sensoren der KS300 nicht an einen ESP anschließen?

Also runter mit dem Mast und mal genau ansehen - also zerlegen. Der Sensor ist ja wirklich ordentlich gebaut, zumindest im Vergleich zu anderen Sensoren macht er mir einen robusten Eindruck, auch noch nach so gut fünf  Jahren.

Mir sind direkt die Reedsensoren ins Auge gefallen - die lassen sich doch recht einfach umstellen. In ESPEasy gibts einen passenden Pulscounter. Als erstes also mal die Wippe des Regensensors umgeklemmt - geht. Der Sensor gibt den Total-Count per Mqtt an Openhab. Dort konnte ich die alte Rule im Prinzip so stehen lassen. Ein Auslitern hat keine neuen Erkenntnisse geliefert, die 0,295 als Umrechnungsfaktor sind nach wie vor richtig. Auf den Regenkontakt habe ich verzichtet, der hat nie zuverlässig funktioniert. Vielleicht hat ja jemand noch eine Idee für eine sinnvolle Ergänzung für einen schnellen Regensensor. Ich hab zumindest stabil die Regenmengen und kann meine Bewässerung damit steuern.

Dann habe ich mir den Reedkontakt des Windsensors vorgenommen. Der ließ sich ebenfalls als Pullup realisieren. Ich habe 4 Counts pro Umdrehung gesehen - also auch irgendwie machbar, aber später mehr. Dann hatte ich hier noch einen BME280 liegen gehabt. Den wollte ich immer mal irgendwie einsetzen, hatte ihn also mal mit in einen Warenkorb geklickt. Jetzt war seine Stunde gekommen. Ein Test mit fliegender Verdrahtung bracht sofort Ergebnisse - perfekt.

Die Entscheidung viel. Die alte Platine flog raus. Den Dienst verrichtet nun eine Adafruit Huzzah Feather, der direkt das passende Akkumanagement mitbringt. Die Wetterstation hängt an der Garage - ist so mit 5Volt aus der Steckdose versorgt. Der Akku dient also nur als "USV". Einen ins alte Batteriefach passenden Akku muss ich aber noch besorgen. Auf dem Adafruit arbeitet ein E12. Dann habe ich alles neu verdrahtet und die Sensoren angeschlossen und auch die DS18B20 gleich mit angeschlossen. Der BME280 liefert nun sogar zusätzlich den Luftdruck mit, das konnte die alte Platine nicht.

Also soweit funktioniert das alles sehr gut, aber jetzt kommt meine Frage: Der Windsensor zählt die Umdrehungen und liefert stabil alle 10 Sekunden Die Umdrehungszahl *4 beim Openhab ab. Da ist mal meine Frage, ob das so sein kann? Zieht der Magnet bei einer Umdrehung den Reedkontakt zweimal an? Liegt das an der Magnetfeldausrichtung? Vielleicht hat hier ja einer einen Tipp für mich.

Und dann frage ich mich, ob da evt. jemand einen Umrechnungsfaktor für die Windgeschwindigkeit kennt. Vielleicht hat ja jemand auch einen Link für mich, wie ich mich dem Thema annähern kann. Diese Formel habe ich für einen anderen, ähnlichen Sensor gefunden und erstmal hilfsweise eingegeben.

[km/h] = 1.761 / (1 + rps) + 3.013 * rps

Da der ESP mir also über 10 Sekunden die Runden (rps) zählt und pro Runde 4 Counts zählt, teile ich also als erstes mit einer Variable die gelieferten Werte durch 40. So komme ich auf die Umdrehungen pro Sekunde. Die rechne ich anhand der Formel in KM/h um. Das passt auch irgendwie einigermaßen - so richtig Wind haben wir aber grade nicht, kann also nur wenig abgleichen. Ich würde es aber ganz gern mit etwas mehr Hintergrund hinterlegen. Damit ich später etwas übersichtlichere Werte habe, will ich später den Mittelwert über einen gewissen Zeitraum abfragen, evt. auch den Maxwert aus einem bestimmten Zeitraum, aber ich habe jetzt ggf. schon eine recht zügige Anzeige von Boen und könnte da einen Trigger drauf setzen, der ggf. eine Warnung ausgibt. Habe aber keine konkrete Anwendung im Moment - unsere Terrasse ist überdacht, keine Markise.  ;)

Vielleicht hat ja jemand einen Tipp für mich und wenn gewünscht, kann ich gern noch etwas mehr Infos liefern, Photos vom zerlegten Sensor hab ich leider nicht gemacht, aber Screenshots, Code, den Sonnensensor - da kann ich gern noch ein bisschen was hochladen.

Über Feedback freue ich mich aber sehr.

VG - Fossi

Fossibaer

#1
So - ein Telefonat brachte Neuerungen.

Ich habe einfach mal bei EQ3 angerufen. Und siehe da: Mir wurde sehr schnell, freundlich und mit der Erlaubnis zur Weitergabe das Anströmverhalten des Anemometers des KS300 überlassen. Die Datei habe ich angefügt. Mit diesen Infos habe ich dann mal eine Excelliste gefüttert und bin Schlussendlich zu folgendem Ergebnis gekommen: Bis 8 Herz ist eine nahezu lineare Steigerung von 3 kmh pro Umdrehung zu erkennen. Dann beläuft sich die Steigerung im weiteren Verlauf auf etwa 2 kmh. Mit etwas Ausprobieren bin ich bei 1,925 gelandet. Nun habe ich mir in Openhab folgende Rule erstellt:

rule "Wind in km/h"
when
Time cron "8/10 * * * * ?"
then
// var Number Wind_RPS = MQT_Aus1_Sens2_Wind.averageSince(now.minusMinutes(5))
var Number Wind_RPS = (MQT_Aus1_Sens2_Wind.state as Number) / 40
if ((Wind_RPS > 0.1) && (Wind_RPS < 8.9)) {
Asen_Wind_KMH.postUpdate(Wind_RPS * 3)
logInfo("wind low", Wind_RPS.toString)
// [km/h] = LSF / (1 + rps) + HSF * rps
}
if (Wind_RPS > 9) {
Asen_Wind_KMH.postUpdate(27 + 1.925 * (Wind_RPS - 9))
logInfo("wind high", Wind_RPS.toString)
}
if (Wind_RPS < 0.1) {
Asen_Wind_KMH.postUpdate(0)
}
end


Damit kann ich nun die Windgeschwindigkeit  berechnen. Leider ist es in den letzten 48 Stunden fast windstill geblieben, daher habe ich grad keine wirkliche Vergleichsmöglichkeit. Aber bis 8 Umdrehungen rechnet die Rule eine Windgeschwindigkeit aus. Für eine spätere gleichmässigere Weidergabe einer Windgeschwindigkeit habe ich eine Abfrage des Mittelwertes vorgesehen, die ich später aktivieren werde. Dann möchte ich noch eine Spitzenwertabfrage hinterlegen. Auf diesen Wert könnte man dann einen Trigger setzen, der bei einem bestimmten Schwellenwert einen Warnhinweis ausgibt und ggf. die Markisen einfahren würde. Die Ergebnisse des Sensor teile ich durch 4 und durch 10 (/40), 4, weil der ESP 4 Counts pro Umdrehung zählt und das über 10 Sekunden. Alle 10 Sekunden werden die Daten per MQTT an Openhab übergeben und landen in der Datenbank (MariaDB).

Edit: Nachdem ich jetzt mal ein bisschen gelesen habe, handelte es sich bei den 4 Impulsen wohl auch um Prell. Jetzt habe ich den Parameter Debounce-Time auf 8 ms gestellt. Irgendwo habe ich gelesen, das Standard-Reedkontakte zwischen 0,5 und 1 ms prellen. Das müsste also passen und gibt Platz für 125 Impulse.

VG - Fossi

Fossibaer

So, wieder ein Stück weiter: Nochmaliger Kontakt mit EQ3. Die Tabelle aus dem Eingangsthread beeinhaltet die Herz des Sensors, also zwei Peeks. Um auf RPS zu kommen, müssen die Werte in der Tabelle durch zwei geteilt werden. Da ich meine Formeln so gerechnet habe, dass ich von den Herz als RPS ausgegangen bin, muss ich also nur den Korrekturfaktor aus der Zeile der Variable entfernen:

ule "Wind in km/h"
when
Time cron "8/10 * * * * ?"
then
// var Number Wind_Hz = MQT_Aus1_Sens2_Wind.averageSince(now.minusMinutes(5))
var Number Wind_Hz = (MQT_Aus1_Sens2_Wind.state as Number) / 10
if ((Wind_Hz> 0.1) && (Wind_Hz < 8.9)) {
Asen_Wind_KMH.postUpdate(Wind_Hz * 3)
logInfo("wind low", Wind_Hz.toString)
// [km/h] = LSF / (1 + rps) + HSF * rps
}
if (Wind_Hz > 9) {
Asen_Wind_KMH.postUpdate(27 + 1.925 * (Wind_Hz - 9))
logInfo("wind high", Wind_Hz.toString)
}
if (Wind_Hz < 0.1) {
Asen_Wind_KMH.postUpdate(0)
}
end


Damit sind eigentlich alle Fragen geklärt und der Sensor kann seine Arbeit aufnehemen.

Schon jetzt bedanke ich mich für Anregungen, ggf. habe ich da ja was falsch interpretiert, oder es lässt sich sauberer, besser oder einfacher umsetzen. Auch würde ich gern ein Script basteln, das mir Daten aus Mqtt abfischt, um diese dann in ein Wetterportal hochzuladen. Leider habe ich dazu noch nichts gefunden, ich glaube aber, das ein solches Script auf Basis von Mqtt einige Anhänger finden könnte.

VG an alle aktiven Bastler - Fossi