NEWS
einfaches Script will nicht.... [solved]
-
Hallo,
kann mir bitte jemand sagen, warum dieses Script nicht will?:
Der Teil mit dem Zeitprogramm funktioniert also ein um 11:15 und aus um 18:15 aber der Teil mit dem Verbrauch will nicht.
const id_Verbrauch1 = '0_userdata.0.Verbräuche.Differenzverbrauch'; const idWarmwasser = '0_userdata.0.Variablen.Warmwasser'; //Variable ein per Zeitprogramm schedule('15 11 * * *', function ein() {setState(idWarmwasser, true); sendTo('telegram.0', 'send', {text: 'Wasser ein Zeit'});}); //Variable aus per Zeitprogramm schedule('15 18 * * *', function ein() {setState(idWarmwasser, false); sendTo('telegram.0', 'send', {text: 'Wasser aus Zeit'});}); //Variable ein per Verbrauch on (id_Verbrauch1, function () { var Verbrauch = getState(id_Verbrauch1).val; if (Verbrauch < -500) {setState(idWarmwasser, true);} }); //Ein - Aus per Variable on (idWarmwasser, function () { var Warmwasser = getState(idWarmwasser).val; if (Warmwasser = true) {setState('sonoff.0.S4 Warmwasser.POWER', true); sendTo('telegram.0', 'send', {text: 'Wasser ein'})} else if (Warmwasser = false) {setState('sonoff.0.S4 Warmwasser.POWER', false); sendTo('telegram.0', 'send', {text: 'Wasser aus'})} });
-
@johannes-bauerstatter Durch was wird denn id_Verbrauch1 aktualisiert? Ein anderes Script? Nur wenn sich das ändert, wird ja der untere Teil aufgerufen.
-
@johannes-bauerstatter sagte in einfaches Script will nicht....:
if (Warmwasser = true)
Vergleiche mit "==" oder bei bool ganz weglassen:
if (Warmwasser) { setState('sonoff.0.S4 Warmwasser.POWER', true); sendTo('telegram.0', 'send', {text: 'Wasser ein'}) } else { setState('sonoff.0.S4 Warmwasser.POWER', false); sendTo('telegram.0', 'send', {text: 'Wasser aus'}) }
-
@ahnungsbefreit Das ist die Einspeisung meiner PV-Anlage. Dieser Wert ändert sich ca. alle 5 Sek.
@ente34 Vielen Dank werd ich ändern, wobei dieser Teil ja funktionieren muss, sonst würde das Zeitprogramm auch nicht laufen.
-
@johannes-bauerstatter Hast Du mal einen log-Block eingebaut in die
on (id_Verbrauch1, function () {
Funktion? Damit man sieht, ob das überhaupt alle 5 Sek getriggert wird? Es sieht für mich so aus, als ob das nicht passiert...
-
@johannes-bauerstatter said in einfaches Script will nicht....:
@ahnungsbefreit Das ist die Einspeisung meiner PV-Anlage. Dieser Wert ändert sich ca. alle 5 Sek.
@ente34 Vielen Dank werd ich ändern, wobei dieser Teil ja funktionieren muss, sonst würde das Zeitprogramm auch nicht laufen.
Das sind die Tücken von Javascript
Durch das = wird der Wert true der variable Warmwasser zugewiesen.
Diese Zuweisung erzeugt in Javascript einen truthy-Wert
https://developer.mozilla.org/de/docs/Glossary/Truthy
Daher der Wahrteil dieser Prüfung wird immer,immer,immer ausgeführtif (Warmwasser = true)
falls es dann immer noch nicht funktioniert, musst du schauen ob im Datenpunkt Warmwasser wirklich der bool-Wert true/false steht oder evtl nur der Text "true" / "false"
-
Danke an Alle für die Tips und Hinweise.
Habs jetzt umgestellt und es läuft:
const id_Verbrauch = '0_userdata.0.Verbräuche.Differenzverbrauch'; const id_Warmwasser = 'sonoff.0.S4 Warmwasser.POWER'; //Variable ein per Zeitprogramm schedule('15 11 * * *', function() {setState(id_Warmwasser, true); sendTo('telegram.0', 'send', {text: 'Wasser ein Zeit'});}); //Variable aus per Zeitprogramm schedule('15 18 * * *', function() {setState(id_Warmwasser, false); sendTo('telegram.0', 'send', {text: 'Wasser aus Zeit'});}); //Variable ein per Verbrauch on (id_Verbrauch, function () { var Verbrauch = getState(id_Verbrauch).val; if (Verbrauch < -500) {setState(id_Warmwasser, true);} });
-
damit es bei komplexeren skripten besser lesbar (auch für andere) ist
schau dir mal den style guide für javascript an.
Deiner Klammersetzung ist nicht so optimal
https://www.w3schools.com/js/js_conventions.asp