NEWS
[Neuer Adapter] ioBroker.places
-
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.
-
Hey Leute,
Fehlermeldungen beim sharedlocations-Adapter treten auf wenn keine Fences angelegt sind (blöder Fehler, ist bei mir bereits gefixt und pushe das heute oder morgen aufs repo).
Ich finde den places-adapter auch klasse, ich versuche zeitnah eine Schnittstelle bereitzustellen, leider muss ich vorher noch einige DInge erledigen:
1. Bugfixes (sollte erledigt sein)
2. Unterstützung von Admin3 (das habe ich mir bisher noch gar nicht angeschaut und ich würde dann sofort alle meine Adapter umstellen)
Beste Grüße
Christian
-
Hallo Leute,
es gibt Neuigkeiten. Der iobroker.google-sharedlocations-Adapter kann die ermittelten Standorte an eine Instanz des iobroker.places-Adapters schicken. Kann das jemand testen? Der Adapter kann von hier https://github.com/t4qjXH8N/ioBroker.go … es_support bezogen werden.
-
Hi Christian,
sehr geil, danke für die Integration, werde es heute Abend direkt mal bei mir testen.
Eine Frage hätte ich zu meinem Verständnis: ich hatte letzte Woche mal erste Tests mit deinem Adapter gemacht und mir dabei die Response von Google per Debug ausgeben lassen … darin habe ich aber keine Usernamen gefunden. Woher bekommst du die bzw. was muss ich bei mir noch tun, damit ich auch einen "richtigen" Namen für Positionsangaben bekomme?
Viele Grüße
Bastian
-
Hi,
Die aktuelle Verison scheint bis dato durch zu rennen. Was jetzt noch cool wäre, ist eine Unterstützung für die 2-Faktor-Authentifizierung und irgend eine Möglichkeit die Sicherheitswahnungsmails von google beim login abzustellen.
Ansonsten top!
Gibts die Möglichkeit aktuelle Nutzer beim erstellen des Fences mit auf der Karte einzublenden?
Ist es machbar das die schon Angelegten Benutzer mit in der Liste erscheinen?
Läuft auch schon die ganze Zeit ohne Probleme durch!
Geil was ihr hier so reisst !
Grüße
Kevin
-
Die aktuelle Verison scheint bis dato durch zu rennen. Was jetzt noch cool wäre, ist eine Unterstützung für die 2-Faktor-Authentifizierung und irgend eine Möglichkeit die Sicherheitswahnungsmails von google beim login abzustellen. `
Oh ja, das wäre nett, allerdings habe ich hier wenig Hoffnung: der Login, der im Adapter verwendet wird, ist normalerweise für Benutzer gedacht, d.h. es ist eigentlich richtig, dass Google hier warnt/informiert. Der schönste Weg wäre, wenn Google hier (endlich mal) eine API anbieten würde … aber damit würde ich nicht in den nächsten Wochen rechnen, leider
Gibts die Möglichkeit aktuelle Nutzer beim erstellen des Fences mit auf der Karte einzublenden? `
Kann ich mir gerne mal anschauen. Also einfach als Marker in der Map, in der man die Fences ziehen kann? Das sollte eigentlich schnell machbar sein … vielleicht heute im Laufe des Abends, da kündigt sich bei mir ein wenig "Freizeit" an
Ist es machbar das die schon Angelegten Benutzer mit in der Liste erscheinen? `
Welche Liste meinst du? Die mit den Benutzermappings? Eigentlich sollte diese Liste nur Mappings - also wenn Benutzer mit Name XXX reinkommt, dann ändere ihn auf YYY - enthalten und keine Liste der Benutzer, die schon erfasst wurden, dafür gibt es ja die Objekte. Dennoch bin ich bei dir, dass es u.U. einfacher sein könnte, wenn man bereits bekannte Namen sieht und die ggf. direkt ersetzen könnte. Ich mache mir mal Gedanken.
-
Hi,
ich hab leider im places Adapter keine Möglichkeit gefunden eine eigene URL zyklisch abzufragen.
Ich benutze aktuell meinen eigenen Server um diesem mitzuteilen ob ich zu Hause bin oder nicht.
aktuell sendet das Handy(mit Tasker, Egigeozone) halt true oder false an den Server und im Server gibt es unter einer bestimmten url eben dies zurück
bis vor kurzem hab ich das von der CCU2 gepollt im minutentakt und in eine sysvar geschrieben, das polling habe ich mittlerweile zum iobroker verlagert.
Ich hab ungern Ports nach aussen offen daher löse ich das so und funktionier ganz passable,
Mit Tasker wär es ja durchaus möglich das formal lat,long, (usr) an den server zu senden oder im server je nach url den user hinzuzufügen.
Könnte man das im Adapter mit einer custom URL + Polling Intervall hinzufügen?
Im Server Log sieht das aktuell dann so aus:
06.05.2018 11:32 ; false
06.05.2018 11:57 ; true
06.05.2018 13:09 ; false
06.05.2018 17:03 ; true
in der abfrage URL werte ich lediglich da true oder false aus, da ich jede Minute abfrage ist das leidlich genau(je nachdem wann das Handy sendet).
hier kommt es je nach Tool zu ca. 10 Minuten Abweichung bei der Abwesenheit. Trq64 hat auch super funktionier bis dann Android 8 kam, da sind dann die nächtlichen Aussetzer zu häufig geworden-> Stromsparmodi.
Ich hab leider noch nichts gefunden was genauer die Abwesenheit tracked ohne zutun des Users, einen extra Raspy zum BT tracken mag ich nicht aufstellen, (->Thema G-tac Schlüsselanhänger).
ein iBeacon werte ich schon zusätzlich aus um die Geschwindigkeit zu erhöhen, dieses wird aber ebenfalls vom Handy aus getracked.
Oli
-
Das Polling einer externen URL würde ich persönlich eher mit einem kurzen Script implementieren und nicht direkt im Adapter, weil …
Du hast für dich einen Weg mit der externen URL und die ließe sich bestimmt mit wenig Aufwand einbauen. Dann aber kommt der Nächste, der vielleicht zwei URLs abfragen will und/oder komplett andere Werte erhält und diese natürlich auch verarbeiten will. Auch das ließe sich dann natürlich einbauen.
Jetzt kommt das "aber": die Komplexität würde immer mehr steigen und streng genommen war genau diese Komplexität der Grund, einen "einfachen" Adapter zu bauen, der sich lediglich mit der Analyse von GPS-Positionen auseinandersetzt und keine Abhängigkeit von irgendwelchen anderen Dingen hat und auch keine Server-Funktionalitäten bereitstellt ... keep it simple Für mich liegt die gedankliche Grenze immer in dem, was innerhalb des ioBroker-Kosmos "bekannt" ist, d.h. in Strukturen eines anderen Adapters oder auch in Datenpunkten.
Nun zu deiner Problematik:
Wenn du von deinem Server per Request Daten (Name, Zeit, Position) bekommen kannst (z.B. ein Aufruf einer URL liefert ein JSON zurück), so ist die Weiterleitung in den places-Adapter mit einem kurzen Script (5 bis 6 Zeilen) gemacht. Vorteile: du hast jederzeit die Kontrolle, der Adapter bleibt weiterhin schlank und fokussiert und jeder andere kann eine für seine Situation passende Lösung bauen
-
Hi,
ja klar da hast du recht, ich hab einfach wieder zu kompliziert gedacht , im prinzip mach ich das ja jetzt genau so nur das ich halt nur true oder false abfrage und die Auswertung das Handy erledigt.
Ich hab mein Script jetzt mal auf Owntracks umgebaut und integriert, passt so weit und läuft.
Eine Frage hab ich noch, wahrscheinlich ist das so einfach das ich einfach wieder zu kompliziert denk
gibt der Adapter auch ein einfaches true /false zurück oder muss ich den place String auswerten ?
Oli
-
Als Antwort auf ein sendTo bekommst du ein JSON zurück, das du mit
var obj = JSON.parse(...)
in ein Objekt bekommst. Darin gibt es eine Eigenschaft "atHome":
{ "user": "Name of person", // name of person (may have been replaced by user mapping) "latitude": 50.9576191, "longitude": 6.8272409, "timestamp": 1520932471000, "date": "2018-03-13 10:14:31", // date extracted from timestamp "atHome": false, // true if inside the configured radius around ioBroker "homeDistance": 104898, // distance in meters between position and ioBroker "name": "", // name of place found within the configuration "address": "", // readable address (if geocoding is active) "elevation": "", // elevation in meters (if geocoding is active) }
Das sollte das sein was du benötigst, oder?