NEWS
[Neuer Adapter] ioBroker.places
-
Hallo zusammen,
ich habe es endlich geschafft, mal einen dedizierten Adapter für die Analyse von GPS-Koordinaten zusammenzustellen: https://github.com/BasGo/ioBroker.places.
Der Gedanke, aus dem heraus der Adapter entstanden ist, ist, dass es im Moment für viele Tracker-Apps eigene Lösungen gibt. GeoFency rein für die Apple-Fraktion, EgiGeoZone ausschließlich für Android-Geräte und OwnTracks für beide Welten. Diese Adapter eint, dass sie alle eine eigene Implementierung für die Auswertung haben, ob jemand zuhause ist oder nicht. Zusätzlich haben viele dieser Apps die Möglichkeit, innerhalb der App einzelne Orte/Lokationen festlegen zu können, die wiederum nicht App-übergreifend genutzt werden können.
Zusätzlich stellen viele dieser schon vorhandenen Adapter zusätzliche Funktionen zur Verfügung, ob nun einen eigenen Webserver oder einen eigenen MQTT-Server. Genau hier wollte ich mit ioBroker.places ansetzen: dieser Adapter dient <u>ausschließlich</u> der Auswertung von GPS-Koordinaten, die innerhalb von ioBroker (per Message, siehe GitHub-Dokumentation) entgegengenommen und anschließend ausgewertet werden. Die Festlegung, ob eine GPS-Position als "zuhause" gewertet wird, erfolgt dabei über die in ioBroker konfigurierten Längen- und Breitengrade, aber es können auch beliebig viele eigene Orte konfiguriert werden.
Eine Beispielimplementierung, wie bspw. Nachrichten aus einem MQTT-Client (falls jemand OwnTracks nutzt) verarbeitet werden können, werde ich zeitnah zur Verfügung stellen.
<u>Links</u>
https://www.npmjs.com/package/iobroker.places
https://github.com/BasGo/ioBroker.places
Ansonsten freue ich mich natürlich über Rückmeldungen in jeglicher Form (gerne auch Fehler, die ich bislang nicht festgestellt habe) entweder hier oder als Issue bei GitHub 8-)
-
Moin,
erklär mal nem halbwegs alten Mann wie mir der bisher wegen der von dir erwähnten sachen kein Geofency etc. verwendet, wie dein Adapter denn von mir/ meinem Mobile erfährt wo ich bin.
Das habe ich irgendwie noch nicht verstanden.
Danke und Gruß
-
erklär mal nem halbwegs alten Mann wie mir der bisher wegen der von dir erwähnten sachen kein Geofency etc. verwendet, wie dein Adapter denn von mir/ meinem Mobile erfährt wo ich bin. `
So wie ich das verstanden hab musst du bzw. irgendein Adapter diese Information liefern. Macht also erst richtig sinn wenn die anderen Adapter die Funktionalität von places nutzt statt der eigenen.Theoretisch könntest du auch per Telegram deinen Standort senden ihn mit einem Skript abfangen und an places weiter geben. Den rest macht dann places.
-
OK und Danke für deinen Erklärungsversuch!
Aber wenn ich per Telegramm eine Standort Nachricht schicken muss… kann ich doch auch gleich eine Nachricht senden und damit eine Aktion starten...
Wo ist der Unterschied bzw. Vor/Nachteil ?
Bei Geofency ist mir das halbwegs klar das es automatisch passiert sobald mein Mobile sich in einem bestimmten Bereich aufhält, aber so ... :?:
-
Aber wenn ich per Telegramm eine Standort Nachricht schicken muss… `
Musst du nicht, wäre aber eine mögliche Quelle.Places holt sich die Standort Daten nicht selbst, sondern verarbeitet sie nur. Woher die Daten dabei kommen spielt keine Rolle.
Jetzt ist es ja wohl so das jede Lösung (Adapter/Skript) das selbst macht und Unterschiedliche Möglichkeiten/Ergebnisse liefert.
Genau das soll places ändern.
-
OK.
Dann habe ich es jetzt so langsam verstanden.
Telegramm sollte auch nur ein Beispiel sein.
-
@Jey Cee:Places holt sich die Standort Daten nicht selbst, sondern verarbeitet sie nur. Woher die Daten dabei kommen spielt keine Rolle.
Jetzt ist es ja wohl so das jede Lösung (Adapter/Skript) das selbst macht und Unterschiedliche Möglichkeiten/Ergebnisse liefert.
Genau das soll places ändern. `
Genau das war mein Hintergedanke.
Vielleicht ein wenig zur Historie:
Wir hatten hier zuhause eine Zeit lang ausschließlich Apple-Geräte und da war GeoFency eine sehr gute und auch sehr zuverlässige Lösung, auch wenn das Starten eines eigenen HTTP-Servers (was der Adapter ja ermöglicht) mit großem Risiko in Sachen Sicherheit, sofern man nicht über die ioBroker-Cloud geht, einher gegangen ist. Irgendwann haben wir dann hier auch Android umgestellt und mir fehlte irgendwas und wenn es nur die zuverlässige Benachrichtigung für meine Frau ist, dass ich an Ort X/Y angekommen bin (ich bin viel gereist). Der erste Schritt war für mich, nach einer alternativen Lösung zu suchen und da schien mir die App EgiGeoZone eine brauchbare Alternative zu sein. Weil es keinen Adapter gab, habe ich einen auf Basis von GeoFency geschrieben und dabei natürlich auch die Umsetzung der Zuhause/Nicht-Zuhause-Analyse mitgenommen. Nun bin ich allerdings mit Leib und Seele Softwareentwickler und da war mir die Redundanz, dass beide Adapter etwas Gleiches umsetzen und unabhängig voneinander gepflegt werden (müssen), ein wenig ein Dorn im Auge.
Vorteil des Adapters soll nun sein, dass er genau die eine Aufgabe hat, ihm übermittelte Positionsangaben zu analysieren und auf Basis der Konfiguration festzustellen, ob eine Person zuhause ist, sich in Timbuktu oder an irgendeinem anderen konfigurierten Ort befindet. Nutzen lässt sich der Adapter momentan wie folgt:
<u>Telegram</u>
Der Benutzer schickt seine Position per Telegram an ioBroker. Ein Skript könnt diese Nachricht aus dem entsprechenden Objekt verwenden und an ioBroker.places schicken. Das wäre ein manueller Weg.
<u>OwnTracks</u>
In ioBroker gibt es einen Adapter, der einen MQTT-Server zur Verfügung stellt. OwnTracks lässt sich entsprechend für die Verwendung von MQTT konfigurieren und man könnte - ebenfalls in einem Skript - passende MQTT-Nachrichten verwenen und an ioBroker.places schicken.
<u>GeoFency</u>
Die App arbeitet mit WebHooks, d.h. per Konfiguration lässt sich festlegen, dass die App Positionsangaben per HTTP-Post an einen Server schickt. Dies könnte u.a. die ioBroker Cloud (in ihrer Pro-Variante) sein und der weitere Weg wäre wie bei den beiden anderen Möglichkeiten: ein Skript greift den Request ab und leitet in an ioBroker.places weiter.
<u>Alternativen</u>
Ich weiß nun nicht mehr, ob sich GeoFency, OwnTracks und auch EgiGeoZone so konfigurieren lassen, dass sie HTTP-GET-Requests erzeugen können. Wenn ja, dann wäre hier eine Option, dass man auch die Free-Variante der ioBroker Cloud nutzen könnte.
Es wäre natürlich auch denkbar, dass man die einzelnen Adapter integriert: EgiGeoZone könnte so umgebaut werden, dass empfangene Requests direkt an ioBroker.places weitergeleitet werden, ähnliches gilt für OwnTracks und GeoFency. Und auch der andere Weg, dass man sich per ioBroker.places in die Requests der drei anderen Adapter hängt wäre möglich … allerdings wollte ich hier erst mal das allgemeine Feedback und die Resonanz abwarten Wenn ich der Einzige bin, der einen Nutzen aus dem Adapter ziehen kann, dann kann ich mir die weitere Arbeit auch sparen. Ich fühle demnach für den Moment nur ein wenig vor
-
Hi,
Bei dem Zitat stimmt was nicht.
Das was du mir das ausersehen in den Mund gelegt hast… kommt von Jey Cee.
Danke für die ausführliche Erklärung.
-
Das was du mir das ausersehen in den Mund gelegt hast… kommt von Jey Cee. `
Habe ich korrigiert, sorry … richtiges Zitieren muss ich wohl noch lernen
Hier mal als Beispiel eine einfache Einrichtung für OwnTracks per ioBroker-Pro-Cloud und ioBroker.places:
<u>1. Konfiguration cloud-Adapter</u>
Unter White list für Services einen Wert owntracks hinzufügen. Bei mir gibt es Probleme, dies per Konfigurationsseite zu machen, d.h. eventuell muss diese Änderung über die System-Objekte erfolgen (ggf. Bug in der Konfiguration des Cloud-Adapters?).
<u>2. Konfiguration OwnTracks</u>
Unter Einstellungen den Modus auf HTTP Privat umstellen, als Host die folgende URL hinterlegen:````
https://iobroker.pro/service/custom_geofency/<user-app-key>/</user-app-key>****<u>3\. Skript erstellen</u>**** Ein kurzes Skript erstellen, welches den durch die Cloud zugestellten Request aus dem Objekt ****cloud.0.services.custom_owntracks**** nimmt und ihn an ****iobroker.places**** weiterleitet:
on({id: "cloud.0.services.custom_owntracks", change: "ne"}, function (obj) {
var data = JSON.parse(obj.newState.val);
if (data._type === "location") {
sendTo('places.0', {
user: data.tid,
latitude: data.lat,
longitude: data.lon,
timestamp: data.tst
}, function (res) { log('places analyzed position as: ' + JSON.stringify(res)); });
}
});Und schon hätte man die per OwnTracks gesendeten Positionsangaben in ioBroker, wobei hier noch etwas Nacharbeit notwendig ist, weil OwnTracks als ****tid**** nur (konfigurierbare) Initialen und keine richtigen Namen verwendet.
-
Und schon hätte man die per OwnTracks gesendeten Positionsangaben in ioBroker, wobei hier noch etwas Nacharbeit notwendig ist, weil OwnTracks als tid nur (konfigurierbare) Initialen und keine richtigen Namen verwendet. `
Zumindest dieses Issue hat sich nun erledigt, der Adapter wurde in den letzten Stunden deutlich erweitert:
-
Nachrichten mit einem älteren Zeitstempel überschreiben keine aktuelleren Werte
-
Es gibt einen Button um die Anwesenheiten "zuhause" zurücksetzen zu können
-
Für Benutzernamen gibt es ein Mapping, d.h. ein konfigurierbares Ersetzen
-
Benutzerdefinierte Orte können bequem per Google Maps konfiguriert werden (Koordination per Marker, Radius per Kreis)
-
Koordinaten werden, sofern ein API-Key für Google Maps hinterlegt wurde, um eine richtige Adresse und eine Höhenangabe ergänzt
Die genaue Dokumentation erfolgt in https://github.com/BasGo/ioBroker.places, dort sind auch Beispiele für die folgenden Anwendungsfälle erläutert:
-
OwnTracks > ioBroker Pro Cloud > Places
-
Telegram > Places
Wenn es sonst noch Wünsche gibt, dann einfach immer raus damit, ansonsten gilt:
Feedback welcome … and needed! 8-)
-
-
Was mach Ich denn Falsch ?
681_places.png -
Ich weiß nun nicht mehr, ob sich GeoFency, OwnTracks und auch EgiGeoZone so konfigurieren lassen, dass sie HTTP-GET-Requests erzeugen können. Wenn ja, dann wäre hier eine Option, dass man auch die Free-Variante der ioBroker Cloud nutzen könnte. `
Kleine Korrektur hier!
geofency und Daten per POST geht auch mit der Free Cloud!
Nur für HTTP-GET brauchst Du die Pro-Cloud
-
Was mach Ich denn Falsch ? `
Hui, der Adapter setzt Admin in Version 3.x.x voraus. Aufgrund der kleiner werdenden Verbreitung von 2.x.x habe ich diesen komplett außen vor gelassen
-
Kleine Korrektur hier!
geofency und Daten per POST geht auch mit der Free Cloud!
Nur für HTTP-GET brauchst Du die Pro-Cloud `
Umso besser bzw. umso einfacher … wobei ich jedem, nicht zuletzt zur Unterstützung des Projekts, die Pro-Variante ans Herz legen würde 8-)
Hätte jemand vllt. einen Request von GeoFency zur Hand? Leider habe ich keine Apfel-Geräte (mehr) im Zugriff ... und würde dennoch gerne die Verarbeitung mit einbauen :?:
-
Frage zu OwnTracks:
Kann ich nicht in OwnTracks (Android Händi) den Modus auf MQTT-Privat stellen und das Händi per VPN nach Hause verbinden?
Das würde doch das Script und die HTTP-Abfrage überflüssig machen. Oder verstehe ich da was falsch?
Kann es im Augenblick selbst nicht testen, deshalb meine Frage.
Viele Grüsse
Stefan
-
Frage zu OwnTracks:
Kann ich nicht in OwnTracks (Android Händi) den Modus auf MQTT-Privat stellen und das Händi per VPN nach Hause verbinden?
Das würde doch das Script und die HTTP-Abfrage überflüssig machen. Oder verstehe ich da was falsch? `
Hi Stefan,
selbstverständlich kannst du das per MQTT und per VPN machen, überhaupt keine Frage, allerdings will nicht jeder einen MQTT-Server (Standalone oder per ioBroker-Adapter) laufen haben und/oder immer auf einen VPN-Tunnel angewiesen sein. Genau für solche Fälle ist der einfachste Weg, den Request per HTTP-POST einfach per Cloud in ihren ioBroker zu leiten - immerhin braucht man dafür nur eine URL und eine minimale Konfiguration im Cloud-Adapter - und dort verarbeiten zu lassen. Ich hatte kurzzeitig auch mal einen MQTT-Server - erst als Adapter, später per Mosquitto - laufen bis ich festgestellt hatte, dass ich den einzig und allein für OwnTracks genutzt hatte … das fand ich dann doch ein wenig oversized :? :lol:
Viele Grüße
Bastian
-
Hi,
kann ich auch irgendwie die Daten aus der ioBroker.vis app auslesen?
Diese werden ja unter vis.0.<gerätename>.coords.XXX abgelegt.
Wenn ich das als Gerät direkt einbinden kann wäre es ziemlich easy mit dem Adapter die Anwenheit zu regeln.
Grüße
Kevin</gerätename>
-
Prinzipiell wäre das direkt mit einem kleinen Script möglich, allerdings sehe ich gerade, dass die App bei mir jede Sekunde (!) eine Position übermittelt und diese sich auch immer (minimal) ändert. Das würde bedeuten, dass jede Sekunde eine Analyse erfolgen würde, was mit ziemlicher Sicherheit eine nicht unerhebliche Last verursachen würde.
Ich schaue mal, ob ich auf die Schnelle eine Script gebastelt kriege
-
Ich muss gestehen, dass ich den Adapter noch nicht angeschaut habe. Aber fragen darf ich doch
Ob es mit dem Adapter möglich ist mehrere Punkte zu monitiren? Z.B. GPS von mir und noch von jemandem?
Ob es möglich nicht nur Hause, sondern auch z.B Schule oder Arbeit beobachten?
Kann Adapter auch aus einem Datenpunkt gefüttert werden "7.5567,49.7845356" oder "7.5567;49.7845356" ?
Danke für interessanten Adapter.
-
Ich muss gestehen, dass ich den Adapter noch nicht angeschaut habe. Aber fragen darf ich doch `
Aber sicher, immer raus damit
Ob es mit dem Adapter möglich ist mehrere Punkte zu monitiren? Z.B. GPS von mir und noch von jemandem?
Ob es möglich nicht nur Hause, sondern auch z.B Schule oder Arbeit beobachten? `
Ja und ja: Du kannst beliebig viele Benutzer und beliebig viele Orte monitoren, genau das war ja der Grund, weshalb ich den Adapter gebaut habe. Das Grundprinzip ist, dass du per Konfiguration beliebig viele Orte (z.B. Schule, Arbeit etc) mit einem jeweiligen Radius festlegen kannst. Wenn nun eine Message mit Username und Positionsdaten empfangen wird, dann schaut der Adapter, ob sich die Person in einem der konfigurierten Orte befindet und trägt das in das entsprechende Objekt ein. EIne Sondersituation ist "zuhause": hier nehme ich die Position, die im Admin festgelegt wurde und hier erfolgt auch eine Auswertung (analog zu GeoFency), welche Personen zuhause sind.
Kann Adapter auch aus einem Datenpunkt gefüttert werden "7.5567,49.7845356" oder "7.5567;49.7845356" ? `
Sollte mit einer gewissen Anpassung auch möglich sein, allerdings würde dann die Info über den Benutzer fehlen (d.h. wer ist an dieser Position?)