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
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() { } })}
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.
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
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