Un script tout prêt pour récupérer des données : comment l'intégrer?

hummm… sauf erreur de ma part, toi tu récupères déjà une data au format json via ta requête non ?
J’ai bon ?
Pour le moment moi je ne fais qu’un print_recursive…
Faut que j’arrive à le stocker au format json si je veux pouvoir m’appuyer sur ton exemple.

Oui j’ai forcé la sortie du résultat en JSON mais toi tu rediriges ton printf dans ton fichier de sortie :

print('-'*depth, f'{gid} {channelnum} {name} {channel.usage} kwh')
fichier = open("<CHEMIN_OU_FAUT_ECRIRE>/test.log", "a")
fichier.write("\nBonjour ")
fichier.write("geraldelbaze")
fichier.write("\n*** C'est fini ***")
fichier.close()

Essai ce script en modifiant CHEMIN_DE_SORTIE par le répertoire de ton script :

from pyemvue import PyEmVue

def print_recursive(usage_dict, info, depth=0):
    for gid, device in usage_dict.items():
        for channelnum, channel in device.channels.items():
            name = channel.name
            if name == 'Main':
                name = info[gid].device_name
            print('-'*depth, f'{gid} {channelnum} {name} {channel.usage} kwh')
            fichier.write('-'*depth, f'{gid} {channelnum} {name} {channel.usage} kwh')

            if channel.nested_devices:
                print_recursive(channel.nested_devices, depth+1)

vue = PyEmVue()
vue.login(username='put_username_here', password='put_password_here', token_storage_file='keys.json')

devices = vue.get_devices()
device_gids = []
info = {}
fichier = open("CHEMIN_DE_SORTIE/PyEmVue.log", "a")

for device in devices:
    if not device.device_gid in device_gids:
        device_gids.append(device.device_gid)
        info[device.device_gid] = device
    else:
        info[device.device_gid].channels += device.channels

device_usage_dict = vue.get_device_list_usage(deviceGids=device_gids, instant=None, scale="1MIN", unit="KilowattHours")
print_recursive(device_usage_dict, info)
fichier.write("\n*** C'est fini ***")
fichier.close()

Hummm…
on n’est pas loin …
je dois résoudre cette erreur :

Traceback (most recent call last):
  File "connect.PY", line 34, in <module>
    print_recursive(device_usage_dict, info)
  File "connect.PY", line 12, in print_recursive
    fichier.write('-'*depth, f'{gid} {channelnum} {name} {channel.usage} kwh')
TypeError: write() takes exactly one argument (2 given)

Remplace

fichier.write(‹ - ›*depth, f’{gid} {channelnum} {name} {channel.usage} kwh’)

par

fichier.write(f’{gid} {channelnum} {name} {channel.usage} kwh\n’)

arggg…

  File "connect.PY", line 12
    fichier.write(f’{gid} {channelnum} {name} {channel.usage} kwh’)
                   ^
SyntaxError: invalid character in identifier

j’enlève le f

non plus… :frowning:

non pas le f c’est ta variable :wink:
c’est le l’accent avec le copier coller qui passe mal, il faut faire l’accent de la touche 4

pfff… effectivement… trop naze…

:grin: ca arrive faut connaitre
une petite capture du fichier de sortie

81992 1,2,3 TazVue 0.03362247951931423 kwh81992 1 Four 9.294758637746174e-06 kwh81992 2 Luminaires Couloir 0.00118594948$
*** C'est fini ***

Je me dis qu’un retour chariot permettrait que ce soit plus simple à gérer dans le scénario non ?
Sinon ça marche ! :slight_smile:

Et je rajoute un w plutôt qu’un a dans le fichier = open au cas où le fichier n’existerait pas non ?

un \n a la fin

tu peux oui mettre l’option « w » à la place du « a » mais ça ne changera rien
une petite capture de la sortie

roooo c’est boooo.
selon toi, il vaut mieux que :

  • je rajoute un timestamp
  • j’efface le contenu avant d’écrire ?
    l’idée étant de faciliter le parsing du fichier par le scénario…
    (mais bon je débute hein)…
81992 1,2,3 TazVue 0.03362247951931423 kwh81992 1 Four 9.294758637746174e-06 kwh81992 2 Luminaires Couloir 0.00118594948$
*** C'est fini ***81992 1,2,3 TazVue 0.05470805911593967 kwh
81992 1 Four 6.9218468666076664e-06 kwh
81992 2 Luminaires Couloir 0.001306512105729845 kwh
81992 3 Atelier 0.010065657145182292 kwh
81992 4 Convecteur Salon 0.0001811860548125373 kwh
81992 5 Etage 0.013949680023193358 kwh
81992 6 Annexe 0.021496944674385916 kwh
81992 7 Table de Cuisson 1.897234148449368e-05 kwh
81992 8 Cumulus 3.259840157296922e-05 kwh
81992 Balance Balance 0.007649586522711656 kwh
82028 1,2,3 TazAnnexe 0.021290432501369052 kwh
82028 1 Piscine 0.0012488162840737238 kwh
82028 2 2 1.2856118281682333e-05 kwh
82028 3 3 1.2747715579138862e-05 kwh
82028 4 Convecteur + Prise Xbox 0.020580581407282087 kwh
82028 Balance Balance -0.0005645690238475776 kwh

*** C'est fini ***

et suis preneur d’un copier collé du script de ton scénario pour m’appuyer dessus pour faire la suite.
Merci !

pas de souci
met un « w+ » dans

fichier = open(« PyEmVue.log », « w+ »)
comme ca ton fichier sera écrasé

Si tu m’expliques les champs que t’as je te fait le JSON :wink:

Tu m’étonnes que je veux bien t’expliquer :wink: !!

Ce script prend la valeur de la conso par minute (j’ai la même chose pour les heures / semaines / mois, mais je préfère le faire ensuite avec Jeedom)

Donc l’appareil c’est ça :

La structure des données est la suivante :
Ligne 1 :

81992 1,2,3 TazVue 0.05470805911593967 kwh

81992 : l’id de l’appareil (j’ai deux emporia)
1,2,3 : permet d’indiquer qu’il y a trois prise ampermétrique côté compteur pour aller jusqu’à du triphasé
TazVue : le nom du premier appareil
0.05470805911593967 : la mesure de la conso totale qui passe le compteur
kwh : l’unité.

81992 1 Four 6.9218468666076664e-06 kwh
81992 2 Luminaires Couloir 0.001306512105729845 kwh
81992 3 Atelier 0.010065657145182292 kwh
81992 4 Convecteur Salon 0.0001811860548125373 kwh
81992 5 Etage 0.013949680023193358 kwh
81992 6 Annexe 0.021496944674385916 kwh
81992 7 Table de Cuisson 1.897234148449368e-05 kwh
81992 8 Cumulus 3.259840157296922e-05 kwh
81992 Balance Balance 0.007649586522711656 kwh

L’ensemble des capteurs connecté à l’emporia
81992 : l’id de l’appareil
« 1 » : l’id du connecteur
puis le mesure et l’unité.

La ligne « Balance » permet d’indiquer la conso qui n’est « capté » par aucun connecteur (pas assez de prises pour tout prendre).
Du coup conso totale = conso de chaque capteur + balance

Puis

82028 1,2,3 TazAnnexe 0.021290432501369052 kwh
82028 1 Piscine 0.0012488162840737238 kwh
82028 2 2 1.2856118281682333e-05 kwh
82028 3 3 1.2747715579138862e-05 kwh
82028 4 Convecteur + Prise Xbox 0.020580581407282087 kwh
82028 Balance Balance -0.0005645690238475776 kwh

Même chose pour un deuxième Emporia, mais relié au même compte sur l’API de Emporia