Skip to content

Instantly share code, notes, and snippets.

@ssp
Last active May 22, 2023 21:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ssp/66023cc917797e89491ed64bf2877fec to your computer and use it in GitHub Desktop.
Save ssp/66023cc917797e89491ed64bf2877fec to your computer and use it in GitHub Desktop.
senec-to-influx

Senec to Influx

Extract values from Senec JSON with string-hex-floats and push them to InfluxDB

Run example

SENEC_URL=http://senec.local/lala.cgi INFLUX_URL=https://influx.yourserver.net/ INFLUX_ORG=your_org INFLUX_TOKEN=your_token ./senec-to-influx.py
{
"PV1": {
"POWER_RATIO": "fl_42C80000",
"POWER_RATIO_L1": "fl_42C80000",
"POWER_RATIO_L2": "fl_42C80000",
"POWER_RATIO_L3": "fl_42C80000",
"MPP_VOL": [
"fl_435A5AE2",
"fl_433BB99A",
"fl_43AFABC7"
],
"MPP_CUR": [
"fl_3F951EB9",
"fl_3F93D70B",
"fl_3F88F5C3"
],
"MPP_POWER": [
"fl_437CA7AF",
"fl_4356EE98",
"fl_43BA820D"
],
"MPP_AVAIL": "u8_03",
"INTERNAL_MD_AVAIL": [
"u8_01",
"u8_01"
],
"INTERNAL_MD_MODEL": [
"st_V3 LV",
"st_V3 HV"
],
"INTERNAL_MD_VERSION": [
"st_HMI: 3.16.20 PU: 4.3.10 BDC: 5.4.6",
"st_HMI: 3.16.20 PU: 4.3.10"
]
},
"WIZARD": {
"MAC_ADDRESS_BYTES": [
"u8_14",
"u8_1F",
"u8_BA",
"u8_21",
"u8_08",
"u8_EB"
]
},
"BAT1OBJ1": {
"TEMP1": "u1_0013",
"TEMP2": "u1_0013",
"TEMP3": "u1_0000",
"TEMP4": "u1_0000",
"TEMP5": "u1_0000",
"S": "i1_0000",
"P": "i1_0000",
"Q": "i1_0000",
"SW_VERSION": "u3_03100014",
"SW_VERSION2": "u3_0403000A",
"SW_VERSION3": "u3_05040006",
"I_DC": "fl_80000000"
},
"PWR_UNIT": {
"POWER_L1": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"POWER_L2": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"POWER_L3": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
]
},
"BAT1": {
"CEI_LIMIT": "u1_0000",
"SPARE_CAPACITY": "u8_00"
},
"BMS": {
"NR_INSTALLED": "u8_00"
},
"WALLBOX": {
"ADDITIONAL_ERROR": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"ALLOW_INTERCHARGE": "u8_00",
"APPARENT_CHARGING_POWER": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"BUS_ADR": [
"u8_01",
"u8_02",
"u8_03",
"u8_04"
],
"CS_ENABLED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"DETECTION_MODE": "u3_00000000",
"EV_CONNECTED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"HW_TYPE": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"L1_CHARGING_CURRENT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"L1_USED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"L2_CHARGING_CURRENT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"L2_USED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"L3_CHARGING_CURRENT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"L3_USED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"LOAD_IMBALANCE_DETECTED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"LOAD_IMBALANCE_ENABLED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"MAJOR_REV": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"MAX_CHARGING_CURRENT_DEFAULT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"MAX_CHARGING_CURRENT_IC": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"MAX_CHARGING_CURRENT_ICMAX": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"MAX_CHARGING_CURRENT_RATED": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"MAX_PHASE_CURRENT_BY_GRID": "fl_00000000",
"MAX_TOTAL_CURRENT_BY_GRID": "fl_00000000",
"METER_ENABLED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"METHOD_EN1": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"MINOR_REV": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"MIN_CHARGING_CURRENT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"PHASES_USED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"PROHIBIT_USAGE": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"SAP_NUMBER": [
"st_",
"st_",
"st_",
"st_"
],
"SERIAL_NUMBER": [
"st_",
"st_",
"st_",
"st_"
],
"SERIAL_NUMBER_INTERNAL": [
"st_",
"st_",
"st_",
"st_"
],
"SET_ICMAX": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"SET_IDEFAULT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"SMART_CHARGE_ACTIVE": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"SOCKET_ENABLED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"STATE": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"UID": [
"u6_0000000000000000",
"u6_0000000000000000",
"u6_0000000000000000",
"u6_0000000000000000"
],
"UTMP": [
"u1_0000",
"u1_0000",
"u1_0000",
"u1_0000"
]
},
"GRIDCONFIG": {
"AU2020_ACTIVE_REGISTER": "u8_00",
"AU2020_COSPHIMODE": "u8_00",
"AU2020_FIXEDFACTOR": "fl_3F800000",
"AU2020_FLLCO": "fl_42470000",
"AU2020_FLLCO_MAX": "fl_4247999A",
"AU2020_FLLCO_MIN": "fl_42460000",
"AU2020_FPMAX": "fl_42400000",
"AU2020_FPMAX_MAX": "fl_42440000",
"AU2020_FPMAX_MIN": "fl_423C0000",
"AU2020_FPMIN": "fl_42500000",
"AU2020_FPMIN_MAX": "fl_42540000",
"AU2020_FPMIN_MIN": "fl_424C0000",
"AU2020_FSTOPCH": "fl_42440000",
"AU2020_FSTOPCH_MAX": "fl_42460000",
"AU2020_FSTOPCH_MIN": "fl_42400000",
"AU2020_FTRANSITION": "fl_424B0000",
"AU2020_FTRANSITION_MAX": "fl_42500000",
"AU2020_FTRANSITION_MIN": "fl_424A0000",
"AU2020_FULCO": "fl_42490000",
"AU2020_FULCO_MAX": "fl_424A0000",
"AU2020_FULCO_MIN": "fl_42486666",
"AU2020_HEXPORT": "u3_00000000",
"AU2020_HEXPORT_ENABLED": "u8_00",
"AU2020_NOT_DEFAULT": "u8_00",
"AU2020_REACTIVEPOWER": "fl_00000000",
"AU2020_REACTIVEPOWER_MAX": "fl_42700000",
"AU2020_REACTIVEPOWER_MIN": "fl_C2700000",
"AU2020_RESPONSE_MODES": "u1_0013",
"AU2020_SELECTED_REGION": "u8_00",
"AU2020_VNOMMAX_MAX": "u1_0102",
"AU2020_VNOMMAX_MIN": "u1_00F4",
"AU2020_VNOMMAX_RANGE": "u1_0102",
"AU2020_VVAR_PERCENT": [
"i8_2C",
"i8_00",
"i8_00",
"i8_C4"
],
"AU2020_VVAR_PMAX": [
"i8_3C",
"i8_00",
"i8_00",
"i8_E2"
],
"AU2020_VVAR_PMIN": [
"i8_1E",
"i8_00",
"i8_00",
"i8_C4"
],
"AU2020_VVAR_VMAX": [
"u1_00E6",
"u1_00E6",
"u1_0109",
"u1_0109"
],
"AU2020_VVAR_VMIN": [
"u1_00B4",
"u1_00B4",
"u1_00E6",
"u1_00E6"
],
"AU2020_VVAR_VOLTAGE": [
"u1_00CF",
"u1_00DC",
"u1_00F0",
"u1_0102"
],
"AU2020_VWC_PERCENT": [
"u8_14",
"u8_64"
],
"AU2020_VWC_PMAX": [
"u8_14",
"u8_64"
],
"AU2020_VWC_PMIN": [
"u8_00",
"u8_64"
],
"AU2020_VWC_VMAX": [
"u1_00E6",
"u1_00E6"
],
"AU2020_VWC_VMIN": [
"u1_00B4",
"u1_00B4"
],
"AU2020_VWC_VOLTAGE": [
"u1_00CF",
"u1_00D7"
],
"AU2020_VWD_PERCENT": [
"u8_64",
"u8_14"
],
"AU2020_VWD_PMAX": [
"u8_64",
"u8_14"
],
"AU2020_VWD_PMIN": [
"u8_64",
"u8_00"
],
"AU2020_VWD_VMAX": [
"u1_00FF",
"u1_0109"
],
"AU2020_VWD_VMIN": [
"u1_00EB",
"u1_00F0"
],
"AU2020_VWD_VOLTAGE": [
"u1_00FD",
"u1_0104"
],
"AU2020_WGRA": "fl_4185999A",
"AU2020_WGRA_MAX": "fl_42C80000",
"AU2020_WGRA_MIN": "fl_40A00000",
"AU_FIXED_FAC": "fl_3F800000",
"AU_GRID_CODE": "u1_0004",
"AU_P_RAMP_CH": "fl_418547AE",
"AU_P_RAMP_DI": "fl_418547AE",
"AU_RESP_MODE": "u1_000F",
"AU_SOFT_RAMP_EN": "u8_01",
"AU_TARGET_TY": "u1_0000",
"AU_VRR_MAX": [
"u1_00CF",
"u1_00E6",
"u1_00FF",
"u1_0109"
],
"AU_VRR_MIN": [
"u1_00CF",
"u1_00D8",
"u1_00EB",
"u1_00F4"
],
"AU_VVAR_PERCENTAGE": [
"i8_1E",
"i8_00",
"i8_00",
"i8_E2"
],
"AU_VVAR_P_MAX": [
"i8_3C",
"i8_00",
"i8_00",
"i8_00"
],
"AU_VVAR_P_MIN": [
"i8_00",
"i8_00",
"i8_00",
"i8_C4"
],
"AU_VVAR_VOLTAGE": [
"u1_00CF",
"u1_00DC",
"u1_00FA",
"u1_0109"
],
"AU_VWC_VOLTAGE": [
"u1_00CF",
"u1_00DC",
"u1_00FA",
"u1_0109"
],
"AU_VWD_VOLTAGE": [
"u1_00CF",
"u1_00DC",
"u1_00FA",
"u1_0109"
],
"CEI_COS_PHI": "fl_3F800000",
"CEI_COS_PHI_ENABLE": "u1_0000",
"CEI_CPHI_LOIN": "u1_0069",
"CEI_CPHI_LOUT": "u1_0064",
"CEI_FREQ_MAX": "u1_C3B4",
"CEI_FREQ_MIN": "u1_C2EC",
"CEI_REC_TIME": "u1_012C",
"CEI_RED_DROP": "u1_0018",
"CEI_SEGNALE_ESTERNO": "u8_00",
"CEI_STAB_AC_DE": "u1_0000",
"CEI_STAB_LO_CO": "u1_B98C",
"CEI_STAB_LO_TH": "u1_C288",
"CEI_STAB_UP_CO": "u1_C92C",
"CEI_STAB_UP_TH": "u1_C418",
"CEI_STAB_VOL_TH": "u1_006E",
"PWRCFG_COS_POINT1": "fl_3F800000",
"PWRCFG_COS_POINT3": "fl_3F733333",
"PWRCFG_COS_POINT_2A": "fl_3F800000",
"PWRCFG_COS_POINT_2B": "fl_42480000",
"PWRCFG_USE_MAX_PWR_SKEW": "u8_01",
"VDECOSPHITIME": "u1_000A",
"VDEFIXEDFAC": "fl_BF733333",
"VDEOVERFREQDROOP": "u1_0005",
"VDEOVERFREQLIMIT": "fl_4248CCCC",
"VDERECOVERTIME": "u1_000A",
"VDETARGETTY": "u1_0001",
"VDEUNDERFREQDROOP": "u1_0002",
"VDE_FREQDROPPROT": "fl_423E0000",
"VDE_FREQDROPPROTDELAY": "fl_3DCCCCCD",
"VDE_FREQRISEPROT": "fl_424E0000",
"VDE_FREQRISEPROTDELAY": "fl_3DCCCCCD",
"VDE_UNDERFREQLIMIT": "fl_42473333",
"VDE_VOLTDROPPROT": "fl_42340000",
"VDE_VOLTDROPPROTAVG": "fl_42A00000",
"VDE_VOLTDROPPROTAVGDELAY": "fl_40400000",
"VDE_VOLTDROPPROTDELAY": "fl_3E99999A",
"VDE_VOLTRISEPROT": "fl_42FA0000",
"VDE_VOLTRISEPROTAVG": "fl_42DC0000",
"VDE_VOLTRISEPROTAVGDELAY": "fl_3DCCCCCD",
"VDE_VOLTRISEPROTDELAY": "fl_3DCCCCCD"
}
}
{
"PV1": {
"POWER_RATIO": "fl_42C80000",
"POWER_RATIO_L1": "fl_42C80000",
"POWER_RATIO_L2": "fl_42C80000",
"POWER_RATIO_L3": "fl_42C80000",
"MPP_VOL": [
"fl_4357EE15",
"fl_433E3CAD",
"fl_43B13EFA"
],
"MPP_CUR": [
"fl_3FA6E979",
"fl_3FA3F7CF",
"fl_3F9C6A7F"
],
"MPP_POWER": [
"fl_438B4938",
"fl_437231AB",
"fl_43D7251F"
],
"MPP_AVAIL": "u8_03",
"INTERNAL_MD_AVAIL": [
"u8_01",
"u8_01"
],
"INTERNAL_MD_MODEL": [
"st_V3 LV",
"st_V3 HV"
],
"INTERNAL_MD_VERSION": [
"st_HMI: 3.16.20 PU: 4.3.10 BDC: 5.4.6",
"st_HMI: 3.16.20 PU: 4.3.10"
]
},
"WIZARD": {
"MAC_ADDRESS_BYTES": [
"u8_14",
"u8_1F",
"u8_BA",
"u8_21",
"u8_08",
"u8_EB"
]
},
"BAT1OBJ1": {
"TEMP1": "u1_0012",
"TEMP2": "u1_0012",
"TEMP3": "u1_0000",
"TEMP4": "u1_0000",
"TEMP5": "u1_0000",
"S": "i1_0000",
"P": "i1_0000",
"Q": "i1_0000",
"SW_VERSION": "u3_03100014",
"SW_VERSION2": "u3_0403000A",
"SW_VERSION3": "u3_05040006",
"I_DC": "fl_80000000"
},
"PWR_UNIT": {
"POWER_L1": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"POWER_L2": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"POWER_L3": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
]
},
"BAT1": {
"CEI_LIMIT": "u1_0000",
"SPARE_CAPACITY": "u8_00"
},
"BMS": {
"NR_INSTALLED": "u8_00"
},
"WALLBOX": {
"ADDITIONAL_ERROR": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"ALLOW_INTERCHARGE": "u8_00",
"APPARENT_CHARGING_POWER": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"BUS_ADR": [
"u8_01",
"u8_02",
"u8_03",
"u8_04"
],
"CS_ENABLED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"DETECTION_MODE": "u3_00000000",
"EV_CONNECTED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"HW_TYPE": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"L1_CHARGING_CURRENT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"L1_USED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"L2_CHARGING_CURRENT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"L2_USED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"L3_CHARGING_CURRENT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"L3_USED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"LOAD_IMBALANCE_DETECTED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"LOAD_IMBALANCE_ENABLED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"MAJOR_REV": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"MAX_CHARGING_CURRENT_DEFAULT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"MAX_CHARGING_CURRENT_IC": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"MAX_CHARGING_CURRENT_ICMAX": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"MAX_CHARGING_CURRENT_RATED": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"MAX_PHASE_CURRENT_BY_GRID": "fl_00000000",
"MAX_TOTAL_CURRENT_BY_GRID": "fl_00000000",
"METER_ENABLED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"METHOD_EN1": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"MINOR_REV": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"MIN_CHARGING_CURRENT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"PHASES_USED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"PROHIBIT_USAGE": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"SAP_NUMBER": [
"st_",
"st_",
"st_",
"st_"
],
"SERIAL_NUMBER": [
"st_",
"st_",
"st_",
"st_"
],
"SERIAL_NUMBER_INTERNAL": [
"st_",
"st_",
"st_",
"st_"
],
"SET_ICMAX": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"SET_IDEFAULT": [
"fl_00000000",
"fl_00000000",
"fl_00000000",
"fl_00000000"
],
"SMART_CHARGE_ACTIVE": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"SOCKET_ENABLED": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"STATE": [
"u8_00",
"u8_00",
"u8_00",
"u8_00"
],
"UID": [
"u6_0000000000000000",
"u6_0000000000000000",
"u6_0000000000000000",
"u6_0000000000000000"
],
"UTMP": [
"u1_0000",
"u1_0000",
"u1_0000",
"u1_0000"
]
},
"GRIDCONFIG": {
"AU2020_ACTIVE_REGISTER": "u8_00",
"AU2020_COSPHIMODE": "u8_00",
"AU2020_FIXEDFACTOR": "fl_3F800000",
"AU2020_FLLCO": "fl_42470000",
"AU2020_FLLCO_MAX": "fl_4247999A",
"AU2020_FLLCO_MIN": "fl_42460000",
"AU2020_FPMAX": "fl_42400000",
"AU2020_FPMAX_MAX": "fl_42440000",
"AU2020_FPMAX_MIN": "fl_423C0000",
"AU2020_FPMIN": "fl_42500000",
"AU2020_FPMIN_MAX": "fl_42540000",
"AU2020_FPMIN_MIN": "fl_424C0000",
"AU2020_FSTOPCH": "fl_42440000",
"AU2020_FSTOPCH_MAX": "fl_42460000",
"AU2020_FSTOPCH_MIN": "fl_42400000",
"AU2020_FTRANSITION": "fl_424B0000",
"AU2020_FTRANSITION_MAX": "fl_42500000",
"AU2020_FTRANSITION_MIN": "fl_424A0000",
"AU2020_FULCO": "fl_42490000",
"AU2020_FULCO_MAX": "fl_424A0000",
"AU2020_FULCO_MIN": "fl_42486666",
"AU2020_HEXPORT": "u3_00000000",
"AU2020_HEXPORT_ENABLED": "u8_00",
"AU2020_NOT_DEFAULT": "u8_00",
"AU2020_REACTIVEPOWER": "fl_00000000",
"AU2020_REACTIVEPOWER_MAX": "fl_42700000",
"AU2020_REACTIVEPOWER_MIN": "fl_C2700000",
"AU2020_RESPONSE_MODES": "u1_0013",
"AU2020_SELECTED_REGION": "u8_00",
"AU2020_VNOMMAX_MAX": "u1_0102",
"AU2020_VNOMMAX_MIN": "u1_00F4",
"AU2020_VNOMMAX_RANGE": "u1_0102",
"AU2020_VVAR_PERCENT": [
"i8_2C",
"i8_00",
"i8_00",
"i8_C4"
],
"AU2020_VVAR_PMAX": [
"i8_3C",
"i8_00",
"i8_00",
"i8_E2"
],
"AU2020_VVAR_PMIN": [
"i8_1E",
"i8_00",
"i8_00",
"i8_C4"
],
"AU2020_VVAR_VMAX": [
"u1_00E6",
"u1_00E6",
"u1_0109",
"u1_0109"
],
"AU2020_VVAR_VMIN": [
"u1_00B4",
"u1_00B4",
"u1_00E6",
"u1_00E6"
],
"AU2020_VVAR_VOLTAGE": [
"u1_00CF",
"u1_00DC",
"u1_00F0",
"u1_0102"
],
"AU2020_VWC_PERCENT": [
"u8_14",
"u8_64"
],
"AU2020_VWC_PMAX": [
"u8_14",
"u8_64"
],
"AU2020_VWC_PMIN": [
"u8_00",
"u8_64"
],
"AU2020_VWC_VMAX": [
"u1_00E6",
"u1_00E6"
],
"AU2020_VWC_VMIN": [
"u1_00B4",
"u1_00B4"
],
"AU2020_VWC_VOLTAGE": [
"u1_00CF",
"u1_00D7"
],
"AU2020_VWD_PERCENT": [
"u8_64",
"u8_14"
],
"AU2020_VWD_PMAX": [
"u8_64",
"u8_14"
],
"AU2020_VWD_PMIN": [
"u8_64",
"u8_00"
],
"AU2020_VWD_VMAX": [
"u1_00FF",
"u1_0109"
],
"AU2020_VWD_VMIN": [
"u1_00EB",
"u1_00F0"
],
"AU2020_VWD_VOLTAGE": [
"u1_00FD",
"u1_0104"
],
"AU2020_WGRA": "fl_4185999A",
"AU2020_WGRA_MAX": "fl_42C80000",
"AU2020_WGRA_MIN": "fl_40A00000",
"AU_FIXED_FAC": "fl_3F800000",
"AU_GRID_CODE": "u1_0004",
"AU_P_RAMP_CH": "fl_418547AE",
"AU_P_RAMP_DI": "fl_418547AE",
"AU_RESP_MODE": "u1_000F",
"AU_SOFT_RAMP_EN": "u8_01",
"AU_TARGET_TY": "u1_0000",
"AU_VRR_MAX": [
"u1_00CF",
"u1_00E6",
"u1_00FF",
"u1_0109"
],
"AU_VRR_MIN": [
"u1_00CF",
"u1_00D8",
"u1_00EB",
"u1_00F4"
],
"AU_VVAR_PERCENTAGE": [
"i8_1E",
"i8_00",
"i8_00",
"i8_E2"
],
"AU_VVAR_P_MAX": [
"i8_3C",
"i8_00",
"i8_00",
"i8_00"
],
"AU_VVAR_P_MIN": [
"i8_00",
"i8_00",
"i8_00",
"i8_C4"
],
"AU_VVAR_VOLTAGE": [
"u1_00CF",
"u1_00DC",
"u1_00FA",
"u1_0109"
],
"AU_VWC_VOLTAGE": [
"u1_00CF",
"u1_00DC",
"u1_00FA",
"u1_0109"
],
"AU_VWD_VOLTAGE": [
"u1_00CF",
"u1_00DC",
"u1_00FA",
"u1_0109"
],
"CEI_COS_PHI": "fl_3F800000",
"CEI_COS_PHI_ENABLE": "u1_0000",
"CEI_CPHI_LOIN": "u1_0069",
"CEI_CPHI_LOUT": "u1_0064",
"CEI_FREQ_MAX": "u1_C3B4",
"CEI_FREQ_MIN": "u1_C2EC",
"CEI_REC_TIME": "u1_012C",
"CEI_RED_DROP": "u1_0018",
"CEI_SEGNALE_ESTERNO": "u8_00",
"CEI_STAB_AC_DE": "u1_0000",
"CEI_STAB_LO_CO": "u1_B98C",
"CEI_STAB_LO_TH": "u1_C288",
"CEI_STAB_UP_CO": "u1_C92C",
"CEI_STAB_UP_TH": "u1_C418",
"CEI_STAB_VOL_TH": "u1_006E",
"PWRCFG_COS_POINT1": "fl_3F800000",
"PWRCFG_COS_POINT3": "fl_3F733333",
"PWRCFG_COS_POINT_2A": "fl_3F800000",
"PWRCFG_COS_POINT_2B": "fl_42480000",
"PWRCFG_USE_MAX_PWR_SKEW": "u8_01",
"VDECOSPHITIME": "u1_000A",
"VDEFIXEDFAC": "fl_BF733333",
"VDEOVERFREQDROOP": "u1_0005",
"VDEOVERFREQLIMIT": "fl_4248CCCC",
"VDERECOVERTIME": "u1_000A",
"VDETARGETTY": "u1_0001",
"VDEUNDERFREQDROOP": "u1_0002",
"VDE_FREQDROPPROT": "fl_423E0000",
"VDE_FREQDROPPROTDELAY": "fl_3DCCCCCD",
"VDE_FREQRISEPROT": "fl_424E0000",
"VDE_FREQRISEPROTDELAY": "fl_3DCCCCCD",
"VDE_UNDERFREQLIMIT": "fl_42473333",
"VDE_VOLTDROPPROT": "fl_42340000",
"VDE_VOLTDROPPROTAVG": "fl_42A00000",
"VDE_VOLTDROPPROTAVGDELAY": "fl_40400000",
"VDE_VOLTDROPPROTDELAY": "fl_3E99999A",
"VDE_VOLTRISEPROT": "fl_42FA0000",
"VDE_VOLTRISEPROTAVG": "fl_42DC0000",
"VDE_VOLTRISEPROTAVGDELAY": "fl_3DCCCCCD",
"VDE_VOLTRISEPROTDELAY": "fl_3DCCCCCD"
}
}
{
"PV1": {
"POWER_RATIO": "fl_42C80000",
"POWER_RATIO_L1": "fl_42C80000",
"POWER_RATIO_L2": "fl_42C80000",
"POWER_RATIO_L3": "fl_42C80000",
"MPP_VOL": [
"fl_4357EE15",
"fl_433E3CAD",
"fl_43B13EFA"
],
"MPP_CUR": [
"fl_3FA6E979",
"fl_3FA3F7CF",
"fl_3F9C6A7F"
],
"MPP_POWER": [
"fl_438B4938",
"fl_437231AB",
"fl_43D7251F"
],
"MPP_AVAIL": "u8_03",
"INTERNAL_MD_AVAIL": [
"u8_01",
"u8_01"
],
"INTERNAL_MD_MODEL": [
"st_V3 LV",
"st_V3 HV"
],
"INTERNAL_MD_VERSION": [
"st_HMI: 3.16.20 PU: 4.3.10 BDC: 5.4.6",
"st_HMI: 3.16.20 PU: 4.3.10"
]
},
"PM1OBJ1": {
"U_AC": [
"fl_4357EE15",
"fl_433E3CAD",
"fl_43B13EFA"
],
"I_AC": [
"fl_3FA6E979",
"fl_3FA3F7CF",
"fl_3F9C6A7F"
],
"P_AC": [
"fl_438B4938",
"fl_437231AB",
"fl_43D7251F"
],
"FREQ": "fl_424810D7",
"P_TOTAL": "fl_43D957E7"
}
}
{
"PV1": {
"POWER_RATIO": "",
"POWER_RATIO_L1": "",
"POWER_RATIO_L2": "",
"POWER_RATIO_L3": "",
"MPP_VOL": "",
"MPP_CUR": "",
"MPP_POWER": "",
"MPP_AVAIL": "",
"INTERNAL_MD_AVAIL": "",
"INTERNAL_MD_MODEL": "",
"INTERNAL_MD_VERSION": ""
},
"WIZARD": {
"MAC_ADDRESS_BYTES": ""
},
"BAT1OBJ1": {
"TEMP1": "",
"TEMP2": "",
"TEMP3": "",
"TEMP4": "",
"TEMP5": "",
"S": "",
"P": "",
"Q": "",
"SW_VERSION": "",
"SW_VERSION2": "",
"SW_VERSION3": "",
"I_DC": ""
},
"PWR_UNIT": {
"POWER_L1": "",
"POWER_L2": "",
"POWER_L3": ""
},
"BAT1": {
"CEI_LIMIT": "",
"SPARE_CAPACITY": ""
},
"BMS": {
"NR_INSTALLED": ""
},
"WALLBOX": {},
"GRIDCONFIG": {}
}
#!/usr/bin/env python3
import os
import datetime
import struct
import urllib.request
import json
senecUrl = os.getenv('SENEC_URL')
influxUrl = os.getenv('INFLUX_URL')
influxOrg = os.getenv('INFLUX_ORG')
influxToken = os.getenv('INFLUX_TOKEN')
def fetchJson() -> str:
queryMap = {
'PV1': {
'MPP_VOL': '',
'MPP_CUR': '',
'MPP_POWER': '',
},
'PM1OBJ1': {
'FREQ': '',
'U_AC': '',
'I_AC': '',
'P_AC': '',
'P_TOTAL': '',
},
'ENERGY': {
'GUI_BAT_DATA_FUEL_CHARGE': '', # Remaining battery (percent)
'GUI_BAT_DATA_POWER': '', # Battery charge power: negative if discharging, positive if charging (W)
'GUI_INVERTER_POWER': '', # PV production (W)
'GUI_HOUSE_POW': '', # House power consumption (W)
'GUI_GRID_POW': '', # Grid power: negative if exporting, positiv if importing (W)
},
}
requestContent = json.dumps(queryMap).encode('utf-8')
request = urllib.request.Request(senecUrl, requestContent)
response = urllib.request.urlopen(request)
map = json.load(response)
return map
def convertHexFloat(hex: str) -> float:
return struct.unpack('>f', bytearray.fromhex(hex))[0]
def convertHexJson(hexJsonValue: str):
type, value = hexJsonValue.split('_')
if type == 'fl':
fl = convertHexFloat(value)
return fl
return value
def createInfluxLine(sensorAndTags: str, valuesDict, timestamp: int) -> str:
keyValues = [entry[0] + '=' + str(convertHexJson(entry[1])) for entry in valuesDict.items()]
return ' '.join([
sensorAndTags,
','.join(keyValues),
str(timestamp),
])
def convertToOutputLines(map: map):
now = int(datetime.datetime.now().timestamp())
pv1 = map['PV1']
mppVoltages = pv1['MPP_VOL']
mppCurrents = pv1['MPP_CUR']
mppPowers = pv1['MPP_POWER']
pm1 = map['PM1OBJ1']
voltages = pm1['U_AC']
currents = pm1['I_AC']
powers = pm1['P_AC']
powerTotal = pm1['P_TOTAL']
frequency = pm1['FREQ']
energy = map['ENERGY']
batteryPercentage = energy['GUI_BAT_DATA_FUEL_CHARGE']
batteryChargePower = energy['GUI_BAT_DATA_POWER']
pvPower = energy['GUI_INVERTER_POWER']
housePower = energy['GUI_HOUSE_POW']
gridPower = energy['GUI_GRID_POW']
return [
createInfluxLine('pv,string=süd1', { 'voltage': mppVoltages[0], 'current': mppCurrents[0], 'power': mppPowers[0] }, now),
createInfluxLine('pv,string=süd2', { 'voltage': mppVoltages[1], 'current': mppCurrents[1], 'power': mppPowers[1] }, now),
createInfluxLine('pv,string=nord', { 'voltage': mppVoltages[2], 'current': mppCurrents[2], 'power': mppPowers[2] }, now),
createInfluxLine('house,phase=l1', { 'voltage': voltages[0], 'current': currents[0], 'power': powers[0] }, now),
createInfluxLine('house,phase=l2', { 'voltage': voltages[1], 'current': currents[1], 'power': powers[1] }, now),
createInfluxLine('house,phase=l3', { 'voltage': voltages[2], 'current': currents[2], 'power': powers[2] }, now),
createInfluxLine('battery', { 'level': batteryPercentage, 'chargePower': batteryChargePower }, now),
createInfluxLine('total', { 'frequency': frequency, 'power': powerTotal, 'pvPower': pvPower, 'housePower': housePower, 'gridPower': gridPower}, now),
]
def uploadToInflux(output: str):
url = influxUrl + 'api/v2/write?org=' + influxOrg + '&bucket=lubu&precision=s'
headers = {
'authorization': 'Token ' + influxToken,
'content-type': 'text/plain; charset=utf-8',
'accept': 'application/json',
}
request = urllib.request.Request(url, output, headers)
urllib.request.urlopen(request)
map = fetchJson()
output = convertToOutputLines(map)
#print('\n'.join(output))
uploadToInflux('\n'.join(output).encode('utf-8'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment