Die beiden aktuellen Scripts habe ich am Ende dieses ersten Beitrags eingefügt, damit das Suchen einfacher ist.
Hallo,
ich möchte für meine Beregnungssteuerung die Regenmenge der letzten 24h ermitteln.
Also was z.B. seit gestern 10:00h bis heute 10:00h an Regen gefallen ist.
Im Einsatz ist eine HomeMatic OC3, welche die
- Regenmenge gestern im mm, (Beispiel: 2.95mm)
- Regenmenge heute in mm und (12.39mm)
- Regenmenge in mm ausgibt. (384.97mm)
Die Regenmengen gestern und heute werden in der CCU2 standardmäßig um 7:30h zurückgestellt.
Dies ist auch nicht das Problem. Das kann geändert werden.
Ich benötige aber noch die 24h-Regenmenge, und die bezieht sich immer auf die letzten 24h, unabhängig vom Tageswechsel.
Mein Ansatz: Regenzähler alle Stunde auslesen, in eine 24h-Tabelle schreiben. Die ältesten Werte fallen raus, die neuen kommen neu rein. Hierüber kann dann die Summe gebildet werden.
Wenn erforderlich, kann so auch der Regen der letzen Stunde, der letzten 3 Stunden, der letzten 6 Stunden und der letzten 12 Stunden ermittelt werden.
Der Regenzähler wird (bei 999?) zurückgesetzt, Wie kann dies beachtet werden?
Mein Problem ist: Wie mache ich dies am besten mit PHP in Symcon?
Symcon-Forum, Homematic-Forum, FHEM-Forum sowie Google habe ich befragt, aber nichts hierzu gefunden. Es wurden nur Lösungen für die Mengen 24h (letzter Tag) (bei mir: 2.95mm) angezeigt. Aber das habe ich schon…
Mit freundlichen Grüßen
Matthias
#####################################################################
Hier die Lösung:
Ich habe mit umfangreicher Unterstützung von Fonzo meine Aufgabenstellung gelöst.
Es werden die Regenmengen in mm ermittelt für:
die letzte Stunde
die letzten 3 Stunden
die letzten 6 Stunden
die letzten 12 Stunden
die letzten 24 Stunden
die letzten 48 Stunden
die letzten 72 Stunden
die letzten 96 Stunden
Zudem wird mit einem zweiten Script die Regenmenge
des aktuellen Tages (00:00 Uhr bis jetzt)
des Vortages (00:00 Uhr bis 24:00 Uhr)
ermittelt.
Mein Regenmesser ist ein Homematic OC3. Hier werden die Werte für heute und gestern von 7:30 bis 7:30 ermittelt.
Dies könne in der CCU2 per internem Programm geändert werden, aber ich möchte Standards nicht ändern.
Der DWD ermittelt die täglichen Mengen von 7:00 bis 7:00 Uhr.
Die Werte werden z.B. für Bewässerungsberechnungen benötigt.
Schritte:
- Die in den beiden Scripts aufgeführten Variablen anlegen
- Die ID des Sensors (muss kein OC3 sein) im Script hinterlegen
- Die Archiv-ID wird automatisch ermittelt (Fonzo)
4.1 Script „Daten sammeln“ neu anlegen, das Script „Daten sammeln“ reinkopieren
4.2 Ereignis: „Täglich alle 1 Stunden“ zuordnen
5.1 Script „Daten sammeln (00-24)“ neu anlegen, das Script „Daten sammeln (00-24)“ reinkopieren
5.2 Ereignis: „Täglich alle 1 Stunden“ zuordnen
Nun werden jede Stunde die ermittelten Werte in die jeweiligen Variablen geschrieben.
Script „Daten sammeln“
<?
/*
################################################################################
# IP-Symcon Programm #
# #
# Beschreibung : Niederschlagsmengen ermitteln (aus Archivdaten) #
# Create date : 2016-09-25 #
# Last change : 2016-10-02 #
# Version : 0.05 #
# Datei : 34747 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Daten sammeln]*/.ips.php #
# Autor : Matthias Herold #
# Copyright : #
################################################################################
*/
// Hardware
$ID_OC3Rainfall = 26235 /*[0 Umwelt\0.10_Wetterstation\0.10_Wetterstation OC3_1_WEATHER\Regenmenge]*/; //ObjektID der OC3 Regenmenge mit Überlaufzähler
// Variablen (Float mit einer Nachkommastelle)
$ID_Rain1 = 10048 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag letzte 1 Stunde]*/;
$ID_Rain3 = 14741 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag letzte 3 Stunden]*/;
$ID_Rain6 = 21054 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag letzte 6 Stunden]*/;
$ID_Rain12 = 57499 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag letzte 12 Stunden]*/;
$ID_Rain24 = 34752 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag letzte 24 Stunden]*/;
$ID_Rain48 = 33555 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag letzte 48 Stunden]*/;
$ID_Rain72 = 25730 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag letzte 72 Stunden]*/;
$ID_Rain96 = 51750 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag letzte 96 Stunden]*/;
//--config end--------------------
// letzte Stunde
OC3Rainfall(1, $ID_Rain1, $ID_OC3Rainfall);
// letzte 3 Stunden
OC3Rainfall(3, $ID_Rain3, $ID_OC3Rainfall);
// letzte 6 Stunden
OC3Rainfall(6, $ID_Rain6, $ID_OC3Rainfall);
// letzte 12 Stunden
OC3Rainfall(12, $ID_Rain12, $ID_OC3Rainfall);
// letzte 24 Stunden
OC3Rainfall(24, $ID_Rain24, $ID_OC3Rainfall);
// letzte 48 Stunden
OC3Rainfall(48, $ID_Rain48, $ID_OC3Rainfall);
// letzte 72 Stunden
OC3Rainfall(72, $ID_Rain72, $ID_OC3Rainfall);
// letzte 96 Stunden
OC3Rainfall(96, $ID_Rain96, $ID_OC3Rainfall);
function OC3Rainfall($lasthours, $varid, $ID_OC3Rainfall)
// $lasthours Anzahl der Stunden, die ausgewertet werden sollen
// $varid ObjektID, in die der Wert abgelegt werden soll
// $ID_OC3Rainfall ObjektID der OC3 Regenmenge mit Überlaufzähler
{
$ArchiveID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]; // Archiv Handler ID wird automatisch ausgelesen
$ZeitraumVON = time()- (3600 * $lasthours);
$ZeitraumBIS = time();
$LogDatenAR = AC_GetLoggedValues($ArchiveID, $ID_OC3Rainfall, $ZeitraumVON, $ZeitraumBIS, 0);
$isempty = empty($LogDatenAR);
if ($isempty)
{
SetValue($varid, 0);
}
else
{
$idrain = (count($LogDatenAR)-1);
$currentrainfall = $LogDatenAR[0]["Value"];
$lastrainfall = $LogDatenAR[$idrain]["Value"];
$totalrainfall = $currentrainfall - $lastrainfall;
SetValue($varid, $totalrainfall);
}
}
?>
Script „Daten sammeln (00-24)“
<?
/*
################################################################################
# IP-Symcon Programm #
# #
# Beschreibung : Niederschlagsmengen ermitteln 0-24 Uhr (aus Archivdaten) #
# Create date : 2016-09-25 #
# Last change : 2016-10-02 #
# Version : 0.05 #
# Datei : 53515 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Daten sammeln (00-24)]*/.ips.php #
# Autor : Matthias Herold #
# Copyright : #
################################################################################
*/
// Quelle:
// https://www.symcon.de/forum/threads/32432-Regemmenge-letzte-24h-unabhänging-vom-Tageswechsel?p=300435#post300435
// Hardwae
$ID_OC3Rainfall = 26235 /*[0 Umwelt\0.10_Wetterstation\0.10_Wetterstation OC3_1_WEATHER\Regenmenge]*/; //ObjektID der OC3 Regenmenge mit Überlaufzähler
// Archive
$ArchiveID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]; // Archiv Handler ID wird automatisch ausgelesen
// Variablen (Float mit einer Nachkommastelle)
$ID_Rain_h = 26945 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag heute (0-24 Uhr)]*/;
$ID_Rain_g = 55681 /*[99 meine Projekte\0 UMW\UMW Niederschlag\Niederschlag gestern (0-24 Uhr)]*/;
//*****************************************************************************
// heute von 00:00 bis jetzt
//*****************************************************************************
$LogDatenAR = AC_GetLoggedValues($ArchiveID, $ID_OC3Rainfall, strtotime("today 00:00"), time(), 0);
$count = count($LogDatenAR);
if ($count == 0)
{
SetValue($ID_Rain_h, 0);
}
else
{
$idrain_h = (count($LogDatenAR)-1);
$currentrainfall = $LogDatenAR[0]["Value"];
$lastrainfall = $LogDatenAR[$idrain_h]["Value"];
$totalrainfall_h = $currentrainfall - $lastrainfall;
SetValue($ID_Rain_h, $totalrainfall_h);
}
//*****************************************************************************
// gestern von 00:00 bis 24:00
//*****************************************************************************
$LogDatenAR = AC_GetLoggedValues($ArchiveID, $ID_OC3Rainfall, strtotime("yesterday 00:00"), strtotime("today 00:00"), 0);
$count = count($LogDatenAR);
if ($count == 0)
{
SetValue($ID_Rain_g, 0);
}
else
{
$idrain_g = (count($LogDatenAR)-1);
$currentrainfall = $LogDatenAR[0]["Value"];
$lastrainfall = $LogDatenAR[$idrain_g]["Value"];
$totalrainfall_g = $currentrainfall - $lastrainfall;
SetValue($ID_Rain_g, $totalrainfall_g);
}
?>