<?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[Anfänger: Javascript optimieren [solved]]]></title><description><![CDATA[<p dir="auto">Hallo,</p>
<p dir="auto">folgendes Script läuft und mich würde interessieren, wie man es verbessern/verschönern kann.</p>
<pre><code>const idVerbrauch = '0_userdata.0.Verbräuche.Gesamtverbrauch'/*Einspeisung - Verbräuche*/;
const idR1 = 'esphome.0.3C610515B69C.Switch.2875680690.state'/*value of Switch*/;
const idR2 = 'esphome.0.3C610515B69C.Switch.2875680689.state'/*value of Switch*/;
const idR3 = 'esphome.0.3C610515B69C.Switch.2875680688.state'/*value of Switch*/;
const idV1 = '0_userdata.0.Variablen.Heizstab 1 ein';   
const idV2 = '0_userdata.0.Variablen.Heizstab 2 ein'; 
const idV3 = '0_userdata.0.Variablen.Heizstab 3 ein'; 

//Heizstab 1 ein -&gt; wenn Einspeisung größer 700
on (idVerbrauch, function (dp)
{
    let idVerbrauch = dp.state.val; 
    var idV2 = getState('0_userdata.0.Variablen.Heizstab 2 ein').val;
    if (idVerbrauch &lt; -700)
        {setState(idR1, true);}
        else if ((idVerbrauch &gt; 0) &amp;&amp;(idV2 === false)) 
            {setState(idR1, false);}
});

//HeizstabVariable 1 zeitverzögert ein 
on (idR1, function (dp)
{        
    let idR1 = dp.state.val; 
    if (idR1 === true)
        {setStateDelayed(idV1, true, 10000);}
        else
        {setState(idV1, false);}
});

//Heizstab 2 ein -&gt; wenn Einspeisung größer 700 und Heizstabvariable 1 ein
on (idV1, function (dp)
{        
    let idV1 = dp.state.val;
    var idVerbrauch = getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val; 
    var idV3 = getState('0_userdata.0.Variablen.Heizstab 3 ein').val;
    if ((idVerbrauch &lt; -700) &amp;&amp; (idV1 === true))
        {setState(idR2, true);}
        else if ((idVerbrauch &gt; 0) &amp;&amp; (idV3 === false))
        {setState (idR2, false);}
});

//HeizstabVariable 2 zeitverzögert ein und zeitverzögert aus
on (idR2, function (dp)
{        
    let idR2 = dp.state.val;
    var idVerbrauch = getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val;
    var idV3 = getState('0_userdata.0.Variablen.Heizstab 3 ein').val; 
    if (idR2 === true)
        {setStateDelayed(idV2, true, 10000);}
        else if ((idVerbrauch &gt; 0) &amp;&amp;(idV3 === false))
        {setStateDelayed(idV2, false, 10000);}
});

//Heizstab 3 ein -&gt; wenn Einspeisung größer 700 und Heizstabvariable 2 ein
on (idV2, function (dp)
{        
    let idV2 = dp.state.val;
    var idVerbrauch = getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val; 
    if ((idVerbrauch &lt; -700) &amp;&amp; (idV2 === true))
        {setState(idR3, true);}
        else if (idVerbrauch &gt; 0)
        {setState (idR3, false);}
});

//HeizstabVariable 3 zeitverzögert ein und zeitverzögert aus 
on (idR3, function (dp)
{        
    let idR3 = dp.state.val;
    var idVerbrauch = getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val; 
    if (idR3 === true)
        {setStateDelayed(idV3, true, 10000);}
        else if (idVerbrauch &gt; 0)
        {setStateDelayed(idV3, false, 10000);}
});
</code></pre>
]]></description><link>https://forum.iobroker.net/topic/43735/anfänger-javascript-optimieren-solved</link><generator>RSS for Node</generator><lastBuildDate>Fri, 22 May 2026 20:21:19 GMT</lastBuildDate><atom:link href="https://forum.iobroker.net/topic/43735.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Mar 2021 11:06:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfänger: Javascript optimieren [solved] on Tue, 30 Mar 2021 12:00:10 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/oliverio" aria-label="Profile: oliverio">@<bdi>oliverio</bdi></a> <a class="plugin-mentions-user plugin-mentions-a" href="/user/paul53" aria-label="Profile: paul53">@<bdi>paul53</bdi></a></p>
<p dir="auto">Vielen Dank. Werd ich gleich mal umsetzen und heute Abend mal was zum lesen. ;-)</p>
]]></description><link>https://forum.iobroker.net/post/607155</link><guid isPermaLink="true">https://forum.iobroker.net/post/607155</guid><dc:creator><![CDATA[Johannes Bauerstatter]]></dc:creator><pubDate>Tue, 30 Mar 2021 12:00:10 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Javascript optimieren [solved] on Tue, 30 Mar 2021 11:33:59 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/johannes-bauerstatter" aria-label="Profile: johannes-bauerstatter">@<bdi>johannes-bauerstatter</bdi></a><br />
Variablen sind doppelt deklariert. Werte sollten nicht id vorangestellt bekommen. Beispiel:</p>
<pre><code>var Verbrauch = getState(idVerbrauch).val;

on(idVerbrauch, function(dp) {
    Verbrauch = dp.state.val;
    let V2 = getState(idV2).val;
    ...
</code></pre>
]]></description><link>https://forum.iobroker.net/post/607141</link><guid isPermaLink="true">https://forum.iobroker.net/post/607141</guid><dc:creator><![CDATA[paul53]]></dc:creator><pubDate>Tue, 30 Mar 2021 11:33:59 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger: Javascript optimieren [solved] on Tue, 30 Mar 2021 11:28:50 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/johannes-bauerstatter" aria-label="Profile: johannes-bauerstatter">@<bdi>johannes-bauerstatter</bdi></a> said in <a href="/post/607127">Anfänger: Javascript optimieren</a>:</p>
<blockquote>
<p dir="auto">Hallo,</p>
<p dir="auto">folgendes Script läuft und mich würde interessieren, wie man es verbessern/verschönern kann.</p>
<pre><code>const idVerbrauch = '0_userdata.0.Verbräuche.Gesamtverbrauch'/*Einspeisung - Verbräuche*/;
const idR1 = 'esphome.0.3C610515B69C.Switch.2875680690.state'/*value of Switch*/;
const idR2 = 'esphome.0.3C610515B69C.Switch.2875680689.state'/*value of Switch*/;
const idR3 = 'esphome.0.3C610515B69C.Switch.2875680688.state'/*value of Switch*/;
const idV1 = '0_userdata.0.Variablen.Heizstab 1 ein';   
const idV2 = '0_userdata.0.Variablen.Heizstab 2 ein'; 
const idV3 = '0_userdata.0.Variablen.Heizstab 3 ein'; 

//Heizstab 1 ein -&gt; wenn Einspeisung größer 700
on (idVerbrauch, function (dp)
{
    let idVerbrauch = dp.state.val; 
    var idV2 = getState('0_userdata.0.Variablen.Heizstab 2 ein').val;
    if (idVerbrauch &lt; -700)
        {setState(idR1, true);}
        else if ((idVerbrauch &gt; 0) &amp;&amp;(idV2 === false)) 
            {setState(idR1, false);}
});

//HeizstabVariable 1 zeitverzögert ein 
on (idR1, function (dp)
{        
    let idR1 = dp.state.val; 
    if (idR1 === true)
        {setStateDelayed(idV1, true, 10000);}
        else
        {setState(idV1, false);}
});

//Heizstab 2 ein -&gt; wenn Einspeisung größer 700 und Heizstabvariable 1 ein
on (idV1, function (dp)
{        
    let idV1 = dp.state.val;
    var idVerbrauch = getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val; 
    var idV3 = getState('0_userdata.0.Variablen.Heizstab 3 ein').val;
    if ((idVerbrauch &lt; -700) &amp;&amp; (idV1 === true))
        {setState(idR2, true);}
        else if ((idVerbrauch &gt; 0) &amp;&amp; (idV3 === false))
        {setState (idR2, false);}
});

//HeizstabVariable 2 zeitverzögert ein und zeitverzögert aus
on (idR2, function (dp)
{        
    let idR2 = dp.state.val;
    var idVerbrauch = getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val;
    var idV3 = getState('0_userdata.0.Variablen.Heizstab 3 ein').val; 
    if (idR2 === true)
        {setStateDelayed(idV2, true, 10000);}
        else if ((idVerbrauch &gt; 0) &amp;&amp;(idV3 === false))
        {setStateDelayed(idV2, false, 10000);}
});

//Heizstab 3 ein -&gt; wenn Einspeisung größer 700 und Heizstabvariable 2 ein
on (idV2, function (dp)
{        
    let idV2 = dp.state.val;
    var idVerbrauch = getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val; 
    if ((idVerbrauch &lt; -700) &amp;&amp; (idV2 === true))
        {setState(idR3, true);}
        else if (idVerbrauch &gt; 0)
        {setState (idR3, false);}
});

//HeizstabVariable 3 zeitverzögert ein und zeitverzögert aus 
on (idR3, function (dp)
{        
    let idR3 = dp.state.val;
    var idVerbrauch = getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val; 
    if (idR3 === true)
        {setStateDelayed(idV3, true, 10000);}
        else if (idVerbrauch &gt; 0)
        {setStateDelayed(idV3, false, 10000);}
});
</code></pre>
</blockquote>
<p dir="auto">Funktional sieht das skript für mich gut aus.<br />
Zur Erhöhung der Lesbarkeit könnte man noch folgendes verbessern:</p>
<ul>
<li>Einrück-Regeln bei If/Else<br />
Standardnotation ist eigentlich</li>
</ul>
<pre><code>if (bedingung) {
   blahblah
} else {
   blahblah
}
</code></pre>
<p dir="auto">am konkreten Beispiel bedeutet das:</p>
<pre><code>on (idVerbrauch, function (dp) {
    let idVerbrauch = dp.state.val; 
    var idV2 = getState('0_userdata.0.Variablen.Heizstab 2 ein').val;
    if (idVerbrauch &lt; -700) {
        setState(idR1, true);
    } else if ((idVerbrauch &gt; 0) &amp;&amp;(idV2 === false))  {
        setState(idR1, false);
    }
});
</code></pre>
<p dir="auto">so lässt sich leichter sehen wo welcher Bedinungsblock anfängt und aufhört</p>
<p dir="auto">Wenn du dich damit mehr beschäftigen möchtest, dann gibt es den javascript code-style bspw von google<br />
<a href="https://google.github.io/styleguide/jsguide.html#formatting-nonempty-blocks" rel="nofollow ugc">https://google.github.io/styleguide/jsguide.html#formatting-nonempty-blocks</a><br />
diese Regeln lassen sich in manchen Tools auch automatisiert prüfen oder gar anpassen.</p>
<ul>
<li>Benennung der Variablen<br />
Deine Unterscheidung bei den Variablen ist bspw idR1 und idV1,<br />
wenn du weißt was damit gemeint ist, alles gut.<br />
Besser wäre es aber die Variablen mit konkreten Benennungen dies etwas lesbarer zu machen.<br />
Wenn du in einem halben Jahr da nochmal draufschaust, weißt nu nicht mehr, wofür<br />
der Switch.2875680690 eigentlich nochmal da war oder wo der genau ist.</li>
</ul>
<p dir="auto">idSwitchWohnzimmer<br />
idHeizstabWohnzimmer</p>
]]></description><link>https://forum.iobroker.net/post/607137</link><guid isPermaLink="true">https://forum.iobroker.net/post/607137</guid><dc:creator><![CDATA[OliverIO]]></dc:creator><pubDate>Tue, 30 Mar 2021 11:28:50 GMT</pubDate></item></channel></rss>