Praxis – Regensensor

Das folgende Beispiel zeigt, wie man Daten des ELV Regensensors empfängt und auswertet (WS1000er / 2000er Serie).
Die aktuellen Wetterdaten von IP-Symcon City finden Sie hier: http://ipswitch.mine.nu

Lösung:
Der PC-Wetterempfänger wird an einem freien Com-Port angeschlossen und in den Instances ein
I/O Modul „COM Port“ (Settings: 19200,8,2,O) hinzugefügt und mit dem Device „FS10 System“ verbunden.
Dem Feld „Zählerstand“ wird eine Variable zugewiesen z.B. „IN_FS10_Regen“.
Diese Variable erhält im Skript „Mitternacht“ der Wert der Variablen „IN_Regen_Mitternacht“.
Dadurch erhalten wir den Zählerstand um Mitternacht und können aus der Differenz:
„IN_FS10_Regen“ minus Variablen „IN_Regen_Mitternacht“ die Regenmenge berechnen.
Um das Messsystem zu kalibrieren benötigen wir noch eine Konstante. Sie ist ein Faktor, der das
Verhältnis zwischen Regenmenge pro Quadratmeter und der Anzahl der Wippbewegungen im
Messsystem widerspiegelt.

Vorraussetzung:
Regensensor Best. Nr.: 355-47 / € 80,- (ELV)
PC-Interface Best. Nr.: 390-61 / € 36,- (ELV)


<?
/*
*******************************
 IP-SYNCOM Event Scripting
*******************************
*/
//File: Regenmelder.ips.php
// (C) by CSS/MST Mai 2005
include("Scripts/Konstanten.ips.php");
$regen_zaehler = GetValueInteger("IN_FS10_Regen");
$regen_mitternacht = GetValueInteger("IN_Regen_Mitternacht");
$regen_heute = ($regen_zaehler - $regen_mitternacht)* $regenmelder_faktor;
SetValueFloat("IN_Regen_heute",$regen_heute);
?>


<?
/*
*******************************
 IP-SYNCOM Event Scripting
*******************************
*/
//File: Konstanten.ips.php
//include("Scripts/Konstanten.ips.php");
$regenmelder_faktor = 0.37; //0.37mm pro Wippe
?>


/*
*******************************
 IP-SYNCOM Event Scripting
*******************************
*/
//File: Mitternacht.ips.php
$regen = GetValueInteger("IN_FS10_Regen");
SetValueInteger("IN_Regen_Mitternacht",$regen);
?>

PS:
Die im o.g. Skript verwendete Instance–ID muß für Ihre Umgebung angepasst werden.
Benutzen Sie die Tastenkombination CTRL + I um InstanceID Selector zu öffnen und wählen Sie die entsprechende Instance aus.
Bei Fragen, Unklarheiten, Anregungen usw. bitte hier posten!!!

Bei Fragen, Unklarheiten, Anregungen usw. bitte hier posten!!!

Aber klar, geht schon los :smiley:

Die ersten Unklarheiten hatte ich schon bei der Konfiguration des FS10Systems. Siehe

Das sollte noch deutlicher zumindest ins Handbuch.
Nun habe ich meine Zählerstand in einer Variable WS2000_Regen. Ich würde nun gerne stündlich und täglich die Werte aufsummieren. An welcher stelle muss ich die Scripte einfügen? Wo wird zum Beispiel das beschriebene Mitternacht.ips.php Script gestartet und wo der Faktor eingebunden?

Beim Regensensor gibt es ja auch das bekannte Problem, das der Zählerstand nach einiger Zeit wieder bei Null anfängt, wegen Überlauf (nur 11bit, glaube ich). Wie könnte man das abfangen?

Tommi

Hallo Tommi,

das Problem, dass der Zähler wieder bei Null anfängt habe ich „verdrängt“.
11 Bit sind „viel Regen“ und dass an einem Tag ein falscher Wert angezeigt wird, damit konnte ich leben. Ich werde mir trotzdem etwas überlegen.
Apropos überlegen: es gibt Überlegungen, ob es nicht eine IP-Symcon > Excel Funktion
geben wird, mit der man Messwerte direkt in eine Zelle (z.B. A6 schreiben kann).
Dadurch kann man schöne Temperaturkurven, Regen–Statistiken usw. in EXCEL realisieren.

Gruß MSt

Hallo auch,
das hört sich gut an, hat mich aber bei meinem Verständnisproblem, wo die Scripte einzubauen sind, nicht weitergebracht.
<<Problem
Wo wird eingestellt, das bei Änderung eines Wertes ein Script gestartet wird?
Wie kann ich arrangieren, das wie beschrieben Stündlich oder zu Mitternacht ein Script läuft?
>>

Des weiteren muss jeder Wert der FS10 mit dem Vorgänger validiert werden, da öfters mal „Müll“ decodiert wird, z.B. Helligkeit >500000, oder eine Bö von 80km/h wenn sich draussen kein Lüftchen bewegt. Besser noch, man schreibt alles in eine DB (btw: kann man eine PHP-Extension wie Postgresql oder Mysql zum Loggen/Auswerten dazuladen?)
Ich habe jetzt schon 4Jahre Daten mit der WS2000/WS2500PC gesammelt und lasse jeden Tag ein Script drüberlaufen, was genau das in der DB prüft, aber wenn ich die 2 letzten werte auch so immer zur Verfügung habe, kann ich das gleich beim Eintreffen der Daten machen.

Tommi

Hallo Tommi,

grundsätzlich kann man jedem Gerät, egal ob Steckdose oder Regenmelder eine Variable
zuordnen (unter „Instances“ und dann ein Doppelklick auf das betreffende Gerät / Modul).
Unter „Event Scripts“ gelangt man mit Strg + T in ein Fenster, in dem man die oben erwähnte
Variable auswählen kann. Wird nun ein Wert empfangen, dann wird dieses Skript
ausgeführt oder getriggert.
„Triggered Variables“ bedeutet: die aufgeführten Variablen erzeugen einen
Auslöseimpuls (engl. trigger) zum Start des Skripts

Hinweis:
Das Skript wird bei einer Variablen auch getriggert, wenn ihr Wert sich nicht ändert.
Beispiel: IP-Symcon empfängt mehrmals hintereinander den Temperaturwert der Heizung
von 65,3 °C – bei jedem Empfang (Zeit kann mit „GetUpdateTime“ ermittelt werden)
wird das Skript getriggert (dies hat Vorteile, wenn man die Werte protokollieren will).

Alternativ oder zusätzlich kann eine Zeit in Sekunden angegeben werden. Nach Ablauf
der Zeit (sie zählt rückwärts) wird ebenfalls das Skript gestartet.
Möchte man ein Skript zu einer bestimmten Zeit oder Tag starten verwendet man den
Timer Wizard / F6.

Tipp:
Unter „AddIns“ / „Script Info“ bekommt am eine Übersicht über sämtliche Trigger aller Skripte.

In dem betreffenden Skript kann man dann z.B. mit einer IF – Bedingung fehlerhafte Werte
herausfiltern. Das Problem, dass der Regensensor nach dem 11. Bit ? wieder bei 0
anfängt könnte man folgendermaßen lösen:


<?
/*
*******************************
 IP-SYNCOM Event Scripting
*******************************
*/
//File: Regenmelder.ips.php
// (C) by CSS/MST Mai 2005
include("Scripts/Konstanten.ips.php");
$regen_zaehler = GetValueInteger("IN_FS10_Regen");
$regen_alt = GetValueInteger("Regen_Last");
if ($regen_zaehler - $regen_alt < 0) {
   $regen_zaehler = (2048 - $regen_alt) +  $regen_zaehler; // Annahme: 11 Bit Zähler
 }
$regen_mitternacht = GetValueInteger("IN_Regen_Mitternacht");
$regen_heute = ($regen_zaehler - $regen_mitternacht)* $regenmelder_faktor;
SetValueFloat("IN_Regen_heute",$regen_heute);
$regen_alt = $regen_zaehler;
SetValueInteger("Regen_Last",$regen_alt);
?>

Ich hoffen ich konnte Dir werterhelfen?!

Gruß MST

Tipp:
Mit „Pinned“ kann man das Eigenschaftsfenster von Variablen im
Vordergrund halten und somit besser verfolgen, wie die die Werte
bei einer Eingabe (Modify) oder Ausgabe (Watch) verhalten.

Hallo steiner,

tommi hatte noch eine Frage drin, die Du leider noch nicht beantwortet hattest, die mich aber auch brennend interessiert.

ich wuerde auch gern mit den Daten in einer mySQL Datenbank noch weiteres veranstalten, bis dahin, dass man darueber auch dann die Heizungsregelung anhand gesammelter Daten noch intelligenter machen koennte. Und abgesehen von den Wetterdaten, fuer meine geplante Solarsteuerung (da fehlen mir auch noch Loesungsmoeglichkeiten) waere es auch ganz nett.

Gruss Torro

Hallo Community,

ich beschäftige mich seit gestern mit der Verarbeitung des Regenmengensensors S2000 R-1 :cool:

Erst mal ein Hinweis zur Bitbreite des übertragenen Zählerwortes, es sind 12-Bit und der Maximalwert ist damit 4095. :wink:

Habe ausserdem im Forum von Werner Krenns WsWin32 folgendes gelesen, was ich dann gerne auch berücksichtigen möchte:

"Ist nach der Wiederinbetriebnahme der Wert höher als der vorangegangene, aber im Bereich der Plausibilität so wird er akzeptiert - ansonsten verworfen.

Ist der Wert nun kleiner, als der vorangegangene - was in der Regel der Fall ist, wenn der Regensensor spannungslos war - so gibt es 2 Fälle:

  1. die Differenz zu Max (= 4095) + neuer Wert liegt im Bereich der Plausibilität, Wert wird akzeptiert

  2. Wert liegt bedeutend über Null, dieser Wert wird als neuer Wert angeommen, aber die Regenmenge verworfen"

Ich werde dies in den nächsten Tagen mal als Script realisieren und ggf. veröffentlichen.

Gruss aus Wiesbaden

Dieter

Danke für den Hinweis – wir freuen uns auf Dein Skript …

Gruß MST