Regenmenge Netatmo - Tag, Woche, Monat u. Jahr

Hallo,

ich versuche mich die ganze Zeit daran ein PHP Skript zu erstellen, welches mir verlässlich aus der aktuellen Regenmenge der Netatmo Wetterstation ermittelt

<?php

// ID der archivierten Variablen für die Regenmenge
$rainVarID = 41315; // Ersetze dies mit der tatsächlichen ID deiner Regenmengen-Variable

// IDs der Zielvariablen für die berechneten Regenmengen
$dailyRainVarID = 29157;
$weeklyRainVarID = 28310;
$monthlyRainVarID = 49700;
$yearlyRainVarID = 52420;

// Archiv-Instanz-ID
$archiveID = 21633; // Ersetze dies mit deiner Archiv-Instanz-ID

// Funktion zur Berechnung der Regenmenge für einen bestimmten Zeitraum
function calculateRainfall($archiveID, $variableID, $aggregationLevel, $startTime, $endTime) {
    $values = AC_GetAggregatedValues($archiveID, $variableID, $aggregationLevel, $startTime, $endTime, 0);
    $rainfall = 0;
    foreach ($values as $value) {
        $rainfall += $value['Avg']; // Summiere alle Durchschnittswerte
    }
    return $rainfall;
}

// Aktuelle Zeit
$currentTime = time();

// Berechnung der Regenmengen
$dailyRainfall = calculateRainfall($archiveID, $rainVarID, 1, strtotime("today", $currentTime), $currentTime);
$weeklyRainfall = calculateRainfall($archiveID, $rainVarID, 3, strtotime("-7 days", $currentTime), $currentTime);
$monthlyRainfall = calculateRainfall($archiveID, $rainVarID, 4, strtotime("first day of this month", $currentTime), $currentTime);
$yearlyRainfall = calculateRainfall($archiveID, $rainVarID, 5, strtotime("first day of January", $currentTime), $currentTime);

// Ergebnisse speichern
SetValueFloat($dailyRainVarID, $dailyRainfall);
SetValueFloat($weeklyRainVarID, $weeklyRainfall);
SetValueFloat($monthlyRainVarID, $monthlyRainfall);
SetValueFloat($yearlyRainVarID, $yearlyRainfall);

?>

Könnt Ihr mir einen Tipp geben, weshalb ich nur unter der Jahresmenge einen Wert finde und der auch noch fehlerhaft ist? Wir hatten gestern z.B. 6 mm Regen und der erscheint mir nicht.

Die Archivvariable habe ich entsprechend selektiert und diese hat auch mehr als 660 Datensätze gespeichert

Gruß
Thimo

Jetzt hat es geklappt, hier das korrigierte Skript

<?php
// ID der Variablen für die Regenmenge
$rainVarID = 28598; // Ersetze dies mit der tatsächlichen ID deiner Regenmengen-Variable

// IDs der Zielvariablen für die berechneten Regenmengen
$dailyRainVarID = 29157;
$weeklyRainVarID = 28310;
$monthlyRainVarID = 49700;
$yearlyRainVarID = 52420;

// Archiv-Instanz-ID
$archiveID = 21633; // Ersetze dies mit deiner Archiv-Instanz-ID

// Funktion zur Ermittlung des maximalen Wertes der Regenmenge für einen Zeitraum
function getMaxRainfall($archiveID, $variableID, $startTime, $endTime) {
    $values = AC_GetLoggedValues($archiveID, $variableID, $startTime, $endTime, 0);
    $maxRainfall = 0;

    foreach ($values as $value) {
        if ($value['Value'] > $maxRainfall) {
            $maxRainfall = $value['Value'];
        }
    }

    return $maxRainfall;
}

// Aktuelle Zeit
$currentTime = time();

// Berechnung der Startzeitpunkte
$startOfDay = strtotime(date("Y-m-d 00:00:00", $currentTime));
$startOfWeek = strtotime("Monday this week 00:00:00");
$startOfMonth = strtotime(date("Y-m-01 00:00:00", $currentTime));
$startOfYear = strtotime(date("Y-01-01 00:00:00", $currentTime));

// Berechnung der Regenmengen
$dailyRainfall = getMaxRainfall($archiveID, $rainVarID, $startOfDay, $currentTime);
$weeklyRainfall = getMaxRainfall($archiveID, $rainVarID, $startOfWeek, $currentTime);
$monthlyRainfall = getMaxRainfall($archiveID, $rainVarID, $startOfMonth, $currentTime);

// Berechnung der Jahresregenmenge auf Basis der maximalen Tageswerte
$yearlyRainfall = 0;
$daysInYear = date("z", strtotime("31 December this year")) + 1; // Anzahl der Tage im aktuellen Jahr

for ($i = 0; $i < $daysInYear; $i++) {
    $dayStart = strtotime("-$i days", $startOfDay);
    $dayEnd = strtotime(date("Y-m-d 23:59:59", $dayStart));
    $yearlyRainfall += getMaxRainfall($archiveID, $rainVarID, $dayStart, $dayEnd);
}

// Ergebnisse speichern
SetValueFloat($dailyRainVarID, $dailyRainfall);
SetValueFloat($weeklyRainVarID, $weeklyRainfall);
SetValueFloat($monthlyRainVarID, $monthlyRainfall);
SetValueFloat($yearlyRainVarID, $yearlyRainfall);

?>


Hallo,

habe ein kleines Verständnisproblem, weshalb schreibt mir das neue Skript mit jedem Lauf einen Statusprotokolleintrag. Das hatte ich mit dem alten Skript nicht?

Und wie lautet der Eintrag?
Wenn er nur leer ist, dann lösche mal das ?> am Ende vom Script.
Michael

sorry hatte ich ganz vergessen :wink:

Vermutlich „das Übliche“, also Leerzeichen vor dem „<…“ oder nach dem „…>“ oder irgendeine Ausgabe im Sinne von echo, print_r oder ähnlichem.

1 „Gefällt mir“

Hi ralf,

das war’s, so ein M… daran hatte ich gar nicht mehr gedacht

1 „Gefällt mir“