Geofancy für tracking verwenden

Begonnen von Sidey, 06 Januar 2018, 23:21:08

Vorheriges Thema - Nächstes Thema

Sidey

Hallo Loredo,

ich habe das Geofancy device für Tracking nutzen wollen.
Dazu habe ich in der App EgiGeoZone dem Serverprofil eine Tracking URL zusammengebaut.

Dabei bin ich auf Probleme gestoßen:

1. Ohne Angabe einer Zone und der Übermittlung ob man sich in der Zone befindet oder nicht, wertet das Geofancy Modul die Daten nicht aus. Ich habe mich damit nun nicht weiter Beschäftigt, da ich in meinem Fall aktuell nur feststellen wollte, wie weit ich von einer bestimmten Zone entfernt bin.

2. Ich habe mir eine URL zusammengebaut und als Status sozusagen "leaving" mit übergeben. Dabei habe ich festgestellt, dass dein Modul die Längen- und Breitengerade nicht in die Reading speichert:


            readingsBulkUpdate( $hash, "currLocLat_" . $deviceAlias,  "-" );
            readingsBulkUpdate( $hash, "currLocLong_" . $deviceAlias, "-" );


Ein "-" in die Reading zu schreiben, macht für mich wenig Sinn, also habe ich es mal auskommentiert.
Was mir an diesem Code Abschnitt auch nicht so ganz klar ist, dort wird in einer Schleife mehrer curr und last Werte generiert.
Ich konnte aber nicht finden, dass die Variable currReading mit readingsBulkUpdate gesetzt wird.


            # backup last known location if not "underway"
            $currReading = "currLoc_" . $deviceAlias;
            my $currVal = ReadingsVal( $name, $currReading, undef );
            if ( $currVal && $currVal ne "underway" ) {
                foreach ( 'Loc', 'LocLat', 'LocLong', 'LocAddr' ) {
                    $currReading = "curr" . $_ . "_" . $deviceAlias;
                    $lastReading = "last" . $_ . "_" . $deviceAlias;
                    readingsBulkUpdate( $hash, $lastReading, $currVal );
                }
                $currReading = "currLocTime_" . $deviceAlias;
                readingsBulkUpdate( $hash, "lastLocArr_" . $deviceAlias,
                    $currVal );
                readingsBulkUpdate( $hash, "lastLocDep_" . $deviceAlias,
                    $time );
            }
            readingsBulkUpdate( $hash, $deviceAlias, "left " . $id );
            readingsBulkUpdate( $hash, "currLoc_" . $deviceAlias, "underway" );
            #readingsBulkUpdate( $hash, "currLocLat_" . $deviceAlias,  "-" );
            #readingsBulkUpdate( $hash, "currLocLong_" . $deviceAlias, "-" );
            readingsBulkUpdate( $hash, "currLocAddr_" . $deviceAlias, "-" );
            readingsBulkUpdate( $hash, "currLocTime_" . $deviceAlias, $time );



Ich habe mir die Readings dann halt einfach mal mit den aktuellen Werten gesetzt (quick & dirty)
           
            readingsBulkUpdate( $hash, "currLocLat_" . $deviceAlias,  $lat );
            readingsBulkUpdate( $hash, "currLocLong_" . $deviceAlias, $long );


Bevor ich darüber nachdenke, was deine Absicht war um einen Patch zu schreiben, frage ich nach.

1. Gibt es einen guten Grund ein "-" in das Reading zu schreiben?
2. Ist die Foreach Schleife so notwendig oder reicht das Setzen von lastLoc mit dem Wert von $currloc

Abseits des Setzens von Längen und Breitengrad, bin ich selbst noch nicht sicher ob es eine gute Idee ist Tracking über das Modul zu machen. Zumindest solange ich eine Zone mit überbeben muss, bringt das ein paar Nachteile mit sich.
Wie siehst Du das denn? Lohnt es sich, das in das Modul zu erweitern?


Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Jamo

Hi,
ich würde mich da auch nochmal dranhängen, ich bin auch daran interessiert das das Modul zusätzlich die Readings lastLocAddr, lastLocLat und lastLocLong mit Angaben der Location bei Departure einer zone erzeugt (also zusätzlich zu den Readings currLocAddr, currLocLat und currLocLong bei Arrival). Die neue release der iOS Geofency App unterstützt das.

Hintergrund ist das ich gerne die gegenwärtige Position beim 'verlassen' einer Zone auswerten würde. Ich habe ein iBeacon im Auto. Wenn man wissen will, wo man die Kinder das Auto geparkt haben, benötigt man diese Angaben, wenn man den kontakt zum iBeacon verliert (also beim verlassen des Autos = exit/departure vom iBeacon).

Die Version 5.1 der iOS Geofency App unterstützt das jetzt auch und ermittelt die Daten.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Sidey

Hi Inoma,

Wäre es nicht besser die aktuelle Position in die Attribute mit curr_.... Zu schreiben und die letzte Position die einer Location zu geordnet ist in last_.... ?


Gesendet von meinem XT1650 mit Tapatalk

Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Jamo

Jetzt weiss ich was Du meinst, mit deinem Vorschlag hätte man wirklich ein Position 'tracking'.

Soweit ich weiss, wird das aber von den iPhone/Android Apps 'Geofency' und 'Geofancy' nicht unterstützt, die übertragen eine Position nur genau dann wenn man eine Zone betritt oder eben verlässt. Aber auch nur genau in dem Moment. Die Zone kann dann
1) ein 'Fence' um einen Mittelpunkt sein, dann wird genau die Position des Mittelpunktes übertragen (auch wenn die Zone selbst 10 km um den Mittelpunkt ist), also eben NICHT die aktuelle Position,
2) ein iBeacon, dann wird die aktuelle Position mit lat/long übertragen im Moment wo das iBeacon erkannt oder verlassen wird.

1) und 2) kann man in FHEM aber nicht unterscheiden, deswegen war mein Vorschlag einfach ein neues Reading beim Verlassen einer Zone anzulegen.

Wenn man ein 'tracking' realisieren wollte, müsste man zum Beispiel ein iBeacon immer an- und abschalten, dann hätte man immer die aktuelle Position auch für curr_...

Das ist mein Verständnis soweit.

Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Sidey

Hi,

Ich kann das aktuell nur für Android App sagen.

Dort habe ich Tracking beim Verlassen einer Zone realisiert.
Die Tracking URL wird dann periodisch (bei mir alle 22 Minuten) aufgerufen.
Über die URL übergebe ich die Positionsdaten.

Ich nehme an, unter IOS geht das auch.

Grüße Sidey

Gesendet von meinem XT1650 mit Tapatalk

Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

Jamo

Mit folgendem Patch/insertion funktioniert es wie ich es mir vorstelle. Ich habe einfach unter dem "underway" 4 neue Readings generiert.
495,499d495
<             readingsBulkUpdate( $hash, "lastLoc_" . $deviceAlias, "underway" )                                      ;
<             readingsBulkUpdate( $hash, "lastLocLat_" . $deviceAlias,  "$lat" )                                      ;
<             readingsBulkUpdate( $hash, "lastLocLong_" . $deviceAlias, "$long"                                       );
<             readingsBulkUpdate( $hash, "lastLocAddr_" . $deviceAlias, "$addres                                      s" );
<             readingsBulkUpdate( $hash, "lastLocTime_" . $deviceAlias, $time );
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

oli82

Zitat von: inoma am 10 Januar 2018, 09:06:12
Mit folgendem Patch/insertion funktioniert es wie ich es mir vorstelle. Ich habe einfach unter dem "underway" 4 neue Readings generiert.

Interessant!
Das klappt mit der IOS App out of the box?

Jamo

Ja,
im Modul /opt/fhem/FHEM/98_GEOFANCY.pm unter folgenderZeilereadingsBulkUpdate( $hash, "lastLoc_" . $deviceAlias, "underway" );folgende 4 Zeilen einfügen. Dann funktioniert das mit der iOS "Geofency" App (nicht 'Geofancy') out-of-the-box. readingsBulkUpdate( $hash, "lastLocLat_" . $deviceAlias,  "$lat");
readingsBulkUpdate( $hash, "lastLocLong_" . $deviceAlias, "$long");
readingsBulkUpdate( $hash, "lastLocAddr_" . $deviceAlias, "$address");
readingsBulkUpdate( $hash, "lastLocTime_" . $deviceAlias, $time );

Beim Verlassen eines unter Geofency eingerichteten iBeacons, wird die aktuelle Position mit lat/long und Adresse (Strasse, Hausnummer, Ort) übertragen im Moment wo das iBeacon verlassen wird.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack