Wetterstation

(ERGAENZUNG): Und da bin ich, 40 posts später, immer noch nicht wirklich weiter gekommen.

[ol]
[li]Gegen FS20 habe ich die obigen Vorbehalte.
[/li][li]Die Oregon-Station scheint eher als Spielzeug ausgerichtet zu sein (Batterien, kleine Reichweite).
[/li][li]Die Davis-Stationen scheinen mir robust und geeignet
[/li][/ol]

Also, es geht in Richtung Davis. Aber es bleiben folgende (präzise formulierte Fragen:

[ol]
[li]Wie zuverlässig sind sie wirklcih? Hat jemand hier 1st-hand Erfahrungen?
[/li][li]wie soll ich sie ins IPS einbinden? Eine UDP-Sockel kann ich zerlegen - aber für mehr reichen meine Kenntnisse nicht aus.
[/li][/ol]

Ist doch ganz einfach, probier es aus. Andere müssen es auch. Außerdem hast Du 14 Tage Rückgaberecht, sofern Du es bestellst zumindest in Deutschland. :smiley:

villeicht mag der Tipp diffus erscheinen, aber mach Dich mal im Wetterstationsforum schlau.
Und nochmal der Tipp: falls eine direkte Anbindung zunächst nicht gelingt geht es auch über WSWIN.

Roger. Habe mal nachgefragt «Wetterstationen.info» Forum - Thema anzeigen - Wetterdaten als UDP packets? Mal schauen was passiert.

ergänzend hier noch ein Radar-Niederschlagssensor,

welchen ich persönlich auch sehr interessant finde

Post #20 war Friede, dachte ich :confused:

Was ist an der Feststellung eines Durcheinanders verkehrt ? Ich habe es nicht verursacht, weder durch die Fragen noch die Antworten!

Ansonsten wurden danach (von anderen und auch von mir) mehrere unterschiedliche Wege aufgezeigt, die zum selben Ziel führen. Die Entscheidung, welcher Dir am Besten gefällt kann Dir niemand abnehmen.

Schönen Abend
Bruno

habe also selber ein kleines Skript geschrieben. Die Inspiration dazu (und einige Code-Zeilen) kam aus der Unwetterstation von Paresy.

Dies scheint zunächst Mal das Problem der Präzipitationen zu lösen - und erst noch viel billiger als vorangeschlagen!

passt zwar nicht zum Thema, aber wo ist hier der Zusammenhang mit dem Wetter im Wort „Präzipitationen“ :confused:

Unter Präzipitation versteht man eine immunologische Reaktion bei der es durch die Bildung von Antigen-Antikörper-Komplexen zu einer Ausfällung aus einer Lösung kommt. So kann mit Hilfe bekannter Antikörper ein Antigen nachgewiesen werden und andersherum.

Jetzt hast du mich erwischt! Deutsch ist nicht meine Muttersprache (auch nicht Züritüütsch). English geht bei mir besser. Ich meinte „precipitations“, d.h. Niederschläge.

Dass ich vor 25 Jahren eine immunologische Doktorarbeit (und vor 15 Jahren eine immunologische Habilitation) geschrieben habe, mag die zweideutige Wortwahl zT auch erklären…

immunologische Doktorarbeit (und vor 15 Jahren eine immunologische Habilitation)

da wäre Miraculix aber treffender als aag :smiley:

schon gut - aber hast Du mein Skript ausprobiert? Mich interessiert schon, ob es auch in Bern funktioniert…

ich glaube nicht, dass dies bei uns anwendbar ist. Wir sind im Berner Oberland, und da machen die Berge jedem Wetterbericht einen Strich durch die Rechnung (nicht mal die Sturmwarnung auf dem See- und diese wird irgendwo aus dem Kt. Zürich - kein Witz - gesteuert). Aber wenn du willst, kann ich’s ja mal ausprobieren.

Habe nun mal eine Davis Wetterstation gekauft. Beim gegenwärtigen Dollarkurs ist sie garnicht mal so teuer.

Die Sensoren sind wireless sonnenbetrieben. Die Konsole hat eine serielle Schnittstelle. Dann habe ich mir einen sehr guten Serial-to-Ethernet Konverter, nicht billig aber flexibel und mit stabilen Treibern. Der Ethernetkabel reicht bis unterm Dach, und dort will ich Konsole + Konverter plazieren.

Jetzt ist alles angekommen, und ich mache mich an die Arbeit. Ueber TTY kann ich problemlos mit der Konsole kommunizieren. Als nächstes werde ich eine serielle Instanz in IPS einrichten, und schauen, ob ich die Wetterstation alle 5 Minuten abfragen kann. Bericht folgt…

ich habe hier folgende Klassegefunden, mit der die Datenpakete der Davis-Station zerlegt werden können.

Ich brauche allerdings ein bisschen Hilfe, diese in PhP umzusetzen. Kann mir jemand ein Paar Tipps geben? Herzlichen Dank im Voraus!


// The WeatherLoopData class extracts and stores the weather data from the 
// array of bytes returned from the Vantage weather station
// The array is generated from the return of the LOOP command.
//
public class WeatherLoopData
{
    // Load - disassembles the byte array passed in and loads it into 
    // local data that the accessors can use.
    // Actual data is in the format to the right of the assignments - 
    // I convert it to make it easier to use
    // When bytes have to be assembled into 2-byte, 16-bit numbers, 
    // I convert two bytes from the array into 
    // an Int16 (16-bit integer).  When a single byte is all that's needed, 
    // I just convert it to an Int32.
    // In the end, all integers are cast to Int32 for return.
    public void Load(Byte[] loopByteArray)
    {
        int hours,
            minutes;
        string timeString;
        DateTime currTime;

	// Sbyte - signed byte
	barTrend = Convert.ToInt32((sbyte)loopByteArray[3]);                    
	// Uint16
	barometer = (float)(BitConverter.ToInt16(loopByteArray, 7)) / 1000;     
	// Uint16
	insideTemp = (float)(BitConverter.ToInt16(loopByteArray, 9)) / 10;    
	// Byte - unsigned byte
	insideHumidity = Convert.ToInt32(loopByteArray[11]);                    
	// Uint16
	outsideTemp = (float)(BitConverter.ToInt16(loopByteArray, 12)) / 10;    
	// Byte - unsigned byte
	outsideHumidity = Convert.ToInt32(loopByteArray[33]);                   
	// Uint16
	windDirection = BitConverter.ToInt16(loopByteArray, 16);                
	// Byte - unsigned byte
	currWindSpeed = Convert.ToInt32(loopByteArray[14]);                     
	// Byte - unsigned byte
	avgWindSpeed = Convert.ToInt32(loopByteArray[15]);                      
	// Uint16
	dayRain = (float)(BitConverter.ToInt16(loopByteArray, 50)) / 100;       
        // get the current date and time
        currTime = DateTime.Now;

        // Time from the Vantage is all in 24-hour format.  
        // I move it into a string so I can manipulate it 
        // more easily.
        timeString = BitConverter.ToInt16(loopByteArray, 91).ToString();    // Uint16
        // Extract hours and minutes and convert them to integers - required by Datetime
        hours = Convert.ToInt32(timeString.Substring(0, timeString.Length - 2));
        minutes = Convert.ToInt32(timeString.Substring(timeString.Length - 2, 2));
        // Create a new Datetime instance - use current year, month and day
        sunRise = new DateTime(currTime.Year, currTime.Month, 
		currTime.Day, hours, minutes, 0);

        timeString = BitConverter.ToInt16(loopByteArray, 93).ToString();    // Uint16
        hours = Convert.ToInt32(timeString.Substring(0, timeString.Length - 2));
        minutes = Convert.ToInt32(timeString.Substring(timeString.Length - 2, 2));
        sunSet = new DateTime(currTime.Year, currTime.Month, 
		currTime.Day, hours, minutes, 0); ;
    }
}