NEWS
[Neuer Adapter] ioBroker.places
-
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?
-
Hi,
nicht wirklich,
ich dachte er schreibt das gleich mit in einen Datenpunkt,
aber ist nicht weiter schlimm den kann ich mir ja selbst anlegen und jeweils befüllen..
nach einem iobroker restart hat er auch die 4 Default Werte befüllt das reicht mir im Prinzip ja auch schon für "alle Lampen" aus oder "achtung fenster noch offen" wenn keiner mehr da ist
(places.0.anybodyAtHome usw… )
Passt so weit , Danke für die Hilfe, jetzt muss ich nur noch das passendste Programm auf den Androiden herausfinden welches am
Schnellsten den Punkt setzt.
Und im Script noch einbauen das er auch nur schreibt wenn sich die Koordinaten auch geändert hab, Kosmetik also
PS: ich bau das mit Blockly, so weit ich informiert bin gibts da kein Jason parse Funktion
Oli
-
ich dachte er schreibt das gleich mit in einen Datenpunkt, `
Das passiert natürlich auch, aber die Response enthält auch das Ergebnis, ob sich die per sendTo übergebene Position atHome befindet.
Passt so weit , Danke für die Hilfe, jetzt muss ich nur noch das passendste Programm auf den Androiden herausfinden welches am Schnellsten den Punkt setzt. Und im Script noch einbauen das er auch nur schreibt wenn sich die Koordinaten auch geändert hab, Kosmetik also `
Wenn du ein gutes Programm hast: immer her mot der Info. Ich muss zugeben, dass ich bei Android etwas enttäuscht bin. Damals bei Apple gab es noch zumindest per iCloud die Chance, halbwegs aktuell ein Phone tracken zu können. Bei Android vermisse ich bis jett eine stabile Lösung, die mir zuverlässig spätestens alle x Minuten oder y Meter Abstand eine Position meldet. OwnTracks klappt, zickt aber manchmal rum, EgiGeoFence das gleiche und Tasker habe ich noch nicht wirklich durchblickt
Passt so weit , Danke für die Hilfe, jetzt muss ich nur noch das passendste Programm auf den Androiden herausfinden welches am Schnellsten den Punkt setzt. Und im Script noch einbauen das er auch nur schreibt wenn sich die Koordinaten auch geändert hab, Kosmetik also `
Sorry, bei Blockly bin ich leider raus, schreibe selbst nur JavaScript. Aber Blockly kann kein JSON parsen? Irgendeinen (anderen) Weg wird es aber wohl geben … hoffe ich.
-
Hallo,
eigentlich finde ich ja die Abwesenheitserkennung mit Hilfe der Google-Koordinaten, also mit google-sharedlocations, ideal, da man dann auf Apps wie egigeozone, geofence, owntrack etc ganz verzichten könnte. Aber leider habe ich bisher noch nicht den richtigen Zugang dazu gefunden und habe keine Ahnung, wie ich den Adapter einrichten soll. Vielleicht kann mir ja hier jemand helfen.
Google-sharedlocations ist installiert, Benutzername und Passwort sind eingegeben, das Objekt 'google-sharedlocations.0.info.connection' hat den Wert true. Und nun?
Muss ich in Google-Maps noch irgendwas einstellen? In der Beschreibung des Adapters heißt es
> It can not retrieve the location of the user that is used to access google.
Bedeutet das, dass ich meine eigenen Koordinaten gar nicht sehen kann und erst noch einen Nutzer einrichten muss, der mir seine Koordination frei gibt? Sorry, aber ich stehe ziemlich auf dem Schlauch. Vielleicht kann mir jemand auf die Sprünge helfen.
Gruß
Strizz
-
Hallo
Google-sharedlocations ist installiert, Benutzername und Passwort habe ich erstmal so gelassen .
Das Objekt 'google-sharedlocations.0.info.connection' hat den Wert true .
Wie komm ich nun weiter?
Gruß NetFritz
-
Hallo
Mal in der Adaoter index.htm geschaut und dort gesehen das von
google_username": "google_password": eingetragen werden muss.
Habe ich nachgeholt aber keine änderung.
In der Places Konfig ist der API-Schlüssel für Google Maps auch eingetragen.
Und nun, weis keiner einen Rat?
Gruß NetFritz
-
Könntest du die Instanz mal so konfigurieren, dass Debug-Meldungen ins Log geschrieben werden und uns darüber weitere Informationen zukommen lassen?
Der Google-Maps-Key ist prinzipiell unwichtig: er wird nur zur Darstellung der Google-Maps-Karte in der Konfiguration des places-Adapters verwendet. Viel wichtiger sind in deinem Fall aber die Zugangsdaten im google-sharedlocations-Adapter, deshalb: bitte diese Instanz im ioBroker unter Instanzen derart ändern, dass das Log-Level auf "Debug" steht, dann kurz später ins Log gucken und schauen, ob da Fehler kommen :?:
-
Hallo
Debug hatte ich schon heute Mittag eingeschaltet.
google-sharedlocations.0 2018-06-04 17:41:50.051 debug system.adapter.admin.0: logging true google-sharedlocations.0 2018-06-04 17:40:24.586 info Checking fences. google-sharedlocations.0 2018-06-04 17:40:24.585 debug Response: OK google-sharedlocations.0 2018-06-04 17:40:24.415 info Polling locations. google-sharedlocations.0 2018-06-04 17:30:24.547 info Checking fences. google-sharedlocations.0 2018-06-04 17:30:24.546 debug Response: OK google-sharedlocations.0 2018-06-04 17:30:24.404 info Polling locations. google-sharedlocations.0 2018-06-04 17:20:24.538 info Checking fences. google-sharedlocations.0 2018-06-04 17:20:24.537 debug Response: OK google-sharedlocations.0 2018-06-04 17:20:24.394 info Polling locations. google-sharedlocations.0 2018-06-04 17:10:24.537 info Checking fences. google-sharedlocations.0 2018-06-04 17:10:24.535 debug Response: OK google-sharedlocations.0 2018-06-04 17:10:24.382 info Polling locations.
Gruß NetFritz