NEWS
[Gelöst] Diverse Werte aus einem Objekt auslesen
-
@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);
-
@paul53 Vielen Dank hat sofort geklappt.
-
@kratzsch Ah, das ist der Datenpunkt der in der neuen Firmware separat herausgeführt wurde.
Ich habe die Themostatdaten nie verwendet und auch nicht darauf geachtet wie deren json aussieht.Kannst du dir gleich vormerken das beim Update des ESP die Daten dann unter einem neuen Datenpunkt ( thermostat_data_hc1) liegen.