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.

Ich hoffe Dir gefällt der Artikel. Über Kommentare, Anregungen oder Ideen freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

9 Gedanken zu „ioBroker Jarvis – Teil 10.1 – life360 GPS-Position formatieren

  • 6. Oktober 2020 um 8:38
    Permalink

    “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?

    Antwort
    • 6. Oktober 2020 um 8:44
      Permalink

      Gerade in dem anderen Artikel entdeckt 🙂

      Antwort
  • 15. Oktober 2020 um 13:32
    Permalink

    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…

    Antwort
  • 24. März 2021 um 8:08
    Permalink

    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

    Antwort
    • 24. März 2021 um 11:08
      Permalink

      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

      Antwort
      • 24. März 2021 um 12:45
        Permalink

        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

        Antwort
        • 24. März 2021 um 13:09
          Permalink

          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

          Antwort
          • 24. März 2021 um 13:29
            Permalink

            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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.