Mehrere sensBoxen per TTN anbinden


#1

Hi,

ich versuche gerade mehrere mobile Senseboxen per TTN, also über LorRaWan, anzubinden. Dabei läuft auf meinen Geräten die Firmware des Paxcounters und deren passenden Decoder ist konfiguriert. Damit lassen sich dann folgende Daten empfangen:
{"app_id":"paxcounter","dev_id":"5db5d4f89b884c001a140000","hardware_serial":"006951696FDF0000","port":1,"counter":114,"payload_raw":"BAA=","payload_fields":{"pax":4,"wifi":4},"metadata":{"time":"2019-11-01T11:43:00.744064377Z","frequency":868.5,"modulation":"LORA","data_rate":"SF9BW125","coding_rate":"4/5","gateways":[{"gtw_id":"eui-0000024b08030000","timestamp":4188521332,"time":"2019-11-01T11:43:00.718578Z","channel":2,"rssi":-109,"snr":5.2,"rf_chain":1,"latitude":47.00000,"longitude":9.00000,"altitude":200}]},"downlink_url":"https://url"}

Opensensebox scheint mir nun aber eine payload im Format “SensorID”:“Wert” zu benötigen. Dies würde erfordern das ich im Decoder die Strings ‘wifi’ und ‘pax’ mit den entsprechenden SensorIDs austausche, da ich jedoch beabsichtige mehrere Geräte in Betrieb zu nehmen, die dann ja alle eigene SensorIDs haben, funktioniert das ja nicht. stimmt das soweit? im grunde müsste ich abhänig von der DeviceID die SensorIDs schreiben… habt ihr sowas schonmal gemacht? würde das funktionieren?

danke!


#2

hi @nerdyscout, die automatische Sketch-Generierung inklusive TTN Funktionalität auf der openSenseMap ist nur mit senseBox:home Bausätzen möglich. Die entsprechende Anleitung dazu findest du hier. Du scheinst ja ein custom Setup mit dem ESP zu nutzen wenn ich das richtig sehe?
Vllt hat @matthias ne Idee?


#3

Hi @nerdyscout,

wir haben sowas schon einmal gemacht. Wenn ich das richtig in Erinnerung habe, sah unser Setup folgendermaßen aus:

  • bei TheThingsNetwork eine Application anlegen
  • in der Application mehrere Devices registrieren
  • die Devices schicken über unterschiedliche Ports
  • im Decoder in TTN wurde anhand der Ports dann die entsprechenden SensorIDs gesetzt
  • HTTP Integration aktiviert und darüber das JSON an die openSenseMap geschickt

Würde das in deinem Fall auch gehen? Kann am Wochenende gerne mal den Decoder raussuchen, den wir dafür genutzt haben.


#4

Hallo,

vielen Dank für eure Unterstützung und Anregungen.

ja, @Jan ich verwende einen ESP32, genau genommen einen TTGO Beam

@matthias das scheint mir auch eine gute Idee zu sein. Ich würde mich gerne mit der Firmware möglichst nahe am original des Paxcounters halten um Änderungen nicht immer selbst patchen zu müssen. Daher ist jedes Device auf einen fixen Port mappen eher ungeschickt.

Tatsächlich bin ich inzwischen auch weiter gekommen und kann mit der original Firmware ein opensense-device mit Daten füllen. Dazu musste ich eine eigene Decoding Option eingeben
[{“decoder”:“uint16”,“sensor_id”:“5dbca98ec8eb60001bd8c883”}]

Damit scheint nun mein ursprüngliches Problem gelöst, zumindest funktioniert dies für stationäre Devices. Der TTGO Beam hat auch noch ein GPS Modul und sendet dessen Daten bislang auf einem anderen Port wie seine Sensorwerte. Wenn ich mir aber den decoder anschauen scheint es auch möglich zu sein beides im selben Port zu senden.

if (port === 1) {
    // only wifi counter data, no gps
    if (bytes.length === 2) {
        return decode(bytes, [uint16], ['wifi']);
    }
    // wifi + ble counter data, no gps
    if (bytes.length === 4) {
        return decode(bytes, [uint16, uint16], ['wifi', 'ble']);
    }
    // combined wifi counter and gps data
    if (bytes.length === 15) {
        return decode(bytes, [uint16, latLng, latLng, uint8, hdop, uint16], ['wifi', 'latitude', 'longitude', 'sats', 'hdop', 'altitude']);
    }
    // combined wifi + ble counter and gps data
    if (bytes.length === 17) {
        return decode(bytes, [uint16, uint16, latLng, latLng, uint8, hdop, uint16], ['wifi', 'ble', 'latitude', 'longitude', 'sats', 'hdop', 'altitude']);
    }
}

Dh ich versuche gerade herauszufinden wie ich alle Daten im selben Port zu senden damit ich anschließend diese auf latitude/longitude mappen kann.
Wobei mir noch nicht ganz klar ist ob das ausreicht, die Beschreibung zu den mobilen Devices scheint mir doch eher lückenhaft, hier wäre ich noch um Hilfe froh.

update:


Inwischen kann ich Daten auf dem selben Port empfangen und in der TTN Konsole dekodieren. Die Decoding Option in der Sensbox fehlt mir jedoch noch, momentan werden beiderlei Daten als Sensorwert interpretiert. Ich schätze mal das ich sowas in der form von dem hier benötige: [{“decoder”:“uint16”,“sensor_id”:“5dbca98ec8eb60001bd8c883”,"location": [lng,lat,height]}]


#5

I am the maintainer of the paxcounter open source firmware. If it contributes to sensebox we can add a special payload encoder for this purpose to paxcounter. Just add a suitable decoder to the PayloadConvert class of the firmware. Then we have sensebox integration in the main release and no one needs own forks to patch.


#6

as you know @cyberman54 I already got a pull request up which will implement the required changes without the need of a extra PayloadConvert. I don’t get your point here…

Currently I am just waiting to get some idea, or better HELP, how to configure the decoding options in opensensebox. With the pull request from above TTN outputs valid json like this:
{ "altitude": 426, "hdop": 0.89, "latitude": 47.680262, "longitude": 9.165574, "pax": 6, "sats": 10, "wifi": 6 }
payload: 06 00 06 8B D7 02 06 DB 8B 00 0A 59 00 AA 01

and decoding options currently are set:
[{"sensor_id":"5dd11b6ffb57c1001a22bc6b","decoder":"uint16"}]
sensor values work fine here, of course position is missing.
I expected something like this should do it:
[{"sensor_id":"5dd11b6ffb57c1001a22bc6b","decoder":"uint16"},{"decoder":"latLng"}]
but position is never updated.

all according this and this documentation.


#7

ok, got it.
I am not into sensebox platform yet, so can’t help here. But i see a “opensensemap” with many dots, so somehow it must be possible to deliver geospatial data through the API… ?


#8

Nach dieser Anleitung war es mir nun endlich möglich ein Projekt aufzusetzen. Dabei scheint es für die SenseBoxAPI wichtig zu sein in welcher Reihenfolge die Parameter im JSON-Array folgen, die GPS-Koordinaten müssen die ersten sein.

meine Decoding Options in der SenseBox:

[{“decoder”:“latLng”},{“sensor_id”:“xxxSensorIDxxx”,“decoder”:“uint16”}]

Teil des payload Decoders in TTN:

// combined wifi counter and gps data, used by OpenSenseBox
if (bytes.length === 10) {
return decode(bytes, [latLng, latLng, uint16], [‘latitude’, ‘longitude’, ‘wifi’]);
}
// combined wifi + ble counter and gps data, used by OpenSenseBox
if (bytes.length === 12) {
return decode(bytes, [latLng, latLng, uint16, uint16], [‘latitude’, ‘longitude’, ‘wifi’, ‘ble’]);
}

ich mach jetzt noch ein paar Feldtests, bin aber sehr zuversichtlich :slight_smile:


#9

Wenn ich das richtig verstehe, sendest du ja nur mit einem Gerät, richtig? Wenn ja, macht es Sinn, den Dekoder von TTN zu nutzen. Wichtig bei der ganzen GPS-Geschichte ist, dass du einen Timestamp im request mitgibst, ansonsten will die OpenSenseMap nicht. Ich hatte dazu mal eine Anleitung auf der SenseBox Seite erstellt:

https://sensebox.de/projects/de/2019-05-06-MobilerFeinstaubloggerLoRa

Ich hoffe ich konnte dir helfen!


#10

danke @PaulReichmuth, wie der Titel aber verrät arbeite ich mit mehreren Sendern.
Inzwischen läuft das mit einem Sender auch längst, ich sehe keinen Grund wieso das nicht skalieren sollte.

Eine Doku werde ich die nächsten Tage irgendwann hier fallen lassen: https://sensebox.de/de/projects/

damit ist das Projekt auch soweit fertig.