NEWS
Test Adapter stiebel-isg v1.4.x GitHub
-
@unltdnetworx try und catch bringen nichts. Sobald ich getState().val verwende und bei den unten abgebildeten Werten kein State vorhanden ist, erhalte ich Warnings im Log. Egal ob getstate().val/.lc/.ack/.q/ts
javascript.0 2020-02-01 15:14:36.341 warn (25315) at script.js.ISG.Test:5:28 javascript.0 2020-02-01 15:14:36.341 warn (25315) getState "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZKREISPUMPE" not found (3) javascript.0 2020-02-01 15:14:36.340 info (25315) script.js.ISG.Test: Ausgabe5: undefined javascript.0 2020-02-01 15:14:36.340 warn (25315) at script.js.ISG.Test:4:28 javascript.0 2020-02-01 15:14:36.339 warn (25315) getState "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZKREISPUMPE" not found (3) javascript.0 2020-02-01 15:14:36.339 info (25315) script.js.ISG.Test: Ausgabe3: undefined javascript.0 2020-02-01 15:14:36.339 warn (25315) at script.js.ISG.Test:3:28 javascript.0 2020-02-01 15:14:36.338 warn (25315) getState "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZKREISPUMPE" not found (3) javascript.0 2020-02-01 15:14:36.338 info (25315) script.js.ISG.Test: Ausgabe2: null javascript.0 2020-02-01 15:14:36.337 warn (25315) at script.js.ISG.Test:2:28 javascript.0 2020-02-01 15:14:36.337 warn (25315) getState "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZKREISPUMPE" not found (3) javascript.0 2020-02-01 15:14:36.336 info (25315) script.js.ISG.Test: Ausgabe1: undefined javascript.0 2020-02-01 15:14:36.336 warn (25315) at script.js.ISG.Test:1:28 javascript.0 2020-02-01 15:14:36.335 warn (25315) getState "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZKREISPUMPE" not found (3)
Wurden in früheren Versionen vom Adapter für das ISG nicht auch "false"-Werte geschrieben?
-
@SaschaS
Nein, können sie nicht, weil das ISG den Wert einfach nicht mehr anzeigt. Daher kann ich ihn auch nicht auf false setzen lassen.Zeig bitte mal deinen Code.
-
@unltdnetworx
Hm..ist ja doof.Mein Code ist noch am Entstehen. Prinzipiell geht es mir aber darum, dass ich auf Änderungen von stiebel-isg.0.Info.IST_SOLLWERTE.STATUS.HEIZKREISPUMPE oder stiebel-isg.0.Info.IST_SOLLWERTE.STATUS.HEIZEN reagieren möchte. Ist dazu greife ich eben mit getState() auf die Variable vom ISG Adapter zu.
schedule("* * * * *", function () { const HEIZKREISPUMPE = "stiebel-isg.0.Info.IST_SOLLWERTE.STATUS.HEIZKREISPUMPE"; var VORLAUFTEMP = getState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.VORLAUFTEMP').val; var RÜCKLAUFTEMP = getState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.RÜCKLAUFTEMP').val; var SPREIZUNG = getState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.SPREIZUNG').val; var ISTWERT_HK1 = getState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.ISTWERT_HK1').val; var VOLUMENSTROM = getState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.VOLUMENSTROM').val; //var HEIZKREISPUMPE = false; // pump active, valid temperatures only if (getState(HEIZKREISPUMPE).notExist) { setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_VORLAUFTEMP',0,true); setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_RÜCKLAUFTEMP',0,true); setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_SPREIZUNG',0,true); setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_ISTWERT_HK1',0,true); setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_VOLUMENSTROM',0,true); console.log("Die HKP läuft aktuell nicht. "); } else { setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_VORLAUFTEMP',VORLAUFTEMP,true); setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_RÜCKLAUFTEMP',RÜCKLAUFTEMP,true); setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_SPREIZUNG',SPREIZUNG,true); setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_ISTWERT_HK1',ISTWERT_HK1,true); setState('stiebel-isg.0.Info.IST_SOLLWERTE.HEIZUNG.HKP_VOLUMENSTROM',VOLUMENSTROM,true); console.log("Die HKP ist aktiv. Die VL beträgt " + VORLAUFTEMP); }; };
-
@SaschaS
Und wenn du meinen Vorschlag mal probierst? -
@unltdnetworx Sorry, dass hatte ich nicht explizit erwähnt. Auch hierbei gibts einen Eintrag...
try { var VAL1 = getState('stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZEN').val; console.log('try'); } catch (e) { console.log('case'); }
führt zu
17:57:56.304 info javascript.0 (25315) Stop script script.js.ISG.Test 17:58:13.848 info javascript.0 (25315) Stop script script.js.ISG.Test 17:58:22.988 info javascript.0 (25315) Start javascript script.js.ISG.Test 17:58:23.004 warn javascript.0 (25315) at script.js.ISG.Test:7:15 17:58:23.005 info javascript.0 (25315) script.js.ISG.Test: try 17:58:23.005 info javascript.0 (25315) script.js.ISG.Test: registered 0 subscriptions and 0 schedules 17:58:29.994 info javascript.0 (25315) Stop script script.js.ISG.Test
javascript.0 2020-02-01 17:58:23.004 warn (25315) at script.js.ISG.Test:7:15 javascript.0 2020-02-01 17:58:23.003 warn (25315) getState "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZEN" not found (3)
-
Kann ich dem Wert 'stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZEN' zufällig einen default-Wert zuweisen, so dass dieser immer gesetzt wird, außer dein Adapter meldet ein "true"?
Nur so eine Idee.. -
@SaschaS
Ein Standardwert wird mit dem ersten Aktualisieren überschrieben, also wird es wenig bringen. -
Gibt es eine andere Möglichkeit? Ich werde ja nicht der einzige mit solch einer Anforderung sein
-
@SaschaS
Das ist kein direktes Adapterproblem. Evtl. kannst du einen Thread im JS Bereich aufmachen, wie man mit Werten umgehen kann, deren Gültigkeit abgelaufen ist. So werden die Werte nämlich behandelt. Kommt nach der doppelten Abrufzeit vom ISG kein Wert, verfällt die Gültigkeit. -
@unltdnetworx Ok. Wenn es kein direkts Adapterproblem ist, muss ich an entsprechender anderer Stelle schauen.
Ich habe nun auch versucht z.B. den Datenpunkt 'stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZKREISPUMPE' zu klonen (also seperat zu erzeugt) und mittels
on ({id : "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZKREISPUMPE", change: "any"}, function(obj) { console.log("Es wurde eine Änderung festgestellt -> update2"); update2(); });
Änderungen festzustellen und in der Funktion update2() false/true für mein eigens angelegte Variable zu setzen.
Allerdings wird jeder Refresh (ca. 60 Sekunden) als Änderung interpretiert. Kann das sein?21:02:10.612 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: Update3:Die HKP ist aktiv 21:02:10.613 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: !Wert: false 21:02:10.614 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: Der Status der HKP wurde gewechselt! 21:03:13.763 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: Es wurde eine Änderung festgestellt -> update 21:03:13.764 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: try 21:03:13.769 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: Es wurde eine Änderung festgestellt -> update2 21:03:13.770 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: Update2:try 21:03:13.770 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: Es wurde eine Änderung festgestellt -> update3 21:03:13.771 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: VAL1: true 21:03:13.774 warn javascript.0 (1102) at update3 (script.js.ISG.TestHeizenIndicator:29:5) 21:03:13.777 warn javascript.0 (1102) at Object.<anonymous> (script.js.ISG.TestHeizenIndicator:52:1) 21:03:13.783 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: Update3:Die HKP ist aktiv 21:03:13.784 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: !Wert: true 21:03:13.784 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: Der Status der HKP wurde gewechselt! 21:04:10.578 info javascript.0 (1102) script.js.ISG.TestHeizenIndicator: Es wurde eine Änderung festgestellt -> update
-
@unltdnetworx Und eine technische Frage zum Adapter selbst. Kann man den Adapter eigentlich auch dafür verwenden um gezielt Wert ans ISG zu senden?
z.B. Wenn ich "stiebel-isg.0.Einstellungen.HEIZEN.HEIZKURVE HK1.val35" anpassen möchte. Kann ich das dann direkt in ioBroker machen, oder würde der Wert nach dem nächsten Refresh des Adapters wieder überschrieben werden.
Habe es bislang noch nicht getestet. Danke -
@SaschaS
Es wird der Wert des States geschrieben, scheinbar wird es nicht überprüft, ob der Wert geändert wurde. -
@SaschaS
Ja, du kannst gezielt Werte abändern. Es dauert aber dann ein wenig, bis das ISG reagiert. Die Werte werden aber sofort geschrieben. -
und falls der Wert mal nicht übernommen wird (für längere Zeit), strom raus und rein beim ISG.
Ich habe mir immer die HK anzeigen lassen, dann siehst du schön, ob das ISG gerade am sterben ist, wenn längere Zeit keine Änderung mehr passiert ... immer ein guter Indikator.in 80% rebootet die ISG selber, oder entstresst sich, aber manchmal hilft nur "unplug"
-
@unltdnetworx
Ich klinke mich hier noch einmal ein.Gerne würde ich mit
console.log($('state[state.id=stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.]'));
die nachstehenden Objekte auslesen:
Merkwürdigerweise habe ich gestern Abend allerdings folgende Ausgabe erhalten. Es wurden also auch Objekte ausgelesen, die nicht auf 'true' standen:
18:40:38.156 info javascript.0 (13463) script.js.Tests.Statusabfrage: {'0':'stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.ABTAUEN_VERDAMPFER','1':'stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.HEIZEN','2':'stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.SCHALTPROGRAMM_AKTIV','length':3}
und heute früh, erhalte ich lediglich, obwohl weitere Objekte auf 'true' stehen.
07:31:21.722 info javascript.0 (13463) script.js.Tests.Statusabfrage: {'0':'stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.SCHALTPROGRAMM_AKTIV','length':1}
Es passt also mMn hinten und vorne nicht zusammen. Kann mir jemand die Logik davon erklären?
-
@SaschaS Ich habe nichts gesagt. Der Cache des Browers hat mich in die Irre geleitet.
-
Falls ein interessierten Leser zu einem späteren Zeitpunkt über ähnliche Probleme stößt. Es gibt eine recht simple Lösung um zu überprüfen, ob ein Objekt im Moment existiert oder nicht.
/** * Checks if the state with the given ID exists */ function existsState(id: string): boolean; /** * Checks if the object with the given ID exists */ function existsObject(id: string): boolean;
Das Beispiel
console.log(existsState("stiebel-isg.0.Info.STATUS.ANLAGENSTATUS.HEIZEN"));
liefert entweder 'true' oder 'false'.
-
@SaschaS
Danke für den Hinweis. Das dürfte diverse Probleme mut diesen true/false Werten lösen. -
Hallo Michael @unltdnetworx
ich habe mal eine profane Frage: wie löst man denn (über welche Objekte den Heizbetrieb/Warmwasserbetrieb) aus?
Ich bin auch gerade dabei, meinen PV-Eigenverbrauch zu erhöhen und frage mich, wie ich meine LWZ 404 Trend über die Objekte zum Heizen bzw. Warmwasserbereitung bewege?
Einfach die Raumtemperatur per Objekt erhöhen oder gibt es da noch einen "richtigen" Trigger in den Objekten, den ich nicht finde?
Danke und beste Grüße
Kai
-