Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [Gelöst] Life360Adapter Anzeige des Standorts

    NEWS

    • Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    [Gelöst] Life360Adapter Anzeige des Standorts

    This topic has been deleted. Only users with topic management privileges can see it.
    • BananaJoe
      BananaJoe Most Active @NebuNC2 last edited by

      @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

      1 Reply Last reply Reply Quote 0
      • BananaJoe
        BananaJoe Most Active @NebuNC2 last edited by

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

        N 1 Reply Last reply Reply Quote 0
        • N
          NebuNC2 @BananaJoe last edited by

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

          1 Reply Last reply Reply Quote 0
          • R
            Rollo85 last edited by

            @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.

            BananaJoe 1 Reply Last reply Reply Quote 0
            • BananaJoe
              BananaJoe Most Active @Rollo85 last edited by

              @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 1 Reply Last reply Reply Quote 0
              • R
                Rollo85 @BananaJoe last edited by

                @bananajoe

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

                BananaJoe 1 Reply Last reply Reply Quote 0
                • BananaJoe
                  BananaJoe Most Active @Rollo85 last edited by

                  @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)

                  1 Reply Last reply Reply Quote 0
                  • BananaJoe
                    BananaJoe Most Active last edited by 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 1 Reply Last reply Reply Quote 0
                    • R
                      Rollo85 @BananaJoe last edited by

                      @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.:)

                      BananaJoe 2 Replies Last reply Reply Quote 0
                      • BananaJoe
                        BananaJoe Most Active @Rollo85 last edited by

                        @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

                        1 Reply Last reply Reply Quote 0
                        • BananaJoe
                          BananaJoe Most Active @Rollo85 last edited by

                          @rollo85 Und? Funktioniert wie gewünscht?

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

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

                          960
                          Online

                          32.3k
                          Users

                          81.1k
                          Topics

                          1.3m
                          Posts

                          habpanel iorboker life360 scripte visualisation
                          3
                          22
                          1431
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo