NEWS
Zugriff auf Object mit Sonderzeichen (-)
-
Hallo zusammen
ich komme gerade bei einem Script nicht weiter.
Über MQTT bekomme ich Daten von OneWire-Temperatursensoren.var objdata = { "Time":"2023-08-05T06:52:00", "DS18B20":{ "Id":"22E0071E64FF", "Temperature":20.9 }, "DS18B20-1":{ "Id":"16F6071E64FF", "Temperature":20.8 }, "TempUnit":"C" }; console.log(objdata.Time); console.log(objdata.DS18B20.Temperature); console.log(objdata.DS18B20-1.Temperature);
In Zeile 16 bekomme ich einen Fehler, da der Sensorname ein "-" enthält.
Wie kann ich in dem Fall auf die Werte zugreifen?Vielen Dank und Viele Grüße
Blockmove -
-
@liv-in-sky
Vielen Dank. Aber leider funktioniert das nicht. -
@blockmove sicher ?
-
@blockmove sagte in Zugriff auf Object mit Sonderzeichen (-):
@liv-in-sky
Vielen Dank. Aber leider funktioniert das nicht.Das funktioniert genau so wie beschrieben !
Und wurde hier im Forum bestimmt schon 100x gelöst.Achtung:
Wenn du mehrere Sensoren dran hast dann zusätzlich die ID prüfen.
Tasmota z.B. kann die Sensoren beim Start verschiedener Reihenfolge zuordnen.Da wir zwecks fehlender Info nicht wissen, welche Geräte/Software du hast einen Verweis auf folgende Doku:
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge -
Kaum macht man's richtig funktioniert es.
Ich hatte den "." nicht gelöscht.
Sorry für meine Dummheit. -
@bahnuhr said in Zugriff auf Object mit Sonderzeichen (-):
Achtung:
Wenn du mehrere Sensoren dran hast dann zusätzlich die ID prüfen.
Tasmota z.B. kann die Sensoren beim Start verschiedener Reihenfolge zuordnen.Da wir zwecks fehlender Info nicht wissen, welche Geräte/Software du hast einen Verweis auf folgende Doku:
https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträgeVielen Dank für den Hinweis.
Aber mal ganz ehrlich: Weder die Geräte noch die Software noch die Geräte spielen da eine Rolle.
Es war ein simples Javascript-Problem. Ich hatte sogar schon die "[]" probiert, aber schlicht einen "." vergessen zu löschen.
Die Probleme sitzen halt in den meisten Fällen vor dem Computer.Ich weiß, dass ich bei OneWire die ID brauche.
Das ist ja auch einer der Gründe warum ich Script erstelle.
Ich will längerfristig von meiner Gasheizung auf eine Wärmepumpe wechseln.
Und dafür sammle ich Daten von div. Quellen (Siemens Logo, Homematic, Tasmota, ...) und schreibe sie in eine Influx-DB.Viele Grüße
Blockmove -
Na, wenn du das gewusst hast dann ist ja alles gut.
Ich wusste es nicht und hatte dann Werte in falschen DP.Nur durch nachlesen auf der tasmota Seite war es dann klar.
Aber wenn es dir bekannt war, dann bist du weiter als ich damals.
P.S.
War ja nur ein gut gemeinter Ratschlag, dass es dir nicht ergeht wie mir damals. -
@bahnuhr said in Zugriff auf Object mit Sonderzeichen (-):
Na, wenn du das gewusst hast dann ist ja alles gut.
Ich wusste es nicht und hatte dann Werte in falschen DP.Nur durch nachlesen auf der tasmota Seite war es dann klar.
Aber wenn es dir bekannt war, dann bist du weiter als ich damals.
P.S.
War ja nur ein gut gemeinter Ratschlag, dass es dir nicht ergeht wie mir damals.Naja tasmota ist wirklich eine super Lösung.
Unglaublich flexibel und auch mächtig besonders in der Kombination mit ioBroker.
Nutze ich schon einige Jahre. Teilweise mit fertiger Hardware, teilweise baue ich mir auch selber mit den ESPs Geräte.
Aber so hin- und wieder stolpert man eben auch über Fallstricke.Nochmals Danke für die Unterstützung und schönes Wochenende
-
wie im chat besprochen anbei mal das Script:
// Temperatur der Heizungsrohre var Id, Temp, z; on({id: "mqtt.2.Wemos_Heizung_Rohre.SENSOR", change: "ne"}, function(obj){ obj = JSON.parse(obj.state.val); for (z = 1; z <= 8; z++) { Id = obj["DS18B20-"+z].Id; Temp = obj["DS18B20-"+z].Temperature; Temp_schreiben(Id,Temp); } var sdatum = formatDate(obj.Time,"DD.MM.YYYY"); var szeit = formatDate(obj.Time,"SS:mm"); //log ("Temperatur Heizungsrohre aktualisiert am " + sdatum + " um " + szeit + " Uhr"); setState("javascript.0.Geräte.Heizung.Rohre.Aenderung",(sdatum + " um " + szeit + " Uhr")); }); function Temp_schreiben(Id,Temp) { if (Id == "0117B37A48FF") setState("javascript.0.Geräte.Heizung.Rohre.Temp_Kaltwasser", Temp); if (Id == "0117B38548FF") setState("javascript.0.Geräte.Heizung.Rohre.Temp_Vorlauf", Temp); if (Id == "0117B38B14FF") setState("javascript.0.Geräte.Heizung.Rohre.Temp_Umwaelz", Temp); if (Id == "0417A2D62CFF") setState("javascript.0.Geräte.Heizung.Rohre.Temp_Ruecklauf", Temp); if (Id == "0517C0E88FFF") setState("javascript.0.Geräte.Heizung.Rohre.Temp_Waermetauscher", Temp); if (Id == "0517C0EA1CFF") setState("javascript.0.Geräte.Heizung.Rohre.Temp_Warmwasser", Temp); if (Id == "0517C0EAF2FF") setState("javascript.0.Geräte.Heizung.Rohre.Fussbodenheizung_Ruecklauf", Temp); if (Id == "0517C0EB6FFF") setState("javascript.0.Geräte.Heizung.Rohre.Fussbodenheizung_Vorlauf", Temp); }