FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Jochen1977 am 21 April 2023, 09:11:22

Titel: GPS Daten in HTTP Aufruf einbinden (The Things Network - Traccar)
Beitrag von: Jochen1977 am 21 April 2023, 09:11:22
Hallo,

gestern habe ich meinen LoraWAN GPS Tracker bei The Thins Network eingerichtet. Die Daten sende ich per MQTT an FHEM. Das funktioniert gut. Nun würde ich gerne die GPS Daten von FHEM aus an Traccar weitergeben. Meine Idee war ein Notify anzulegen welches dann einen http Aufruf startet.

Um zu testen ob überhaupt Daten bei meinem Traccar Server ankommen habe ich folgendes im notify angelegt:

MQTT2_TTN_MQTT:uplink_message_f_cnt.* {HttpUtils_NonblockingGet({ url=>"http://192.168.177.241:5055/?id=Test&lat=53.55&lon=10.99", callback=>sub() { } })}
Sobald also der Counter in meinem MQTT device verändert wird schickt das notify die Daten raus.

Nun möchte ich die festen Werte bei lat und lon durch die GPS Daten aus meinem MQTT device ersetzen. Daran scheitere ich gerade. Folgendes habe ich versucht:

MQTT2_TTN_MQTT:uplink_message_f_cnt.* {HttpUtils_NonblockingGet({ url=>"http://192.168.177.241:5055/?id=Test&lat=.Value(MQTT2_TTS_MQTT:uplink_message_decoded_payload_latitude)&lon=.Value(MQTT2_TTS_MQTT:uplink_message_decoded_payload_longitude)", callback=>sub() { } })}
und

MQTT2_TTN_MQTT:uplink_message_f_cnt.* {HttpUtils_NonblockingGet({ url=>"http://192.168.177.241:5055/?id=Test&lat=.MQTT2_TTS_MQTT:uplink_message_decoded_payload_latitude.&lon=.MQTT2_TTS_MQTT:uplink_message_decoded_payload_longitude.", callback=>sub() { } })}
leider ohne Erfolg. Wie kann ich die Werte aus dem device in den http Aufruf einfügen? Oder gibt es einen anderen / besseren weg die Daten zum Traccar Server zu bringen?

Gruß Jochen
Titel: Aw: GPS Daten in HTTP Aufruf einbinden (The Things Network - Traccar)
Beitrag von: Jamo am 23 April 2023, 11:05:41
Die concatenation funktioniert wahrscheinich nicht. Probier mal folgendes, die lat / lon vorher in 2 variablen zu schreiben:
MQTT2_TTN_MQTT:uplink_message_f_cnt.* {
my $lat = ReadingsNum('MQTT2_TTS_MQTT','uplink_message_decoded_payload_latitude',0.0);
my $lon = ReadingsNum('MQTT2_TTS_MQTT','uplink_message_decoded_payload_longitude',0.0);
HttpUtils_NonblockingGet({ url=>"http://192.168.177.241:5055/?id=Test&lat=$lat&lon=$lon", callback=>sub() { } })}
Titel: Aw: GPS Daten in HTTP Aufruf einbinden (The Things Network - Traccar)
Beitrag von: carlos am 23 April 2023, 13:43:18
Ich mache das mit meine Tesla über ein doif:
defmod di_Tessi DOIF {\
fhem_set("XXX_native_latitude_TMP".::GetHttpFile("<TraccarIP>", ":5055/?id=myTesla"\
."&lat=". [XXX:native_latitude]\
."&lon=".[XXX:native_longitude]\
."&speed=".[XXX:speed]\
."&totalDistance=".[XXX:odometer]\
."&batteryLevel=".[XXX:battery_level]))\
}
attr di_Tessi DOIF_Readings lon:[XXX:native_longitude],\
lat:[XXX:native_latitude],\
speed:[XXX:speed],\
odometer:[XXX:odometer],\
batteryLevel:[XXX:battery_level]\

attr di_Tessi room 01_Carport
attr di_Tessi userReadings test {GetHttpFile("<TraccarIP>", ":5055/?id=myTesla"\
."&lat=".ReadingsVal("di_Tessi","lat","")\
."&lon=".ReadingsVal("di_Tessi","lon","")\
."&speed=".ReadingsVal("di_Tessi","speed","")\
."&totalDistance=".ReadingsVal("di_Tessi","odometer","")\
."&batteryLevel=".ReadingsVal("di_Tessi","batteryLevel",""))\
}
attr di_Tessi verbose 5

XXX ist mein Tesla device.
Titel: Aw: GPS Daten in HTTP Aufruf einbinden (The Things Network - Traccar)
Beitrag von: Jochen1977 am 24 April 2023, 11:24:03
Herzlichen Dank an Euch Beide,

die Werte zuerst in eine Variable zu schreiben und dann den Aufruf zu machen wie es Jamo vorgeschlagen hat funktioniert bei mir.

Die Lösung über ein doif von Carlos sieht auch gut aus. Das werde ich mir mal anschauen da die Notifys bei mir manchmal nicht auslösen aber das ist eine andere Geschichte.

Ist somit gelöst.

Gruß Jochen
Titel: Aw: GPS Daten in HTTP Aufruf einbinden (The Things Network - Traccar)
Beitrag von: Jochen1977 am 25 April 2023, 15:19:23
Nun habe ich einen 2. Tracker hinzugefügt und nutze die Device ID auch noch. Hier der Vollstänigkeit halber der Code:

MQTT2_TTS_MQTT:uplink_message_f_cnt.* {my $lat = ReadingsNum('MQTT2_TTS_MQTT','uplink_message_decoded_payload_latitude',0.0);
my $lon = ReadingsNum('MQTT2_TTS_MQTT','uplink_message_decoded_payload_longitude',0.0);
my $dev = ReadingsVal('MQTT2_TTS_MQTT','end_device_ids_device_id',0.0);
HttpUtils_NonblockingGet({ url=>"http://192.168.177.241:5055/?id=$dev&lat=$lat&lon=$lon", callback=>sub() { } })}

So lassen sich auch mehrere Tracker bei TTN in ein MQTT Device packen.

Gruß Jochen