IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Pokorný Martin:24.2.2023 13:34

Ahoj,
mohl by mi prosím někdo poradit jak správně upravit script, aby nevypisoval pomci fce print, ale do JSON formatu?

Zkusil jsem:

import asyncio
import goodwe
import json

async def get_runtime_data():
    ip_address = 'xxxxxxx'

    inverter = await goodwe.connect(ip_address)
    runtime_data = await inverter.read_runtime_data()
    data = dict()
    for sensor in inverter.sensors():
        if sensor.id_ in runtime_data:
            print(f"{sensor.id_}: \t\t {sensor.name} = {runtime_data[sensor.id_]} {sensor.unit}")
            data[{sensor.id_}]=float({runtime_data[sensor.id_]}) #tady se snazim provest ulozeni do pole "data"
            print(json.dumps(data))
asyncio.run(get_runtime_data())

dostavam tuto chybu:
data[{sensor.id_}]=flo­at({runtime_da­ta[sensor.id_]})
TypeError: float() argument must be a string or a real number, not 'set'

Chci docílit: výstup print je takovýto:

timestamp: Timestamp = 2023-02-24 13:24:36
vpv1: PV1 Voltage = 360.0 V
ipv1: PV1 Current = 1.8 A
ppv1: PV1 Power = 648 W
vpv2: PV2 Voltage = 344.0 V
ipv2: PV2 Current = 2.2 A
ppv2: PV2 Power = 756 W
ppv: PV Power = 1404 W

ja bych chtel:

{"timestamp": 2023-02-24 13:24:36, "vpv1": 360.0, "ipv1": 1.8, ......}

 
Odpovědět
24.2.2023 13:34
Avatar
Pokorný Martin:24.2.2023 13:44

když provedu

data[{sensor.id_}]={runtime_data[sensor.id_]}

vrací se mi chyba: TypeError: unhashable type: 'set'

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
24.2.2023 13:44
Avatar
Pavel
Člen
Avatar
Pavel:24.2.2023 14:30

Předpokládal bych, že to je tím, že set nemůže být klíčem ve slovníku, tj. proč je tam data[{sensor.id_}] a ne data[sensor.id_]?

 
Nahoru Odpovědět
24.2.2023 14:30
Avatar
Odpovídá na Pavel
Pokorný Martin:24.2.2023 14:46

už jsem na to přišel ona jsou data v json uložena už tady: runtime_data = await inverter.read_run­time_data(), takže je stačí jen zobrazit ..

chtěl jsem tento dotaz smazat, ale nenašel jsem možnost jak...

 
Nahoru Odpovědět
24.2.2023 14:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.