NEWS
[Gelöst] Diverse Werte aus einem Objekt auslesen
-
@Chaot Danke aber ich muss leider wieder nach fehlern suchen klapt noch nicht
-
@kratzsch sagte:
Fehler erkennen.
Laut Bild:
const OutTemp = '0_userdata.0.javascript.0.Heizung.OutTemp';
-
@kratzsch Ist der Wert den du abfragen willst überhaupt in der json drin? Die Heizungen liefern alle ganz unterschiedliche Werte, je nach Modell.
Versuche doch mal Druck oder Vorlauftemperatur abzufragen.
Stimmt der Datenpunkt aus der json auch überein oder hast du von mir die Namen übernommen? Auch hier kann es Unterschiede geben.
Du könntest ja man die json hier posten damit man eventuell das Script entsprechend entwerfen kann.
Bitte keinen Screenshot sondern in Code Tags packen.@paul53 Das ist mir ja gar nicht aufgefallen. Logisch das das nicht gehen kann.
-
@Chaot said in [Gelöst] Diverse Werte aus einem Objekt auslesen:
Code Tags
Die Werte die ich abfragen möchte stehen im Mqtt Adapter. Wie das mit den Code Tags geht weis ich leider nicht.
Ich bin dabei mir vieles anzueignen da ich jetzt in Rente bin und eine beschäftigung brauche.
Allso hier noch mal ein Screenshot leider.Aber vielicht möchte ich etwas machen das nicht möglich ist.
-
@kratzsch sagte:
Wie das mit den Code Tags geht weis ich leider nicht.
Oben </> anklicken und dann den Text (Code, Logs) hinein kopieren.
-
@paul53 Also ich bin schon sehr überrascht über eure hielfbereitschaft das ist einfach Klasse.
Und hier noch die Daten die in Mqtt geschrieben werden als beispiel die Boiler Daten.```
{"heatingActive":"off","tapwaterActive":"off","wWComfort":"Hot","wWSelTemp":60,"wWSetTemp":60,"wWDisinfectionTemp":70,"selFlowTemp":31,"selBurnPow":100,"curBurnPow":0,"pumpMod":100,"wWType":"buffer","wWChargeType":"charge pump","wWCircPump":"on","wWCircPumpMode":"continuous","wWCirc":"on","outdoorTemp":9.1,"wWCurTemp":58.2,"wWCurFlow":0,"curFlowTemp":31,"boilTemp":31,"wwStorageTemp1":58.2,"wWActivated":"on","wWOneTime":"off","wWDisinfecting":"off","wWCharging":"off","wWRecharging":"off","wWTempOK":"on","wWActive":"off","burnGas":"off","flameCurr":0,"heatPump":"on","fanWork":"off","ignWork":"off","wWHeat":"off","heatingActivated":"on","heatingTemp":48,"pumpModMax":100,"pumpModMin":100,"pumpDelay":7,"burnMinPeriod":10,"burnMinPower":0,"burnMaxPower":100,"boilHystOn":-6,"boilHystOff":6,"wWStarts":13087,"wWWorkM":65127,"UBAuptime":6548566,"burnStarts":112008,"burnWorkMin":389687,"heatWorkMin":324763,"serviceCode":"0Y","serviceCodeNumber":0}Hier mein versuchs Script
var json = "mqtt.0.ems-esp.boiler_data"/BoilerDaten/;
var OutTemp = "javascript.0.Heizung.OutTemp"/Aussentemperatur/;
var BoilTemp = "javascript.0.Heizung.BoilTemp"/Boilertemperatur/
var Vorl = "javacript.0.Heizung.Vorlauf"/Vorlauf/;
var Activehet = "javacript.0.Heizung.activehet"/Activ/;on(json, function(dp) {
var obj = JSON.parse(dp.state.val);
setState(OutTemp, obj.outdoorTemp);});
-
@kratzsch
Du hast in der Zeile 2,3 und 4 die Position der Datenpunkte angegeben:'javascript.0.Heizung.OutTemp'
Laut deinem Bild darüber mit den von dir angelegten Datenpunkten sind die aber bei
'0_userdata.0.javascript.0.Heizung.OutTemp'
Also entweder die Datenpunkte richtig anlegen und dann das Script an die richtige Stelle verweisen, oder das Script jetzt an die aktuellen Datenpunkte verweisen.
Aber ich würde das ehrlich gesagt so machen das es dauerhaft so bleiben kann. Also den Ordner javascript.0 den du unter 0_userdata.0 angelegt hast wieder löschen und dort mit der richtigen oder sinnvollen Ordner und Datenstruktur anfangen.- Unter 0_userdate.0 einen neuen Ordner anlegen - Heizung wäre eine gute Wahl.
- Unter dem neuen Ordner Heizung die benötigten Datenpunkte erstellen.
- im Script die Zeilen 2 bis 4 auf diese Datenpunkte verweisen
'0_userdata.0.Heizung.******'
Dann sollte das klappen.
-
@Chaot So ich habe es nochmal versucht leider ohner erfolg.Hier noch mal mein Script und der Datenpunkt.
var json = "mqtt.0.ems-esp.boiler_data"/*BoilerDaten*/; var outdoorTemp = "0_userdata.0.Heizung.outdoorTemp"/*outdoorTemp*/; on(json, function(dp) { var obj = JSON.parse(dp.state.val); setState(outdoorTemp, obj.outdoorTemp); });``` Objekt bearbeiten 0_userdata.0.Heizung.outdoorTemp Name Typ Allgemein Nativ Zugriffskontrolle Weitere (nur lesend) Raw (nur Experten) Rolle Art Beschreibung Maßeinheit minimaler Wert
-
@kratzsch sagte:
on(json, function(dp) { var obj = JSON.parse(dp.state.val); setState(outdoorTemp, obj.outdoorTemp); });
Es wird nur getriggert, wenn sich der Inhalt des JSON-Datenpunktes ändert. Vorher passiert nichts.
-
@paul53 Ok Danke schön aber ich denke das ich auf denn richtigen weg bin dank deiner Grossen Hielfe,
-
@kratzsch Kleiner Tip: Den MQTT Adapter kurz anhalten und neu starten. Dann sollte der Datenpunkt neu geschrieben werden.
-
@Chaot Leider immer noch nicht geklappt.Muss für die Zeile 1 auch ein datenpunkt erstellt werden.
-
-
@paul53 sagte in [Gelöst] Diverse Werte aus einem Objekt auslesen:
var json = "mqtt.0.boiler_data";
Verstehe ich jetzt auch nicht warum das ohne Ordnerstruktur da liegt, aber du hast Recht!
-
@Chaot Hallo
Einmal hat es geklappt und der Wert wurde geladen aber leider nur einmal.Hier der Log Eintrag.``
code_2020-11-23 20:05:23.744 - [32minfo[39m: history.0 (799) enabled logging of 0_userdata.0.Heizung.outdoorTemp, Alias=false
text -
@kratzsch Möchte mich nochmal für die Hilfe bedanken.
Hatte noch einen Schrieb Fehler jetzt geht es.``` -
@kratzsch ```
Hallo habe wieder einmal ein Problem die Boiler Daten und Solar Daten vom Mqtt Adapter werden einzeln ausgegeben.
Nur bei den Thermostat Daten klppt das nicht.
Hier mein Skriptvar json = "mqtt.0.thermostat_data"/*thermostatData*/; var currtemp = "0_userdata.0.Heizung.currtemp"/*currtemp*/; on(json, function(dp) { var obj = JSON.parse(dp.state.val); setState(currtemp, parseFloat(obj.currtemp)); });
16:02:34.539 info javascript.0 (29772) Stop script script.js.thermostat_data
16:02:34.740 info javascript.0 (29772) Start javascript script.js.thermostat_data
16:02:34.746 info javascript.0 (29772) script.js.thermostat_data: subscribe: {"pattern":{"id":"mqtt.0.thermostat_data","change":"ne","q":0},"name":"script.js.thermostat_data"}
16:02:34.746 info javascript.0 (29772) script.js.thermostat_data: registered 1 subscription and 0 schedulesVielicht kannst du meinen Fehler finden.
Vielen Dank im voraus. -
@kratzsch
Welche Version vom EMS-ESP verwendest du?
Ich verwende die Version 2.2.0 und bei der liegt die "currtemp" untermqtt.0.thermostat_data_hc1
Schau mal in deine Objekte. Vielleicht betrifft das dich ja auch.
-
@paul53
Hallo habe wieder einmal ein Problem die Boiler Daten und Solar Daten vom Mqtt Adapter werden einzeln ausgegeben.
Nur bei den Thermostat Daten klppt das nicht.
Hier mein Skript```
var json = "mqtt.0.thermostat_data"/thermostatData/;
var currtemp = "0_userdata.0.Heizung.currtemp"/currtemp/;on(json, function(dp) {
var obj = JSON.parse(dp.state.val);
setState(currtemp, parseFloat(obj.currtemp));});
1.1.2021, 19:36:30.167 [info ]: javascript.0 (29772) script.js.thermostat_data: setForeignState(id=0_userdata.0.Heizung.currtemp, state={"val":null,"ack":false,"c":"script.js.thermostat_data"}) 1.1.2021, 19:36:47.383 [info ]: javascript.0 (29772) Stop script script.js.thermostat_data 1.1.2021, 19:36:47.443 [info ]: javascript.0 (29772) Start javascript script.js.thermostat_data 1.1.2021, 19:36:47.467 [info ]: javascript.0 (29772) script.js.thermostat_data: subscribe: {"pattern":{"id":"mqtt.0.thermostat_data","change":"ne","q":0},"name":"script.js.thermostat_data"} 1.1.2021, 19:36:47.469 [info ]: javascript.0 (29772) script.js.thermostat_data: registered 1 subscription and 0 schedules Vielleicht kannst du einen Fehler finden. Vielen Dank im voraus.
so sieht das bei mir aus ``` mqtt.0#13 info#1 channel Information channel boiler_data state ems-esp/boiler_data state variable {"heatingActive":"off","tapwaterActive":"off","wWComfort":"Hot","wWSelTemp":60,"wWSetTemp":60,"wWDisinfectionTemp":70,"selFlowTemp":35,"selBurnPow":100,"curBurnPow":0,"pumpMod":100,"wWType":"buffer","wWChargeType":"charge pump","wWCircPump":"on","wWCircPumpMode":"continuous","wWCirc":"on","outdoorTemp":3.6,"wWCurTemp":58.4,"wWCurFlow":0,"curFlowTemp":32.9,"boilTemp":32.7,"wwStorageTemp1":58.4,"wWActivated":"on","wWOneTime":"off","wWDisinfecting":"off","wWCharging":"off","wWRecharging":"off","wWTempOK":"on","wWActive":"off","burnGas":"off","flameCurr":0,"heatPump":"on","fanWork":"off","ignWork":"off","wWHeat":"off","heatingActivated":"on","heatingTemp":49,"pumpModMax":100,"pumpModMin":100,"pumpDelay":7,"burnMinPeriod":10,"burnMinPower":0,"burnMaxPower":100,"boilHystOn":-6,"boilHystOff":6,"wWStarts":13321,"wWWorkM":66400,"UBAuptime":6606220,"burnStarts":114015,"burnWorkMin":397815,"heatWorkMin":331618,"serviceCode":"0Y","serviceCodeNumber":0} heating_active state ems-esp/heating_active state variable off hp_data state ems-esp/hp_data state variable mixing_data state ems-esp/mixing_data state variable sensor_data state ems-esp/sensor_data state variable solar_data state ems-esp/solar_data state variable {"collectorTemp":2.4,"tankBottomTemp":18.1,"solarPumpModulation":0,"solarPump":"off","pumpWorkMin":251591936} status state ems-esp/status state variable online tapwater_active state ems-esp/tapwater_active state variable off thermostat state ems-esp/thermostat state variable {"cmd":"temp" ,"data":22.5, "hc":1} thermostat_data state ems-esp/thermostat_data state variable {"time":"19:54:09 01/01/2021","errorcode":"(0)","display":"internal temperature","language":"German","offsetclock":0,"dampedtemp":3,"intoffset":0,"minexttemp":-10,"building":"medium","wwmode":"auto","wwcircmode":"auto","hc1":{"seltemp":23,"currtemp":24.2,"daytemp":23,"nighttemp":14.5,"holidaytemp":17,"nofrosttemp":248,"heatingtype":1,"targetflowtemp":35,"offsettemp":0,"designtemp":40,"roominfluence":1,"summertemp":18,"mode":"auto","modetype":"day"}} ``` {"time":"19:57:10 01/01/2021","errorcode":"(0)","display":"internal temperature","language":"German","offsetclock":0,"dampedtemp":3,"intoffset":0,"minexttemp":-10,"building":"medium","wwmode":"auto","wwcircmode":"auto","hc1":{"seltemp":23,"currtemp":24.2,"daytemp":23,"nighttemp":14.5,"holidaytemp":17,"nofrosttemp":248,"heatingtype":1,"targetflowtemp":35,"offsettemp":0,"designtemp":40,"roominfluence":1,"summertemp":18,"mode":"auto","modetype":"day"}} ``` ``` ``` ``` ``` ```
-
@kratzsch sagte:
setState(currtemp, parseFloat(obj.currtemp));
Versuche es mal mit
setState(currtemp, obj.hc1.currtemp, true);