Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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
    689

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

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

[Gelöst] Life360Adapter Anzeige des Standorts

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
habpaneliorbokerlife360scriptevisualisation
22 Beiträge 3 Kommentatoren 1.8k Aufrufe 5 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • N Offline
    N Offline
    NebuNC2
    schrieb am zuletzt editiert von NebuNC2
    #1

    Hallo Zusammen,

    ich habe den Life360 Adapter installiert und mich angemeldet. Sehe auch alle Familienmitglieder und die Orte bzw. Circles.

    Nun würde ich mich gern im Habpanel oder In Vis anzeigen lassen wo das jeweilige Familienmitglied ist. Nicht über die Karte sonder über ein Widget das mit den Ort(Place) anzeigt.
    Da der Adapter aber so aufgebaut ist das in den einzelnen „Places“ die einzelnen Familienmitglieder stehen und dann per „ispresent“ true or false angegeben werden weiß ich nicht wie ich das abbilden kann...

    Hat das schon jemand umgesetzt? Oder kann man ein Script erstellen das die einzelnen „Places“ und Namen nach „ispresent“ true „durchsucht“ und das in einem Widget anzeigen?

    Vielen Dank für eure Hilfe

    BananaJoeB 1 Antwort Letzte Antwort
    0
    • N NebuNC2

      Hallo Zusammen,

      ich habe den Life360 Adapter installiert und mich angemeldet. Sehe auch alle Familienmitglieder und die Orte bzw. Circles.

      Nun würde ich mich gern im Habpanel oder In Vis anzeigen lassen wo das jeweilige Familienmitglied ist. Nicht über die Karte sonder über ein Widget das mit den Ort(Place) anzeigt.
      Da der Adapter aber so aufgebaut ist das in den einzelnen „Places“ die einzelnen Familienmitglieder stehen und dann per „ispresent“ true or false angegeben werden weiß ich nicht wie ich das abbilden kann...

      Hat das schon jemand umgesetzt? Oder kann man ein Script erstellen das die einzelnen „Places“ und Namen nach „ispresent“ true „durchsucht“ und das in einem Widget anzeigen?

      Vielen Dank für eure Hilfe

      BananaJoeB Online
      BananaJoeB Online
      BananaJoe
      Most Active
      schrieb am zuletzt editiert von
      #2

      @nebunc2 Ich habe bisher nur die im Adapter selbst angelegten "myPlaces" genutzt.
      Und in der VIS nach Places gebaut, sprich er zeigt an wer an einem bestimmten Platz ist.

      Ich habe gerade mal die normalen Places im Adapter aktiviert und lass ihn jetzt Daten liefern.
      Ich schau mir das morgen mal an wenn meine Frau zur Arbeit und die Kinder in der Schule waren wie das dann so aussieht,
      so was ähnliches hatte ich eh vor.

      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 Antwort Letzte Antwort
      0
      • BananaJoeB BananaJoe

        @nebunc2 Ich habe bisher nur die im Adapter selbst angelegten "myPlaces" genutzt.
        Und in der VIS nach Places gebaut, sprich er zeigt an wer an einem bestimmten Platz ist.

        Ich habe gerade mal die normalen Places im Adapter aktiviert und lass ihn jetzt Daten liefern.
        Ich schau mir das morgen mal an wenn meine Frau zur Arbeit und die Kinder in der Schule waren wie das dann so aussieht,
        so was ähnliches hatte ich eh vor.

        N Offline
        N Offline
        NebuNC2
        schrieb am zuletzt editiert von
        #3

        @bananajoe ja sowas hab ich auch ausprobiert.
        Möchte mir aber nicht pro Person 6 Widgets mit den jeweiligen Orten erstellen und darüber abfragen.

        Ich freue mich darauf was du rausfindest.

        Danke dir

        BananaJoeB 1 Antwort Letzte Antwort
        0
        • N NebuNC2

          @bananajoe ja sowas hab ich auch ausprobiert.
          Möchte mir aber nicht pro Person 6 Widgets mit den jeweiligen Orten erstellen und darüber abfragen.

          Ich freue mich darauf was du rausfindest.

          Danke dir

          BananaJoeB Online
          BananaJoeB Online
          BananaJoe
          Most Active
          schrieb am zuletzt editiert von
          #4

          @nebunc2 Welche Places nutzt du genau?
          Bei den "normalen" Places ist ja nicht zu sehen wer dort ist.

          Beziehungsweise auf welchen Pfad hattest du dich bezogen bei der Aussage

          Da der Adapter aber so aufgebaut ist das in den einzelnen „Places“ die einzelnen Familienmitglieder stehen und dann per „ispresent“ true or false angegeben werden weiß ich nicht wie ich das abbilden kann...

          Bei allen Places (egal ob die in der App definieren oder die im Adapter manuell definierten) sind ja die Koordinaten und der Radius vorhanden. Ich spiele mit den Gedanken die Liste zu ermitteln (Orte + Koordinaten + Radius) und diese nach Entfernung zu berechnen. Also für jede Person die Entfernung zu jedem Standort berechnen bis es einen Treffer gibt (oder auch nicht). Ich muss aber mal testen wie Aufwendig das vom Rechnen her ist, also ob das spürbar in der CPU-Auslastung zu merken wäre. Und dann entscheiden ob das Zeitgesteuert oder getriggert gestartet wird.

          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 Antwort Letzte Antwort
          0
          • BananaJoeB BananaJoe

            @nebunc2 Welche Places nutzt du genau?
            Bei den "normalen" Places ist ja nicht zu sehen wer dort ist.

            Beziehungsweise auf welchen Pfad hattest du dich bezogen bei der Aussage

            Da der Adapter aber so aufgebaut ist das in den einzelnen „Places“ die einzelnen Familienmitglieder stehen und dann per „ispresent“ true or false angegeben werden weiß ich nicht wie ich das abbilden kann...

            Bei allen Places (egal ob die in der App definieren oder die im Adapter manuell definierten) sind ja die Koordinaten und der Radius vorhanden. Ich spiele mit den Gedanken die Liste zu ermitteln (Orte + Koordinaten + Radius) und diese nach Entfernung zu berechnen. Also für jede Person die Entfernung zu jedem Standort berechnen bis es einen Treffer gibt (oder auch nicht). Ich muss aber mal testen wie Aufwendig das vom Rechnen her ist, also ob das spürbar in der CPU-Auslastung zu merken wäre. Und dann entscheiden ob das Zeitgesteuert oder getriggert gestartet wird.

            N Offline
            N Offline
            NebuNC2
            schrieb am zuletzt editiert von
            #5

            @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 1 Antwort Letzte Antwort
            0
            • 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 Online
              BananaJoeB Online
              BananaJoe
              Most Active
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #7

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

                1 Antwort Letzte Antwort
                0
                • BananaJoeB Online
                  BananaJoeB Online
                  BananaJoe
                  Most Active
                  schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                  0
                  • BananaJoeB Online
                    BananaJoeB Online
                    BananaJoe
                    Most Active
                    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                    0
                    • BananaJoeB Online
                      BananaJoeB Online
                      BananaJoe
                      Most Active
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      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
                        schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
                        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 Online
                          BananaJoeB Online
                          BananaJoe
                          Most Active
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          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 Online
                            BananaJoeB Online
                            BananaJoe
                            Most Active
                            schrieb am zuletzt editiert von
                            #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 Antwort Letzte Antwort
                            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
                              schrieb am zuletzt editiert von
                              #14

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

                              1 Antwort Letzte Antwort
                              0
                              • R Offline
                                R Offline
                                Rollo85
                                schrieb am zuletzt editiert von
                                #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 Antwort Letzte Antwort
                                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 Online
                                  BananaJoeB Online
                                  BananaJoe
                                  Most Active
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  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
                                    schrieb am zuletzt editiert von
                                    #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 Antwort Letzte Antwort
                                    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 Online
                                      BananaJoeB Online
                                      BananaJoe
                                      Most Active
                                      schrieb am zuletzt editiert von
                                      #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 Antwort Letzte Antwort
                                      0
                                      • BananaJoeB Online
                                        BananaJoeB Online
                                        BananaJoe
                                        Most Active
                                        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                                        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
                                          schrieb am zuletzt editiert von
                                          #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 Antworten Letzte Antwort
                                          0

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

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

                                          417

                                          Online

                                          32.7k

                                          Benutzer

                                          82.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe