Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error : invalid literal for int() with base 10: '----' #3

Open
Mercurochrome77 opened this issue Dec 1, 2023 · 3 comments
Open

Error : invalid literal for int() with base 10: '----' #3

Mercurochrome77 opened this issue Dec 1, 2023 · 3 comments

Comments

@Mercurochrome77
Copy link

Hi and thank you for your work !

I try to follow the instruction but I get an error like this :

ERROR: Etiquette : DEMAIN Donnée : ----

ERROR: Une exception s'est produite : invalid literal for int() with base 10: 'A'
Traceback (most recent call last):
File "/root/linky/linky.py", line 164, in linky
frame[key] = int(val)
ValueError: invalid literal for int() with base 10: 'A'
ERROR: Etiquette : HHPHC Donnée : A
INFO: Trame reçue (10 étiquettes traités)
ERROR: Une exception s'est produite : string index out of range
Traceback (most recent call last):
File "/root/linky/linky.py", line 148, in linky
separator = line_str[-2]
IndexError: string index out of range
ERROR: Etiquette : MOTDETAT 000000 B Donnée :
ERROR: Une exception s'est produite : invalid literal for int() with base 10: 'BBR('
Traceback (most recent call last):
File "/root/linky/linky.py", line 164, in linky
frame[key] = int(val)
ValueError: invalid literal for int() with base 10: 'BBR('
ERROR: Etiquette : OPTARIF Donnée : BBR(
ERROR: Une exception s'est produite : invalid literal for int() with base 10: '----'
Traceback (most recent call last):
File "/root/linky/linky.py", line 164, in linky
frame[key] = int(val)
ValueError: invalid literal for int() with base 10: '----'

I tried to change the int(val) with str but not better.

Do you have an idea ?

Thank you ! :)

@hleroy
Copy link
Owner

hleroy commented Dec 3, 2023

Le script est assez basique : il cherche à récupérer une valeur numérique. C'est ce qui se passe sur la ligne frame[key] = int(val).
Vous avez du configurer le fichier config.yml pour récupérer l'étiquette DEMAIN, qui ne renvoie pas une valeur numérique mais une valeur textuelle (la couleur du lendemain pour un compteur programmé en mode Tempo).

Idem pour l'étiquette HHPHC. Mon compteur n'étant pas en mode heure creuse / heure pleine, je n'ai pas testé ce cas d'usage.

Essayez de limiter les étiquettes choisies à celles qui renvoient des valeurs numériques (voir la documentation ENEDIS) ou alors il faut adapter le script ainsi :

# Vérification de la somme de contrôle
if _checksum(key, val, separator, checksum):
    # Modification ici: on vérifie si val est un entier avant de convertir
    if val.isdigit():
        # Ajout de la valeur
        frame[key] = int(val)
    else:
        # Pour les valeurs non-entière, on stocke en string
        frame[key] = val

@Mercurochrome77
Copy link
Author

Bonjour et merci pour ton retour.

Désolé je commence tout juste à apprendre le python. Effectivement j'ai un compteur en mode tempo. Après avoir apporté la modification j'arrive à avoir une autre erreur :

DEBUG: Groupe d'information brut :
ERROR: Une exception s'est produite : string index out of range
Traceback (most recent call last):
File "/root/linky/linky.py", line 148, in linky
separator= line_str[-2]
IndexError: string index out of range
ERROR: Etiquette : MOTDETAT 000000 B#015#003 Donnée :
DEBUG: Groupe d'information brut : ADCO 700522014014 1
...

J'ai testé de modifier la ligne 148 par [-1] au lieu de [-2], ça a l'air de réduire le nombre d'erreur mais il y en a toujours.

PS : Quand je modifie le fichier config.yml pour garder qu'une seule étiquette (ex: keys: [ADCO]) j'obtiens toujours l'erreur si dessus.

Merci d'avance.

@Mercurochrome77
Copy link
Author

Bonjour,

Je pense avoir compris. Visiblement en mode tempo on a un caractère en fin de ligne (ou début) supplémentaire : le B#015. Cependant je ne sais pas à quoi il sert. Est-il possible de le retirer automatiquement ?

DEBUG: Groupe d'information brut : MOTDETAT 000000 B#015#003
ou encore
DEBUG: Groupe d'information brut : MOTDETAT 000000 B#015#003#002

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants