ioBroker Jarvis – Teil 10.1 – life360 GPS-Position formatieren
In diesem Artikel zeige ich Dir, wie ich das life360 GPS-Format für jarvis konvertiert habe.
In der aktuellen Version von jarvis wird das GPS-Positionsformat im folgenden Format benötigt:
(lat),(lng)
Da der life360-Adapter die Positionsdaten aber nur als JSON-String oder als getrennte Latitude und Longitude Datenpunkte zur Verfügung stellt, müssen wir hier mit einem kleinen Script die Positionsdaten in das verwendete Format umwandeln. Da zu diesem Thema einige Rückfragen kamen, möchte ich das hier natürlich auch kurz erklären.
Im ersten Schritt habe ich mir einen eigenen Datenpunkt im Bereich userData angelegt, in dem dann die formatierte Position für jarvis für die einzelnen Personen abgelegt wird. Als Format habe ich hier eine Zeichenkette gewählt.
Im nächsten Schritt erstellen wir uns nun ein JavaScript, welches die Positionswerte in das gewünschte Format konvertiert.
Im Script-Editor fügen wir nun den folgenden Script-Code ein, und passen die Object-ID des mit X überschriebenen Datenpunkt GPS-Coordinates entsprechend an Deinen eigenen Benutzer an.
function saveGPSposition(personObjectId, gpsJsonString) {
var jsonData = JSON.parse(gpsJsonString);
var gpsString = jsonData.lat + "," + jsonData.lng;
setState(personObjectId,gpsString);
}
on({id: 'life360.0.people.XXXXXXXXXXX.gps-coordinates', change: "ne"}, function (obj) {
var value = obj.state.val;
saveGPSposition("0_userdata.0.Visualisierung.jarvis.Position.Matthias",value);
});
Im Script definieren wir zunächst die Funktion saveGPSposition. Dieser Funktion wird die Object-ID der Person im Bereich userData sowie der die GPS-Position als JSON-String übergeben. Die Funktion parst dann den JSON-String mittels der JSON.parse() Funktion und extrahiert damit die Latitude- und Longitudewerte aus der JSON-Zeichenfolge. Anschließend wird die neue Zeichenkette per setState() in den übergebenen Datenpunkt geschrieben.
Im On() Trigger der jeweiligen Person übergebe ich dann den Datenpunkt der Person sowie die neue GPS-Zeichenkette an die Funktion saveGPSposition.
Um die GPS-Position für weitere Personen zu speichern muss dann nur ein separater Datenpunkt im Bereich userData sowie ein weiterer Trigger auf den jeweiligen gps-coordinates Datenpunkt angelegt werden.
Mit dieser Vorgehensweise kann ich jetzt relativ einfach das Format anpassen. Über die Verwendung der JavaScript Funktion wird die Formatierung gekapselt und kann einfach für weitere Personen eingesetzt werden.
- StateList
- Chart
- DateTime
- StateListHorizontal
- AdapterStatus
- Map
- iFrame
- DisplayImage
- Calendar
- MediaPlayer
- Darstellung von Sensorwerten
- Aktuelle Uhrzeit und Sonnenaufgang bzw. -untergang darstellen
- Karte mit Position von Personen anzeigen
- Zusätzliche GPS-Formatierung für Karte
- Abfalltermine darstellen
- Wetterinformationen darstellen
- Termine darstellen
- Tür- und Fensterstatus darstellen
- Heizkörperthermostat darstellen
- TrashSchedule darstellen
- Szenen steuern
- Beleuchtung steuern
- DWD Unwetterwarnungen darstellen
- Button für Garagentor-Öffner
- Verpasste Anrufe über den TR-064 Adapter darstellen
- Playlisten oder Radio-Sender über MediaPlayer steuern
- Darkmode aufgrund Astrozeit steuern
- Gruppen-Aktionen definieren
- News in jarvis anzeigen
Ich hoffe Dir gefällt der Artikel. Über Kommentare, Anregungen oder Ideen freue ich mich wie immer 🙂
“der life360-Adapter die Positionsdaten aber nur als JSON-String“: ich kann die Konvertierung auch in jarvis einbauen. Könntest du mir ein Beispiel des JSON Srrings schicken?
Gerade in dem anderen Artikel entdeckt 🙂
Super. Vielen Dank. Gruß
Hallo. Funktioniert es bei euch noch richtig ? Bei mir zoomt er neuerdings bis ins unendliche wenn ich die Karte öffne… Habe schon die neuste beta drauf. Erst wenn ich oben links auf das minus klicke zoomt er auf die richtige und erkennbare Position. War am Anfang nicht so…
Moin,
da ich mich erst seit neusten mit JavaScript und IoBroker befasse, komme ich leider nicht weiter wie ich ein weiteres Handy in das JavaScript einfüge. Muss ich das komplette Script einfach nochmal unten dranhängen oder reicht ein Teil davon zu nehmen und zu kopieren?
Ich wäre dankbar für ein wenig Hilfe
mit freundlichen Grüßen
Peter
Hallo Peter,
für ein weiteres Smartphone benötigst Du einfach eine weitere On-Subscription, in der Du dann die Funktion „SavePosition“ mit einem weiteren Datenpunkt aufrufst.
LG Matthias
Hallo Matthias,
das ist ja mein Problem.
wie trage ich das ein?
Ich habe das so versucht, dann bekomme ich aber eine Fehlermeldung.
function saveGPSposition(personObjectId, gpsJsonString) {
var jsonData = JSON.parse(gpsJsonString);
var gpsString = jsonData.lat + „,“ + jsonData.lng;
setState(personObjectId,gpsString);
}
on({id: ‚life360.0.people.xxxxxxxx-xxxx-xxxx-914e-bc99adc67429.gps-coordinates‘, change: „ne“}, function (obj) {
var value = obj.state.val;
saveGPSposition(„0_userdata.0.Visualisierung.Jarvis.Position.Peter_IPhone“,value);
on({id: ‚life360.0.people.xxxxxxxx-xxxx-xxxx-9168-c4eefbf30795.gps-coordinates‘, change: „ne“}, function (obj) {
var value = obj.state.val;
saveGPSposition(„0_userdata.0.Visualisierung.Jarvis.Position.Edith-IPhone“,value);
});
12:40:26.676 info javascript.0 (28329) Stop script script.js.Draussen.Position
12:40:26.687 info javascript.0 (28329) Start javascript script.js.Draussen.Position
12:40:26.697 error javascript.0 (28329) script.js.Draussen.Position compile failed: at script.js.Draussen.Position:21
Gruß Peter
Hallo Peter,
ja, da hat sich bei Dir ein Syntax-Fehler eingeschlichen, versuche es mal so:
function saveGPSposition(personObjectId, gpsJsonString) {
var jsonData = JSON.parse(gpsJsonString);
var gpsString = jsonData.lat + "," + jsonData.lng;
setState(personObjectId,gpsString);
}
on({id: 'life360.0.people.XXXXXXXXXXX.gps-coordinates', change: "ne"}, function (obj) {
var value = obj.state.val;
saveGPSposition("0_userdata.0.Visualisierung.jarvis.Position.Peter_IPhone",value);
});
on({id: 'life360.0.people.XXXXXXXXXXX.gps-coordinates', change: "ne"}, function (obj) {
var value = obj.state.val;
saveGPSposition("0_userdata.0.Visualisierung.jarvis.Position.Edith-IPhone",value);
});
LG Matthias
Hallo Matthias,
Danke das hat funktioniert.
Ich werde dich bestimmt noch in den anderen Artikel anschreiben, ich versuche gerade einiges davon umzusetzten. Ein paar Sachen funktionieren noch nicht oder gefallen mir so nicht.
Aber erstmal selber ausprobieren ob ich eine Lösung finde.
Gruß Peter