NEWS
[Neuer Adapter] ioBroker.places
-
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?)
-
Hi zusammen,
das mit dem aktualisieren der App ist mir auch schon aufgefallen. Bei hoher Genauigkeit wird etwa jede Sekunde übertragen, bei geringer Genauigkeit etwa alle 10 sek. Leider gar nicht sobald die App minimiert ist (Android 8.1.0 Pixel 2XL).
Offtopic: Die app ignoriert auch "Erlaube Vernsterverschiebung =aus" bei Popups (iframes etc.), zudem ist irgendwie die "aria-describedby" labelung anders als via browser, wodurch eine Feinabstimmung über CSS schwer ist.
Jedoch weiss ich was die app generell krasses kann, deswegen TOP arbeit und danke für alles was du reißt!
Grüße
Kevin
-
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> `
Hier mal ein schneller Wurf ohne Anspruch auch Schönheit … läuft aber bei mir einwandfrei
`var placesInstance = "places.0"; var visInstance = "vis.0"; // add VIS app instances: the name will be taken as username (add mapping in places if necessary) var visUsers = ["app", "paul", "uschi"]; for(var i = 0; i < visUsers.length; i++) { var triggers = [visInstance + "."+ visUsers[i] +".coords.latitude", visInstance + "."+ visUsers[i] +".coords.longitude"]; on({id: triggers, change: "ne"}, function (obj) { var res = obj.id.split("."); var usr = res[2]; var lat = getState(visInstance + "."+ usr +".coords.latitude").val; var lng = getState(visInstance + "."+ usr +".coords.longitude").val; if (lat && lng) { sendTo(placesInstance, { user: usr, latitude: lat, longitude: lng, timestamp: obj.newState.ts }); } }); }`[/i]
-
Danke dir, werde ich gleich testen!
Ich gebe Rückmeldung.
Grüße
Kevin
-
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?) `
Ich denke, dass es auch sehr gefragt wird, wenn "places" auch im voll automatischen Modus laufen wird (ohne sendTo).Die Idee:
Man kann für jeden Anwender noch zwei IDs Longitide/latitude (oder eine ID nur Longitude aber die Werte werden komma getrennt) und dann befühlt Adapter die Variablen places.0.Bluefox.home=true, places.0.Bluefox.Arbeit=false und so weiter von selbst.
48_2018-04-13_13_45_06-iobroker.admin.png -
Zumindest für den Teil per OwnTracks und die Cloud läuft es ja nahezu vollautomatisch, da wird einmal konfiguriert und man ist durch.
Die Liste, die du in deinem Screenshot hast, dient nur den Ersetzen von Namen: bei OwnTracks nutze ich z.B. die zweistellige Tracker-ID (“bg“) und ersetze es durch “Bastian“: damit landet meine Position in einem Channel places.0.Bastian mit allen Infos über Latitude, Longitude, Home = true/false, Entfernung und Fahrzeit nach Hause etc.
Das sendTo wollte ich noch durch konfigurierbare Subscriptions (wie es für fie Cloud schon enthalten ist) für vis und auch MQTT erweitern. Dabei ist nur die allgemeine Frage: ist das eine Sache des Places-Adapters oder sollte ich die besagten Adapter erweitern, so dass sie ihre Infos an den Places-Adapter weiterleiten? (Grundsatzfrage)
-
> Das sendTo wollte ich noch durch konfigurierbare Subscriptions (wie es für fie Cloud schon enthalten ist) für vis und auch MQTT erweitern. Dabei ist nur die allgemeine Frage: ist das eine Sache des Places-Adapters oder sollte ich die besagten Adapter erweitern, so dass sie ihre Infos an den Places-Adapter weiterleiten? (Grundsatzfrage)
Ich würde das in Places Adapter implementieren.
-
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> `
Hier mal ein schneller Wurf ohne Anspruch auch Schönheit … läuft aber bei mir einwandfrei
`var placesInstance = "places.0"; var visInstance = "vis.0"; // add VIS app instances: the name will be taken as username (add mapping in places if necessary) var visUsers = ["app", "paul", "uschi"]; for(var i = 0; i < visUsers.length; i++) { var triggers = [visInstance + "."+ visUsers[i] +".coords.latitude", visInstance + "."+ visUsers[i] +".coords.longitude"]; on({id: triggers, change: "ne"}, function (obj) { var res = obj.id.split("."); var usr = res[2]; var lat = getState(visInstance + "."+ usr +".coords.latitude").val; var lng = getState(visInstance + "."+ usr +".coords.longitude").val; if (lat && lng) { sendTo(placesInstance, { user: usr, latitude: lat, longitude: lng, timestamp: obj.newState.ts }); } }); }` Das Skript geht soweit, leider funktioniert die Werteübergabe vom Handy absolut nicht. Weder ioBroker.vis app noch owntracks senden zuverlässig die Position. Beide nur bei geöffneter Anwendung oder im Falle von Owntracks extrem falsch. Kannst du mir ein Skript für egigeozone zusammenzaubern? Ich weiss nicht wie ich den Syntax auslesen kann. Grüße Kevin[/i] ``` `
-
Kannst du mir ein Skript für egigeozone zusammenzaubern?
Ich weiss nicht wie ich den Syntax auslesen kann. `
Mal wieder auf die Schnelle:
var placesInstance = "places.0"; var cloudServiceInstance = "cloud.0.services.custom_egigeofence"; on({id: cloudServiceInstance, change: 'any'}, function (obj) { if (obj.newState.val.length > 0) { var search = obj.newState.val.substring(1); var tmp = JSON.parse('{"' + search.replace(/\//g, '","').replace(/=/g,'":"') + '"}', function(key, value) { return key===""?value:decodeURIComponent(value); }); sendTo(placesInstance, { user: tmp.device, latitude: tmp.latitude, longitude: tmp.longitude, timestamp: obj.newState.ts }, function (res) { log('places analyzed telegram position as: ' + JSON.stringify(res)); }); } });
Problem dabei ist, dass EgiGeoFence (scheinbar) nur eine ID schickt und keinen "richtigen" Benutzernamen. Das bedeutet, du müsstest im Places-Adapter ein Mapping von der ID auf den gewünschten Benutzer konfigurieren, dann sollte es gehen.
-
dankesehr,
da ich mittlerweile feststellen musste das egigeozone auch nicht ordnungsgemäß sendet und auch auf eigentlich unterstützten Geräten nicht zu installieren ist, fällt das für mich auch flach.
Ich habe was sehr interessantes gefunden:
viewtopic.php?p=144076#p144076
dazu habe ich dein skript angepasst (sicherlich absolut nicht schön, da ich gar keinen Plan habe)
`var placesInstance = "places.0"; var gslInstance = "google-sharedlocations.0.user"; // add google-sharedlocations.0 app instances: the name will be taken as username (add mapping in places if necessary) var gslUsers = ["XXXXXUserkennungXXXX"]; for(var i = 0; i < gslUsers.length; i++) { var triggers = [gslInstance + "."+ gslUsers[i] +".lat", gslInstance + "."+ gslUsers[i] +".long"]; on({id: triggers, change: "ne"}, function (obj) { var res = obj.id.split("."); var usr = res[3]; var lat = getState(gslInstance + "."+ usr +".lat").val; var lng = getState(gslInstance + "."+ usr +".long").val; if (lat && lng) { sendTo(placesInstance, { user: usr, latitude: lat, longitude: lng, timestamp: obj.newState.ts }); } }); }` es wäre denke ich der einfachste Geo-Adapter überhaupt wenn .places die funktion von .google-sharedlocations implementieren könnte, bzw du mit dem entwickler vielleicht mal schnackst ;-)[/i]
-
Ich habe mir den Adapter vorhin mal angeschaut und es sieht nicht so leicht aus, hier eine GPS-Position abgreifen zu können.
Auf den ersten Blick sieht es so aus, als wenn der Adapter selbst prüft, ob sich ein Benutzer innerhalb eines definierten Orts befindet (also das, was Places ja macht) und erst wenn hier was gefunden wird, wird die Position als Datenpunkt geschrieben. Schöner wäre es, wenn ermittelte Positionen in Form einfacher GPS-Koordinaten pro Benutzer gespeichert würden … dann könnte ich mich dort einhaken
-
komisch ich habe einen Datenpunkt mit Koordinaten erhalten
den greife ich ab.