Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. [Gelöst] Life360Adapter Anzeige des Standorts

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    823

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    6.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.6k

[Gelöst] Life360Adapter Anzeige des Standorts

Scheduled Pinned Locked Moved ioBroker Allgemein
habpaneliorbokerlife360scriptevisualisation
22 Posts 3 Posters 1.9k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N NebuNC2

    @bananajoe hier mal ein Screenshot. Ich nutze die Circles in denen die einzelnen Familienmitglieder angegeben sind und mit ispresent true or false stehen.
    Da ich in der Vis ja nicht für jeden Place ein Widget pro Person haben möchte weiß ich nicht weiter...

    ED666185-873E-4DF9-87B1-8F23EF88D49D.jpeg

    BananaJoeB Offline
    BananaJoeB Offline
    BananaJoe
    Most Active
    wrote on last edited by
    #6

    @nebunc2 Ach die Circles.
    Die hatte ich bisher noch nicht aktiviert.
    Sieht gut aus, sollte sich was draus machen können.

    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

    N 1 Reply Last reply
    0
    • BananaJoeB BananaJoe

      @nebunc2 Ach die Circles.
      Die hatte ich bisher noch nicht aktiviert.
      Sieht gut aus, sollte sich was draus machen können.

      N Offline
      N Offline
      NebuNC2
      wrote on last edited by
      #7

      @bananajoe das hört sich ja schon mal gut an😉

      1 Reply Last reply
      0
      • BananaJoeB Offline
        BananaJoeB Offline
        BananaJoe
        Most Active
        wrote on last edited by BananaJoe
        #8

        @NebuNC2

        So, hier ein erster schneller Entwurf eines Scriptes, Version 0.1

        // Life360_WoIstWerGerade
        // Version 0.1 vom 13.04.2021 um 21:15 Uhr
        // https://forum.iobroker.net/topic/44135/life360adapter-anzeige-des-standorts
        // ##############################################################################################################################
        // Konfiguration
        // ##############################################################################################################################
        // Logging aktivieren (Erzeugt Log-Warning-Meldungen)
        const b_logging = false;
        
        // Pfade für die Suche nach Personen und der Orte festlegen
        // Pfad mit den möglichen Personen:
        const dp_people = "life360.0.people";
        // Pfad mit dem Kreis der Überwacht werden soll. Den "channel" unterhalb von life360.x.circles der Überwacht werden soll
        const dp_circle = "life360.0.circles.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
        // Pfad unterhalb dessen die Datenpunkte für die Orte erstellt werden sollen
        const dp_javascript_places = "javascript.0.life360"
        
        // ##############################################################################################################################
        // Funktionen
        // ##############################################################################################################################
        // DebugWarning gibt in der Console eine Warnmeldung aus wenn b_logging auf true steht
        /* accepts parameters
        * s_debugmessage = Print this text to console via warn
        */
        function DebugWarning(s_debugmessage) {
           if (b_logging == true) {
               console.warn(s_debugmessage);
           }
        }
        // -----------------------------------------------------------------------------------------------------------------------------
        function AssignPeopleAndPlaces() {
           // Wenn diese Funktion aufgerufen wurde sollte die Arrays mit den Namen und Personen-Id bereits gefüllt sein
           // Diese Arrays arbeiten wir einmal ab
           var i;
           var s_place;
           var dp_of_current_place;
           for (i = 0; i < a_people_names.length; i++) {
               DebugWarning("Suche läuft für: " + a_people_names[i] + "[" + i + "]");
               s_place = "unbekannt";
               $(dp_circle + ".*." + a_people_id[i] + ".isPresent").each(function (idIsPresent, j) {
                   var objIsPresent = getObject(idIsPresent);
        
                   if (objIsPresent) {
                       //DebugWarning(j + ": " + objIsPresent._id);
                       if ( getState(objIsPresent._id).val == true ) {
                           // Die Person ist hier, holen wir uns den Namen des Ortes
                           dp_of_current_place = objIsPresent._id; // Datenpunkt des isPresent Wertes
                           dp_of_current_place = dp_of_current_place.replace("." + a_people_id[i] + ".isPresent", ""); //Nun Datenpunkt Channel des Ortes
                           s_place = getObject(dp_of_current_place).common.name;
                           return true;
                       }
                   }
               });
               DebugWarning(a_people_names[i] + " ist hier: " + s_place);
               if ( (getState(dp_javascript_places + "." + a_people_names[i]).val) != s_place ) {
                   setState( dp_javascript_places + "." + a_people_names[i], s_place);
               }
           }
        }
        
        // ##############################################################################################################################
        // Startup - wird nur einmal beim Start ausgeführt
        // ##############################################################################################################################
        
        // Name des gewählten Kreis ermitteln
        var s_circle_name = getObject(dp_circle).common.name;
        s_circle_name = s_circle_name.replace(" ","_");
        DebugWarning("s_circle_name: " + s_circle_name);
        
        // Namen und Id's der Personen ermitteln und in 2 Arrays ablegen
        var a_people_names = [];
        var a_people_id = [];
        $(dp_people + ".*.firstName").each(function (id, i) {
           var obj = getObject(id);
           if (obj) {
               a_people_names[i] = getState(obj._id).val;
               a_people_id[i] = obj._id.replace(dp_people + ".", "");
               a_people_id[i] = a_people_id[i].replace(".firstName", "");
               DebugWarning(i + ": " + a_people_names[i] + ":" + a_people_id[i]);
               // Ggf. Datenpunkte anlegen
               createState(dp_javascript_places + "." + a_people_names[i], "unbekannt", {
                   type: 'string',
                   read: true, 
                   write: true
               });
        
           }
        });
        DebugWarning("Anzahl Personen: " + a_people_names.length);
        
        // Einmal beim Start Prüfen wo wer ist - das nächste mal erst wieder wenn sich etwas ändert
        AssignPeopleAndPlaces();
        
        // ##############################################################################################################################
        // An Datenpunkte hängen (Subscriptions)
        // ##############################################################################################################################
        // Wir hängen uns an den Datenpunkt "life360.0.circles.{gewünschet Circle-Id}.places.*.membersPresent" - wenn sich dort an einem der Places was ändert legen wir los.
        // Denn dann hat eine Person einen Ort verlassen oder betreten
        // Nachteil ist das wir jedesmal dann alle Orte abklappern müssen
        $(dp_circle + ".*.membersPresent").on( function (obj) {
           AssignPeopleAndPlaces();
        });
        

        Anpassen muss man die Zeile

        const dp_circle = "life360.0.circles.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
        

        Da muss der Datenpunkt des gewünschten circles rein:
        0f366ec7-8158-46c4-8bb2-1d95c8435d0d-image.png

        • Unterhalb von javascript.0.life360. wird für jede gefundene Person ein Datenpunkt angelegt anhand des Vornamens
        • Beim Start werden diese einmalig befüllt. Ist eine Person an keinem Ort so steht da "unbekannt" drin
        • Den Trigger habe ich auf life360.0.circles.{gewünschet Circle-Id}.places.*.membersPresent gesetzt, den gibt es bei jedem Ort mit der Anzahl der dort anwesenden Personen. Ändert sich das bei einem der Orte läuft die Suche los
        • Im Skript ganz oben kann man ein Debugging einschalten, dazu b_logging auf true setzen, so etwas habe ich zur Fehlersuche immer in meinen Skripten
        • Wenn sich die Anzahl / Namen der Personen ändern muss man das Skript einmal neu starten
        • Datenpunkte von nicht mehr anwesenden Personen werden noch nicht gelöscht

        Version 0.1 !!!! Verbesserungsvorschläge nehme ich gerne an
        Dauertest steht noch aus - mal sehen wie es morgen den Tag über läuft wenn alle aus dem Haus sind

        ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

        1 Reply Last reply
        0
        • BananaJoeB Offline
          BananaJoeB Offline
          BananaJoe
          Most Active
          wrote on last edited by BananaJoe
          #9

          Da ist noch ein Fehler im Script. Als beim Triggern auf den Datenpunkt löst er nicht aus. Ich suche noch

          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

          1 Reply Last reply
          0
          • BananaJoeB Offline
            BananaJoeB Offline
            BananaJoe
            Most Active
            wrote on last edited by
            #10

            @NebuNC2 Fehler gefunden und im Post des Skripts oben geändert - bei mir tut es genau das was es soll

            ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

            N 1 Reply Last reply
            0
            • BananaJoeB BananaJoe

              @NebuNC2 Fehler gefunden und im Post des Skripts oben geändert - bei mir tut es genau das was es soll

              N Offline
              N Offline
              NebuNC2
              wrote on last edited by NebuNC2
              #11

              @bananajoe habe das Skript übernommen und die Circle ID angepasst.
              Auch die Datenpunkte werden angelegt. Jedoch ist der Wert bei jedem Namen Unbekannt. Ich vermute da soll der Place stehen, oder?

              Ist das normal das im Skript
              const dp_people / circle/ places in roter Schrift sind?

              Muss mich korrigieren.

              Jetzt passt alles.

              Vielen lieben und herzlichen Dank.

              Das ist total klasse

              BananaJoeB 2 Replies Last reply
              0
              • N NebuNC2

                @bananajoe habe das Skript übernommen und die Circle ID angepasst.
                Auch die Datenpunkte werden angelegt. Jedoch ist der Wert bei jedem Namen Unbekannt. Ich vermute da soll der Place stehen, oder?

                Ist das normal das im Skript
                const dp_people / circle/ places in roter Schrift sind?

                Muss mich korrigieren.

                Jetzt passt alles.

                Vielen lieben und herzlichen Dank.

                Das ist total klasse

                BananaJoeB Offline
                BananaJoeB Offline
                BananaJoe
                Most Active
                wrote on last edited by
                #12

                @nebunc2 Das mit der Farbe ist normal
                Bei unbekannt hat er keinen Platz gefunden bei dem die Person ist.

                Für den Datenpunkt mit dem Circle empfehle ich in der Objekt-Ansicht diesen zu suchen und dann vorne beim Namen das Copy-Symbol anzuklicken.

                Das ist genau das was in den dp_circle gehört - dort im Skript einfügen. Wenn der nicht stimmt wird er nichts finden.

                Alternativ kannst du auch alles zwischen den "..." löschen, den Cursor dort positionieren und oben rechts das Symbol für Datenpunkt einfügen klicken und dann den Datenpunkt auswählen - meine ich, ich schreib das gerade auf dem Handy

                ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                1 Reply Last reply
                0
                • N NebuNC2

                  @bananajoe habe das Skript übernommen und die Circle ID angepasst.
                  Auch die Datenpunkte werden angelegt. Jedoch ist der Wert bei jedem Namen Unbekannt. Ich vermute da soll der Place stehen, oder?

                  Ist das normal das im Skript
                  const dp_people / circle/ places in roter Schrift sind?

                  Muss mich korrigieren.

                  Jetzt passt alles.

                  Vielen lieben und herzlichen Dank.

                  Das ist total klasse

                  BananaJoeB Offline
                  BananaJoeB Offline
                  BananaJoe
                  Most Active
                  wrote on last edited by
                  #13

                  @nebunc2 Stoppe und starte das Skript noch mal.
                  Beim ersten Start wurden die Datenpunkte erst erstellt, danach war er zu schnell.

                  ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                  N 1 Reply Last reply
                  0
                  • BananaJoeB BananaJoe

                    @nebunc2 Stoppe und starte das Skript noch mal.
                    Beim ersten Start wurden die Datenpunkte erst erstellt, danach war er zu schnell.

                    N Offline
                    N Offline
                    NebuNC2
                    wrote on last edited by
                    #14

                    @bananajoe ja ich war zu schnell.
                    Nochmals herzlichen Dank für deine Hilfe

                    1 Reply Last reply
                    0
                    • R Offline
                      R Offline
                      Rollo85
                      wrote on last edited by
                      #15

                      @BananaJoe

                      Hallo,

                      dein Skript funktioniert super.
                      Ich habe nur mal die Frage wie ich das ganze für "myplaces" umschreiben kann bzw. ob du das machen könntest. Aktuell prüft dieses Skript ja nur die Orte die in der App angelegt wurden, ich würde gerne die Orte prüfen die ich selbst im Adapter angelegt habe.
                      Ich hoffe du verstehst was ich meine;)
                      Danke für deine Antwort.

                      BananaJoeB 1 Reply Last reply
                      0
                      • R Rollo85

                        @BananaJoe

                        Hallo,

                        dein Skript funktioniert super.
                        Ich habe nur mal die Frage wie ich das ganze für "myplaces" umschreiben kann bzw. ob du das machen könntest. Aktuell prüft dieses Skript ja nur die Orte die in der App angelegt wurden, ich würde gerne die Orte prüfen die ich selbst im Adapter angelegt habe.
                        Ich hoffe du verstehst was ich meine;)
                        Danke für deine Antwort.

                        BananaJoeB Offline
                        BananaJoeB Offline
                        BananaJoe
                        Most Active
                        wrote on last edited by
                        #16

                        @rollo85 moin, Jupp habe ich verstanden. Theoretisch machbar, auf die schnelle nicht, die Datenpunkte sind anders aufgebaut als die places unter circle, also müsste ich die Auswertung anpassen. bzw. eine extra Lösung dafür schreiben.

                        Weis aber noch nicht wann ich da Zeit und Lust für habe.

                        ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                        R 1 Reply Last reply
                        0
                        • BananaJoeB BananaJoe

                          @rollo85 moin, Jupp habe ich verstanden. Theoretisch machbar, auf die schnelle nicht, die Datenpunkte sind anders aufgebaut als die places unter circle, also müsste ich die Auswertung anpassen. bzw. eine extra Lösung dafür schreiben.

                          Weis aber noch nicht wann ich da Zeit und Lust für habe.

                          R Offline
                          R Offline
                          Rollo85
                          wrote on last edited by
                          #17

                          @bananajoe

                          na das klingt ja wenigstens schon mal vielversprechend:)
                          Es eilt ja nicht.
                          Also falls du irgendwann mal Zeit und Muse hast:)

                          BananaJoeB 1 Reply Last reply
                          0
                          • R Rollo85

                            @bananajoe

                            na das klingt ja wenigstens schon mal vielversprechend:)
                            Es eilt ja nicht.
                            Also falls du irgendwann mal Zeit und Muse hast:)

                            BananaJoeB Offline
                            BananaJoeB Offline
                            BananaJoe
                            Most Active
                            wrote on last edited by
                            #18

                            @rollo85 mhh, soll "myplaces" und "circles" funktionieren? Und wenn ja, was soll im Zweifel gewinnen ... wird wohl eher Zufall werden.

                            Im Prinzip müsste ich nur eine weitere Subscription auf

                            life360.0.*.*.ispresent
                            

                            legen und mich dann am Objektnamen hochhangeln (eine Ebene Höher steht der Benutzer, noch ein höher der Ort)

                            ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                            1 Reply Last reply
                            0
                            • BananaJoeB Offline
                              BananaJoeB Offline
                              BananaJoe
                              Most Active
                              wrote on last edited by BananaJoe
                              #19

                              @rollo85

                              So, das ist nun ein schneller Entwurf als Version V2

                              • man muss das Skript beim ersten mal starten und noch mal neu starten damit die Datenpunkte sicher angelegt sind.
                              • Im Life360 Adapter muss Life360-Kreise verarbeiten und Life360 Menschen verarbeiten aktiviert sein
                              • die circles funktionieren wie zuvor / in Version 0.1
                              • Zusätzlich wird der Zweig myplaces überwacht. Wenn dort ein isPresent auf true springt nimmt er die Datenpunkt ID und holt sich aus dieser den Namen und den Ort. Er schreibt den Ort in den gleichen Datenpunkt wie die Kreise, es funktioniert also beides parallel, weil ...
                              • Er nimmt bei Circles nur die Vornamen. Ist ein Nachname angegeben so wird dieser bei MyPlaces aber genutzt. Dadurch passt der Datenpunkt für das Ergebnis nicht mehr. Deshalb wird bei MyPlaces beim Namen nur alles bis zum ersten _ verwendet, das sollte der Vorname sein.
                              // Life360_WoIstWerGerade
                              // Changelog:
                              // 13.04.2021 V0.1 Auswertung der Circles
                              // 08.11.2021 V2 zusätzlich Auswertung von MyPlaces
                              // https://forum.iobroker.net/topic/44135/life360adapter-anzeige-des-standorts
                              // ##############################################################################################################################
                              // Konfiguration
                              // ##############################################################################################################################
                              // Logging aktivieren (Erzeugt Log-Warning-Meldungen)
                              const b_logging = false;
                              // Pfade für die Suche nach Personen und der Orte festlegen
                              // Pfad mit den möglichen Personen:
                              const dp_people = "life360.0.people";
                              // Pfad mit dem Kreis der Überwacht werden soll. Den "channel" unterhalb von life360.x.circles der Überwacht werden soll
                              const dp_circle = "life360.0.circles.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
                              // Pfad unterhalb dessen die Datenpunkte für die Orte erstellt werden sollen
                              const dp_javascript_places = "javascript.0.life360"
                              // Was soll als Ort stehen wenn die Person an keinem Ort gefunden wurde?
                              const s_unkown_place = "?";
                              // Datenpunkt für myplaces
                              const dp_myplaces = "life360.0.myplaces";
                              
                              // ##############################################################################################################################
                              // Funktionen
                              // ##############################################################################################################################
                              // DebugWarning gibt in der Console eine Warnmeldung aus wenn b_logging auf true steht
                              /* accepts parameters
                               * s_debugmessage = Print this text to console via warn
                               */
                              function DebugWarning(s_debugmessage) {
                                  if (b_logging == true) {
                                      console.warn(s_debugmessage);
                                  }
                              }
                              // -----------------------------------------------------------------------------------------------------------------------------
                              function Circles_AssignPeopleAndPlaces() {
                                  // Wenn diese Funktion aufgerufen wurde sollte die Arrays mit den Namen und Personen-Id bereits gefüllt sein
                                  // Diese Arrays arbeiten wir einmal ab
                                  var i;
                                  var s_place;
                                  var dp_of_current_place;
                                  for (i = 0; i < a_people_names.length; i++) {
                                      DebugWarning("Suche läuft für: " + a_people_names[i] + "[" + i + "]");
                                      // s_place = "unbekannt";
                                      s_place = s_unkown_place;
                                      $(dp_circle + ".*." + a_people_id[i] + ".isPresent").each(function (idIsPresent, j) {
                                          var objIsPresent = getObject(idIsPresent);
                              
                                          if (objIsPresent) {
                                              //DebugWarning(j + ": " + objIsPresent._id);
                                              if ( getState(objIsPresent._id).val == true ) {
                                                  // Die Person ist hier, holen wir uns den Namen des Ortes
                                                  dp_of_current_place = objIsPresent._id; // Datenpunkt des isPresent Wertes
                                                  dp_of_current_place = dp_of_current_place.replace("." + a_people_id[i] + ".isPresent", ""); //Nun Datenpunkt Channel des Ortes
                                                  s_place = getObject(dp_of_current_place).common.name;
                                                  return true;
                                              }
                                          }
                                      });
                                      DebugWarning(a_people_names[i] + " ist hier: " + s_place);
                                      //Sonderbehandlung, bei "Wohnort" den Namen einsetzen
                                      if ( s_place == "Wohnort" ) {
                                          s_place = a_people_names[i];
                                      }
                                      if ( (getState(dp_javascript_places + "." + a_people_names[i]).val) != s_place ) {
                                          setState( dp_javascript_places + "." + a_people_names[i], s_place);
                                      }
                                  }
                              }
                              
                              function MyPlaces_AssignPeopleAndPlaces(s_ID) {
                                  // Wenn diese Funktion aufgerufen wurde sollte die Arrays mit den Namen und Personen-Id bereits gefüllt sein
                                  // Diese Arrays arbeiten wir einmal ab
                                  DebugWarning("Id ist: " + s_ID);
                                  var a_ID = s_ID.split(".");
                                  var s_name1 = a_ID[4];
                                  var s_name2 = s_name1.split("_",1)[0]
                                  /*
                                  if ( s_name[s_name.length-1] == "_" ) {
                                      DebugWarning("hat ein _ am Ende");
                                      s_name = s_name.slice(0, -1);
                                  }
                                  */
                                  DebugWarning("Name ist: " + s_name2);
                                  DebugWarning("Ort ist: " + a_ID[3]);
                                  // Und Datenpunkt setzen
                                  setState( dp_javascript_places + "." + s_name2, a_ID[3]);
                              }
                              
                              // ##############################################################################################################################
                              // Startup - wird nur einmal beim Start ausgeführt
                              // ##############################################################################################################################
                              
                              // Name des gewählten Kreis ermitteln
                              var s_circle_name = getObject(dp_circle).common.name;
                              s_circle_name = s_circle_name.replace(" ","_");
                              DebugWarning("s_circle_name: " + s_circle_name);
                              
                              // Namen und Id's der Personen ermitteln und in 2 Arrays ablegen
                              var a_people_names = [];
                              var a_people_id = [];
                              $(dp_people + ".*.firstName").each(function (id, i) {
                                  var obj = getObject(id);
                                  if (obj) {
                                      a_people_names[i] = getState(obj._id).val;
                                      a_people_id[i] = obj._id.replace(dp_people + ".", "");
                                      a_people_id[i] = a_people_id[i].replace(".firstName", "");
                                      DebugWarning(i + ": " + a_people_names[i] + ":" + a_people_id[i]);
                                      // Ggf. Datenpunkte anlegen
                                      createState(dp_javascript_places + "." + a_people_names[i], "unbekannt", {
                                          type: 'string',
                                          read: true, 
                                          write: true
                                      });
                              
                                  }
                              });
                              DebugWarning("Anzahl Personen: " + a_people_names.length);
                              
                              // Einmal beim Start Prüfen wo wer ist - das nächste mal erst wieder wenn sich etwas ändert
                              Circles_AssignPeopleAndPlaces();
                              
                              // ##############################################################################################################################
                              // An Datenpunkte hängen (Subscriptions)
                              // ##############################################################################################################################
                              // Wir hängen uns an den Datenpunkt "life360.0.circles.{gewünschet Circle-Id}.places.*.membersPresent" - wenn sich dort an einem der Places was ändert legen wir los.
                              // Denn dann hat eine Person einen Ort verlassen oder betreten
                              // Nachteil ist das wir jedesmal dann alle Orte abklappern müssen
                              $(dp_circle + ".*.membersPresent").on( function (obj) {
                              //on({ id: dp_circle + ".*.membersPresent", change: "ne" }, function (obj) {
                                  Circles_AssignPeopleAndPlaces();
                              });
                              
                              // Und eine weitere Subscription auf "life.360.0.myplaces.*.*.isPresent"
                              $(dp_myplaces + ".*.*.isPresent").on( function (obj) {
                              //on({ id: dp_circle + ".*.membersPresent", change: "ne" }, function (obj) {
                                  var value = obj.state.val;
                                  if (value == true) {
                                      MyPlaces_AssignPeopleAndPlaces(obj.id);
                                  }
                              });
                              

                              ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                              R 1 Reply Last reply
                              0
                              • BananaJoeB BananaJoe

                                @rollo85

                                So, das ist nun ein schneller Entwurf als Version V2

                                • man muss das Skript beim ersten mal starten und noch mal neu starten damit die Datenpunkte sicher angelegt sind.
                                • Im Life360 Adapter muss Life360-Kreise verarbeiten und Life360 Menschen verarbeiten aktiviert sein
                                • die circles funktionieren wie zuvor / in Version 0.1
                                • Zusätzlich wird der Zweig myplaces überwacht. Wenn dort ein isPresent auf true springt nimmt er die Datenpunkt ID und holt sich aus dieser den Namen und den Ort. Er schreibt den Ort in den gleichen Datenpunkt wie die Kreise, es funktioniert also beides parallel, weil ...
                                • Er nimmt bei Circles nur die Vornamen. Ist ein Nachname angegeben so wird dieser bei MyPlaces aber genutzt. Dadurch passt der Datenpunkt für das Ergebnis nicht mehr. Deshalb wird bei MyPlaces beim Namen nur alles bis zum ersten _ verwendet, das sollte der Vorname sein.
                                // Life360_WoIstWerGerade
                                // Changelog:
                                // 13.04.2021 V0.1 Auswertung der Circles
                                // 08.11.2021 V2 zusätzlich Auswertung von MyPlaces
                                // https://forum.iobroker.net/topic/44135/life360adapter-anzeige-des-standorts
                                // ##############################################################################################################################
                                // Konfiguration
                                // ##############################################################################################################################
                                // Logging aktivieren (Erzeugt Log-Warning-Meldungen)
                                const b_logging = false;
                                // Pfade für die Suche nach Personen und der Orte festlegen
                                // Pfad mit den möglichen Personen:
                                const dp_people = "life360.0.people";
                                // Pfad mit dem Kreis der Überwacht werden soll. Den "channel" unterhalb von life360.x.circles der Überwacht werden soll
                                const dp_circle = "life360.0.circles.8a95a98d-adb3-4df4-bb0c-e374f4f8f161";
                                // Pfad unterhalb dessen die Datenpunkte für die Orte erstellt werden sollen
                                const dp_javascript_places = "javascript.0.life360"
                                // Was soll als Ort stehen wenn die Person an keinem Ort gefunden wurde?
                                const s_unkown_place = "?";
                                // Datenpunkt für myplaces
                                const dp_myplaces = "life360.0.myplaces";
                                
                                // ##############################################################################################################################
                                // Funktionen
                                // ##############################################################################################################################
                                // DebugWarning gibt in der Console eine Warnmeldung aus wenn b_logging auf true steht
                                /* accepts parameters
                                 * s_debugmessage = Print this text to console via warn
                                 */
                                function DebugWarning(s_debugmessage) {
                                    if (b_logging == true) {
                                        console.warn(s_debugmessage);
                                    }
                                }
                                // -----------------------------------------------------------------------------------------------------------------------------
                                function Circles_AssignPeopleAndPlaces() {
                                    // Wenn diese Funktion aufgerufen wurde sollte die Arrays mit den Namen und Personen-Id bereits gefüllt sein
                                    // Diese Arrays arbeiten wir einmal ab
                                    var i;
                                    var s_place;
                                    var dp_of_current_place;
                                    for (i = 0; i < a_people_names.length; i++) {
                                        DebugWarning("Suche läuft für: " + a_people_names[i] + "[" + i + "]");
                                        // s_place = "unbekannt";
                                        s_place = s_unkown_place;
                                        $(dp_circle + ".*." + a_people_id[i] + ".isPresent").each(function (idIsPresent, j) {
                                            var objIsPresent = getObject(idIsPresent);
                                
                                            if (objIsPresent) {
                                                //DebugWarning(j + ": " + objIsPresent._id);
                                                if ( getState(objIsPresent._id).val == true ) {
                                                    // Die Person ist hier, holen wir uns den Namen des Ortes
                                                    dp_of_current_place = objIsPresent._id; // Datenpunkt des isPresent Wertes
                                                    dp_of_current_place = dp_of_current_place.replace("." + a_people_id[i] + ".isPresent", ""); //Nun Datenpunkt Channel des Ortes
                                                    s_place = getObject(dp_of_current_place).common.name;
                                                    return true;
                                                }
                                            }
                                        });
                                        DebugWarning(a_people_names[i] + " ist hier: " + s_place);
                                        //Sonderbehandlung, bei "Wohnort" den Namen einsetzen
                                        if ( s_place == "Wohnort" ) {
                                            s_place = a_people_names[i];
                                        }
                                        if ( (getState(dp_javascript_places + "." + a_people_names[i]).val) != s_place ) {
                                            setState( dp_javascript_places + "." + a_people_names[i], s_place);
                                        }
                                    }
                                }
                                
                                function MyPlaces_AssignPeopleAndPlaces(s_ID) {
                                    // Wenn diese Funktion aufgerufen wurde sollte die Arrays mit den Namen und Personen-Id bereits gefüllt sein
                                    // Diese Arrays arbeiten wir einmal ab
                                    DebugWarning("Id ist: " + s_ID);
                                    var a_ID = s_ID.split(".");
                                    var s_name1 = a_ID[4];
                                    var s_name2 = s_name1.split("_",1)[0]
                                    /*
                                    if ( s_name[s_name.length-1] == "_" ) {
                                        DebugWarning("hat ein _ am Ende");
                                        s_name = s_name.slice(0, -1);
                                    }
                                    */
                                    DebugWarning("Name ist: " + s_name2);
                                    DebugWarning("Ort ist: " + a_ID[3]);
                                    // Und Datenpunkt setzen
                                    setState( dp_javascript_places + "." + s_name2, a_ID[3]);
                                }
                                
                                // ##############################################################################################################################
                                // Startup - wird nur einmal beim Start ausgeführt
                                // ##############################################################################################################################
                                
                                // Name des gewählten Kreis ermitteln
                                var s_circle_name = getObject(dp_circle).common.name;
                                s_circle_name = s_circle_name.replace(" ","_");
                                DebugWarning("s_circle_name: " + s_circle_name);
                                
                                // Namen und Id's der Personen ermitteln und in 2 Arrays ablegen
                                var a_people_names = [];
                                var a_people_id = [];
                                $(dp_people + ".*.firstName").each(function (id, i) {
                                    var obj = getObject(id);
                                    if (obj) {
                                        a_people_names[i] = getState(obj._id).val;
                                        a_people_id[i] = obj._id.replace(dp_people + ".", "");
                                        a_people_id[i] = a_people_id[i].replace(".firstName", "");
                                        DebugWarning(i + ": " + a_people_names[i] + ":" + a_people_id[i]);
                                        // Ggf. Datenpunkte anlegen
                                        createState(dp_javascript_places + "." + a_people_names[i], "unbekannt", {
                                            type: 'string',
                                            read: true, 
                                            write: true
                                        });
                                
                                    }
                                });
                                DebugWarning("Anzahl Personen: " + a_people_names.length);
                                
                                // Einmal beim Start Prüfen wo wer ist - das nächste mal erst wieder wenn sich etwas ändert
                                Circles_AssignPeopleAndPlaces();
                                
                                // ##############################################################################################################################
                                // An Datenpunkte hängen (Subscriptions)
                                // ##############################################################################################################################
                                // Wir hängen uns an den Datenpunkt "life360.0.circles.{gewünschet Circle-Id}.places.*.membersPresent" - wenn sich dort an einem der Places was ändert legen wir los.
                                // Denn dann hat eine Person einen Ort verlassen oder betreten
                                // Nachteil ist das wir jedesmal dann alle Orte abklappern müssen
                                $(dp_circle + ".*.membersPresent").on( function (obj) {
                                //on({ id: dp_circle + ".*.membersPresent", change: "ne" }, function (obj) {
                                    Circles_AssignPeopleAndPlaces();
                                });
                                
                                // Und eine weitere Subscription auf "life.360.0.myplaces.*.*.isPresent"
                                $(dp_myplaces + ".*.*.isPresent").on( function (obj) {
                                //on({ id: dp_circle + ".*.membersPresent", change: "ne" }, function (obj) {
                                    var value = obj.state.val;
                                    if (value == true) {
                                        MyPlaces_AssignPeopleAndPlaces(obj.id);
                                    }
                                });
                                
                                R Offline
                                R Offline
                                Rollo85
                                wrote on last edited by
                                #20

                                @bananajoe

                                das ging ja doch recht schnell...tausend dank dafür.
                                Dein schneller Entwurf scheint super zu funktionieren. Richtig testen kann ich es aber erst heute Nachmittag, wenn wir das Haus verlassen und auf Arbeit gehen.
                                und nochmal vielen Dank dafür.:)

                                BananaJoeB 2 Replies Last reply
                                0
                                • R Rollo85

                                  @bananajoe

                                  das ging ja doch recht schnell...tausend dank dafür.
                                  Dein schneller Entwurf scheint super zu funktionieren. Richtig testen kann ich es aber erst heute Nachmittag, wenn wir das Haus verlassen und auf Arbeit gehen.
                                  und nochmal vielen Dank dafür.:)

                                  BananaJoeB Offline
                                  BananaJoeB Offline
                                  BananaJoe
                                  Most Active
                                  wrote on last edited by
                                  #21

                                  @rollo85 Der Berg war im ersten Moment sehr groß ... aber mit meinen üblichen Methoden kam ich dann doch schneller zum Ziel als gedacht (schauen was ich das schon mal gemacht habe, Tester in Blockly zusammengeklickt und dann den Quellcode betrachten und natürlich viel googeln).

                                  Vorteil bei den myplaces sehe ich darin das man den Kreis enger ziehen kann :-) Da gehen auch z.B. auch 50m

                                  ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                  1 Reply Last reply
                                  0
                                  • R Rollo85

                                    @bananajoe

                                    das ging ja doch recht schnell...tausend dank dafür.
                                    Dein schneller Entwurf scheint super zu funktionieren. Richtig testen kann ich es aber erst heute Nachmittag, wenn wir das Haus verlassen und auf Arbeit gehen.
                                    und nochmal vielen Dank dafür.:)

                                    BananaJoeB Offline
                                    BananaJoeB Offline
                                    BananaJoe
                                    Most Active
                                    wrote on last edited by
                                    #22

                                    @rollo85 Und? Funktioniert wie gewünscht?

                                    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                    1 Reply Last reply
                                    0

                                    Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                    Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                    With your input, this post could be even better 💗

                                    Register Login
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes


                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate
                                    FAQ Cloud / IOT
                                    HowTo: Node.js-Update
                                    HowTo: Backup/Restore
                                    Downloads
                                    BLOG

                                    212

                                    Online

                                    32.8k

                                    Users

                                    82.7k

                                    Topics

                                    1.3m

                                    Posts
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                    ioBroker Community 2014-2025
                                    logo
                                    • Login

                                    • Don't have an account? Register

                                    • Login or register to search.
                                    • First post
                                      Last post
                                    0
                                    • Home
                                    • Recent
                                    • Tags
                                    • Unread 0
                                    • Categories
                                    • Unreplied
                                    • Popular
                                    • GitHub
                                    • Docu
                                    • Hilfe