Skript für HydropMeter - kommen keine Daten in Symcon an

Hallo,
ich habe einen Hydrop Meter bei mir installiert und möchte gerne die Daten in Symcon haben. Ich nutze folgendes Skript:

<?php
/*
==============================================================
 Hydrop Wasserverbrauch – IP-Symcon Skript
==============================================================

FUNKTION:
- Ruft einmal alle 5 Minuten den aktuellen Wasserzähler von der Hydrop REST-API ab.
- Schreibt die Werte in bestehende Variablen:
    • ID 53854 → Float (Gesamtwasserverbrauch in m³)
    • ID 11042 → String (Zeitpunkt der letzten Messung)
- Berechnet beim Tageswechsel automatisch den Tagesverbrauch in m³
  (Differenz zum Vortag, Mindestwert = 0).
- Schreibt diesen Wert in die Variable "Tagesverbrauch [m³]".
- Aktiviert die Archivierung der Tagesverbrauchsvariable, 
  sodass im WebFront Diagramme verfügbar sind.

VORAUSSETZUNGEN:
- IP-Symcon ab Version 5.x
- Internetzugang vom Symcon-Server zur Hydrop API
- Gültiger API-Key und Sensor-/Device-ID aus der Hydrop App

KONFIGURATION:
- Trage deinen API-Key, Sensor-ID und Device-Name im Bereich 
  "=== KONFIGURATION ===" unten ein.

BESONDERHEITEN:
- Ein Timer wird beim ersten Lauf automatisch erstellt (alle 5 Minuten).
- Tagesverbrauch wird immer gesetzt, auch wenn er 0 ist.
- Archivierung wird automatisch aktiviert.

ANPASSUNG:
- Falls du andere Variablen-IDs oder Namen verwenden willst,
  ändere die Werte im Abschnitt "IDs der vorhandenen Variablen".
==============================================================
*/

// === KONFIGURATION ===
$apiKey    = 'xxxx';
$sensorId  = 'xxxx';
$device    = 'Wasserzaehler'; // wie in der Hydrop App angegeben

// IDs der vorhandenen Variablen
$varMeter = 53854; // Float (Wasserverbrauch)
$varTime  = 11042; // String (Zeitpunkt der Messung)

// === Variable "Tagesverbrauch" anlegen (falls nicht vorhanden) ===
$varDaily = @IPS_GetObjectIDByIdent('DailyUsage', $_IPS['SELF']);
if ($varDaily === false) {
    $varDaily = IPS_CreateVariable(2); // Float
    IPS_SetName($varDaily, 'Tagesverbrauch [m³]');
    IPS_SetIdent($varDaily, 'DailyUsage');
    IPS_SetParent($varDaily, $_IPS['SELF']);
}

// === Archivierung für Tagesverbrauch aktivieren ===
$archiveID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]; // Archiv-Control
AC_SetLoggingStatus($archiveID, $varDaily, true);
IPS_ApplyChanges($archiveID);

// === Timer anlegen (nur beim ersten Lauf) ===
$eventName = "HydropUpdate_" . $_IPS['SELF'];
$eventID = @IPS_GetObjectIDByIdent($eventName, $_IPS['SELF']);

if ($eventID === false) {
    $eventID = IPS_CreateEvent(1); // 1 = Zyklisches Ereignis
    IPS_SetParent($eventID, $_IPS['SELF']);
    IPS_SetIdent($eventID, $eventName);
    IPS_SetName($eventID, "Hydrop Auto-Update");
    IPS_SetEventCyclic($eventID, 0, 0, 0, 0, 1, 5); // alle 5 Minuten
    IPS_SetEventActive($eventID, true);
    IPS_SetEventScript($eventID, 'IPS_RunScript(' . $_IPS['SELF'] . ');');
    IPS_LogMessage('Hydrop', 'Timer-Ereignis erstellt (alle 5 Minuten)');
}

// === API-Abfrage ===
$url = sprintf('https://api.hydrop-systems.com/sensors/%s/%s/newest', $sensorId, $device);

$opts = [
    'http' => [
        'method'  => 'GET',
        'header'  => sprintf("apikey: %s\r\nAccept: application/json\r\n", $apiKey),
        'timeout' => 10,
    ],
];

$context = stream_context_create($opts);
$result  = @file_get_contents($url, false, $context);

if ($result === false) {
    IPS_LogMessage('Hydrop', 'Fehler beim Abruf der API');
    return;
}

$data = json_decode($result, true);
if ($data === null) {
    IPS_LogMessage('Hydrop', 'Fehler beim Dekodieren von JSON: ' . json_last_error_msg());
    return;
}

// === Werte aktualisieren ===
if (isset($data['sensors'][0]['records'][0])) {
    $record     = $data['sensors'][0]['records'][0];
    $meterValue = (float) $record['meterValue'];
    $timestamp  = (string) $record['timestamp'];

    // Gesamtzähler + Zeit setzen
    SetValue($varMeter, $meterValue);
    SetValue($varTime, $timestamp);

    // Aktuelles Datum
    $currentDate = date('Y-m-d', strtotime($timestamp));

    // Attribute für Vergleich holen
    $lastDate  = IPS_GetScriptAttribute($_IPS['SELF'], 'LastDate');
    $lastValue = IPS_GetScriptAttribute($_IPS['SELF'], 'LastValue');

    // Bei Tageswechsel Differenz berechnen (immer, auch wenn 0)
    if ($lastDate !== $currentDate) {
        $dailyUsage = 0;
        if ($lastValue !== null && $lastValue !== '') {
            $dailyUsage = $meterValue - (float)$lastValue;
            if ($dailyUsage < 0) {
                $dailyUsage = 0; // Sicherheit: keine negativen Werte
            }
        }
        SetValue($varDaily, $dailyUsage);
        IPS_LogMessage('Hydrop', "Tagesverbrauch ($currentDate): $dailyUsage m³");
    }

    // Aktuellen Stand speichern
    IPS_SetScriptAttribute($_IPS['SELF'], 'LastDate', $currentDate);
    IPS_SetScriptAttribute($_IPS['SELF'], 'LastValue', (string)$meterValue);

    IPS_LogMessage('Hydrop', "Update erfolgreich: $meterValue m³, $timestamp");
} else {
    IPS_LogMessage('Hydrop', 'Keine Records gefunden');
}

Das ist die Rest-API von dem Teil:

Würde Bitte jemand mal drüberschauen von den PHP Profis wo der Fehler liegt? In meiner Test Datei die ich bekommen habe gibt es aber auch noch ein User und der API Key ist darin enthalten. Ich denke das hier der Fehler liegt in dem Skript.

Danke und VG
Stefan

Hi, ich habe ein Modul programmiert. Du kannst mal schauen, ob es bei Dir funktioniert. Sollte im Store seit heute verfügbar sein.

Viele Grüße,

Kai