thingsboard / thingsboard/thingsboard-python-client-sdk

Telemetry upload bug if telemetry list is not ordered by timestamp or if elements of list have different number of key/value pairs

Offen
#85 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

verification
Vorherrschende Sprache
Python
Sterne
130
Forks
86
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I'm using tb-mqtt-client version 1.10.10

I have a use-case where I'm uploading a list of telemetry readings. Depending on the order of the list, sometimes not all telemetry is being uploaded and sometimes the timestamp with which it is being uploaded is incorrect...

I first though that the list needed to be sorted by the timestamp attribute but then I had cases where even if it was sorted by timestamp it would work fine. It seems to be a combination of the list not being sorted with each element of the list not having the same number of key/value pairs.

I can't figure out or understand this behavior so any help would be appreciated.

This is the code snippet I'm using for testing this problem:

from tb_device_mqtt import TBPublishInfo
from tb_gateway_mqtt import TBGatewayMqttClient

telemetry =[...]

client = TBGatewayMqttClient("my.url.com", port=1883, username="token")
client.connect()

result = client.gw_send_telemetry('test device', telemetry) 

success = result.get() == TBPublishInfo.TB_ERR_SUCCESS
client.disconnect()

print(success)

Following are some examples of the problem where the only thing I'm changing is the order of the telemetry list:

Example 1 - works fine

telemetry =[
    {
        'ts': 1736330010000,
        'values': {
            'test_1': 1,
            'test_1_1': 1,
        }
    },
    {
        'ts': 1736330030000,
        'values': {
            'test_3': 3,
            'test_3_1': 3,
        }
    },
    {
        'ts': 1736330020000,
        'values': {
            'test_2': 2,
            'test_2_1': 2
        }
    },
]

image

Example 2 - does not upload test_2 and test_2_1 telemetry

telemetry =[
    {
        'ts': 1736330010000,
        'values': {
            'test_1': 1,
            'test_1_1': 1
        }
    },
    {
        'ts': 1736330020000,
        'values': {
            'test_2': 2,
            'test_2_1': 2
        }
    },
    {
        'ts': 1736330030000,
        'values': {
            'test_3': 3
        }
    },
]

image

Example 3 - test_1 and test_1_1 are being uploaded with the wrong timestamp. They are being uploaded with the same timestamp as test_3

telemetry =[
    {
        'ts': 1736330010000,
        'values': {
            'test_1': 1,
            'test_1_1': 1,
        }
    },
    {
        'ts': 1736330030000,
        'values': {
            'test_3': 3,
        }
    },
    {
        'ts': 1736330020000,
        'values': {
            'test_2': 2,
            'test_2_1': 2
        }
    },
]

image

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, die drei Telemetriebeispiele über TBGatewayMqttClient.gw_send_telemetry zu reproduzieren und die hochgeladenen Ergebnisse zu vergleichen. Verfolge den Upload-Pfad der Telemetrie, um zu ermitteln, wie sich die Reihenfolge der Listen und unterschiedliche Wertelängen auf Zeitstempel und Einträge auswirken; abgeschlossen ist die Aufgabe, wenn jeder Wert unabhängig von Eingabereihenfolge oder -form mit seinem zugehörigen Zeitstempel hochgeladen wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
api
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Ruhig
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.