GPS-Daten in FHEM einlesen - gelöst

Begonnen von fstefan1960, 22 August 2017, 18:08:45

Vorheriges Thema - Nächstes Thema

fstefan1960

Guten Tag,

auch wenn das jetzt erst mal sonderbar klingen mag in einem Umfeld, das sich mit Hausautomatisierung befasst: Kann man das am Raspberry Pi angeschlossene GPS-Modul so auslesen, dass die Koordinaten in FHEM zur Verfügung stehen?
Nein, mein Haus bewegt sich nicht, aber mein Auto, in dem ein Pi auch nette Dinge für mich erledigt.

In diesem Kontext auch den Standort in FHEM zur Verfügung zu haben, wäre klasse.

Vielen Dank für jeden Tip. Suchen hat mir bisher nicht geholfen....
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

Burny4600

Siehe https://forum.fhem.de/index.php/topic,66674.msg579712.html#msg579712.
Ist zwar ein WiFi Modul wo GPS Sensor dran gehängt werden kann.
Da wird dir vielleicht jemand weiter helfen können.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

sky64

Hallo

Wie ist denn das GPS z.Z. angebunden ? Ist da schon eine Applikation dran?

Meistens werden die GPS-Sensoren ja mit einer seriellen Schnittstelle angebunden und dort kommen dann im Sekundentakt  (oder je nach GPS in anderen Zeitabschnitten)
solche Zeilen im NMEA-0183 Format ( es gibt auch andere binäre Protokolle, aber das NMEA ist der Standard)
$GPRMC,191410,A,4735.5634,N,00739.3538,E,0.0,0.0,181102,0.4,E,A*19
Es gibt verschiedene Zeilen : http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm

Diese Zeilen mit einem kleinen Script deiner Wahl von z.B. dem /dev/ttyUSB0 zu lesen, zu filtern und dann z.B. in FHEM in ein Dummy zu schreiben solle kein Problem sein ?

Wenn das GPS schon von einer anderen Anwendung belegt wird müsste man sehen ob man die Kommunikation belauschen kann oder die Anwendung die Daten irgenndwohin hin schreibt.

Gruß Ronald

FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

fstefan1960

Hallo,

ja, die Daten kommen als NMEA-Daten herein, entweder über ttyACM0 oder über UART. Habe beide Optionen. Wie müsste denn dann der Ansatz sein, diese Daten aus FHEM heraus zu "belauschen"? Script und parsen klingt ja gut, aber mir fehlt gerade der erste Faden, an dem ich mich dem nähern kann.
Kann man die NMEA-Zeilen irgendwie in eine Variable schreiben, auf die FHEM Zugriff bekommt? Oder wie fang ich das an?
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

CoolTux

Anders Rum wird ein Schuh draus. Du schreibst ein Script, Shell oder Perl und lässt die ausgelesen Daten Zurecht machen und an fhem senden.
Hat Dein Auto Pi denn immer Netzverbindung nach Hause?
Und Du solltest halt überlegen wie die Daten aufgearbeitet aussehen müssen damit Du sie auch in FHEM gebrauchen kannst. Um zum Beispiel Weblink mit Googlemap samt Autoposition in FHEM an zu zeigen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Benni

Hallo fstefan1960,

rein aus persönlichem Interesse: Was für ein GPS-Modul verwendest du da?
Hast du das direkt am Raspi hängen?

Gib doch mal bitte ein paar Infos.

Könnte sowas nämlich auch gebrauchen für mein mobiles FHEM im Wohnwagen  ;D

Danke dir!

Gruß Benni.

sky64

Hallo Benni

Zitatrein aus persönlichem Interesse: Was für ein GPS-Modul verwendest du da?
Ich habe mir für eine andere Anwendung (Amaterufunk-APRS) eine  "U-BLOX NEO-6M GPS" geholt.
Gibts z.B. bei Amazon schon ab 11€.
Damit bin ich sehr zufrieden. Braucht ca. 30mA Strom und und läuft ab 3,3V z.B. direkt am Raspi.
Die soll bei mir mal als APRS-Tracker auf das Fahrrad.

Sonst hätte ich noch gegen Unkostenbeitrag ältere Sirif-II-Mäuse abzugeben.
Die brauchen aber 200mA bei 5V und können maximal 12 Satelliten empfangen.
Tun aber ihre Arbeit sonst problemlos. Im Auto läuft das bei mir mit einer Abschaltung in Abhängigkeit von der Bordnetzspannung.
Bei laufendem Motor ist die Bordspannung über 13V und beim Abstellen läuft der ARPS-Sender noch 10min nach.

Gruß Ronald
FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

betateilchen

Zitat von: sky64 am 24 August 2017, 12:19:53
Die soll bei mir mal als APRS-Tracker auf das Fahrrad.

wozu braucht man APRS auf dem Fahrrad?

73, DG1UDO
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CBSnake

Hi,

ich abonniere mir das mal. Aktuell liefert mir ein Android-Handy die GPS Daten aus den Autos. Ein Pi wäre, aufgrund der Möglichkeit mehr Eingänge abzufragen/übermitteln natürlich toll. Auch die Spannungsversorgung, Neustart, Nachlaufen usw wäre beim Pi einfacher.
Das Handy hat halt GPS und GPRS an Board und lässt sich per Tasker auch von einem Laien mit FHEM verknüpfen :-)

Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

fstefan1960

Hallo,

ich habe mir jetzt ein Python-Script geschrieben, das die NMEA-Daten ausliest und in einzelne Python-Variablen schreibt. Wie kann ich denn nun aus Python etwas in FHEM-Readings schreiben? Hat da jemand einen Tip?

Die Infos, welche Geräte ich da habe, liefere ich nach, wenn ich wieder zuhause bin. Das ist aber erst nächste Woche ...
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

Benni

Zitat von: sky64 am 24 August 2017, 12:19:53
Ich habe mir für eine andere Anwendung (Amaterufunk-APRS) eine  "U-BLOX NEO-6M GPS" geholt.
Gibts z.B. bei Amazon schon ab 11€.
Damit bin ich sehr zufrieden. Braucht ca. 30mA Strom und und läuft ab 3,3V z.B. direkt am Raspi.

Danke, das klingt sehr Interessant! Werde ich mir auf jeden Fall mal anschauen. :)
Allerdings habe ich auf meinem Raspi bereits ein HM-MOD-RPI als HMUART sitzen. Krieg ich so einen dann trotzdem noch mit dran?

fstefan1960

Hallo,

also mein Skript liest jetzt die Daten aus und schreibt sie per telnet in ein dummy in FHEM. Leider bin ich nicht daheim, so dass ich aktuell nur theoretische Erfolge habe, aber per Teamviewer klappt das eine (telnet auf der Entwicklermaschine) und unterwegs das andere (Auslesen des GPS). Nächste Woche kreuze ich die skripte mal und dann kann ich sie auch einstellen hier ...
FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

fstefan1960

#12
So, hier mal das versprochene Skript:
Kann sein, dass da noch Artefakte drin sind, die raus können. Insbesondere die Aufarbeitung der Strings ist sicher sehr stümperhaft.
Ihr müsst natürlich auf Eure Situation (IP, Passwort etc.) anpassen:


#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
from datetime import datetime as DateTime
import serial
import unicodedata
import time
import telnetlib
import getpass
import sys
import string

def main():
    data=""
    with serial.Serial('/dev/ttyACM0', 9600) as lines:
        for line in lines:
               if((line.split()[0][0]=='$') and (line[0:6]=='$GPGGA')):
                 now = DateTime.now()
                 data=line.split(",")
                 zeitstr = str(now)
                 zeitstring = zeitstr.split()
                 Datum = zeitstring[0]
                 Uhrzeit = zeitstring[1]
                 Uhrzeit = Uhrzeit[0:5]
                 tn = telnetlib.Telnet('localhost',7072)
                 tn.read_until(":")
                 tn.write("Passwort\n")
                 tn.write("set Latitude " + data[2] + data[3]+ "\n")
                 tn.write("set Longitude " + data[4] + data[5]+ "\n")
                 tn.write("set Height " + data[9] + "\n")
                 tn.write("set GPSTime " + Uhrzeit  + "\n")
                 tn.write("set GPSDate " + Datum  + "\n")
                 tn.write("exit\n")
                 tn.close()
                 time.sleep(60)

main()


FHEM auf PC: CUL868, CUL 443, HM_LAN, JeeLink
FHEM auf Raspi: CUL868
div. LaCrosse Temp/Hum-Sensoren, HM-Heizkörperventile, Schaltaktoren, etc.

peterk_de

#13
Ich hatte das gleiche Problem, allerdings ist das direkte Auslesen des tty-Devices ungünstig (sehr GPS-Device-spezifisch - wie weiter oben erwähnt gibt es verschiedene Protokolle; es kann immer nur eine Applikation gleichzeitig zugreifen etc.) ... ich habe deshalb mal ein FHEM-Modul gebaut, welches stattdessen den Linux GPS-Dämon ausliest. Der gpsd kapselt diverse GPS-Empfänger (sozusagen alle gebräuchlichen) und haut da die meisten herstellerspezifischen Eigenbrödelein heraus; er kann per TCP angesprochen werden (per default nur lokal auf 127.0.0.1). Meineswissens setzt z.B. auch Android darauf.

Mein FHEM-Modul benötigt nur die (leichtgewichtige) Perl-Bibliothek GPSD::Parse. Diese wiederum - logischerweise - einen installierten gpsd. Installation von beidem folgendermaßen:


sudo apt-get install gpsd gpsd-clients
sudo cpan install GPSD::Parse


Bitte prüfen, ob der Empfänger mit gpsd funktioniert. Dazu auf der Linux-Shell eingeben:


cgps


Jetzt sollte man seine Position im Terminal sehen. Lässt sich GPSD::Parse nicht installieren, bitte mit sudo cpan force install GPSD::Parse machen oder den GPS-Empfänger vor der Installation ausstöpseln, dann sollte es gehen und möglicherweise trotzdem funktionieren (der Autor hat es mit den Unittests ein bisschen zu gut gemeint, bei mir ging es nur so).

Dann das angehängte FHEM-Modul laden. Läuft gpsd lokal, braucht man nix weiter einstellen:

define meinGPS GPSD

- fertig. Ansonsten mit:

define meinGPS GPSD host=192.168.77.88 port=2947

Nach einigen Sekunden kriegt man dann diverse Readings. Das Update-Intervall lässt sich per Attribut gpsd_PollInterval einstellen.

Erfolgreich dauergetestet auf einem Raspi Pi 3 (unter Raspbian Stretch Lite) mit einem Navilock NL-8002U 62523 USB-GPS-Empfänger (Ublox UBX-M8030-KT Chip) und frischem FHEM. Knownbugs sind ein paar Perl-Warnings im FHEM-Log durch die GPSD::Parse Bibliothek.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

morph

Hi,

da ich im Wohnmobil auch einen Pi für diverse Dinge installiert habe, möchte ich nun auch einen GPS Tracker einbauen, um bei einem eventuellen Diebstahl das Mobil orten zu können.

Nun habe ich mir dein Modul heruntergeladen und in Fhem eingespielt, bekomme aber ein

Unterminated <> operator at ./FHEM/49_GPSD.pm line 1.

?!