NEWS
Anfänger: Javascript optimieren [solved]
-
Hallo,
folgendes Script läuft und mich würde interessieren, wie man es verbessern/verschönern kann.
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 -> 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 < -700) {setState(idR1, true);} else if ((idVerbrauch > 0) &&(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 -> 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 < -700) && (idV1 === true)) {setState(idR2, true);} else if ((idVerbrauch > 0) && (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 > 0) &&(idV3 === false)) {setStateDelayed(idV2, false, 10000);} }); //Heizstab 3 ein -> 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 < -700) && (idV2 === true)) {setState(idR3, true);} else if (idVerbrauch > 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 > 0) {setStateDelayed(idV3, false, 10000);} }); -
Hallo,
folgendes Script läuft und mich würde interessieren, wie man es verbessern/verschönern kann.
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 -> 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 < -700) {setState(idR1, true);} else if ((idVerbrauch > 0) &&(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 -> 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 < -700) && (idV1 === true)) {setState(idR2, true);} else if ((idVerbrauch > 0) && (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 > 0) &&(idV3 === false)) {setStateDelayed(idV2, false, 10000);} }); //Heizstab 3 ein -> 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 < -700) && (idV2 === true)) {setState(idR3, true);} else if (idVerbrauch > 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 > 0) {setStateDelayed(idV3, false, 10000);} });@johannes-bauerstatter said in Anfänger: Javascript optimieren:
Hallo,
folgendes Script läuft und mich würde interessieren, wie man es verbessern/verschönern kann.
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 -> 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 < -700) {setState(idR1, true);} else if ((idVerbrauch > 0) &&(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 -> 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 < -700) && (idV1 === true)) {setState(idR2, true);} else if ((idVerbrauch > 0) && (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 > 0) &&(idV3 === false)) {setStateDelayed(idV2, false, 10000);} }); //Heizstab 3 ein -> 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 < -700) && (idV2 === true)) {setState(idR3, true);} else if (idVerbrauch > 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 > 0) {setStateDelayed(idV3, false, 10000);} });Funktional sieht das skript für mich gut aus.
Zur Erhöhung der Lesbarkeit könnte man noch folgendes verbessern:- Einrück-Regeln bei If/Else
Standardnotation ist eigentlich
if (bedingung) { blahblah } else { blahblah }am konkreten Beispiel bedeutet das:
on (idVerbrauch, function (dp) { let idVerbrauch = dp.state.val; var idV2 = getState('0_userdata.0.Variablen.Heizstab 2 ein').val; if (idVerbrauch < -700) { setState(idR1, true); } else if ((idVerbrauch > 0) &&(idV2 === false)) { setState(idR1, false); } });so lässt sich leichter sehen wo welcher Bedinungsblock anfängt und aufhört
Wenn du dich damit mehr beschäftigen möchtest, dann gibt es den javascript code-style bspw von google
https://google.github.io/styleguide/jsguide.html#formatting-nonempty-blocks
diese Regeln lassen sich in manchen Tools auch automatisiert prüfen oder gar anpassen.- Benennung der Variablen
Deine Unterscheidung bei den Variablen ist bspw idR1 und idV1,
wenn du weißt was damit gemeint ist, alles gut.
Besser wäre es aber die Variablen mit konkreten Benennungen dies etwas lesbarer zu machen.
Wenn du in einem halben Jahr da nochmal draufschaust, weißt nu nicht mehr, wofür
der Switch.2875680690 eigentlich nochmal da war oder wo der genau ist.
idSwitchWohnzimmer
idHeizstabWohnzimmer - Einrück-Regeln bei If/Else
-
Hallo,
folgendes Script läuft und mich würde interessieren, wie man es verbessern/verschönern kann.
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 -> 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 < -700) {setState(idR1, true);} else if ((idVerbrauch > 0) &&(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 -> 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 < -700) && (idV1 === true)) {setState(idR2, true);} else if ((idVerbrauch > 0) && (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 > 0) &&(idV3 === false)) {setStateDelayed(idV2, false, 10000);} }); //Heizstab 3 ein -> 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 < -700) && (idV2 === true)) {setState(idR3, true);} else if (idVerbrauch > 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 > 0) {setStateDelayed(idV3, false, 10000);} });@johannes-bauerstatter
Variablen sind doppelt deklariert. Werte sollten nicht id vorangestellt bekommen. Beispiel:var Verbrauch = getState(idVerbrauch).val; on(idVerbrauch, function(dp) { Verbrauch = dp.state.val; let V2 = getState(idV2).val; ... -
@johannes-bauerstatter said in Anfänger: Javascript optimieren:
Hallo,
folgendes Script läuft und mich würde interessieren, wie man es verbessern/verschönern kann.
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 -> 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 < -700) {setState(idR1, true);} else if ((idVerbrauch > 0) &&(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 -> 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 < -700) && (idV1 === true)) {setState(idR2, true);} else if ((idVerbrauch > 0) && (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 > 0) &&(idV3 === false)) {setStateDelayed(idV2, false, 10000);} }); //Heizstab 3 ein -> 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 < -700) && (idV2 === true)) {setState(idR3, true);} else if (idVerbrauch > 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 > 0) {setStateDelayed(idV3, false, 10000);} });Funktional sieht das skript für mich gut aus.
Zur Erhöhung der Lesbarkeit könnte man noch folgendes verbessern:- Einrück-Regeln bei If/Else
Standardnotation ist eigentlich
if (bedingung) { blahblah } else { blahblah }am konkreten Beispiel bedeutet das:
on (idVerbrauch, function (dp) { let idVerbrauch = dp.state.val; var idV2 = getState('0_userdata.0.Variablen.Heizstab 2 ein').val; if (idVerbrauch < -700) { setState(idR1, true); } else if ((idVerbrauch > 0) &&(idV2 === false)) { setState(idR1, false); } });so lässt sich leichter sehen wo welcher Bedinungsblock anfängt und aufhört
Wenn du dich damit mehr beschäftigen möchtest, dann gibt es den javascript code-style bspw von google
https://google.github.io/styleguide/jsguide.html#formatting-nonempty-blocks
diese Regeln lassen sich in manchen Tools auch automatisiert prüfen oder gar anpassen.- Benennung der Variablen
Deine Unterscheidung bei den Variablen ist bspw idR1 und idV1,
wenn du weißt was damit gemeint ist, alles gut.
Besser wäre es aber die Variablen mit konkreten Benennungen dies etwas lesbarer zu machen.
Wenn du in einem halben Jahr da nochmal draufschaust, weißt nu nicht mehr, wofür
der Switch.2875680690 eigentlich nochmal da war oder wo der genau ist.
idSwitchWohnzimmer
idHeizstabWohnzimmer - Einrück-Regeln bei If/Else
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden