mal wieder eine Frage bezüglich der Regenmessung.
Ich habe mir Skripte geschrieben, die die tägliche Regenmenge, die Menge Gestern und Vorgestern berechnen. Nun würde ich die Sache gerne noch Wochentagen zuordnen. Kann man über if/ else so etwas bewerkstelligen? Kann man den Wochentag abfragen (Montag oder Dienstag …) und dann über if/ else die Regenmenge des Tages in die entsprechende Variable schreiben?
Wie müsste das Skript hierfür aussehen? Ich habe leider meine Probleme mit if/ else. Einfache Abfragen bekomme ich noch hin. Gleiche Frage für die Berechnung Stunde und Woche.
Ich habe an Variablen. MengeAktuell (Änderung der Variable bei jeder Änderung der Gesamtmenge vom Sensor) ist die aktuelle Änderung.
Dann, wie oben genannt für den gesamten Tag und für die letzten 2 Tage.
Ich hoffe auf Hilfe!
In den Foren gibt es hierfür leider keine Vorlage. Nutzen will ich das für meine Beregnungsanlage.
wie holst du denn die Werte aus der DB?
wenn man z.B. via AC_get… arbeitet, bekommt man ein Array von Informationen, u.A. den Wert und den Timestamp. Aus diesem Timestamp lässt sich dann auch der Wochentag ableiten.
Vielleicht zeigst du mal dein bisheriges Script, so kann man konkret helfen
Für jeden Kalendertag wird ein „Sub-Array“ ausgegeben, und zwar in chronologisch umgekehrter Reihenfolge. Array „0“ wäre gestern, „1“ vorgestern usw.
Weiterhin repräsentiert der Wert „Avg“ die Niederschlagsmenge des jeweiligen Tages (in meinem Fall mm/m²), der „Timestamp“ das Datum des Tages.
Das ist das Skript für die Regenmenge. Getriggert durch eine Variablenänderung des OC-3 Sensors, der leider nur ein Zähler (gesamt) ist.
Liter_heute ist meine „Arbeitsvariable“ (natürlich nicht in Litern, sondern mm).
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : Regenerfassung.ips.php
Trigger : Regenzaehler_neu
Interval : OnUpdate
*/
define("KORREKTURFAKTOR", 0.273); // Faktor für die Umrechnung der Wippenschläge in Millimeter
// aktuelle Werte einlesen
$rza = GetValueInteger(47277 /*[Wetterformeln\Regen_2\Regenzaehler_alt]*/); // vorausgegangene Messung
$rzn = GetValueInteger(51986 /*[Wetterformeln\Regen_2\Regenzaehler_neu]*/); // aktuelle Messung
// zur Bug-Bereinigung die unteren Nibbles vertauschen
//$rzn = ( $rzn & 0xff00 ) // LSB ausblenden
// + (($rzn & 0x00f0) >> 4) // oberes Nibble des LSB 4x rechts schieben (entspricht Division durch 16)
// + (($rzn & 0x000f) << 4); // unteres Nibble des LSB 4x links schieben (entspricht Multiplikation mit 16)
//SetValueInteger(47277 /*[Wetterformeln\Regen_2\Regenzaehler_alt]*/, $rzn);
// Zählerüberlauf abfangen
//if ($rza > $rzn) $rzn += 4096;
// Zuwachs (Wippenschläge) seit der letzten Messung
$Zuwachs = $rzn - $rza;
// Berechnung der aktuellen Regenmenge in Millimetern (entspricht Liter/qm) für den laufenden Tag
$lpd = GetValueFloat(16341 /*[Wetterformeln\Regen_2\Liter_heute]*/);
$lpd += $Zuwachs*KORREKTURFAKTOR;
SetValueFloat(16341 /*[Wetterformeln\Regen_2\Liter_heute]*/, $lpd);
?>
Die schreibe ich dann in „RegenHeute“, was meine Anzeige in Webfront ist.
Unten der Versuch des Aufzählen auf einen Wochentagszähler. Hier habe ich dann aber das Problem mit if/else bekommen. Keine Ahnung wie ich das hinbekomme.
Besten Dank schon einmal fürs Gedankenmachen.
Lieschen
das ist super nett von dir Rakete, jedoch muss ich dafür noch ein wenig „Lernen“ um das zu verstehen. Ich habe keine Ahnung wie ich das mache.
Hast du noch eine einfachere Lösung im Rahmen meiner rudimentären PHP- Kenntnisse?
Ich wundere mich, das es dafür noch kein IPSLibrary- Krimskrams gibt.
hier mal ein Ansatz (aus der Hüfte geschossen):
das Script liest Dir die Regenmengen pro Tag (aus der neu anzuglegenden Zähler-Variable) aus. Ich habe das zunächst auf die letzten 7 Tage beschränkt, ist aber beliebig erweiterbar.
Ich gehe mal zunächst davon aus, dass Du die Daten der jeweiligen Tage in die bestehenden Variablen haben möchtest.
Dann sähe das so aus:
Hier ist der Sensorzähler gemeint, oder? Dieser gibt aber nur „Absolutwerte“ ohne Korrekturfaktor für die mm/m2 aus. Oder ist das die Variable für den „Gesamtniederschlag“?
Ich kann im Moment die Gesamtniederschlagmenge nur für den Tag ausrechnen. Mein Regensensor zählt dauerhaft drauf. Ist aber wie gesagt ohne Korrekturfaktor.
Etwas was die reelle Regenmenge dauerhaft aufzeichnet habe ich nicht. Habe auch keine Ahnung wie ich das mache.
Ich denke, wir müssen noch Grundsätzliches klären. Ist aber nicht schlimm.
Mir scheint, dass du „genau anders herum“ mit Datenaufzeichnung umgehst: erst verdichten (auf einen Tag z.B.) und dann auf verschiedene Anzeige-Variablen verteilen. Das raubt Dir unglaubliche Flexibilität im Umgang mit den aufgezeichneten Daten.
Deutlich sinnvoller ist: alle ankommenden Meßwerte direkt in eine Zählervariable schreiben (selbst wenn sie im Sekundentakt kommen sollten). Erst in der Auswertung wird entschieden, welcher Zeitraum betrachte wird, wie fein die Daten aufgelöst werden etc. Nur dann bekommst Du Auswertungsmöglichkeiten im IPS wie diese hier.
In Deinem Falle würde ich die vom Sensor kommenden Daten in mm/m² umrechnen und dann in der Zählervariable aufaddieren lassen. Mehr braucht und soll man hier nicht tun. Die Auswertung ist davon völlig unabhängig und verändert auch die bisher aufgezeichneten Daten nicht mehr.
Mit $varID ist genau diese Zählervariable gemeint, ich denke die wirst du erst noch anlegen müssen
im Objektbaum eine Variable (vermutlich Float) anlegen, im vorletzten Fenster der Variablen-Eigenschaften „Aggregationstyp“ auf „Zähler“ stellen (und in der Doku lesen, was es damit auf sich hat ;))
OK, das habe ich verstanden und das klingt auch äußerst sinnvoll.
Könntest du mir noch den Tipp geben, wie ich diese anlege, umrechne und das aufaddieren erledige.
Mache ich das dann mit einem Skript, das auf Variablenänderung getriggert ist? Und wie muss das aussehen?
Sorry und VIELEN DANK für die Mühe… bin halt nur Arzt und kein PHP- versierter Informatiker/ Techniker…