🎉 30 Tage Geld-zurück-Garantie – risikofrei testen. Jetzt bestellen!

Support

Du hast Fragen oder brauchst Unterstützung?

Hier findest du Hilfe und Antworten!

Anleitungen

Quick Start Guide

Im Quick Start Gui­de fin­dest du al­le nö­ti­gen In­for­ma­tio­nen, um das hy­dro­p­me­ter in Be­trieb zu neh­men oder die häu­figs­ten Feh­ler zu be­he­ben. Au­ßer­dem fin­dest du dort wich­ti­ge Hin­wei­se zur Ver­wen­dung und zur Sicherheit.

Dokumentation der hydrop REST-API

Hier fin­dest du die Do­ku­men­ta­ti­on der hy­drop REST-API und der zur Ver­fü­gung ste­hen­den End­punk­te. Mit der REST-API kannst du dein hy­dro­p­me­ter in ei­ge­ne Pro­jek­te ein­bin­den und die Was­ser­ver­brauchs­da­ten dort verwenden.

Häufige Fragen

Hier fin­dest du Ant­wor­ten zu In­stal­la­ti­on und Be­trieb. Ant­wor­ten auf all­ge­mei­ne Fra­gen fin­dest du im FAQ.

Installation

Für ei­nen si­che­ren Be­trieb ist nur das mit­ge­lie­fer­te Ka­bel zu ver­wen­den. Die Ver­wen­dung von un­ge­eig­ne­ten Netz­tei­len oder Ka­beln kann zu Fehl­funk­tio­nen und/oder ei­ner Be­schä­di­gung des Ge­rä­tes füh­ren und im schlimms­ten Fall Brand­ge­fahr ver­ur­sa­chen. Durch das Nut­zen ei­nes an­de­ren Ka­bels er­lischt da­her auch die Garantie.

Mit der App kannst du ei­nen QR-Code er­zeu­gen, der vom hy­dro­p­me­ter ab­ge­scannt wird. So wird das hy­dro­p­me­ter mit dem Netz­werk und gleich­zei­tig mit dei­ner App ver­bun­den. Wäh­le hier­für in der oben rechts im Me­nü „hy­dro­p­me­ter hin­zu­fü­gen“ aus. Die ge­nau­en Schrit­te fin­dest du im Quick Start-Gui­de so­wie im In­stal­la­ti­ons­vi­deo.

Um das hy­dro­p­me­ter in ein an­de­res, neu­es Netz­werk zu ver­bin­den, musst du die Ver­bin­dung des Ge­rä­tes zurücksetzen.

Dre­he da­zu das an den Strom an­ge­schlos­se­ne hy­dro­p­me­ter um und drü­cke mit bei­den Dau­men mit­tig auf die Schei­be, bis der in­ter­ne Druck­sen­sor aus­ge­löst wird (ein lei­ses Kli­cken er­tönt) und die LEDs an­fan­gen zu pul­sie­ren. Hal­te die Schei­be für ca. 5s ge­drückt, bis die LEDs schnell blin­ken. Nun kannst du den Druck lö­sen und das hy­dro­p­me­ter wird auf die Werks­ein­stel­lun­gen zurückgesetzt.

Das Ge­rät star­tet an­schlie­ßend neu und geht wie­der in den Ver­bin­dungs­mo­dus. Das er­kennst du dar­an, dass die LEDs blau pul­sie­ren. Die­ser Vor­gang kann bis zu 30 Se­kun­den dau­ern. Bit­te las­se das Ge­rät die gan­ze Zeit an der Strom­ver­bin­dung an­ge­schlos­sen.
Nun kannst du neue Ver­bin­dungs­da­ten über die App un­ter „hy­dro­p­me­ter hin­zu­fü­gen“ ein­ge­ben und den dar­aus ge­ne­rier­ten QR-Code mit dem hy­dro­p­me­ter ab­scan­nen. Das funk­tio­niert auch, wenn das hy­dro­p­me­ter dort vor­her be­reits hin­zu­ge­fügt war.

Be­vor du das hy­dro­p­me­ter wie­der auf dem Zäh­ler be­fes­tigst, ent­fer­ne bit­te mög­li­cher­wei­se ent­stan­de­ne Fett­fle­cken auf der Schei­be im Ge­häu­se, da­mit ei­ne Ab­le­sung dei­nes Was­ser­zäh­lers er­folg­reich durch­ge­führt wer­den kann.

Das ro­te Leuch­ten am hy­dro­p­me­ter zeigt an, dass das Ge­rät kei­ne Ver­bin­dung zum an­ge­ge­be­nen WLAN-Netz­werk auf­bau­en konn­te. Bit­te kli­cke auf „Ab­bre­chen“ und über­prü­fe den ein­ge­tra­ge­nen Na­men des WLANs und das Pass­wort auf Tipp­feh­ler und über­prü­fe mit­tels dei­nes Han­dys, ob das WLAN-Netz­werk am Stand­ort des Zäh­ler emp­fan­gen wer­den kann. Star­te den Pro­zess dann er­neut in der App und ste­cke das hy­dro­p­me­ter kurz vom Strom ab. Wenn du es jetzt wie­der an­schließt, pul­sie­ren die LEDs wie­der blau und du kannst den Ver­bin­dungs­pro­zess er­neut starten.

Betrieb

Das heißt, dein Ge­rät ist zur­zeit on­line, es gibt je­doch Un­ge­nau­ig­kei­ten in der Bil­der­ken­nung des Zäh­ler­stan­des. Das kann ver­schie­de­ne Ur­sa­chen haben:
  • Das Zäh­ler­mo­dell ist noch nicht kompatibel
  • Der Zäh­ler ist verschmutzt
  • Das hy­dro­p­me­ter sitzt nicht mit­tig auf dem Zäh­ler und kann des­halb nicht al­le Zahlen/Rädchen erfassen
Soll­test du die­se Sta­tus­an­zei­ge wei­ter­hin se­hen, wen­de dich bit­te an un­se­ren Sup­port mit dei­ner hy­dro­p­me­ter-Ge­rä­te-ID. Die ID fin­dest du auf der In­nen­sei­te dei­nes hy­dro­p­me­ter, sie steht hin­ter „S/N:“ und be­steht aus 10 Zei­chen, be­gin­nend mit den Buch­sta­ben FB und 8 Num­mern. Un­se­ren Sup­port er­reichst du un­ter: support@hydrop-systems.com

Die­ser Sta­tus be­deu­tet, dass dein hy­dro­p­me­ter be­reits seit ei­ni­ger Zeit kei­ne Da­ten mehr ge­sen­det hat.

Bit­te über­prü­fe, ob das Ge­rät ein­ge­steckt ist und ei­ne WLAN-Ver­bin­dung ver­füg­bar ist.
Soll­te das Ge­rät kor­rekt mit dem Strom ver­bun­den sein, aber auch nach mehr als ei­ner Mi­nu­te kei­ne der LEDs leuch­ten, liegt mög­li­cher­wei­se ein Hard­ware-De­fekt vor. Wen­de dich in die­sem Fall bit­te an den Sup­port mit dei­ner hy­dro­p­me­ter-Ge­rä­te-ID. Die ID fin­dest du auf der In­nen­sei­te dei­nes hy­dro­p­me­ter, sie steht hin­ter „S/N:“ und be­steht aus 10 Zei­chen, be­gin­nend mit den Buch­sta­ben FB und 8 Num­mern. Du er­reichst un­se­re Sup­port un­ter: support@hydrop-systems.com

Falls die dar­ge­stell­ten Wer­te in der App von dei­nem tat­säch­li­chen Zäh­ler­stand ab­wei­chen soll­ten, über­prü­fe bit­te, ob der Was­ser­zäh­ler sau­ber ist und das hy­dro­p­me­ter rich­tig auf dem Zäh­ler sitzt. Wenn wei­ter­hin ein feh­ler­haf­ter Wert an­ge­zeigt wird, kon­tak­tie­re bit­te un­ser Sup­port-Team mit dei­ner hy­dro­p­me­ter-Ge­rä­te-ID. Die ID fin­dest du auf der In­nen­sei­te dei­nes hy­dro­p­me­ter, sie steht hin­ter „S/N:“ und be­steht aus 10 Zei­chen, be­gin­nend mit den Buch­sta­ben FB und 8 Num­mern. Un­se­ren Sup­port er­reichst du un­ter: support@hydrop-systems.com

Ist das hy­dro­p­me­ter noch nicht mit dei­ner App ver­knüpft, sie­he bit­te un­ter „In­stal­la­ti­on“ nach.
Das ro­te Leuch­ten am hy­dro­p­me­ter zeigt an, dass das Ge­rät kei­ne Ver­bin­dung zum ein­ge­tra­ge­nen WLAN-Netz­werk auf­bau­en konn­te. Kann kei­ne Ver­bin­dung her­ge­stellt wer­den, wech­selt das Ge­rät nach ei­ni­ger Zeit in den Off­line-Mo­dus, spei­chert die Zäh­ler­wer­te auf dem Ge­rä­te­spei­cher zwi­schen und ver­sucht sich zu ei­nem spä­te­ren Zeit­punkt er­neut zu ver­bin­den. Über­prü­fe mit­tels dei­nes Han­dys, ob das WLAN-Netz­werk am Stand­ort des Zäh­ler emp­fan­gen wer­den kann. Soll­te es dau­er­haft kei­ne Ver­bin­dung auf­bau­en kön­nen, siehst du in der App den ro­ten Sta­tus „hy­dro­p­me­ter off­line“. Um die Netz­ver­bin­dung er­neut ein­zu­tra­gen, fü­ge das Ge­rät mit den ak­tu­el­len Netz­werk­da­ten er­neut in der App hin­zu. Dies ist auch mög­lich, wenn das hy­dro­p­me­ter noch in der App an­ge­zeigt wird. Wie das funk­tio­niert, fin­dest du un­ter „In­stal­la­ti­on“ -> „Wie kann ich das hy­dro­p­me­ter in ein neu­es Netz­werk einwählen“

Soll­te das hy­dro­p­me­ter nicht mehr leuch­ten, auch nach­dem es et­wa ei­ne Mi­nu­te mit dem Strom ver­bun­den war, liegt mög­li­cher­wei­se ein Hard­ware de­fekt vor. Wen­de dich in die­sem Fall bit­te an den Sup­port über: support@hydrop-systems.com un­ter An­ga­be der Ge­rä­te-ID. Die ID fin­dest du auf der In­nen­sei­te dei­nes hy­dro­p­me­ter, sie steht hin­ter „S/N:“ und be­steht aus 10 Zei­chen, be­gin­nend mit den Buch­sta­ben FB und 8 Nummern.

Smart Home Vorlagen

Hier fin­dest du Vor­la­gen für die In­te­gra­ti­on dei­nes hy­dro­p­me­ter in ver­schie­de­ne Smart Home Sys­te­me. Wäh­le dein Sys­tem aus und fol­ge den An­wei­sun­gen, um dei­ne Was­ser­ver­brauchs­da­ten zu integrieren.

Anleitung

Schau dir ger­ne auch un­ser You­Tube Vi­deo zu die­sem The­ma an: Hier kli­cken

Für das Ein­bin­den dei­nes hy­dro­p­me­ter in Home As­sistant be­nö­tigst du fol­gen­de Dinge:

  • ei­nen Ac­count in der hy­drop App (ver­füg­bar für An­droid und iOS)
  • den Na­men, den du dei­nem hy­dro­p­me­ter in der App ge­ge­ben hast
  • dei­nen per­sön­li­chen API-Key für die hy­drop REST-API

Falls du noch kei­nen API-Key hast, sen­de hier­zu ei­ne An­fra­ge per E‑Mail an support@hydrop-systems.com

Wenn du al­le In­for­ma­tio­nen be­reit hast, kann es los­ge­hen. Ko­pie­re die Sen­sor-De­fi­ni­ti­on in die configuration.yaml dei­ner Home As­sistant In­stanz. Bit­te ach­te dar­auf, dass der Ein­zug beim Ein­fü­gen kor­rekt ist und der Sen­sor nicht aus­ver­se­hen als Un­ter­punkt ei­nes an­de­ren Ge­räts de­fi­niert wird.

Er­set­ze die Platz­hal­ter in den spit­zen Klam­mern mit den ent­spre­chen­den In­for­ma­tio­nen. Ein­ge­setzt wer­den muss der Ge­rä­te­na­me dei­nes hy­dro­p­me­ter, den du in der App fest­ge­legt hast, so­wie dein per­sön­li­cher API-Key.

Ach­tung: Bit­te ge­he sorg­sam mit dei­nem API-Key um und las­se ihn nicht in fal­sche Hän­de geraten.

Code


rest:
  - resource: "https://api.hydrop-systems.com/sensors/ID/<<HIER GERÄTENAME EINTRAGEN>>/newest"
    headers:
      apikey: "<<HIER API-KEY EINTRAGEN>>"
    scan_interval: 300          # alle 5 Minuten
    sensor:
      - name: "Wasserzähler"    # Anzeigename in Home Assistant
        unique_id: hydropmeter
        value_template: >
          {% if value_json.sensors and value_json.sensors[0].records %}
              {{ value_json.sensors[0].records[0].meterValue }}
          {% else %}
              unknown
          {% endif %}
        unit_of_measurement: "m³"
        device_class: water
        state_class: total_increasing
        json_attributes_path: "$.sensors[0].records[0]"
        json_attributes:
          - timestamp
          - meterValue
  

Anleitung

Schau dir ger­ne auch un­ser You­Tube Vi­deo zu die­sem The­ma an: Hier kli­cken

Für das Ein­bin­den dei­nes hy­dro­p­me­ter in IO­Bro­ker be­nö­tigst du fol­gen­de Dinge: 
  • ei­nen Ac­count in der hy­drop App (ver­füg­bar für An­droid und iOS)
  • den Na­men, den du dei­nem hy­dro­p­me­ter in der App ge­ge­ben hast
  • dei­nen per­sön­li­chen API-Key für die hy­drop REST-API
Falls du noch kei­nen API-Key hast, sen­de hier­zu ei­ne An­fra­ge per E‑Mail an support@hydrop-systems.com

Wenn du al­le In­for­ma­tio­nen be­reit hast, kann es los­ge­hen. Die Ab­fra­ge der Da­ten in IO­Bro­ker er­folgt mit Ja­va­Script. Das Skript hier­für fin­dest du im Codeblock. 

Falls du bis­lang noch kein Ja­va­Script in dei­nem IO­Bro­ker ver­wen­dest, musst du zu­nächst den Ad­ap­ter für Ja­va­Script Skript­aus­füh­rung hin­zu­fü­gen und ei­ne In­stanz er­stel­len. Dann im Me­nü auf der lin­ken Sei­te auf Skrip­te kli­cken und ein neu­es Ja­va­Script-Skript (für Pro­gram­mie­rer) er­stel­len. Ko­pie­re die Code­vor­la­ge in dein neu­es lee­res Skript. Er­set­ze die Platz­hal­ter für den Sen­sor­na­men und den API-Key oben mit dei­nen ei­ge­nen Werten. 

Nun kann das Skript ab­ge­spei­chert wer­den. Nach dem Spei­chern er­scheint die Schalt­flä­che zum Aus­füh­ren des Skripts. Kli­cke dar­auf und die Mess­wer­te dei­nes hy­dro­p­me­ter soll­ten nun als Sta­te in den IO­Bro­ker-Ob­jek­ten zu fin­den sein und kon­ti­nu­ier­lich ak­tua­li­siert werden. 

Ach­tung: Bit­te ge­he sorg­sam mit dei­nem API-Key um und las­se ihn nicht in fal­sche Hän­de geraten. 

Code

/* * Hydropmeter Datenabfrage
 * Dieses Skript fragt regelmäßig den aktuellen Zählerstand von einem hydropmeter
 * über die hydrop REST-API ab und speichert die Werte in IOBroker States.
 * 
 * Abhängigkeiten: axios (sollte bereits in IOBroker installiert sein)
 * 
 * Datum: 07.08.2025
 */

const axios = require('axios');

const SENSOR_NAME = 'DEIN_HYDROPMETER_NAME_HIER';      // Name des hydropmeters aus der App hier eintragen
const API_KEY = 'DEIN_API_KEY_HIER';                   // API-Key hier eintragen

const API_URL = `https://api.hydrop-systems.com/sensors/ID/${SENSOR_NAME}/newest`;
const REQUEST_INTERVAL_MINUTES = 5;

// State-Bezeichner für die Datenpunkte
const dpValue = `javascript.0.hydropmeter.${SENSOR_NAME}.zaehlerstand_m3`;
const dpTimestamp = `javascript.0.hydropmeter.${SENSOR_NAME}.messzeitpunkt_iso`;

// States anlegen (falls nicht vorhanden)
createState(dpValue, 0, {
    type: 'number',
    name: 'Zählerstand Wasser [m³]',
    unit: 'm³',
    read: true,
    write: false
});

createState(dpTimestamp, '', {
    type: 'string',
    name: 'Messzeitpunkt (ISO-Zeitstempel)',
    read: true,
    write: false
});

// Funktion zum Abrufen der hydropmeter-Daten über die REST-API
function fetchHydropData() {
    console.log(`[hydropmeter] Anfrage an API für Sensor "${SENSOR_NAME}" gestartet.`);

    axios.get(API_URL, {
        headers: {
            'apikey': API_KEY
        },
        timeout: 10000
    }).then(response => {
        const record = response.data?.sensors?.[0]?.records?.[0];

        if (!record) {
            console.warn('[hydropmeter] Keine gültigen Daten im Antwortobjekt gefunden.');
            return;
        }

        const meterValue = record.meterValue;
        const timestampUnix = record.timestamp;
        const timestampISO = new Date(timestampUnix * 1000).toISOString();

        console.log(`[hydropmeter] Neuer Wert empfangen: ${meterValue} m³ (Zeit: ${timestampISO})`);

        setState(dpValue, meterValue, true);
        setState(dpTimestamp, timestampISO, true);
    }).catch(err => {
        console.error(`[hydropmeter] Fehler bei API-Abfrage mit axios: ${err}`);
    });
}

// Erstmaliger Aufruf
fetchHydropData();

// Regelmäßige Abfrage im Intervall
schedule(`*/${REQUEST_INTERVAL_MINUTES} * * * *`, fetchHydropData);

Anleitung

Für das Ein­bin­den dei­nes hy­dro­p­me­ter in IP-Sym­con be­nö­tigst du fol­gen­de Dinge:

  • ei­nen Ac­count in der hy­drop App (ver­füg­bar für An­droid und iOS)
  • den Na­men, den du dei­nem hy­dro­p­me­ter in der App ge­ge­ben hast
  • dei­nen per­sön­li­chen API-Key für die hy­drop REST-API

Falls du noch kei­nen API-Key hast, sen­de hier­zu ei­ne An­fra­ge per E‑Mail an support@hydrop-systems.com

Wenn du al­le In­for­ma­tio­nen be­reit hast, kann es los­ge­hen. Die Ab­fra­ge der Da­ten in IP-Sym­con er­folgt mit ei­nem PHP-Skript. Das Skript hier­für fin­dest du im Codeblock.

Öff­ne zu­nächst den Ob­jekt­baum in der Ver­wal­tungs­kon­so­le dei­ner IP-Sym­con-In­stanz und kli­cke un­ten rechts auf das „+“-Sym­bol, um ein neu­es Ob­jekt zu er­stel­len. Um das PHP-Skript dem Ob­jekt­baum hin­zu­zu­fü­gen, wäh­le Au­to­ma­ti­on und dann PHP-Skript aus. Le­ge den Na­men und Spei­cher­ort für das neue Skript fest und be­stä­ti­ge die Er­stel­lung. Es öff­net sich der Skript­edi­tor. Even­tu­ell sind be­reits ei­ni­ge Zei­len im neu­en Skript vor­han­den. Die­se wer­den nicht wei­ter be­nö­tigt und soll­ten ent­fernt oder über­schrie­ben wer­den. Ko­pie­re die Code­vor­la­ge und fü­ge sie 1:1 im Skript­edi­tor ein.

Er­set­ze die Platz­hal­ter im Kon­fi­gu­ra­ti­ons-Ab­schnitt für den API-Key, den Ge­rä­te­na­men und ge­ge­be­nen­falls die Zeitzone.

Die Va­ria­blen für den Zäh­ler­stand, den Zeit­stem­pel der letz­ten Mes­sung und den Ta­ges­ver­brauch wer­den vom Skript au­to­ma­tisch an­ge­legt und im Ob­jekt­baum un­ter dem PHP-Skript ein­grup­piert. Möch­test du dei­ne ei­ge­nen Va­ria­blen ver­wen­den, kannst du im Kon­fi­gu­ra­ti­ons-Ab­schnitt die Va­ria­blen-IDs der ge­wünsch­ten Va­ria­blen ein­fü­gen. Dann ver­wen­det das Skript die­se und wird kei­ne ei­ge­nen erstellen.

Nun kann das Skript ab­ge­spei­chert und aus­ge­führt wer­den. Kli­cke da­zu auf den But­ton oben rechts in der Me­nü­leis­te des Skript-Editors.

Im Ob­jekt­baum soll­ten nun die ent­spre­chen­den Va­ria­blen mit den Wer­ten von dei­nem hy­dro­p­me­ter be­füllt wer­den. Das Skript er­zeugt au­to­ma­tisch ei­nen Ti­mer, der den Zäh­ler­stand al­le 5 Mi­nu­ten ak­tua­li­siert. Ob die Er­stel­lung des Ti­mers er­folg­reich war siehst du, wenn du im Ob­jekt­baum den Be­reich un­ter­halb dei­nes er­stell­ten PHP-Skripts aus­klappst. Dort soll­te ein Ti­mer-Ob­jekt vor­han­den sein.

Ach­tung: Bit­te ge­he sorg­sam mit dei­nem API-Key um und las­se ihn nicht in fal­sche Hän­de geraten.

Code

<?php
/**
 * hydropmeter-Integration für IP-Symcon
 *
 * Ruft alle 5 Minuten den aktuellen Wasserzählerstand von der hydrop REST-API ab,
 * berechnet den Tagesverbrauch und aktiviert die Archivierung für Diagramme.
 *
 * @author    hydrop systems GmbH
 * @version   1.1.0
 * @date      2025-10-10
 * @license   MIT
 * 
 * @requires  IP-Symcon 5.x+
 * @requires  Internetzugang zu https://api.hydrop-systems.com
 * @requires  Gültiger hydrop API-Schlüssel und Gerätename
 */

// ╔══════════════════════════════════════════════════════════════╗
// ║                      KONFIGURATION                           ║
// ╠══════════════════════════════════════════════════════════════╣
// ║  API-Zugangsdaten und optionale Variablen-IDs konfigurieren  ║
// ╚══════════════════════════════════════════════════════════════╝

$apiKey    = '<<HIER API-KEY EINFÜGEN>>';
$device    = '<<HIER GERÄTENAME EINFÜGEN>>';    // Gerätename aus der hydrop App
$timezone  = 'Europe/Berlin';

// Optionale Variablen-IDs (0 = automatisch anlegen; Variablen-ID = vorhandene Variable verwenden)
$varMeter = 0;      // Float: Zählerstand - bei 0 wird automatisch "Zählerstand" angelegt (Archivierung aktiviert)
$varTime  = 0;      // String: Zeitstempel der letzten Messung - bei 0 wird automatisch "Letzte Messung" angelegt
$varDaily = 0;      // Float: Tagesverbrauch - bei 0 wird automatisch "Tagesverbrauch" angelegt (Archivierung aktiviert)

// ╔══════════════════════════════════════════════════════════════╗
// ║                   ENDE KONFIGURATION                         ║
// ╚══════════════════════════════════════════════════════════════╝

date_default_timezone_set($timezone);

// Benutzerdefiniertes Profil für Kubikmeter erstellen (falls noch nicht vorhanden)
$meterValueProfile = 'Water.CubicMeter';
if (!IPS_VariableProfileExists($meterValueProfile)) {
    IPS_CreateVariableProfile($meterValueProfile, 2);     // 2 = Float
    IPS_SetVariableProfileText($meterValueProfile, '', ' m³');
    IPS_SetVariableProfileDigits($meterValueProfile, 4);  // 4 Nachkommastellen
    IPS_SetVariableProfileIcon($meterValueProfile, 'meter-droplet');
    IPS_LogMessage('hydropmeter', 'Variablenprofil "Water.CubicMeter" erstellt');
}

// Zählerstands-Variable prüfen und ggf. erstellen
if ($varMeter === 0) {
    $varMeter = @IPS_GetObjectIDByIdent('MeterValue', $_IPS['SELF']);
    if ($varMeter === false) {
        $varMeter = IPS_CreateVariable(2); // Float
        IPS_SetName($varMeter, 'Zählerstand');
        IPS_SetIdent($varMeter, 'MeterValue');
        IPS_SetParent($varMeter, $_IPS['SELF']);
        IPS_SetVariableCustomProfile($varMeter, $meterValueProfile);
        IPS_LogMessage('hydropmeter', 'Variable "Zählerstand" erstellt (ID: ' . $varMeter . ')');
    }
} else {
    if (!IPS_VariableExists($varMeter)) {
        IPS_LogMessage('hydropmeter', 'FEHLER: Zählerstands-Variable (ID ' . $varMeter . ') existiert nicht');
        return;
    }
}

// Zeitstempel-Variable prüfen und ggf. erstellen
if ($varTime === 0) {
    $varTime = @IPS_GetObjectIDByIdent('LastUpdate', $_IPS['SELF']);
    if ($varTime === false) {
        $varTime = IPS_CreateVariable(3); // String
        IPS_SetName($varTime, 'Letzte Messung');
        IPS_SetIdent($varTime, 'LastUpdate');
        IPS_SetParent($varTime, $_IPS['SELF']);
        IPS_LogMessage('hydropmeter', 'Variable "Letzte Messung" erstellt (ID: ' . $varTime . ')');
    }
} else {
    if (!IPS_VariableExists($varTime)) {
        IPS_LogMessage('hydropmeter', 'FEHLER: Zeitstempel-Variable (ID ' . $varTime . ') existiert nicht');
        return;
    }
}

// Variable für Tagesverbrauch anlegen
if ($varDaily === 0) {
    $varDaily = @IPS_GetObjectIDByIdent('DailyUsage', $_IPS['SELF']);
    if ($varDaily === false) {
        $varDaily = IPS_CreateVariable(2);
        IPS_SetName($varDaily, 'Tagesverbrauch');
        IPS_SetIdent($varDaily, 'DailyUsage');
        IPS_SetParent($varDaily, $_IPS['SELF']);
        IPS_SetVariableCustomProfile($varDaily, "~Water");
        IPS_LogMessage('hydropmeter', 'Variable "Tagesverbrauch" erstellt (ID: ' . $varDaily . ')');
    }
} else {
    if (!IPS_VariableExists($varDaily)) {
        IPS_LogMessage('hydropmeter', 'FEHLER: Tagesverbrauch-Variable (ID ' . $varDaily . ') existiert nicht');
        return;
    }
}

// Versteckte Hilfsvariable für den Tagesstartwert zur Berechnung des Tagesverbrauchs
$varDayStart = @IPS_GetObjectIDByIdent('DayStartValue', $_IPS['SELF']);
if ($varDayStart === false) {
    $varDayStart = IPS_CreateVariable(2); // Float
    IPS_SetName($varDayStart, 'Tagesstartwert (intern)');
    IPS_SetIdent($varDayStart, 'DayStartValue');
    IPS_SetParent($varDayStart, $_IPS['SELF']);
    IPS_SetVariableCustomProfile($varDayStart, $meterValueProfile);
    IPS_SetHidden($varDayStart, true);
    SetValue($varDayStart, 0.0);
}

// Versteckte Hilfsvariable für den Datumsvergleich zur Berechnung des Tagesverbrauchs
$varLastDate = @IPS_GetObjectIDByIdent('LastProcessedDate', $_IPS['SELF']);
if ($varLastDate === false) {
    $varLastDate = IPS_CreateVariable(3); // String für Datum (Y-m-d)
    IPS_SetName($varLastDate, 'Datum der letzten Abfrage (intern)');
    IPS_SetIdent($varLastDate, 'LastProcessedDate');
    IPS_SetParent($varLastDate, $_IPS['SELF']);
    IPS_SetHidden($varLastDate, true);
}

// Archivierung für Zählerstand und Tagesverbrauch aktivieren
$archiveList = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
if (!empty($archiveList)) {
    try {
        AC_SetLoggingStatus($archiveList[0], $varMeter, true);
        AC_SetLoggingStatus($archiveList[0], $varDaily, true);
        IPS_ApplyChanges($archiveList[0]);
        IPS_LogMessage('hydropmeter', 'Archivierung für Zählerstand und Tagesverbrauch aktiviert');
    } catch (Exception $e) {
        IPS_LogMessage('hydropmeter', 'Archivierungsfehler: ' . $e->getMessage());
    }
}

// Automatischen Aktualisierungs-Timer erstellen (alle 5 Minuten)
$eventName = "hydropmeter_auto_update_" . $_IPS['SELF'];
$eventID = @IPS_GetObjectIDByIdent($eventName, $_IPS['SELF']);

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

// Daten von der hydrop REST-API abrufen
$url = sprintf('https://api.hydrop-systems.com/sensors/ID/%s/newest', $device);
$opts = [
    'http' => [
        'method'  => 'GET',
        'header'  => sprintf("apikey: %s\r\nAccept: application/json\r\n", $apiKey),
        'timeout' => 15,
        'ignore_errors' => true,
    ],
];

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

if ($result === false) {
    $error = error_get_last();
    IPS_LogMessage('hydropmeter', 'API-Anfrage fehlgeschlagen: ' . ($error ? $error['message'] : 'Unbekannter Fehler'));
    if (isset($http_response_header)) {
        IPS_LogMessage('hydropmeter', 'HTTP-Antwort: ' . $http_response_header[0]);
    }
    return;
}

$data = json_decode($result, true);
if ($data === null) {
    IPS_LogMessage('hydropmeter', 'JSON-Dekodierungsfehler: ' . json_last_error_msg());
    IPS_LogMessage('hydropmeter', 'Klartext der Antwort: ' . substr($result, 0, 200));
    return;
}

// Zählerstand verarbeiten
if (!isset($data['sensors'][0]['records'][0])) {
    IPS_LogMessage('hydropmeter', 'Keine gültigen Datensätze in API-Antwort gefunden');
    IPS_LogMessage('hydropmeter', 'Antwortstruktur: ' . print_r($data, true));
    return;
}

$record     = $data['sensors'][0]['records'][0];
$meterValue = (float) $record['meterValue'];
$currentTimestamp = (int) $record['timestamp'];

// Zähler- und Zeitstempel-Variablen aktualisieren
try {
    SetValue($varMeter, $meterValue);
    SetValue($varTime, date('d.m.Y H:i:s', $currentTimestamp)); // Deutsches Format für Anzeige
} catch (Exception $e) {
    IPS_LogMessage('hydropmeter', 'Fehler beim Setzen der Variablen: ' . $e->getMessage());
    return;
}

// Tagesverbrauch berechnen
$currentDate = date('Y-m-d', $currentTimestamp);
$lastProcessedDate = GetValue($varLastDate);

// Prüfen ob ein neuer Tag begonnen hat
$dayChanged = ($lastProcessedDate !== $currentDate && $lastProcessedDate !== '');

if ($dayChanged) {
    // Tagesverbrauch des VORHERIGEN Tages berechnen
    $dayStartValue = GetValue($varDayStart);
    $currentMeterValue = GetValue($varMeter);
    
    if ($dayStartValue > 0) {
        $dailyUsage = round(max(0, ($currentMeterValue - $dayStartValue) * 1000.0), 1);
        
        try {
            SetValue($varDaily, $dailyUsage);
            IPS_LogMessage('hydropmeter', "Tagesverbrauch für $lastProcessedDate: $dailyUsage Liter");
        } catch (Exception $e) {
            IPS_LogMessage('hydropmeter', 'Fehler beim Setzen des Tagesverbrauchs: ' . $e->getMessage());
        }
    }
    
    // Neuen Tagesstartwert setzen
    SetValue($varDayStart, $meterValue);
    IPS_LogMessage('hydropmeter', "Neuer Tag erkannt: Startwert = $meterValue m³");
}

// Interne Hilfsvariablen für den nächsten Vergleich aktualisieren
try {
    SetValue($varLastDate, $currentDate);

    // Beim ersten Ausführen: Tagesstartwert initialisieren, wenn noch nicht gesetzt
    $dayStartValue = GetValue($varDayStart);
    if ($dayStartValue === 0.0) {
        SetValue($varDayStart, $meterValue);
        IPS_LogMessage('hydropmeter', "Tagesstartwert initialisiert: $meterValue m³");
    }
} catch (Exception $e) {
    IPS_LogMessage('hydropmeter', 'Fehler beim Speichern der aktuellen Werte: ' . $e->getMessage());
}

IPS_LogMessage('hydropmeter', "Aktualisierung erfolgreich: $meterValue m³, " . date('d.m.Y H:i:s', $currentTimestamp));

Videos

Kurzanleitung

Home Assistant Einrichtung

WLAN Verbindung

ioBroker Einrichtung

Kontakt

Du hast ei­ne Fra­ge oder be­nö­tigst wei­te­re Un­ter­stüt­zung? Hier fin­dest du un­se­re Kon­takt­da­ten und kannst uns ei­ne E‑Mail senden.

E‑Mail

Social Media

Adressen

hy­drop sys­tems GmbH
Wa­gen­burg­str. 139
70186 Stutt­gart

Post­an­schrift
hy­drop sys­tems GmbH
c/o Arena2036
Pfaf­fen­wald­ring 19
70569 Stutt­gart

Bleibe mit dem NewsDrop immer auf dem Laufenden!

Abonniere jetzt unseren Newsletter: