Seite 1 von 1

Daten aus zip selektieren

Verfasst: Montag 30. Oktober 2023, 15:33
von kiaralle
Hallo,
habe wieder ein kleines Problem wobei ich etwas Hilfe von Euch benötige.

Ich habe Daten welche in einem zip liegen.

Mit list(zip(result.registers, registers)) erhalte ich alle Daten angezeigt.
Möchte nun den 18. Datensatz daraus lesen. Geht das so einfach?

Mit dict(zip(result.registers, registers)) erhalte ich die Daten so angezeigt.

Code: Alles auswählen

{12: ['Status', 1], 2802: ['Vpv1', 0.1], 0: ['ParaChgCurr', 0.1], 1430: ['Ppv1L', 0.1], 27: ['BatterySOC', 1], 16400: ['AC_dischrwattL', 0.1], 16760: ['AC_dischrvaL', 0.1], 5123: ['Bat_Volt', 0.01], 4047: ['BusVolt', 0.01], 2300: ['OutputVolt', 0.1], 5000: ['OutputFreq', 0.01], 254: ['InvTemp', 0.1], 220: ['DCDCTemp', 0.1], 335: ['LoadPercent', 0.1], 211: ['Buck1Temp', 0.1], 253: ['Buck2Temp', 0.1], 72: ['OP_Curr', 0.1], 77: ['Inv_Curr', 0.1], 20105: ['DTC', 1], 2482: ['CheckStep', 1], 86: ['Epv1_todayL', 0.1], 20381: ['Epv1_totalL', 0.1], 1015: ['Eac_chrtotalL', 0.1], 24: ['Ebat_chrtodayL', 0.1], 13173: ['Ebat_chrtotalL', 0.1], 1224: ['Eac_dischrtotalL', 0.1], 16180: ['Bat_wattL', 0.1], 55: ['Invfanspeed', 1], 316: ['-84-', 0], 67: ['Eop_dischrToday_L', 1], 69: ['Eop_dischrTotal_L', 1]}
{12: ['Status', 1], 2787: ['Vpv1', 0.1], 0: ['ParaChgCurr', 0.1], 1500: ['Ppv1L', 0.1], 29: ['Buck1Curr', 0.1], 16400: ['AC_dischrwattL', 0.1], 16760: ['OP_VAL', 0.1], 5123: ['Bat_Volt', 0.01], 27: ['BatterySOC', 1], 4048: ['BusVolt', 0.01], 2300: ['OutputVolt', 0.1], 5000: ['OutputFreq', 0.01], 254: ['InvTemp', 0.1], 220: ['DCDCTemp', 0.1], 335: ['LoadPercent', 0.1], 211: ['Buck1Temp', 0.1], 253: ['Buck2Temp', 0.1], 72: ['OP_Curr', 0.1], 77: ['Inv_Curr', 0.1], 20105: ['DTC', 1], 2482: ['CheckStep', 1], 86: ['Epv1_todayL', 0.1], 20381: ['Epv1_totalL', 0.1], 1015: ['Eac_chrtotalL', 0.1], 24: ['Ebat_chrtodayL', 0.1], 13173: ['Ebat_chrtotalL', 0.1], 1224: ['Eac_dischrtotalL', 0.1], 16750: ['AC_dischrvaL', 0.1], 16180: ['Bat_wattL', 0.1], 55: ['Invfanspeed', 1], 316: ['-84-', 0], 67: ['Eop_dischrToday_L', 1], 69: ['Eop_dischrTotal_L', 1]}

Ist es möglich gezielt Daten aus dem Datensatz heraus zu ziehen?

Ich behelfe mich aktuell über diesen Weg und ordne Daten für die weiter Bearbeitung zu.

Code: Alles auswählen

if not result.isError():
            for value, (name, multiplier) in zip(result.registers, registers):
                if name == "BatterySOC":
                   BatterySOC = value * multiplier
                elif name == "LoadPercent":
                   LoadPercent = value * multiplier

Ist das eventuell der bessere Weg? Benötige dann eventuell mehrere Variablen. Funktioniert aber bereits im Skript.

Was ist der schnellste, optimalste Rechenweg für den Ablauf im Skript?

Gruß Ralf

Re: Daten aus zip selektieren

Verfasst: Montag 30. Oktober 2023, 16:19
von Sirius3
Die Daten sind doch falsch aufgebaut. `value, (name, multiplier)` sollte doch eigentlich `name, (value, multiplier)` sein. Also mußt Du die Datenstruktur richtig aufbauen.

Code: Alles auswählen

data = {name: (value, multiplier) for value, (name, multipliert) in zip(result.registers, registers)}
value, multiplier = data["BatterySOC"]
battery_soc = value * multplier

Re: Daten aus zip selektieren

Verfasst: Montag 30. Oktober 2023, 16:59
von kiaralle
Vielen Dank, das funktioniert super.
Hab mal etwas probiert. Ist das so machbar, korrekt?

Code: Alles auswählen

    data = {name: (value, multiplier) for value, (name, multiplier) in zip(result.registers, registers)}
    battery_soc_value, battery_soc_multiplier = data["BatterySOC"]
    battery_soc = battery_soc_value * battery_soc_multiplier
    loadPercent_value, loadPercent_multiplier = data["LoadPercent"]
    loadPercent = loadPercent_value * loadPercent_multiplier

Das Skript ist schon mal nicht langsamer geworden.