Froggit 3500 Wetterstation

Super - danke Ralph für die ausführliche Beschreibung!

lg
hagi

Evt. ist das des Rätsels Lösung:

Inch of mercury (inHg) nach Hektopascal (hPa)

Und ergänzend:

1 Hektopascal [hPa] = 0,029 529 980 164 712 Inch of mercury [inHg]

lg
hagi

Gerade gesehen:

Du rechnest den Druck ja gar nicht um?

Hallo,

danke für die Info. Von inHG habe ich bisher nicht gehört.
Ich habe die Umrechnung eben versucht, aber ich komme auch mit diesem Faktor nicht zum gewünschten Ziel.

Durch den Tipp mit inHG habe ich den Umrechnungsfaktor gefunden. Ich muss mit 33,86 multiplizieren, dann passt es.

Vielen Dank.

Gruss
Ralph

Die Funktion „Pressure“ sollte doch funktionieren und du bekommst hPa als Ergebnis. Die zweite „PressurehPaToBar“ verstehe ich nicht, weil hPa in Bar 1000 hPa ist gleich 1 bar. Das habe ich glaube mal gelernt so :confused:

Hauptsache es funtkioniert jetzt!

lg
hagi

Oha, das ist ja eine Menge was da zu tun ist, da wäre ich im Leben nicht draufgekommen.
Vielen Dank an Dich Ralph und alle die hier beitrugen.

Hab mir eben die Froggit 1500 bestellt (wie oben) und hoffe dass die Bodenfeuchte Sensoren bald verfügbar sind. Deren Preis ist ja auch sehr attraktiv. Ob sie taugen wird man dann ja sehen.

Cheers
Seppm

Oha das klingt spannend. Muss der USB Dongle an einen PC, Raspi oder reicht auch einfach nur USB Power? Gibts das auch für LAN?
Edit:
Ok habe es kapiert. Der Dongle baut selbst die Verbindung ins WLAN auf und braucht keinen PC.

Hallo Ralph,

danke für deine Anleitung, die Daten nach IPS zu importieren.
Ich habe seit heute das gleiche Set wie du vorliegen und die Implementierung nach deiner Anleitung versucht.

Im letzten Schritt habe ich dann alle Variablen mit dem entsprechenden Datentyp wie in deinem Script angelegt. Das Script wird minütlich von der Registervariable aufgerufen, wenn eben Daten vom WLAN-Logger kommen (öfter fände ich zwar besser, aber erstmal egal).

Nun zum Problem. Ich erhalte nur teilweise Werte in die Variablen, und diese sind dann negativ, z.B. der Heat-Index ist bei -41,322, oder tempf -17,778.

Hast du eine Idee? Im Anhang die Debugs.

Edit:

Linkes Trennzeichen: PASSKEY=0596B21B1F94D42F0C174EB89C9D6802&
Rechtes Trennzeichen: &model=GW1000_Pro

cutter_send.txt (6.6 KB)

socket_dump.txt (4.98 KB)

Habe im Logfile einen Hinweis gefunden.

09.07.2020, 14:21:04 | Register Variable | <br />
<b>Notice</b>: Undefined variable: IPS_INSTANCE in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>8</b><br />
empfangener Datensatz: stationtype=GW1000A_V1.6.0
empfangener Datensatz: dateutc=2020-07-09+12:21:04
empfangener Datensatz: tempinf=75.2
empfangener Datensatz: humidityin=60
empfangener Datensatz: baromrelin=29.373
empfangener Datensatz: baromabsin=29.373
empfangener Datensatz: tempf=80.2
empfangener Datensatz: humidity=48
empfangener Datensatz: winddir=63
empfangener Datensatz: windspeedmph=2.91
empfangener Datensatz: windgustmph=4.47
empfangener Datensatz: maxdailygust=6.93
empfangener Datensatz: solarradiation=681.41
empfangener Datensatz: uv=6
empfangener Datensatz: rainratein=0.000
empfangener Datensatz: eventrainin=0.000
empfangener Datensatz: hourlyrainin=0.000
empfangener Datensatz: dailyrainin=0.000
empfangener Datensatz: weeklyrainin=0.000
empfangener Datensatz: monthlyrainin=0.000
empfangener Datensatz: yearlyrainin=0.000
empfangener Datensatz: totalrainin=0.000
empfangener Datensatz: temp1f=83.84
empfangener Datensatz: humidity1=45
empfangener Datensatz: wh65batt=0
empfangener Datensatz: batt1=0
<br />
<b>Notice</b>: Undefined index: temp2f in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>30</b><br />
<br />
<b>Notice</b>: Undefined index: humidity2 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>34</b><br />
<br />
<b>Notice</b>: Undefined index: pm25_ch1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>43</b><br />
<br />
<b>Notice</b>: Undefined index: pm25_ch1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>44</b><br />
<br />
<b>Notice</b>: Undefined index: pm25_avg_24h_ch1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>45</b><br />
<br />
<b>Notice</b>: Undefined index: pm25_avg_24h_ch1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>46</b><br />
<br />
<b>Notice</b>: Undefined index: pm25batt1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>47</b><br />

So sieht mein Code aus:

<?php 
// wenn das Skript von einer RegisterVariable-Instanz aus aufgerufen worden ist 
if ($_IPS['SENDER'] == "RegisterVariable") 
{ 
    // bereits im Puffer der Instanz vorhandene Daten in $data kopieren 
    $data  = $_IPS['VALUE']; //RegVar_GetBuffer($_IPS['INSTANCE']); 
     
IPS_LogMessage(IPS_GetName($IPS_INSTANCE), 'Aktuelle Daten: '.$data); 
// wenn das Trennzeichen ; in $data gefunden worden ist 

    if (strpos($data, '&')) { 
        // $data in durch & separierte Datensätze zerlegen 
        $datasets = explode('&', $data); 
        $wsvar = array(); 
  
        // alle nicht durch ; terminierten Datensätze ausgeben 
        for ($i = 0; $i < count($datasets) - 1; $i++) { 
            echo "empfangener Datensatz: ".$datasets[$i]."
"; 
            $array = explode('=', $datasets[$i]); 
            $wsvar[$array[0]] = $array[1]; 
        } 
    } 

    // Werte aktualisieren 
    SetValueString(10223, $wsvar['stationtype']); 
    SetValueString(14044, $wsvar['dateutc']); 
    SetValueFloat(42571, FahrenheitToCelsius(floatval($wsvar['tempinf']))); 
    SetValueFloat(26955, FahrenheitToCelsius(floatval($wsvar['tempf']))); 
    SetValueFloat(39647, FahrenheitToCelsius(floatval($wsvar['temp1f']))); 
    SetValueFloat(23972, FahrenheitToCelsius(floatval($wsvar['temp2f']))); 
    SetValueFloat(26967, $wsvar['humidityin']); 
    SetValueFloat(42493, $wsvar['humidity']); 
    SetValueFloat(10545, $wsvar['humidity1']); 
    SetValueFloat(26359, $wsvar['humidity2']); 
    SetValueFloat(42238, $wsvar['baromrelin']); 
    SetValueFloat(19437, $wsvar['baromabsin']); 
    SetValueFloat(46374, MilesToKilometer(floatval($wsvar['windspeedmph']))); 
    SetValueFloat(32021, MPHToMS(floatval($wsvar['windspeedmph']))); 
    SetValueFloat(52274, MilesToKilometer(floatval($wsvar['windspeedmph']))); 
    SetValueFloat(43219, MilesToKilometer(floatval($wsvar['maxdailygust']))); 
    SetValueFloat(40693, $wsvar['solarradiation']); 
    SetValueInteger(29790, intval($wsvar['uv'])); 
    SetValueFloat(16351, floatval($wsvar['pm25_ch1'])); 
    SetValueInteger(27156, intval(floatval($wsvar['pm25_ch1'])*4.222)); 
    SetValueFloat(40460, floatval($wsvar['pm25_avg_24h_ch1'])); 
    SetValueInteger(13254, intval(floatval($wsvar['pm25_avg_24h_ch1'])*4.222)); 
    SetValueInteger(38172, floatval($wsvar['pm25batt1'])); 
    SetValueFloat(48792, Rain(floatval($wsvar['dailyrainin']))); 
    SetValueFloat(59644, Rain(floatval($wsvar['hourlyrainin']))); 
    SetValueFloat(54013, Rain(floatval($wsvar['weeklyrainin']))); 
    SetValueFloat(58586, Rain(floatval($wsvar['monthlyrainin']))); 
    SetValueFloat(52759, Rain(floatval($wsvar['yearlyrainin']))); 
    SetValueFloat(14507, Rain(floatval($wsvar['totalrainin']))); 
    SetValueFloat(49625, Rain(floatval($wsvar['rainratein']))); 
    SetValueFloat(58027, windchill(FahrenheitToCelsius(floatval($wsvar['tempf'])),MilesToKilometer(floatval($wsvar['windspeedmph'])))); 
    SetValueFloat(15312, heatindex(FahrenheitToCelsius(floatval($wsvar['tempf'])),(floatval($wsvar['baromrelin'])))); 
} 

// Windchill Berechnung 
function windchill(float $temperatur, float $windspeed) { 
    if ($windspeed > 4.8) { 
        $windchill = 13.12 + 0.6215 * $temperatur - 11.37 * pow($windspeed, 0.16) + 0.3965 * $temperatur * pow($windspeed, 0.16); 
        return $windchill; 
    } else { 
        $windchill = $temperatur; 
        return $windchill; 
    } 
} 

// Hitze-Index-Berechnung 
function heatindex($t, $r) { 
  // Relative Luftfeuchtigkeit limitieren 
  if ($r < 0) { $r = 0; } 
  if ($r > 100) { $r = 100; } 
  
  // Hitzeindex 
  $hi = -8.784695 + 1.61139411*$t + 2.338549*$r - 0.14611605*$t*$r - 0.012308094*$t*$t - 0.016424828*$r*$r + 0.002211732*$t*$t*$r + 0.00072546*$t*$r*$r - 0.000003582*$t*$t*$r*$r; 
  return $hi; 
} // end heatindex 

function CelsiusToFahrenheit(float $celsius) 
{ 
    return $celsius * 1.8 + 32; 
} 

function FahrenheitToCelsius(float $fahrenheit) 
{ 
    return ($fahrenheit - 32) / 1.8; 
} 

function MilesToKilometer(float $mph) 
{ 
    $kmh = $mph * 1.609344; 
    return $kmh; 
} 

function MilesToKN(float $mph) 
{ 
    $kn = $mph * 0.86897624190065; 
    return $kn; 
} 

function KilometerToKN(float $kmh) 
{ 
    $kn = $kmh / 1.852; 
    return $kn; 
} 

function MPHToMS(float $mph) 
{ 
    $ms = $mph * 0.44704; 
    return $ms; 
} 

function MSToMPH(float $ms) 
{ 
    $mph = $ms * 2.23694; 
    return $mph; 
} 

function Rain(float $inch) 
{ 
    $mm = $inch * 25.4; 
    return $mm; 
} 

function RainToInch(float $mm) 
{ 
    $inch = $mm * 0.03937007874; 
    return $inch; 
} 

function Pressure_absolute(float $pressure) 
{ 
    $pascal = $pressure / 0.02952998751; 
    return $pascal; 
} 

function Pressure(float $pressure, float $temperature) 
{ 
    $pascal   = $pressure / 0.02952998751; 
    $altitude = $this->ReadPropertyInteger('altitude_above_sea_level'); 

    $g0 = 9.80665;                                         // Normwert der Fallbeschleunigung 
    $R  = 287.05;                                          // Gaskonstante trockener Luft 
    $T  = 273.15;                                          // 0°C in Kelvin 
    $Ch = 0.12;                                            // Beiwert zu E 
    if ($temperature < 9.1) { 
        $E = 5.6402 * (-0.0916 + exp(0.06 * $temperature));        // Dampfdruck des Wasserdampfanteils bei t < 9.1°C 
    } else { 
        $E = 18.2194 * (1.0463 - exp(-0.0666 * $temperature));    // Dampfdruck des Wasserdampfanteils bei t >= 9.1°C 
    } 
    $a  = 0.0065;                                          // vertikaler Temperaturgradient 
    $xp = $altitude * $g0 / ($R * ($T + $temperature + $Ch * $E + $a * $altitude / 2)); // Exponent für Formel 
    $p0 = $pascal * exp($xp);                             // Formel für den NN-bezogenen Luftdruck laut Wikipedia 
    return $p0; 
} 

function PressurehPaToBar($pressure) 
{ 
    $bar = $pressure * 0.02952998751; 
    return $bar; 
}     
?>

Hat keiner eine Idee? :slight_smile:

Naja, Undefined index deutet wohl darauf hin das der Key im Array nicht vorhanden ist. Kann ja sein das nicht jedes mal die gleichen Daten übertragen werden. Also müsstest Du wohl bevor Du etwas in eine Variable schreibst zunächst prüfen ob der Key überhaupt vorhanden ist z.B. mit isset.

Ich verstehe es nicht.

@rlieske: Läuft das bei dir auch auf Fehler?

Hallo Peter,

diese Meldungen

<b>Notice</b>: Undefined index: temp2f in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>30</b><br />
<br />
<b>Notice</b>: Undefined index: humidity2 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>34</b><br />
<br />
<b>Notice</b>: Undefined index: pm25_ch1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>43</b><br />
<br />
<b>Notice</b>: Undefined index: pm25_ch1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>44</b><br />
<br />
<b>Notice</b>: Undefined index: pm25_avg_24h_ch1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>45</b><br />
<br />
<b>Notice</b>: Undefined index: pm25_avg_24h_ch1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>46</b><br />
<br />
<b>Notice</b>: Undefined index: pm25batt1 in <b>/var/lib/symcon/scripts/15550.ips.php</b> on line <b>47</b><br />

betreffen den zweiten Temperatur- u. Luftfeuchtigkeitsmesser und den Luftgütesensor. Wenn du diese nicht hast, dann einfach die entsprechenden Zeilen rauslassen aus dem Skript. Jeder zusätzliche Sensor wird im Index hochgezählt.

Sobald der Bodenfeuchte-Sensor verfügbar ist, werden neue Variablen hinzukommen. Ich gebe dann Bescheid, welche das sind.

LG
Ralph

Danke Ralph.
Hast du die Meldungen bzgl. IPS_INSTANCE auch?

Hallo Ralph

Besten Dank für Deine ausführliche Anleitung.
Ich überlege mir gerade meine in die Jahre gekommene WMRS-200 von Oregon durch eine DP1500 abzulösen…
Besonders die Bodenfeuchtesensoren wären eine tolle Ergänzung.

Könntest Du noch ein Bild posten, wie Du die Deine Wettersensoren und dessen Variablen erstellt und benannt hast?

Wo resp. wie Dein Skript bei mehr oder weniger Sensoren erweitert oder gekürzt werden muss ist mir noch nicht ganz klar…
Aber evt. wird das einem klar, wenn man die Wetterstation in Betrieb genommen hat :confused:

Herzlichen Dank
Patrick

Der Bodenfeuchte Sensor ist nun verfügbar. Der Preis liegt bei genialen 25 Euro! Hab gleich 3 bestellt.
Und die Vogelabwehrspitzen für den Regenmesser gibt es nun auch.
Dann werde ich endlich meine DP1500 die hier seit Wochen liegt in Betrieb nehmen.
Cheers
Sepp

Bin auf deine Berichte gespannt. Habe auch gesehen dass die Bodenfeuchtesensoren verfügbar sind, bis jetzt aber nicht wirklich einen Use Case für mich analysieren können…

Will über die Feuchte im Rasen, der Hecke und den Töpfen die Bewässerung optimieren. Glaube ich giesse tendenziell zu viel.
Mal sehen

Gesendet von iPhone mit Tapatalk

Rasen wäre auch interessant, nur mäht der Roboter den Sensor ab :joy:

Hallo zusammen,

ich mal wieder :slight_smile:

Heute war ja ziemlich stürmig, zumindest hier bei uns in der Region.
Der Windmesser hat auch für den maximalen Wert über 45 km/h erfasst und in die Variable geschrieben, allerdings nicht bei der aktuellen Windgeschwindigkeit. Diese ist laut Log nie über 15 km/h gestiegen. Hängt das einzig und allein mit der Übertragung der Daten alle 16 Sekunden zusammen?

Für die Steuerung einer Markise müsste ich also den maximalen Tageswert (Böen) verwenden, dann bringt mir die aktuelle Windgeschwindigkeit aber nichts wenn dort Böen nicht erfasst werden, z.B. weil die Böen immer nur innerhalb der 16 Sekunden auftreten? Wäre irgendwie unlogsch.

Konnte das schon jemand beobachten?

Ich habe auch festgestellt, dass nur alle 60 Sekunden Werte an den I/O Server Socket übertragen werden. Kann dieses Intervall kürzer eingestellt werden? Ich denke das würde das Problem zumindest verbessern.