<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ioMeter einbinden]]></title><description><![CDATA[<p dir="auto">Moin allerseits,</p>
<p dir="auto">Mit der Suche hab ich nix gefunden:</p>
<p dir="auto">Gibt es eine Möglichkeit/Anleitung, wie man ioMeter in ioBroker einbinden kann?</p>
<p dir="auto">Für HA geht es, damit sollte es doch auch eine Möglichkeit für ioB geben.</p>
<p dir="auto">Eckhard</p>
]]></description><link>https://forum.iobroker.net/topic/84410/iometer-einbinden</link><generator>RSS for Node</generator><lastBuildDate>Sat, 16 May 2026 21:45:54 GMT</lastBuildDate><atom:link href="https://forum.iobroker.net/topic/84410.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Apr 2026 09:39:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ioMeter einbinden on Fri, 01 May 2026 14:32:49 GMT]]></title><description><![CDATA[<p dir="auto">Ja, das geht. Ich habe es mit Parser+Javascript gelöst und nur die relevanten DP genommen.<br />
Spricht etwas für oder gegen den "Umweg" über den Parser? Der läuft eh schon bei mir.</p>
]]></description><link>https://forum.iobroker.net/post/1337384</link><guid isPermaLink="true">https://forum.iobroker.net/post/1337384</guid><dc:creator><![CDATA[eubecker]]></dc:creator><pubDate>Fri, 01 May 2026 14:32:49 GMT</pubDate></item><item><title><![CDATA[Reply to ioMeter einbinden on Mon, 27 Apr 2026 12:52:52 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/eubecker" aria-label="Profile: eubecker">@<bdi>eubecker</bdi></a></p>
<p dir="auto">Hat wie es aussieht eine sehr einfache Api.<br />
Sollte man per Script hinbekommen.</p>
<p dir="auto"><a href="https://github.com/iometer-gmbh/iometer.py/blob/main/docs/api.md" rel="nofollow ugc">https://github.com/iometer-gmbh/iometer.py/blob/main/docs/api.md</a></p>
<p dir="auto">Ungetestet</p>
<pre><code>// ============================================================
//  IOmeter Bridge – Datenpunkte &amp; Polling
//  Ablageort: 0_userdata.0.iometer.*
//  Intervall:  alle 10 Minuten + Sofortstart
// ============================================================

const BRIDGE_IP = "192.168.x.x"; // &lt;─── IP der IOmeter Bridge anpassen!
const BASE      = "0_userdata.0.iometer";

// ── Ordner-Struktur ──────────────────────────────────────────
const CHANNELS = [
    { id: BASE,                    name: "IOmeter"       },
    { id: `${BASE}.reading`,       name: "Zählerstand"   },
    { id: `${BASE}.status`,        name: "Status"        },
    { id: `${BASE}.status.bridge`, name: "Bridge"        },
    { id: `${BASE}.status.core`,   name: "Core"          },
];

// ── Datenpunkte ──────────────────────────────────────────────
const DPS = [
    // Zählerstand ------------------------------------------------
    {
        id:     "reading.meterNumber",
        common: { name: "Zählernummer",      type: "string", role: "text",                  read: true, write: false },
    },
    {
        id:     "reading.time",
        common: { name: "Zeitstempel (ISO)",  type: "string", role: "text",                  read: true, write: false },
    },
    {
        id:     "reading.consumption_wh",
        common: { name: "Gesamtverbrauch",    type: "number", role: "value.energy.consumed", read: true, write: false, unit: "Wh" },
    },
    {
        id:     "reading.production_wh",
        common: { name: "Gesamteinspeisung",  type: "number", role: "value.energy",          read: true, write: false, unit: "Wh" },
    },
    {
        id:     "reading.power_w",
        common: { name: "Aktuelle Leistung",  type: "number", role: "value.power",           read: true, write: false, unit: "W"  },
    },

    // Status – Bridge --------------------------------------------
    {
        id:     "status.bridge.rssi",
        common: { name: "Bridge WLAN-Signal", type: "number", role: "value",                 read: true, write: false, unit: "dBm" },
    },
    {
        id:     "status.bridge.version",
        common: { name: "Bridge Firmware",    type: "string", role: "text",                  read: true, write: false },
    },

    // Status – Core ----------------------------------------------
    {
        id:     "status.core.connectionStatus",
        common: { name: "Verbindungsstatus",  type: "string", role: "text",                  read: true, write: false },
    },
    {
        id:     "status.core.rssi",
        common: { name: "Core WLAN-Signal",   type: "number", role: "value",                 read: true, write: false, unit: "dBm" },
    },
    {
        id:     "status.core.version",
        common: { name: "Core Firmware",      type: "string", role: "text",                  read: true, write: false },
    },
    {
        id:     "status.core.powerStatus",
        common: { name: "Stromversorgung",    type: "string", role: "text",                  read: true, write: false },
    },
    {
        id:     "status.core.batteryLevel",
        common: { name: "Akkustand",          type: "number", role: "value.battery",         read: true, write: false, unit: "%" },
    },
    {
        id:     "status.core.attachmentStatus",
        common: { name: "Montagestatus",      type: "string", role: "text",                  read: true, write: false },
    },
    {
        id:     "status.core.pinStatus",
        common: { name: "PIN-Status",         type: "string", role: "text",                  read: true, write: false },
    },

    // Status – Gerät ---------------------------------------------
    {
        id:     "status.deviceId",
        common: { name: "Geräte-ID",          type: "string", role: "text",                  read: true, write: false },
    },

    // Meta -------------------------------------------------------
    {
        id:     "_lastUpdate",
        common: { name: "Letztes Update",     type: "number", role: "value.time",            read: true, write: false },
    },
    {
        id:     "_error",
        common: { name: "Fehlermeldung",      type: "string", role: "text",                  read: true, write: false },
    },
];

// ── Hilfsfunktion: sequenziell über Array iterieren ─────────
function seqMap(arr, fn, cb) {
    let i = 0;
    function next() {
        if (i &gt;= arr.length) { cb &amp;&amp; cb(); return; }
        fn(arr[i++], next);
    }
    next();
}

// ── Channels anlegen ─────────────────────────────────────────
function ensureChannels(cb) {
    seqMap(CHANNELS, (ch, next) =&gt; {
        setObject(ch.id, { type: "channel", common: { name: ch.name }, native: {} }, next);
    }, cb);
}

// ── Datenpunkte anlegen ──────────────────────────────────────
function ensureDatapoints(cb) {
    seqMap(DPS, (dp, next) =&gt; {
        setObject(`${BASE}.${dp.id}`, { type: "state", common: dp.common, native: {} }, next);
    }, cb);
}

// ── API-Abfrage ──────────────────────────────────────────────
async function fetchIOmeter() {
    try {
        // /v1/reading
        const resR = await fetch(`http://${BRIDGE_IP}/v1/reading`);
        if (!resR.ok) throw new Error(`Reading HTTP ${resR.status}`);
        const r = await resR.json();

        const regs   = r.meter.reading.registers;
        const byObis = (code) =&gt; regs.find(x =&gt; x.obis === code)?.value ?? null;

        setState(`${BASE}.reading.meterNumber`,    r.meter.number,                  true);
        setState(`${BASE}.reading.time`,           r.meter.reading.time,            true);
        setState(`${BASE}.reading.consumption_wh`, byObis("01-00:01.08.00*ff"),     true);
        setState(`${BASE}.reading.production_wh`,  byObis("01-00:02.08.00*ff"),     true);
        setState(`${BASE}.reading.power_w`,        byObis("01-00:10.07.00*ff"),     true);

        // /v1/status
        const resS = await fetch(`http://${BRIDGE_IP}/v1/status`);
        if (!resS.ok) throw new Error(`Status HTTP ${resS.status}`);
        const s      = await resS.json();
        const bridge = s.device?.bridge ?? {};
        const core   = s.device?.core   ?? {};

        setState(`${BASE}.status.deviceId`,               s.device?.id                  ?? "",   true);
        setState(`${BASE}.status.bridge.rssi`,            bridge.rssi                   ?? null, true);
        setState(`${BASE}.status.bridge.version`,         bridge.version                ?? "",   true);
        setState(`${BASE}.status.core.connectionStatus`,  core.connectionStatus          ?? "",   true);
        setState(`${BASE}.status.core.rssi`,              core.rssi                     ?? null, true);
        setState(`${BASE}.status.core.version`,           core.version                  ?? "",   true);
        setState(`${BASE}.status.core.powerStatus`,       core.powerStatus              ?? "",   true);
        setState(`${BASE}.status.core.batteryLevel`,      core.batteryLevel             ?? null, true);
        setState(`${BASE}.status.core.attachmentStatus`,  core.attachmentStatus         ?? "",   true);
        setState(`${BASE}.status.core.pinStatus`,         core.pinStatus                ?? "",   true);

        setState(`${BASE}._lastUpdate`, Date.now(), true);
        setState(`${BASE}._error`,      "",         true);

        const kWh = ((byObis("01-00:01.08.00*ff") ?? 0) / 1000).toFixed(2);
        log(`IOmeter ✓  Leistung: ${byObis("01-00:10.07.00*ff")} W | Gesamt: ${kWh} kWh`, "info");

    } catch (err) {
        setState(`${BASE}._error`, err.message, true);
        log("IOmeter Fehler: " + err.message, "error");
    }
}

// ── Bootstrap ────────────────────────────────────────────────
ensureChannels(() =&gt;
    ensureDatapoints(() =&gt; {
        log("IOmeter: Datenpunkte bereit – starte erste Abfrage", "info");
        fetchIOmeter();                          // Sofort beim Skriptstart
        schedule("*/10 * * * *", fetchIOmeter); // Dann alle 10 Minuten
    })
);
</code></pre>
]]></description><link>https://forum.iobroker.net/post/1336643</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336643</guid><dc:creator><![CDATA[David G.]]></dc:creator><pubDate>Mon, 27 Apr 2026 12:52:52 GMT</pubDate></item></channel></rss>