NEWS
Länge und Breite aus DP auslesen
-
Hallo,
was JS angeht bin ich ziemlich unbeleckt, aber meistens gelingt es mir aus dem was ich in der Suche finde das richtige Ergebnis zu bekommen.
Jetzt habe ich aber ein kleines Problem:
Für mein Fahrzeug bekomme ich Werte über Mqtt. Das funktioniert auch sehr gut ,
Nur die Position gibt folgende Meldung:{ "@ASN1Type":"RvsWGS84Point", "altitude":0, "latitude":53771580, "longitude":8590432 }
Wie bekomme ich nun latitude und longitude ausgelesen?
Folgendes Script habe ich verwendet://MG4 Position bestimmen const idSensor = 'alias.0.Auto.MG4-Position'; const idBreite = '0_userdata.0.latitude'; const idLaenge = '.0_userdata.0.longitude'; on(idSensor, function(dp) { // triggert bei Wertänderung let obj = JSON.parse(dp.state.val); setState(idBreite, obj ['longitude'].longitude, true); setState(idLaenge, obj ['latitude'].latitude, true); });
Leider kommt an den Datenpunkten nichts an
Dann hab ich es noch über http versucht:
Die Ausgabe über http ist:"{\n \"@ASN1Type\":\"RvsWGS84Point\",\n \"altitude\":0,\n \"latitude\":53771580,\n \"longitude\":8590432\n}"
//MG4 Position bestimmen const axios = require("axios"); var dp_breite="0_userdata.0.latitude"; var dp_laenge="0_userdata.0.longitude"; var url = "http://192.168.178.115:8087/getPlainValue/alias.0.Auto.MG4-Position" function getData() { axios.get(url).then(({ data })=> { setState(dp_breite,data.latitude); setState(dp_laenge,data.longitude); }); setTimeout(getData,5000); } getData();
Da wird dann 0 gesendet
-
Wenn Dein Objekt richtig ist - einfach einen Punkt als Zugriff:
//MG4 Position bestimmen const idSensor = 'alias.0.Auto.MG4-Position'; const idBreite = '0_userdata.0.latitude'; const idLaenge = '.0_userdata.0.longitude'; on(idSensor, function(dp) { // triggert bei Wertänderung let obj = JSON.parse(dp.state.val); setState(idBreite, obj.longitude, true); setState(idLaenge, obj.latitude, true); });
-
@c1olli sagte: Leider kommt an den Datenpunkten nichts an
Man darf das Attribut nicht doppelt anwenden: Entweder ['longitude'] oder .longitude. Außerdem den Wert durch 1000000 dividieren.
on(idSensor, function(dp) { // triggert bei Wertänderung let obj = JSON.parse(dp.state.val); setState(idBreite, obj.latitude / 1000000, true); setState(idLaenge, obj.longitude / 1000000, true); });
-
Leider kommt immer noch nichts am Datenpunkt an
Heisst, wenn ich auf unter Objekte rechts mir das Refresch Datum anzeigen lasse, kommt da nichts.
-
@c1olli sagte: nichts am Datenpunkt an
Hat denn im Sensor-DP eine Änderung stattgefunden? Ohne Änderung wird nicht getriggert.
-
@paul53
Ok - die hat nicht stattgefunden - kann ich das künstlich für einen Test anstoßen? -
@c1olli sagte: kann ich das künstlich für einen Test anstoßen?
Ändere im Tab "Objekte" die Altitude im JSON auf 1. Evtl. auf Expertenmodus schalten, falls der Datenpunkt "read only" ist.
-
@paul53
Jo nu löppt es
Ich hatte es schon richtig, aber weil sich nichts getan hat hab ich weiter versucht und das Ganze verschlimmbessert.
Na ja wieder was dazu gelernt.Vielen Dank für die Hilfe.