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

Ouverte
#85 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

verification
Langage dominant
Python
Étoiles
130
Forks
86
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

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

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire les trois exemples de télémétrie via TBGatewayMqttClient.gw_send_telemetry et comparez les résultats téléversés. Suivez le chemin de téléversement de la télémétrie pour déterminer comment l’ordre des listes et les différentes longueurs des valeurs affectent les horodatages et les entrées ; le travail est terminé lorsque chaque valeur est téléversée avec son horodatage correspondant, quelle que soit l’ordre ou la forme des entrées.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
api
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.