Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. [Neuer Adapter] Life360

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Neuer Adapter] Life360

    This topic has been deleted. Only users with topic management privileges can see it.
    • Humidor
      Humidor @MiGoller last edited by Humidor

      @migoller life360/circles/places/home/
      createdat steht 3.4, das wäre der Tag wo ich (glaube) alles neu gemacht habe
      letzte Aktualisierung ist aktuell, er schafft es ja immer wieder und dann wieder nicht usw.
      das Löschen entnehme ich dem Log.

      danke, dass du den Adapter machst!!

      jetzt gerade wieder: da steht no places found, removed.
      damit ändert sich der State vom Objekt "isPresent" und da schmeißts dann meine Automation.

      life360.0	2021-04-08 12:06:53.408	debug	(23334) Removed Home from Life360 circle Familie.
      life360.0	2021-04-08 12:06:53.407	debug	(23334) Removed Arbeit from Life360 circle Familie.
      life360.0	2021-04-08 12:06:53.304	debug	(23334) Life360 cloud data processed.
      life360.0	2021-04-08 12:06:53.303	debug	(23334) Published 1 circle(s) to ioBroker.
      life360.0	2021-04-08 12:06:53.285	debug	(23334) Published 2 people to ioBroker.
      life360.0	2021-04-08 12:06:53.263	debug	(23334) Published 0 place(s) to ioBroker.
      life360.0	2021-04-08 12:06:53.263	debug	(23334) Removed Home from Life360 places.
      life360.0	2021-04-08 12:06:53.263	debug	(23334) Removed Arbeit from Life360 places.
      life360.0	2021-04-08 12:06:53.259	debug	(23334) Published 0 MyPlaces to ioBroker.
      life360.0	2021-04-08 12:06:53.255	debug	(23334) Pushing cloud_data to callback function
      life360.0	2021-04-08 12:06:53.254	warn	(23334) No places found!
      life360.0	2021-04-08 12:06:51.679	debug	(23334) Fetching Life360 cloud data ...
      life360.0	2021-04-08 12:06:38.730	warn	(23334) State "life360.0.circles.14f1c5bd-3344-4634-a4ef-9e50713590e9.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.membersPresent" has no existing object, this might lead to an error in future version
      life360.0	2021-04-08 12:06:38.665	warn	(23334) State "life360.0.circles.14f1c5bd-3344-4634-a4ef-9e50713590e9.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.0752c6f7-6d19-47c3-a2b2-4a6fd92f11a1.isPresent" has no existing object, this might le
      life360.0	2021-04-08 12:06:38.644	warn	(23334) State "life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.urlMap" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.638	warn	(23334) State "life360.0.circles.14f1c5bd-3344-4634-a4ef-9e50713590e9.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.90f13baf-5e18-4c48-9612-158dc63804ca.isPresent" has no existing object, this might le
      life360.0	2021-04-08 12:06:38.633	warn	(23334) State "life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.urlMap" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.575	warn	(23334) State "life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.radius" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.573	warn	(23334) State "life360.0.circles.14f1c5bd-3344-4634-a4ef-9e50713590e9.places.5b77c866-6142-421a-b781-828ea05b798c.membersPresent" has no existing object, this might lead to an error in future version
      life360.0	2021-04-08 12:06:38.568	warn	(23334) State "life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.radius" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.502	warn	(23334) State "life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.gps-coordinates" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.502	warn	(23334) This object will not be created in future versions. Please report this to the developer.
      life360.0	2021-04-08 12:06:38.502	warn	(23334) Object life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.gps-coordinates is invalid: obj.common.type has an invalid value (text) but has to be one of number, string, boolean, array, objec
      life360.0	2021-04-08 12:06:38.500	warn	(23334) State "life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.gps-coordinates" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.500	warn	(23334) This object will not be created in future versions. Please report this to the developer.
      life360.0	2021-04-08 12:06:38.498	warn	(23334) Object life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.gps-coordinates is invalid: obj.common.type has an invalid value (text) but has to be one of number, string, boolean, array, objec
      life360.0	2021-04-08 12:06:38.487	warn	(23334) State "life360.0.circles.14f1c5bd-3344-4634-a4ef-9e50713590e9.places.5b77c866-6142-421a-b781-828ea05b798c.0752c6f7-6d19-47c3-a2b2-4a6fd92f11a1.isPresent" has no existing object, this might le
      life360.0	2021-04-08 12:06:38.476	warn	(23334) State "life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.longitude" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.465	warn	(23334) State "life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.longitude" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.457	warn	(23334) State "life360.0.circles.14f1c5bd-3344-4634-a4ef-9e50713590e9.places.5b77c866-6142-421a-b781-828ea05b798c.90f13baf-5e18-4c48-9612-158dc63804ca.isPresent" has no existing object, this might le
      life360.0	2021-04-08 12:06:38.445	warn	(23334) State "life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.latitude" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.444	warn	(23334) State "life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.latitude" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.381	warn	(23334) State "life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.name" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.378	warn	(23334) State "life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.name" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.365	warn	(23334) State "life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.circleId" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.356	warn	(23334) State "life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.circleId" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.344	warn	(23334) State "life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.ownerId" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.343	warn	(23334) State "life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.ownerId" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.291	debug	(23334) Life360 cloud data processed.
      life360.0	2021-04-08 12:06:38.291	debug	(23334) Published 1 circle(s) to ioBroker.
      life360.0	2021-04-08 12:06:38.289	warn	(23334) State "life360.0.places.ab561360-7317-427a-8a54-cc8d9f2b41ea.id" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.281	warn	(23334) State "life360.0.places.5b77c866-6142-421a-b781-828ea05b798c.id" has no existing object, this might lead to an error in future versions
      life360.0	2021-04-08 12:06:38.280	debug	(23334) Published 2 people to ioBroker.
      
      MiGoller 2 Replies Last reply Reply Quote 0
      • MiGoller
        MiGoller Developer @Humidor last edited by

        @humidor Hey. No places found! und nach ein paar Minuten liefert die API dann doch wieder Informationen zu den Orten. Egal, ich habe Anpassungen am Code vorgenommen, dass Life360 Places erst nach 30 Tagen gelöscht werden, nicht aber sofort. Und keine Angst: In einem späteren Release wird dieser Zeitraum konfigurierbar.

        Jetzt schauen wir erst einmal, dass die Places nicht dauernd gelöscht werden, wenn die API einen Schluckauf hat. Einverstanden? Die ersten Tests bei mir sehen schon ganz gut aus.

        @liv-in-sky Das Abfrageintervall über einen Datenpunkt konfigurierbar zu gestalten, packe ich dann gleich mit an.

        1 Reply Last reply Reply Quote 0
        • MiGoller
          MiGoller Developer @Humidor last edited by

          @humidor Hey. Bekommst Du noch No places found! Meldungen? Ich erhalte keine mehr.

          Humidor 1 Reply Last reply Reply Quote 0
          • Humidor
            Humidor @MiGoller last edited by Humidor

            @migoller hatte wohl Schluckauf 😉
            aktuell funktioniert es, im Log stehen verm. nur unbedeutende Sachen, zyklisch:

            2021-04-09 00:15:37.716  - debug: life360.0 (23334) Fetching Life360 cloud data ...
            2021-04-09 00:15:37.716  - debug: life360.0 (23334) Not authenticated against Life360. Will try to connect ...
            2021-04-09 00:15:37.716  - debug: life360.0 (23334) Connecting to Life360 service  ...
            

            das mit dem Updateintervall werde ich auch ändern, sobald du es im Adapter hast 🙂
            gr. Update, wenn zu Hause, 15s wenn unterwegs (öffnet mir die Garage)
            (mit dem Updateintervall von 15s hat mir heute die Garage nicht aufgemacht, die Aktualisierung hat damit nicht im 15s Intervall fkt., die letzte Woche schon)

            ist es nun besser myHome im Life360 oder Adapter zu machen und weniger zu syncen?

            MiGoller 1 Reply Last reply Reply Quote 0
            • MiGoller
              MiGoller Developer @Humidor last edited by

              @humidor Versuche bitte mal die Version 0.2.14 über Guthub oder npm. Jetzt sollten die Life360 Places nicht mehr verschwinden und dann hoffentlich wieder erscheinen. In meinen Tests hat es funktioniert. Es greift aktuell ein - zukünftig konfigurierbarer - Mechanismus, der nicht mehr von der API gelieferte Objekte erst nach 30 Tagen entfernt.

              Um auf Deine Frage einzugehen, ob es besser sei, Orte im Adapter oder in der Life360 App anzulegen... Um ehrlich zu sein, es hat beides so Vor- und Nachteile.

              • Legst Du Orte in der App an, so musst Du diese auch nur in der App pflegen und nicht noch an einer weiteren Stelle. In meinem Fall war es aber so, dass die Mitglieder eines Kreises denselben Ort unterschiedlich benannt hatten. Life360 liefert damit denselben Ort mehrfach. Hat gedauert, bis ich das herausgefunden hatte, da es "plötzlich" aufgetreten ist. Dass jemand denselben Ort unter einem anderen Namen angelegt hatte, hatte ich erst beim genauen Hinschauen erkannt.

              Meinen Anwendungsfall hatte das leider nur komplizierter gestaltet: Ich wollte doch nur wissen, wer aus einem Kreis alles an einem Ort ist. An einem Ort...

              • Das war die Geburtsstunde der "MyPlaces" im Adapter. Orte, die ich für die Gebäudesteuerung verwende, überlasse ich nicht mehr der Life360 App; diese definiere ich im Adapter. Life360 kennt eh schon meinen Aufenthaltsort und den anderer; da muss Life360 nicht auch noch um "besondere" Orte wissen, die eine Funktion auslösen.

              Ich hoffe, der Ansatz hilft Dir weiter.

              VG, MiGoller

              Humidor 2 Replies Last reply Reply Quote 0
              • Humidor
                Humidor @MiGoller last edited by

                @migoller Super, werde ich machen.
                die Places ziehe ich dann auch in den Adapter.

                aber ich kann es aus deiner Formulierung nicht klar rauslesen, die Objekte löschst du jetzt nach 30 Tage, es soll die Werte auch nicht "verändert" werden, wenn keine korrekte Kommunikation stattfindet (true/false).

                MiGoller 1 Reply Last reply Reply Quote 0
                • Humidor
                  Humidor @MiGoller last edited by

                  @migoller

                  passen diese Einstellungen für Places im Adapter?
                  und welche GPS Verfolgung ist eine "schnelle" ?

                  Bildschirmfoto 2021-04-11 um 10.42.21.png

                  MiGoller 1 Reply Last reply Reply Quote 0
                  • MiGoller
                    MiGoller Developer @Humidor last edited by

                    @humidor Hey. Wenn die API keine Informationen liefert, werden auch keine vorhandenen Datenpunkte verändert... und jetzt auch nicht mehr gelöscht. Werden Datenpunkte allerdings 30 Tage nacheinander nicht von der API mit Informationen bedient, dann kommt der große Frühjahrsputz. 😉

                    Humidor 1 Reply Last reply Reply Quote 0
                    • Humidor
                      Humidor @MiGoller last edited by

                      @migoller OK, denn das hatte ich ja isPresent true/false, das hast du somit optimiert, super

                      ich habe jetzt einen Place im Adapter angelegt, damit werde ich das Verhalten von Life360 nicht mehr sehen.

                      wie ist das noch mit dem GPS tracking, kannst du das bitte aufklären welche Einstellung das was ist? Danke!!

                      1 Reply Last reply Reply Quote 0
                      • MiGoller
                        MiGoller Developer @Humidor last edited by

                        @humidor Die Einstellungen sehen ok aus. Ich persönlich nutze noch das Verarbeiten der Life360-Kreise, um Änderungen an den Kreisen mitzubekommen. Wenn Du das nicht brauchst, kannst Du es so belassen.

                        Humidor 1 Reply Last reply Reply Quote 0
                        • Humidor
                          Humidor @MiGoller last edited by

                          @migoller ich meine dieses da, kannst du das noch etwas ausführen, oder könnt ich das wo nachlesen?
                          Bildschirmfoto 2021-04-11 um 11.16.24.png

                          MiGoller 1 Reply Last reply Reply Quote 0
                          • MiGoller
                            MiGoller Developer @Humidor last edited by

                            @humidor Ach so, danke für den Hinweis. Es geht darum, in welcher Form der Adapter GPS-Koordinaten darstellen soll. Das hängt ein wenig davon ab, in welcher Form Du diese ggf. für Deine Skripte, etc. benötigst. Es gibt da leider unterschiedliche Darstellungen von einem einfachen Zahlentupel bis zu Objekten, die deren Attribute einfach unterschiedlich benannt sind. In meiner Wahrnehmung ist das LatLng-Objekt die gebräuchlichste Darstellung, aber eben nicht die einzige.

                            Ich nutze die geolocation-utils, die genau diese Darstellung ermöglichen (s. https://bitbucket.org/teqplay/geolocation-utils/src/master/README.md unter "Data Structures").

                            LonLat-Tupel

                            Das LonLat-Tupel ist ein Array in der Form [longitude: number, latitude: number].

                            • latitude gibt den Breitengrad an.
                            • longitude gibt den Längengrad an.

                            Beachtet bitte die abweichende Reihenfolge zu den anderen Darstellungen.

                            LatLon-Objekt

                            Das LatLon-Objekt ist ein Objekt in der Form {lat: number, lon: number} mit den Attributen:

                            • lat gibt den Breitengrad an.
                            • lon gibt den Längengrad an.

                            LatLng-Objekt

                            Das LatLng-Objekt ist ein Objekt in der Form {lat: number, lng: number} mit den Attributen:

                            • lat gibt den Breitengrad an.
                            • lng gibt den Längengrad an.

                            LatitudeLongitude-Objekt

                            DasLatitudeLongitude-Objekt ist ein Objekt in der Form {latitude: number, longitude: number} mit den Attributen:

                            • latitude gibt den Breitengrad an.
                            • longitude gibt den Längengrad an.

                            Wenn Du keine konkreten Anforderungen an die Notation für weitere Services, APIs, etc. haben solltest, dann kannst Du m.E. die Darstellung so belassen, wie Du diese aktuell hast.

                            Ich hoffe, Dir damit weiterhelfen zu können.

                            Humidor 1 Reply Last reply Reply Quote 0
                            • Humidor
                              Humidor @MiGoller last edited by

                              @migoller alles klar, danke für die Ausführung!
                              damit hat das keinen Einfluss auf die Genauigkeit bzw. Frequenz der Positionsübergabe von Life360

                              Ich suche noch die Möglichkeit aus Lat/Long einen Kreis abzubilden, der dann Bestimmt ob man @Home ist (GPS-Auto). Hättest du da eine Info für mich?

                              MiGoller 1 Reply Last reply Reply Quote 0
                              • MiGoller
                                MiGoller Developer @Humidor last edited by

                                @humidor Hey. genau das kannst Du in den Einstellungen des Adapters bzw. der Instanz des Adapters tun. Unter "Meine Orte" kannst Du dann genau einen solchen Ort, nennen wir ihn "Home", anlegen; gib dann auch einen Radius (Einheit m) zu den GPS-Koordinaten an, um einen Kreis zu definieren.
                                7e936db2-9c9e-4247-9e4d-3751694332eb-image.png

                                Optional kannst Du noch angeben, aus welchem Kreis - hier kommt es auch die Bezeichnung des Life360 Kreises an - die Mitglieder bei der Präsenzinformation genutzt werden sollen.

                                Im Objektbaum findest Du dann nach Neustart des Adapters bzw. der Instanz diese Ort unter Life360 MyPlaces wieder.
                                36a1744e-c5f6-47c5-8123-48320310717a-image.png

                                Für Deinen Anwendungsfall dürfte dann der Datenpunkt life360.0.myplaces.<Name des Orts>.membersPresentCount interessant sein. Ist der Wert größer als 0, so ist jemand an dem Ort.

                                Beachte aber bitte bei der Wahl des Radius, dass die Genauigkeit der Ortung der Life360 App von verschiedenen Einflüssen abhängt. Mir sind folgende bekannt:

                                • Hardware des Smartphones. Es gibt sehr genaue und weniger genaue GPS-Chips.
                                • Zusätzliche Positionsbestimmung über WLAN und Mobilfunknetz.
                                • Akku-Optimierungseinstellungen der Endgeräte. Das ist gerade bei Android immer wieder ein Thema. Senden Android-Devices nicht mehr regelmäßig oder nur noch näherungsweise die Positionen, dann ist das ein guter Punkt zur Überprüfung. Fast alle Hersteller "optimieren" die Akku-Einstellungen bei Firmware-Updates, auch wenn Du das für einzelne Apps wie Life360 abweichend eingestellt hast. Apple kann das mit iOS aktuell auch gut.
                                • Hängt das Gerät am Ladekabel? Ist bei Anwendungsfällen mit Autos und Garage wichtig.

                                Ich sehe in der Praxis Positionsabweichungen von bis zu 50m bei demselben Gerät. Ist das Gerät per Kabel mit einer Stromversorgung verbunden, sind es meist weniger als 30m.

                                VG, MiGoller

                                Humidor 1 Reply Last reply Reply Quote 0
                                • Humidor
                                  Humidor @MiGoller last edited by

                                  @migoller Morgen MiGoller, danke wieder für deine ausführliche Erklärung.

                                  Ich suche aber noch eine andere / weitere Möglichkeit.
                                  Ein nicht im Life360 enthaltene Person, nämlich ein Auto. Das hat eine interne Sim und daher kann ich dieses nicht im Life360 anlegen.
                                  Ich habe durch einen Adapter (Zoe) im ioBroker die Lat/Long Werte drin, wenn das Auto in den Kreis "Home" ist oder nicht, würde ich das gerne wissen (um die Steuerung der Garagentore sicherer zu machen, bzw. um zu wissen ob das eine oder andere Auto unterwegs ist).

                                  MiGoller 1 Reply Last reply Reply Quote 0
                                  • MiGoller
                                    MiGoller Developer @Humidor last edited by

                                    @humidor Hallo. Aktuell geht das leider nicht. Eine Möglichkeit wäre es, per Skript die entsprechenden Datenpunkte bei Veränderung abzufragen und z.B. an den Places-Adapter zu senden. Ich kenne das Thema u.a. auch von VW, Audi, BMW, Mercedes, etc. Leider kann das schnell recht unübersichtlich werden.

                                    Der Life360-Adapter bietet ja auch die Möglichkeit, die GPS-Koordinaten der Personen an den Places-Adapter zu senden. Wenn der Zoe-Adapter keine integrierte Möglichkeit zum Sender der GPS-Koordinaten anbietet, würde ich es aktuell mit einem Skript erledigen... sollte sogar als Blockly-Skript gehen, aber bei Blockly kann ich nicht mitreden. Mit JavaScript geht es in jedem Fall. 😉

                                    Humidor 1 Reply Last reply Reply Quote 0
                                    • Humidor
                                      Humidor @MiGoller last edited by

                                      @migoller Places, ja den hab ich auch schon gedacht, kapier aber nicht wie ich dem die Position übergebe. Im Blockly läuft alles über Trigger, dh eine Änderung an Lat/Long löst ein Event aus szsg. dh es kann dann was gemacht werden.

                                      MiGoller 1 Reply Last reply Reply Quote 0
                                      • MiGoller
                                        MiGoller Developer @Humidor last edited by

                                        @humidor Das findest Du - zumindest für JavaScript - gut in der Readme.MD auf Github beschrieben. Das sollte Dir einen Anhaltspunkt geben:

                                        on({id: "telegram.0.communicate.requestRaw", change: "ne"}, function (obj) {
                                            var data = JSON.parse(obj.newState.val);
                                            if (data.from && data.location) {
                                                sendTo('places.0', {
                                                    user: data.from.first_name, 
                                                    latitude: data.location.latitude, 
                                                    longitude: data.location.longitude, 
                                                    timestamp: data.date
                                                }, function (res) { log('places analyzed telegram position as: ' + JSON.stringify(res)); });
                                            }
                                        });
                                        

                                        Das Beispiel zeigt, wie eine Positionsmeldung über Telegram an den Places-Adapter gesendet wird. Du müsstest also nur den Triggen entsprechend ändern. Nur leider kann ich Dir nicht sagen, wie Du das möglichst einfach mit Blockly umsetzen könntest.

                                        1 Reply Last reply Reply Quote 0
                                        • Humidor
                                          Humidor last edited by

                                          @migoller ja, das wiki habe ich gelesen, ich kann aber kein Java
                                          im Blockly komme ich nicht weiter, da fehlt mir der TimeStamp ?
                                          wurde der Adapter eigentlich eingestellt, der Thread ist zu ??

                                          1 Reply Last reply Reply Quote 0
                                          • M
                                            michael 1975 last edited by

                                            heute kam die Ankündigung das die Web Broser Version eingestellt wird hat das auswirkung auf den Adapter da ich den viel benutze.

                                            Gruß Michael

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            912
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            adapter geoposition life360 präsenzmelder
                                            84
                                            705
                                            151666
                                            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