<?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[Rauchmelder - Ein Javascript ersetzt vier Blockly]]></title><description><![CDATA[<p dir="auto">Hallo,<br />
ich habe heute mal einen Test gemacht und meinen vier Blocklys die mir eine Telegramnachricht schicken und das Licht im jeweiligen Rausm einschalten wenn ein Rauch/Co2 Melder Alarm gibt. Das ganze hab ich in die Ki geworfen und sie da es funktioniert einwandfrei.<br />
Könnte vielleicht mal jemand ( <a class="plugin-mentions-user plugin-mentions-a" href="/user/paul53" aria-label="Profile: paul53">@<bdi>paul53</bdi></a> ) über den Code schauen ob der so OK ist oder nicht ?<br />
Mir ging es darum meine Blockly ein wenig zu reduzieren und vielleicht auch ein wenig Last aus dem System zu nehmen.</p>
<pre><code>// ZUORDNUNG: Hier fließen deine echten Datenpunkte und Lichter zusammen
const sicherheitsSchnittstelle = {
    // 1. Wohnzimmer
    'alias.0.Co2/Rauchmelder.Rauchmelder_WZ.ACTUAL': { 
        raum: 'Wohnzimmer', 
        typ: '🔥 Rauchmelder',
        lichter: ['alias.0.Lichter.WZ_Decke_hinten.SET', 'alias.0.Lichter.WZ_Decke_vorne.SET']
    },
    // 2. Schlafzimmer
    'alias.0.Co2/Rauchmelder.Rauchmelder_Schlafzimmer.ACTUAL': { 
        raum: 'Schlafzimmer', 
        typ: '🔥 Rauchmelder',
        lichter: ['alias.0.Lichter.Schlafzimmer_Decke.SET', 'alias.0.Lichter.Schlafzimmer_Nachttischlampe.SET']
    },
    // 3. Flur
    'alias.0.Co2/Rauchmelder.Rauchmelder_Flur.ACTUAL': { 
        raum: 'Flur', 
        typ: '🔥 Rauchmelder',
        lichter: [] // Im Flur soll laut deinem Blockly kein Licht geschaltet werden
    },
    // 4. Küche (CO2)
    'alias.0.Co2/Rauchmelder.Co2Melder_Küche.ACTUAL': { 
        raum: 'Küche', 
        typ: '⚠️ CO2-Melder',
        lichter: [
            'alias.0.Lichter.Küche_1.SET', 
            'alias.0.Lichter.Küche_2.SET', 
            'alias.0.Lichter.Küche_3.SET', 
            'alias.0.Lichter.Küche_4.SET'
        ]
    }
};

// Ab hier arbeitet das Skript vollautomatisch auf einem einzigen Gruppen-Trigger
const melderListe = Object.keys(sicherheitsSchnittstelle);

on({id: melderListe, change: 'ne'}, function (obj) {
    let alarmAktiv = obj.state.val;
    let ausgeloesteID = obj.id;
    let info = sicherheitsSchnittstelle[ausgeloesteID];
    
    let datum = formatDate(new Date(), "DD.MM.");
    let uhrzeit = formatDate(new Date(), "hh:mm");

    // =========================================================================
    // FALL 1: EIN MELDER SCHLÄGT ALARM (AN)
    // =========================================================================
    if (alarmAktiv === true || alarmAktiv === 1) {
        
        let lichtWurdeGesteuert = false;

        // Alle zugeordneten Lichter für diesen Raum einschalten
        if (info.lichter &amp;&amp; info.lichter.length &gt; 0) {
            for (let i = 0; i &lt; info.lichter.length; i++) {
                if (existsState(info.lichter[i])) {
                    setState(info.lichter[i], true);
                    lichtWurdeGesteuert = true;
                }
            }
        }

        // Elegante HTML-Nachricht zusammenbauen
        let nachrichtAn = "🚨 &lt;b&gt;GEFAHREN-ALARM !&lt;/b&gt; 🚨\n" +
                          "🕒 &lt;i&gt;Am " + datum + " um " + uhrzeit + " Uhr&lt;/i&gt;\n\n" +
                          "Ein Sicherheitsmelder hat angesprochen:\n" +
                          "• &lt;b&gt;Typ:&lt;/b&gt; " + info.typ + "\n" +
                          "• &lt;b&gt;Raum:&lt;/b&gt; " + info.raum + " (AN)\n\n";
                          
        if (lichtWurdeGesteuert) {
            nachrichtAn += "💡 &lt;i&gt;Die Beleuchtung im Raum wurde automatisch eingeschaltet!&lt;/i&gt;";
        } else {
            nachrichtAn += "ℹ️ &lt;i&gt;In diesem Raum ist keine Notbeleuchtung hinterlegt.&lt;/i&gt;";
        }

        // Per Telegram absenden im sauberen HTML-Modus
        sendTo('telegram.0', { text: nachrichtAn, user: 'Michael', parse_mode: 'HTML' });
        log("Sicherheits-ALARM AUSGELÖST: " + info.raum + " (" + info.typ + ")", 'warn');
    }
    
    // =========================================================================
    // FALL 2: EIN MELDER GEHT WIEDER AUS (AUS)
    // =========================================================================
    else if (alarmAktiv === false || alarmAktiv === 0) {
        
        // Elegante HTML-Entwarnung zusammenbauen
        let nachrichtAus = "🟢 &lt;b&gt;Sicherheits-Entwarnung&lt;/b&gt; 🟢\n" +
                           "🕒 &lt;i&gt;Am " + datum + " um " + uhrzeit + " Uhr&lt;/i&gt;\n\n" +
                           "Der Gefahrenbereich hat sich normalisiert:\n" +
                           "• &lt;b&gt;Typ:&lt;/b&gt; " + info.typ + "\n" +
                           "• &lt;b&gt;Raum:&lt;/b&gt; " + info.raum + " (AUS)\n\n" +
                           "✅ &lt;i&gt;Der Melder meldet wieder einen sicheren Zustand.&lt;/i&gt;";

        sendTo('telegram.0', { text: nachrichtAus, user: 'Michael', parse_mode: 'HTML' });
        log("Sicherheits-Alarm beendet: " + info.raum, 'info');
    }
});

</code></pre>
<p dir="auto">und so sieht die Telegrammeldung aus (kurz mit der Testtaste getrickert)<br />
<img src="/assets/uploads/files/1779986220803-screenshot-2026-05-28-182629.jpg" alt="Screenshot 2026-05-28 182629.jpg" class=" img-fluid img-markdown" /></p>
<p dir="auto">Gruß Michael</p>
]]></description><link>https://forum.iobroker.net/topic/84643/rauchmelder-ein-javascript-ersetzt-vier-blockly</link><generator>RSS for Node</generator><lastBuildDate>Thu, 04 Jun 2026 03:45:12 GMT</lastBuildDate><atom:link href="https://forum.iobroker.net/topic/84643.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 May 2026 16:38:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rauchmelder - Ein Javascript ersetzt vier Blockly on Thu, 28 May 2026 18:00:06 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/michael-schmitt" aria-label="Profile: Michael-Schmitt">@<bdi>Michael-Schmitt</bdi></a> [sagte]: hab das bekommen.</p>
</blockquote>
<p dir="auto">Das komplette Skript mit den beiden Vereinfachungen:</p>
<pre><code>// ZUORDNUNG: Hier fließen deine echten Datenpunkte und Lichter zusammen
const sicherheitsSchnittstelle = {
    // 1. Wohnzimmer
    'alias.0.Co2/Rauchmelder.Rauchmelder_WZ.ACTUAL': { 
        raum: 'Wohnzimmer', 
        typ: '🔥 Rauchmelder',
        lichter: ['alias.0.Lichter.WZ_Decke_hinten.SET', 'alias.0.Lichter.WZ_Decke_vorne.SET']
    },
    // 2. Schlafzimmer
    'alias.0.Co2/Rauchmelder.Rauchmelder_Schlafzimmer.ACTUAL': { 
        raum: 'Schlafzimmer', 
        typ: '🔥 Rauchmelder',
        lichter: ['alias.0.Lichter.Schlafzimmer_Decke.SET', 'alias.0.Lichter.Schlafzimmer_Nachttischlampe.SET']
    },
    // 3. Flur
    'alias.0.Co2/Rauchmelder.Rauchmelder_Flur.ACTUAL': { 
        raum: 'Flur', 
        typ: '🔥 Rauchmelder',
        lichter: [] // Im Flur soll laut deinem Blockly kein Licht geschaltet werden
    },
    // 4. Küche (CO2)
    'alias.0.Co2/Rauchmelder.Co2Melder_Küche.ACTUAL': { 
        raum: 'Küche', 
        typ: '⚠️ CO2-Melder',
        lichter: [
            'alias.0.Lichter.Küche_1.SET', 
            'alias.0.Lichter.Küche_2.SET', 
            'alias.0.Lichter.Küche_3.SET', 
            'alias.0.Lichter.Küche_4.SET'
        ]
    }
};
 
// Ab hier arbeitet das Skript vollautomatisch auf einem einzigen Gruppen-Trigger
const melderListe = Object.keys(sicherheitsSchnittstelle);
 
on({id: melderListe, change: 'ne'}, function (obj) {
    let ausgeloesteID = obj.id;
    let info = sicherheitsSchnittstelle[ausgeloesteID];
    
    let datum = formatDate(new Date(), "DD.MM.");
    let uhrzeit = formatDate(new Date(), "hh:mm");
    let nachricht = '';
 
    // =========================================================================
    // FALL 1: EIN MELDER SCHLÄGT ALARM (AN)
    // =========================================================================
    if (obj.state.val) {
        
        let lichtWurdeGesteuert = false;
 
        // Alle zugeordneten Lichter für diesen Raum einschalten
        if (info.lichter &amp;&amp; info.lichter.length &gt; 0) {
            for (let i = 0; i &lt; info.lichter.length; i++) {
                if (existsState(info.lichter[i])) {
                    setState(info.lichter[i], true);
                    lichtWurdeGesteuert = true;
                }
            }
        }
 
        // Elegante HTML-Nachricht zusammenbauen
        nachricht = "🚨 &lt;b&gt;GEFAHREN-ALARM !&lt;/b&gt; 🚨\n" +
                          "🕒 &lt;i&gt;Am " + datum + " um " + uhrzeit + " Uhr&lt;/i&gt;\n\n" +
                          "Ein Sicherheitsmelder hat angesprochen:\n" +
                          "• &lt;b&gt;Typ:&lt;/b&gt; " + info.typ + "\n" +
                          "• &lt;b&gt;Raum:&lt;/b&gt; " + info.raum + " (AN)\n\n";
                          
        if (lichtWurdeGesteuert) {
            nachricht += "💡 &lt;i&gt;Die Beleuchtung im Raum wurde automatisch eingeschaltet!&lt;/i&gt;";
        } else {
            nachricht += "ℹ️ &lt;i&gt;In diesem Raum ist keine Notbeleuchtung hinterlegt.&lt;/i&gt;";
        }
        log("Sicherheits-ALARM AUSGELÖST: " + info.raum + " (" + info.typ + ")", 'warn');
    }
    
    // =========================================================================
    // FALL 2: EIN MELDER GEHT WIEDER AUS (AUS)
    // =========================================================================
    else {
        
        // Elegante HTML-Entwarnung zusammenbauen
        nachricht = "🟢 &lt;b&gt;Sicherheits-Entwarnung&lt;/b&gt; 🟢\n" +
                           "🕒 &lt;i&gt;Am " + datum + " um " + uhrzeit + " Uhr&lt;/i&gt;\n\n" +
                           "Der Gefahrenbereich hat sich normalisiert:\n" +
                           "• &lt;b&gt;Typ:&lt;/b&gt; " + info.typ + "\n" +
                           "• &lt;b&gt;Raum:&lt;/b&gt; " + info.raum + " (AUS)\n\n" +
                           "✅ &lt;i&gt;Der Melder meldet wieder einen sicheren Zustand.&lt;/i&gt;";
 
        log("Sicherheits-Alarm beendet: " + info.raum, 'info');
    }
    // Per Telegram absenden im sauberen HTML-Modus
    sendTo('telegram.0', { text: nachricht, user: 'Michael', parse_mode: 'HTML' });
});
</code></pre>
]]></description><link>https://forum.iobroker.net/post/1341743</link><guid isPermaLink="true">https://forum.iobroker.net/post/1341743</guid><dc:creator><![CDATA[paul53]]></dc:creator><pubDate>Thu, 28 May 2026 18:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to Rauchmelder - Ein Javascript ersetzt vier Blockly on Thu, 28 May 2026 17:56:27 GMT]]></title><description><![CDATA[<p dir="auto">ich hab mal deine Vorschläge in die Ki gefüttert und hab das bekommen.</p>
<pre><code>const sicherheitsSchnittstelle = {
    'alias.0.Co2/Rauchmelder.Rauchmelder_WZ.ACTUAL': { raum: 'Wohnzimmer', typ: '🔥 Rauchmelder', lichter: ['alias.0.Lichter.WZ_Decke_hinten.SET', 'alias.0.Lichter.WZ_Decke_vorne.SET'] },
    'alias.0.Co2/Rauchmelder.Rauchmelder_Schlafzimmer.ACTUAL': { raum: 'Schlafzimmer', typ: '🔥 Rauchmelder', lichter: ['alias.0.Lichter.Schlafzimmer_Decke.SET', 'alias.0.Lichter.Schlafzimmer_Nachttischlampe.SET'] },
    'alias.0.Co2/Rauchmelder.Rauchmelder_Flur.ACTUAL': { raum: 'Flur', typ: '🔥 Rauchmelder', lichter: [] },
    'alias.0.Co2/Rauchmelder.Co2Melder_Küche.ACTUAL': { raum: 'Küche', typ: '⚠️ CO2-Melder', lichter: ['alias.0.Lichter.Küche_1.SET', 'alias.0.Lichter.Küche_2.SET', 'alias.0.Lichter.Küche_3.SET', 'alias.0.Lichter.Küche_4.SET'] }
};

let sperreAktiv = {};
const melderListe = Object.keys(sicherheitsSchnittstelle);

on({id: melderListe, change: 'ne'}, function (obj) {
    let alarmAktiv = obj.state.val;
    let ausgeloesteID = obj.id;
    let info = sicherheitsSchnittstelle[ausgeloesteID];
    
    let istAn = (alarmAktiv === true || alarmAktiv === 1);

    // NEU: Die 5-Sekunden-Sperre blockiert ab jetzt NUR noch neue AN-Meldungen!
    // Wenn der Melder auf AUS geht, wird die Sperre komplett ignoriert.
    if (istAn &amp;&amp; sperreAktiv[ausgeloesteID]) {
        return; 
    }

    if (istAn) {
        // Sperre für dieses Gerät für 5 Sekunden aktivieren
        sperreAktiv[ausgeloesteID] = true;
        setTimeout(function () { delete sperreAktiv[ausgeloesteID]; }, 5000);

        // LICHTER NUR IM ERNSTFALL SCHALTEN UND TEXT ANPASSEN
        if (info.lichter &amp;&amp; info.lichter.length &gt; 0) {
            infoText = "💡 &lt;i&gt;Die Beleuchtung im Raum wurde automatisch eingeschaltet!&lt;/i&gt;";
            info.lichter.forEach(function(lichtID) {
                if (existsState(lichtID)) setState(lichtID, true);
            });
        } else {
            infoText = "ℹ️ &lt;i&gt;In diesem Raum ist keine Notbeleuchtung hinterlegt.&lt;/i&gt;";
        }
    } else {
        // TEXT FÜR DEN AUS-ZUSTAND (ENTWARNUNG)
        infoText = "✅ &lt;i&gt;Der Melder meldet wieder einen sicheren Zustand.&lt;/i&gt;";
    }

    // 2. DYNAMISCHE TEXT-ERMITTLUNG JE NACH STATUS
    let emoji = istAn ? "🚨" : "🟢";
    let titel = istAn ? "GEFAHREN-ALARM !" : "Sicherheits-Entwarnung";
    let statusText = istAn ? "(AN)" : "(AUS)";

    // 3. EINZIGER GEMEINSAMER TELEGRAM- &amp; LOG-BEFEHL
    let nachricht = emoji + " &lt;b&gt;" + titel + "&lt;/b&gt; " + emoji + "\n" +
                    "🕒 &lt;i&gt;Am " + formatDate(new Date(), "DD.MM.") + " um " + formatDate(new Date(), "hh:mm") + " Uhr&lt;/i&gt;\n\n" +
                    "Statusänderung des Sicherheitsmelders:\n" +
                    "• &lt;b&gt;Typ:&lt;/b&gt; " + info.typ + "\n" +
                    "• &lt;b&gt;Raum:&lt;/b&gt; " + info.raum + " " + statusText + "\n\n" + infoText;

    sendTo('telegram.0', { text: nachricht, user: 'Michael', parse_mode: 'HTML' });
    log("Sicherheits-Status (" + statusText + "): " + info.raum, istAn ? 'warn' : 'info');
});

</code></pre>
<p dir="auto">EDIT:</p>
<pre><code>const sicherheitsSchnittstelle = {
    'alias.0.Co2/Rauchmelder.Rauchmelder_WZ.ACTUAL': { raum: 'Wohnzimmer', typ: '🔥 Rauchmelder', lichter: ['alias.0.Lichter.WZ_Decke_hinten.SET', 'alias.0.Lichter.WZ_Decke_vorne.SET'] },
    'alias.0.Co2/Rauchmelder.Rauchmelder_Schlafzimmer.ACTUAL': { raum: 'Schlafzimmer', typ: '🔥 Rauchmelder', lichter: ['alias.0.Lichter.Schlafzimmer_Decke.SET', 'alias.0.Lichter.Schlafzimmer_Nachttischlampe.SET'] },
    'alias.0.Co2/Rauchmelder.Rauchmelder_Flur.ACTUAL': { raum: 'Flur', typ: '🔥 Rauchmelder', lichter: [] },
    'alias.0.Co2/Rauchmelder.Co2Melder_Küche.ACTUAL': { raum: 'Küche', typ: '⚠️ CO2-Melder', lichter: ['alias.0.Lichter.Küche_1.SET', 'alias.0.Lichter.Küche_2.SET', 'alias.0.Lichter.Küche_3.SET', 'alias.0.Lichter.Küche_4.SET'] }
};

let sperreAktiv = {};
const melderListe = Object.keys(sicherheitsSchnittstelle);

on({id: melderListe, change: 'ne'}, function (obj) {
    let alarmAktiv = obj.state.val;
    let ausgeloesteID = obj.id;
    let info = sicherheitsSchnittstelle[ausgeloesteID];
    if (!info) {
    log("Keine Konfiguration für: " + ausgeloesteID, 'error');
    return;
    }
    
    let istAn = (alarmAktiv === true || alarmAktiv === 1);

    // NEU: Die 5-Sekunden-Sperre blockiert ab jetzt NUR noch neue AN-Meldungen!
    // Wenn der Melder auf AUS geht, wird die Sperre komplett ignoriert.
    if (istAn &amp;&amp; sperreAktiv[ausgeloesteID]) {
        return; 
    }
    let infoText = "";
    if (istAn) {
        // Sperre für dieses Gerät für 5 Sekunden aktivieren
        sperreAktiv[ausgeloesteID] = true;
        setTimeout(function () { delete sperreAktiv[ausgeloesteID]; }, 5000);

        // LICHTER NUR IM ERNSTFALL SCHALTEN UND TEXT ANPASSEN
        if (info.lichter &amp;&amp; info.lichter.length &gt; 0) {
            infoText = "💡 &lt;i&gt;Die Beleuchtung im Raum wurde automatisch eingeschaltet!&lt;/i&gt;";
            info.lichter.forEach(function(lichtID) {
                if (existsState(lichtID)) setState(lichtID, true);
            });
        } else {
            infoText = "ℹ️ &lt;i&gt;In diesem Raum ist keine Notbeleuchtung hinterlegt.&lt;/i&gt;";
        }
    } else {
        // TEXT FÜR DEN AUS-ZUSTAND (ENTWARNUNG)
        infoText = "✅ &lt;i&gt;Der Melder meldet wieder einen sicheren Zustand.&lt;/i&gt;";
    }

    // 2. DYNAMISCHE TEXT-ERMITTLUNG JE NACH STATUS
    let emoji = istAn ? "🚨" : "🟢";
    let titel = istAn ? "GEFAHREN-ALARM !" : "Sicherheits-Entwarnung";
    let statusText = istAn ? "(AN)" : "(AUS)";
    // EINMAL Zeit erzeugen
    let jetzt = new Date();
    // 3. EINZIGER GEMEINSAMER TELEGRAM- &amp; LOG-BEFEHL
    let nachricht = emoji + " &lt;b&gt;" + titel + "&lt;/b&gt; " + emoji + "\n" +
                    "🕒 &lt;i&gt;Am " + formatDate(jetzt, "DD.MM.") + " um " + formatDate(jetzt, "hh:mm") + " Uhr&lt;/i&gt;\n\n" +
                    "Statusänderung des Sicherheitsmelders:\n" +
                    "• &lt;b&gt;Typ:&lt;/b&gt; " + info.typ + "\n" +
                    "• &lt;b&gt;Raum:&lt;/b&gt; " + info.raum + " " + statusText + "\n\n" + infoText;

    sendTo('telegram.0', { text: nachricht, user: 'Michael', parse_mode: 'HTML' });
    log("Sicherheits-Status (" + statusText + "): " + info.raum, istAn ? 'warn' : 'info');
});
</code></pre>
]]></description><link>https://forum.iobroker.net/post/1341740</link><guid isPermaLink="true">https://forum.iobroker.net/post/1341740</guid><dc:creator><![CDATA[Michael Schmitt]]></dc:creator><pubDate>Thu, 28 May 2026 17:56:27 GMT</pubDate></item><item><title><![CDATA[Reply to Rauchmelder - Ein Javascript ersetzt vier Blockly on Thu, 28 May 2026 17:26:15 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/michael-schmitt" aria-label="Profile: Michael-Schmitt">@<bdi>Michael-Schmitt</bdi></a> [sagte]: Code schauen ob der so OK ist oder nicht ?</p>
</blockquote>
<p dir="auto">Der Code ist OK, lässt sich aber vereinfachen, z.B. einfache Prüfung von <em>obj.state.val</em> und nur einmal <em>sendTo('telegram.0')</em>. Prinzip:</p>
<pre><code>    let nachricht = '';
    // =========================================================================
    // FALL 1: EIN MELDER SCHLÄGT ALARM (AN)
    // =========================================================================
    if (obj.state.val) {
        // nachricht aufbereieten
        log("Sicherheits-ALARM AUSGELÖST: " + info.raum + " (" + info.typ + ")", 'warn');
    }
    
    // =========================================================================
    // FALL 2: EIN MELDER GEHT WIEDER AUS (AUS)
    // =========================================================================
    else {
        // nachricht aufbereiten 
        log("Sicherheits-Alarm beendet: " + info.raum, 'info');
    }    
    sendTo('telegram.0', { text: nachricht, user: 'Michael', parse_mode: 'HTML' });

</code></pre>
]]></description><link>https://forum.iobroker.net/post/1341737</link><guid isPermaLink="true">https://forum.iobroker.net/post/1341737</guid><dc:creator><![CDATA[paul53]]></dc:creator><pubDate>Thu, 28 May 2026 17:26:15 GMT</pubDate></item><item><title><![CDATA[Reply to Rauchmelder - Ein Javascript ersetzt vier Blockly on Thu, 28 May 2026 16:49:53 GMT]]></title><description><![CDATA[<p dir="auto">hab ich aber nicht hinbekommen :)</p>
]]></description><link>https://forum.iobroker.net/post/1341735</link><guid isPermaLink="true">https://forum.iobroker.net/post/1341735</guid><dc:creator><![CDATA[Michael Schmitt]]></dc:creator><pubDate>Thu, 28 May 2026 16:49:53 GMT</pubDate></item><item><title><![CDATA[Reply to Rauchmelder - Ein Javascript ersetzt vier Blockly on Thu, 28 May 2026 16:48:53 GMT]]></title><description><![CDATA[<p dir="auto">Das wäre aber doch mit einem Blockly nicht anders geworden ?!</p>
]]></description><link>https://forum.iobroker.net/post/1341734</link><guid isPermaLink="true">https://forum.iobroker.net/post/1341734</guid><dc:creator><![CDATA[skvarel]]></dc:creator><pubDate>Thu, 28 May 2026 16:48:53 GMT</pubDate></item></channel></rss>