jasonacox / Powerwall-Dashboard

Grafana Monitoring Dashboard for Tesla Solar and Powerwall Systems
MIT License
268 stars 57 forks source link

Powerwall 3 Setup Issues on Win11 #492

Open jasonacox opened 2 weeks ago

jasonacox commented 2 weeks ago

I have a Powerwall3 and finally got time to spin this up. Running this all on W11 with WLS running Ubuntu. My PW3 is hardwired.

My experience is as follows:

PC>py pw3.py
 Power {'site': -98, 'solar': 3218, 'battery': -44, 'load': 3086.5000000000005}
 Level 100.0
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.tedapi] [DEBUG] Status: {'control': {'alerts': {'active': ['SystemConnectedToGrid', 'FWUpdateSucceeded']}, 'batteryBlocks': [{'din': '<REDACTED>', 'disableReasons': None}], 'islanding': {'contactorClosed': True, 'customerIslandMode': 'BACKUP', 'gridOK': True, 'microGridOK': True}, 'meterAggregates': [{'location': 'BATTERY', 'realPowerW': 24.8774154589372}, {'location': 'SITE', 'realPowerW': -2130}, {'location': 'LOAD', 'realPowerW': 1050}, {'location': 'SOLAR', 'realPowerW': 3144.1225845410627}, {'location': 'SOLAR_RGM', 'realPowerW': 0}, {'location': 'GENERATOR', 'realPowerW': 0}, {'location': 'CONDUCTOR', 'realPowerW': 0}], 'pvInverters': [], 'siteShutdown': {'isShutDown': False, 'reasons': []}, 'systemStatus': {'nominalEnergyRemainingWh': 14080, 'nominalFullPackEnergyWh': 14080}}, 'esCan': {'bus': {'ISLANDER': {'ISLAND_AcMeasurements': {'ISLAND_FreqL1_Load': 60, 'ISLAND_FreqL1_Main': 59.99, 'ISLAND_FreqL2_Load': 60, 'ISLAND_FreqL2_Main': 60.01, 'ISLAND_FreqL3_Load': 0, 'ISLAND_FreqL3_Main': 0, 'ISLAND_GridState': 'ISLAND_GridState_Grid_Compliant', 'ISLAND_VL1N_Load': 123, 'ISLAND_VL1N_Main': 123, 'ISLAND_VL2N_Load': 123.5, 'ISLAND_VL2N_Main': 123.5, 'ISLAND_VL3N_Load': 0, 'ISLAND_VL3N_Main': 0, 'isComplete': True, 'isMIA': False, 'lastRxTime': '2024-06-19T14:04:35-05:00'}, 'ISLAND_GridConnection': {'ISLAND_GridConnected': 'ISLAND_GridConnected_Connected', 'isComplete': True}}, 'MSA': {'METER_Z_AcMeasurements': {'METER_Z_CTA_I': 0, 'METER_Z_CTA_InstReactivePower': 0, 'METER_Z_CTA_InstRealPower': 0, 'METER_Z_CTB_I': 0, 'METER_Z_CTB_InstReactivePower': 0, 'METER_Z_CTB_InstRealPower': 0, 'METER_Z_VL1G': 0, 'METER_Z_VL2G': 0, 'isMIA': True, 'lastRxTime': '0001-01-01T00:00:00Z'}, 'MSA_InfoMsg': {'MSA_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'MSA_assemblyId': 0, 'isMIA': True}, 'MSA_Status': {'lastRxTime': '0001-01-01T00:00:00Z'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, 'PINV': [{'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PINV_AcMeasurements': {'PINV_VSplit1': 0, 'PINV_VSplit2': 0, 'isMIA': True}, 'PINV_PowerCapability': {'PINV_Pnom': 0, 'isComplete': False, 'isMIA': True}, 'PINV_Status': {'PINV_Fout': 0, 'PINV_GridState': 'Grid_Uncompliant', 'PINV_Pout': 0, 'PINV_State': 'PINV_Off', 'PINV_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}], 'POD': [{'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}, {'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}, {'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}, {'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}, {'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}, {'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}, {'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}, {'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}, {'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}, {'POD_EnergyStatus': {'POD_nom_energy_remaining': 0, 'POD_nom_full_pack_energy': 0, 'isMIA': True}, 'POD_InfoMsg': {'POD_appGitHash': [0, 0, 0, 0, 0, 0, 0]}}], 'PVAC': [{'PVAC_InfoMsg': {'PVAC_appGitHash': [0, 0, 0, 0, 0, 0, 0]}, 'PVAC_Logging': {'PVAC_PVCurrent_A': 0, 'PVAC_PVCurrent_B': 0, 'PVAC_PVCurrent_C': 0, 'PVAC_PVCurrent_D': 0, 'PVAC_PVMeasuredVoltage_A': 0, 'PVAC_PVMeasuredVoltage_B': 0, 'PVAC_PVMeasuredVoltage_C': 0, 'PVAC_PVMeasuredVoltage_D': 0, 'PVAC_VL1Ground': 0, 'PVAC_VL2Ground': 0, 'isMIA': True}, 'PVAC_Status': {'PVAC_Fout': 0, 'PVAC_Pout': 0, 'PVAC_State': 'PVAC_Init', 'PVAC_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}, 'packagePartNumber': '', 'packageSerialNumber': '', 'subPackagePartNumber': '', 'subPackageSerialNumber': ''}, {'PVAC_InfoMsg': {'PVAC_appGitHash': [0, 0, 0, 0, 0, 0, 0]}, 'PVAC_Logging': {'PVAC_PVCurrent_A': 0, 'PVAC_PVCurrent_B': 0, 'PVAC_PVCurrent_C': 0, 'PVAC_PVCurrent_D': 0, 'PVAC_PVMeasuredVoltage_A': 0, 'PVAC_PVMeasuredVoltage_B': 0, 'PVAC_PVMeasuredVoltage_C': 0, 'PVAC_PVMeasuredVoltage_D': 0, 'PVAC_VL1Ground': 0, 'PVAC_VL2Ground': 0, 'isMIA': True}, 'PVAC_Status': {'PVAC_Fout': 0, 'PVAC_Pout': 0, 'PVAC_State': 'PVAC_Init', 'PVAC_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}, 'packagePartNumber': '', 'packageSerialNumber': '', 'subPackagePartNumber': '', 'subPackageSerialNumber': ''}, {'PVAC_InfoMsg': {'PVAC_appGitHash': [0, 0, 0, 0, 0, 0, 0]}, 'PVAC_Logging': {'PVAC_PVCurrent_A': 0, 'PVAC_PVCurrent_B': 0, 'PVAC_PVCurrent_C': 0, 'PVAC_PVCurrent_D': 0, 'PVAC_PVMeasuredVoltage_A': 0, 'PVAC_PVMeasuredVoltage_B': 0, 'PVAC_PVMeasuredVoltage_C': 0, 'PVAC_PVMeasuredVoltage_D': 0, 'PVAC_VL1Ground': 0, 'PVAC_VL2Ground': 0, 'isMIA': True}, 'PVAC_Status': {'PVAC_Fout': 0, 'PVAC_Pout': 0, 'PVAC_State': 'PVAC_Init', 'PVAC_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}, 'packagePartNumber': '', 'packageSerialNumber': '', 'subPackagePartNumber': '', 'subPackageSerialNumber': ''}, {'PVAC_InfoMsg': {'PVAC_appGitHash': [0, 0, 0, 0, 0, 0, 0]}, 'PVAC_Logging': {'PVAC_PVCurrent_A': 0, 'PVAC_PVCurrent_B': 0, 'PVAC_PVCurrent_C': 0, 'PVAC_PVCurrent_D': 0, 'PVAC_PVMeasuredVoltage_A': 0, 'PVAC_PVMeasuredVoltage_B': 0, 'PVAC_PVMeasuredVoltage_C': 0, 'PVAC_PVMeasuredVoltage_D': 0, 'PVAC_VL1Ground': 0, 'PVAC_VL2Ground': 0, 'isMIA': True}, 'PVAC_Status': {'PVAC_Fout': 0, 'PVAC_Pout': 0, 'PVAC_State': 'PVAC_Init', 'PVAC_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}, 'packagePartNumber': '', 'packageSerialNumber': '', 'subPackagePartNumber': '', 'subPackageSerialNumber': ''}, {'PVAC_InfoMsg': {'PVAC_appGitHash': [0, 0, 0, 0, 0, 0, 0]}, 'PVAC_Logging': {'PVAC_PVCurrent_A': 0, 'PVAC_PVCurrent_B': 0, 'PVAC_PVCurrent_C': 0, 'PVAC_PVCurrent_D': 0, 'PVAC_PVMeasuredVoltage_A': 0, 'PVAC_PVMeasuredVoltage_B': 0, 'PVAC_PVMeasuredVoltage_C': 0, 'PVAC_PVMeasuredVoltage_D': 0, 'PVAC_VL1Ground': 0, 'PVAC_VL2Ground': 0, 'isMIA': True}, 'PVAC_Status': {'PVAC_Fout': 0, 'PVAC_Pout': 0, 'PVAC_State': 'PVAC_Init', 'PVAC_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}, 'packagePartNumber': '', 'packageSerialNumber': '', 'subPackagePartNumber': '', 'subPackageSerialNumber': ''}, {'PVAC_InfoMsg': {'PVAC_appGitHash': [0, 0, 0, 0, 0, 0, 0]}, 'PVAC_Logging': {'PVAC_PVCurrent_A': 0, 'PVAC_PVCurrent_B': 0, 'PVAC_PVCurrent_C': 0, 'PVAC_PVCurrent_D': 0, 'PVAC_PVMeasuredVoltage_A': 0, 'PVAC_PVMeasuredVoltage_B': 0, 'PVAC_PVMeasuredVoltage_C': 0, 'PVAC_PVMeasuredVoltage_D': 0, 'PVAC_VL1Ground': 0, 'PVAC_VL2Ground': 0, 'isMIA': True}, 'PVAC_Status': {'PVAC_Fout': 0, 'PVAC_Pout': 0, 'PVAC_State': 'PVAC_Init', 'PVAC_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}, 'packagePartNumber': '', 'packageSerialNumber': '', 'subPackagePartNumber': '', 'subPackageSerialNumber': ''}, {'PVAC_InfoMsg': {'PVAC_appGitHash': [0, 0, 0, 0, 0, 0, 0]}, 'PVAC_Logging': {'PVAC_PVCurrent_A': 0, 'PVAC_PVCurrent_B': 0, 'PVAC_PVCurrent_C': 0, 'PVAC_PVCurrent_D': 0, 'PVAC_PVMeasuredVoltage_A': 0, 'PVAC_PVMeasuredVoltage_B': 0, 'PVAC_PVMeasuredVoltage_C': 0, 'PVAC_PVMeasuredVoltage_D': 0, 'PVAC_VL1Ground': 0, 'PVAC_VL2Ground': 0, 'isMIA': True}, 'PVAC_Status': {'PVAC_Fout': 0, 'PVAC_Pout': 0, 'PVAC_State': 'PVAC_Init', 'PVAC_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}, 'packagePartNumber': '', 'packageSerialNumber': '', 'subPackagePartNumber': '', 'subPackageSerialNumber': ''}, {'PVAC_InfoMsg': {'PVAC_appGitHash': [0, 0, 0, 0, 0, 0, 0]}, 'PVAC_Logging': {'PVAC_PVCurrent_A': 0, 'PVAC_PVCurrent_B': 0, 'PVAC_PVCurrent_C': 0, 'PVAC_PVCurrent_D': 0, 'PVAC_PVMeasuredVoltage_A': 0, 'PVAC_PVMeasuredVoltage_B': 0, 'PVAC_PVMeasuredVoltage_C': 0, 'PVAC_PVMeasuredVoltage_D': 0, 'PVAC_VL1Ground': 0, 'PVAC_VL2Ground': 0, 'isMIA': True}, 'PVAC_Status': {'PVAC_Fout': 0, 'PVAC_Pout': 0, 'PVAC_State': 'PVAC_Init', 'PVAC_Vout': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}, 'packagePartNumber': '', 'packageSerialNumber': '', 'subPackagePartNumber': '', 'subPackageSerialNumber': ''}], 'PVS': [{'PVS_Status': {'PVS_SelfTestState': 'PVS_SelfTestOff', 'PVS_State': 'PVS_Off', 'PVS_StringA_Connected': False, 'PVS_StringB_Connected': False, 'PVS_StringC_Connected': False, 'PVS_StringD_Connected': False, 'PVS_vLL': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PVS_Status': {'PVS_SelfTestState': 'PVS_SelfTestOff', 'PVS_State': 'PVS_Off', 'PVS_StringA_Connected': False, 'PVS_StringB_Connected': False, 'PVS_StringC_Connected': False, 'PVS_StringD_Connected': False, 'PVS_vLL': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PVS_Status': {'PVS_SelfTestState': 'PVS_SelfTestOff', 'PVS_State': 'PVS_Off', 'PVS_StringA_Connected': False, 'PVS_StringB_Connected': False, 'PVS_StringC_Connected': False, 'PVS_StringD_Connected': False, 'PVS_vLL': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PVS_Status': {'PVS_SelfTestState': 'PVS_SelfTestOff', 'PVS_State': 'PVS_Off', 'PVS_StringA_Connected': False, 'PVS_StringB_Connected': False, 'PVS_StringC_Connected': False, 'PVS_StringD_Connected': False, 'PVS_vLL': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PVS_Status': {'PVS_SelfTestState': 'PVS_SelfTestOff', 'PVS_State': 'PVS_Off', 'PVS_StringA_Connected': False, 'PVS_StringB_Connected': False, 'PVS_StringC_Connected': False, 'PVS_StringD_Connected': False, 'PVS_vLL': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PVS_Status': {'PVS_SelfTestState': 'PVS_SelfTestOff', 'PVS_State': 'PVS_Off', 'PVS_StringA_Connected': False, 'PVS_StringB_Connected': False, 'PVS_StringC_Connected': False, 'PVS_StringD_Connected': False, 'PVS_vLL': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PVS_Status': {'PVS_SelfTestState': 'PVS_SelfTestOff', 'PVS_State': 'PVS_Off', 'PVS_StringA_Connected': False, 'PVS_StringB_Connected': False, 'PVS_StringC_Connected': False, 'PVS_StringD_Connected': False, 'PVS_vLL': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}, {'PVS_Status': {'PVS_SelfTestState': 'PVS_SelfTestOff', 'PVS_State': 'PVS_Off', 'PVS_StringA_Connected': False, 'PVS_StringB_Connected': False, 'PVS_StringC_Connected': False, 'PVS_StringD_Connected': False, 'PVS_vLL': 0, 'isMIA': True}, 'alerts': {'active': [], 'isComplete': False, 'isMIA': True}}], 'SYNC': {'METER_X_AcMeasurements': {'METER_X_CTA_I': 8.7515, 'METER_X_CTA_InstReactivePower': -336, 'METER_X_CTA_InstRealPower': -1010, 'METER_X_CTB_I': 9.562, 'METER_X_CTB_InstReactivePower': -285, 'METER_X_CTB_InstRealPower': -1120, 'METER_X_CTC_I': 0, 'METER_X_CTC_InstReactivePower': 0, 'METER_X_CTC_InstRealPower': 0, 'METER_X_VL1N': 122.56, 'METER_X_VL2N': 123.11, 'METER_X_VL3N': 0, 'isComplete': True, 'isMIA': False, 'lastRxTime': '2024-06-19T14:04:35-05:00'}, 'METER_Y_AcMeasurements': {'METER_Y_CTA_I': 0, 'METER_Y_CTA_InstReactivePower': 0, 'METER_Y_CTA_InstRealPower': 0, 'METER_Y_CTB_I': 0, 'METER_Y_CTB_InstReactivePower': 0, 'METER_Y_CTB_InstRealPower': 0, 'METER_Y_CTC_I': 0, 'METER_Y_CTC_InstReactivePower': 0, 'METER_Y_CTC_InstRealPower': 0, 'METER_Y_VL1N': 122.59, 'METER_Y_VL2N': 123.14, 'METER_Y_VL3N': 0, 'isComplete': True, 'isMIA': False, 'lastRxTime': '2024-06-19T14:04:35-05:00'}, 'SYNC_InfoMsg': {'SYNC_appGitHash': [60, 196, 111, 185, 50, 202, 162], 'isMIA': False}, 'SYNC_Status': {'lastRxTime': '2024-06-19T14:04:35-05:00'}, 'packagePartNumber': '1493315-01-G', 'packageSerialNumber': 'JBL23099YBG0EZ'}, 'THC': [{'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, {'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, {'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'2024-06-19T19:04:35.081781185Z THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, {'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, {'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, {'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, {'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, {'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, {'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}, {'THC_InfoMsg': {'THC_appGitHash': [0, 0, 0, 0, 0, 0, 0], 'isComplete': False, 'isMIA': True}, 'THC_Logging': {'THC_LOG_PW_2_0_EnableLineState': 'ENABLE_LINE_LOW'}, 'packagePartNumber': '', 'packageSerialNumber': ''}]}, 'enumeration': None, 'firmwareUpdate': {'isUpdating': False, 'msa': None, 'powerwalls': None, 'pvInverters': None, 'sync': None}, 'inverterSelfTests': None, 'phaseDetection': None}, 'neurio': {'isDetectingWiredMeters': False, 'pairings': [], 'readings': []}, 'pw3Can': {'firmwareUpdate': {'isUpdating': False, 'progress': None}}, 'system': {'sitemanagerStatus': {'isRunning': True}, 'time': '2024-06-19T14:04:35-05:00', 'updateUrgencyCheck': None}}

So we know I'm getting data and able to connect, but then I hit various excedptions and api rate limits:


2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status/grid_status
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG] Session Expired - Trying to get a new one
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login - {"code":429,"error":"Api Limit reached for this endpoint","message":"API Limit Reached"}
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login failed: "name='AuthCookie', domain=None, path=None"
2024-06-19 14:04:35 pypowerwall  | ----------------------------------------
2024-06-19 14:04:35 pypowerwall  | Exception occurred during processing of request from ('172.18.0.4', 34262)
2024-06-19 14:04:35 pypowerwall  | Traceback (most recent call last):
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/local/pypowerwall_local.py", line 105, in _get_session
2024-06-19 14:04:35 pypowerwall  |     self.auth = {'AuthCookie': r.cookies['AuthCookie'], 'UserRecord': r.cookies['UserRecord']}
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/requests/cookies.py", line 334, in __getitem__
2024-06-19 14:04:35 pypowerwall  |     return self._find_no_duplicates(name)
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/requests/cookies.py", line 413, in _find_no_duplicates
2024-06-19 14:04:35 pypowerwall  |     raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}")
2024-06-19 14:04:35 pypowerwall  | KeyError: "name='AuthCookie', domain=None, path=None"
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status/grid_status
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG] Session Expired - Trying to get a new one
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login - {"code":429,"error":"Api Limit reached for this endpoint","message":"API Limit Reached"}
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login failed: "name='AuthCookie', domain=None, path=None"
2024-06-19 14:04:35 telegraf     | 2024-06-19T19:04:35Z E! [inputs.http] Error in plugin: [url=http://pypowerwall:8675/alerts/pw]: Get "http://pypowerwall:8675/alerts/pw": EOF
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status/grid_status
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG] Session Expired - Trying to get a new one
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login - {"code":429,"error":"Api Limit reached for this endpoint","message":"API Limit Reached"}
2024-06-19 14:04:35 pypowerwall  | 06/19/2024 02:04:35 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login failed: "name='AuthCookie', domain=None, path=None"
2024-06-19 14:04:35 pypowerwall  | ----------------------------------------
2024-06-19 14:04:35 pypowerwall  | Exception occurred during processing of request from ('172.18.0.4', 34286)
2024-06-19 14:04:35 pypowerwall  | Traceback (most recent call last):
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/local/pypowerwall_local.py", line 105, in _get_session
2024-06-19 14:04:35 pypowerwall  |     self.auth = {'AuthCookie': r.cookies['AuthCookie'], 'UserRecord': r.cookies['UserRecord']}
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/requests/cookies.py", line 334, in __getitem__
2024-06-19 14:04:35 pypowerwall  |     return self._find_no_duplicates(name)
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/requests/cookies.py", line 413, in _find_no_duplicates
2024-06-19 14:04:35 pypowerwall  |     raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}")
2024-06-19 14:04:35 pypowerwall  | KeyError: "name='AuthCookie', domain=None, path=None"
2024-06-19 14:04:35 pypowerwall  | 
2024-06-19 14:04:35 pypowerwall  | During handling of the above exception, another exception occurred:
2024-06-19 14:04:35 pypowerwall  | 
2024-06-19 14:04:35 pypowerwall  | Traceback (most recent call last):
2024-06-19 14:04:35 telegraf     | 2024-06-19T19:04:35Z E! [inputs.http] Error in plugin: [url=http://pypowerwall:8675/freq]: Get "http://pypowerwall:8675/freq": EOF
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/socketserver.py", line 683, in process_request_thread
2024-06-19 14:04:35 pypowerwall  |     self.finish_request(request, client_address)
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/socketserver.py", line 360, in finish_request
2024-06-19 14:04:35 pypowerwall  |     self.RequestHandlerClass(request, client_address, self)
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/socketserver.py", line 747, in __init__
2024-06-19 14:04:35 pypowerwall  |     self.handle()
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/http/server.py", line 433, in handle
2024-06-19 14:04:35 pypowerwall  |     self.handle_one_request()
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/http/server.py", line 421, in handle_one_request
2024-06-19 14:04:35 pypowerwall  |     method()
2024-06-19 14:04:35 pypowerwall  |   File "/app/server.py", line 432, in do_GET
2024-06-19 14:04:35 pypowerwall  |     fcv["grid_status"] = pw.grid_status(type="numeric")
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/__init__.py", line 715, in grid_status
2024-06-19 14:04:35 pypowerwall  |     payload: dict = self.poll('/api/system_status/grid_status')
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/__init__.py", line 314, in poll
2024-06-19 14:04:35 pypowerwall  |     payload = self.client.poll(api, force, recursive, raw)
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/local/pypowerwall_local.py", line 196, in poll
2024-06-19 14:04:35 pypowerwall  |     self._get_session()
2024-06-19 14:04:35 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/local/pypowerwall_local.py", line 114, in _get_session
2024-06-19 14:04:35 pypowerwall  |     raise LoginError("Invalid Powerwall Login")
2024-06-19 14:04:35 pypowerwall  | pypowerwall.local.exceptions.LoginError: Invalid Powerwall Login
2024-06-19 14:04:35 pypowerwall  | ----------------------------------------
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [proxy] [DEBUG] 172.18.0.4 "GET /pod HTTP/1.1" 200 -
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [pypowerwall.local.pypowerwall_local] [ERROR] 404 Powerwall API not found at https://192.168.91.1/api/system_status
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [proxy] [DEBUG] Missing key in payload [nominal_full_pack_energy]
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [proxy] [DEBUG] Missing key in payload [nominal_energy_remaining]
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [pypowerwall.local.pypowerwall_local] [ERROR] 404 Powerwall API not found at https://192.168.91.1/api/system_status
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/operation
2024-06-19 14:04:36 pypowerwall  | 06/19/2024 02:04:36 PM [pypowerwall.local.pypowerwall_local] [ERROR] 404 Powerwall API not found at https://192.168.91.1/api/operation
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [proxy] [DEBUG] 172.18.0.4 "GET /alerts/pw HTTP/1.1" 200 -
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status/grid_status
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [proxy] [DEBUG] 172.18.0.4 "GET /strings HTTP/1.1" 200 -
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [proxy] [DEBUG] 172.18.0.4 "GET /aggregates HTTP/1.1" 200 -
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [proxy] [DEBUG] 172.18.0.4 "GET /pod HTTP/1.1" 200 -
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [proxy] [DEBUG] 172.18.0.4 "GET /soe HTTP/1.1" 200 -
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status/soe
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/meters/aggregates
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [proxy] [DEBUG] 172.18.0.4 "GET /temps/pw HTTP/1.1" 200 -
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [proxy] [DEBUG] 172.18.0.4 "GET /freq HTTP/1.1" 200 -
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG] Session Expired - Trying to get a new one
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG] Session Expired - Trying to get a new one
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG] Session Expired - Trying to get a new one
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login - {"code":429,"error":"Api Limit reached for this endpoint","message":"API Limit Reached"}
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login failed: "name='AuthCookie', domain=None, path=None"
2024-06-19 14:04:40 pypowerwall  | ----------------------------------------
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [ERROR] 404 Powerwall API not found at https://192.168.91.1/api/system_status
2024-06-19 14:04:40 pypowerwall  | Exception occurred during processing of request from ('172.18.0.4', 34344)
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.tedapi] [DEBUG] Using Cached Payload
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [proxy] [DEBUG] Missing key in payload [nominal_full_pack_energy]
2024-06-19 14:04:40 pypowerwall  | Traceback (most recent call last):
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [proxy] [DEBUG] Missing key in payload [nominal_energy_remaining]
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG]  -- local: Request Powerwall for /api/system_status
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/local/pypowerwall_local.py", line 105, in _get_session
2024-06-19 14:04:40 pypowerwall  |     self.auth = {'AuthCookie': r.cookies['AuthCookie'], 'UserRecord': r.cookies['UserRecord']}
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/requests/cookies.py", line 334, in __getitem__
2024-06-19 14:04:40 pypowerwall  |     return self._find_no_duplicates(name)
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/requests/cookies.py", line 413, in _find_no_duplicates
2024-06-19 14:04:40 pypowerwall  |     raise KeyError(f"name={name!r}, domain={domain!r}, path={path!r}")
2024-06-19 14:04:40 pypowerwall  | KeyError: "name='AuthCookie', domain=None, path=None"
2024-06-19 14:04:40 pypowerwall  | 
2024-06-19 14:04:40 pypowerwall  | During handling of the above exception, another exception occurred:
2024-06-19 14:04:40 pypowerwall  | 
2024-06-19 14:04:40 pypowerwall  | Traceback (most recent call last):
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login - {"code":429,"error":"Api Limit reached for this endpoint","message":"API Limit Reached"}
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/socketserver.py", line 683, in process_request_thread
2024-06-19 14:04:40 pypowerwall  |     self.finish_request(request, client_address)
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login failed: "name='AuthCookie', domain=None, path=None"
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/socketserver.py", line 360, in finish_request
2024-06-19 14:04:40 pypowerwall  |     self.RequestHandlerClass(request, client_address, self)
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/socketserver.py", line 747, in __init__
2024-06-19 14:04:40 pypowerwall  |     self.handle()
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login - {"code":429,"error":"Api Limit reached for this endpoint","message":"API Limit Reached"}
2024-06-19 14:04:40 pypowerwall  | ----------------------------------------
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/http/server.py", line 433, in handle
2024-06-19 14:04:40 pypowerwall  |     self.handle_one_request()
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/http/server.py", line 421, in handle_one_request
2024-06-19 14:04:40 pypowerwall  |     method()
2024-06-19 14:04:40 pypowerwall  |   File "/app/server.py", line 388, in do_GET
2024-06-19 14:04:40 pypowerwall  |     alerts = pw.alerts()
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/__init__.py", line 604, in alerts
2024-06-19 14:04:40 pypowerwall  |     grid_status = self.poll('/api/system_status/grid_status')
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/__init__.py", line 314, in poll
2024-06-19 14:04:40 pypowerwall  |     payload = self.client.poll(api, force, recursive, raw)
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/local/pypowerwall_local.py", line 196, in poll
2024-06-19 14:04:40 pypowerwall  |     self._get_session()
2024-06-19 14:04:40 pypowerwall  |   File "/usr/local/lib/python3.10/site-packages/pypowerwall/local/pypowerwall_local.py", line 114, in _get_session
2024-06-19 14:04:40 pypowerwall  |     raise LoginError("Invalid Powerwall Login")
2024-06-19 14:04:40 pypowerwall  | pypowerwall.local.exceptions.LoginError: Invalid Powerwall Login
2024-06-19 14:04:40 pypowerwall  | ----------------------------------------
2024-06-19 14:04:40 pypowerwall  | 06/19/2024 02:04:40 PM [pypowerwall.local.pypowerwall_local] [DEBUG] login failed: "name='AuthCookie', domain=None, path=None"
2024-06-19 14:04:40 pypowerwall  | Exception occurred during processing of request from ('172.18.0.4', 34342)
2024-06-19 14:04:40 telegraf     | 2024-06-19T19:04:40Z E! [inputs.http] Error in plugin: [url=http://pypowerwall:8675/alerts/pw]: Get "http://pypowerwall:8675/alerts/pw": EOF
2024-06-19 14:04:40 pypowerwall  | ----------------------------------------

Let me know if this helps or if you would like some more debugs from anything.

Originally posted by @pavandave in https://github.com/jasonacox/Powerwall-Dashboard/discussions/392#discussioncomment-9821192

jasonacox commented 2 weeks ago

Hi @pavandave, thanks for the details! I'm opening an issue here to track the fixes.

It appears that your setup is trying to log in using the PW2 credentials instead of sticking with the TEDAPI full mode via the GW credentials only. That will cause the API rate limiting. That would also mean that it is running in hybrid mode (you can see what tedapi_mode it is using by going to http://localhost:8675/help).

Please check your pypowerwall.env and make sure that these two lines are empty (nothing to the right of the = sign):

PW_EMAIL=
PW_PASSWORD=

If not, remove the email and password, save the file and run ./compose-dash up -d

As to the failure of the setup.sh - would you mind running a test? The setup.sh script has this curl test to see if the PW Gateway is available. Create a file like this and give it a run:

# Function to test an IP to see if it returns a ping
function test_ip() {
    local IP=$1
    if [ -z "${IP}" ]; then
        return 1
    fi
    if curl -k --head --connect-timeout 1 --silent https://192.168.91.1 > /dev/null 2>&1; then
        return 0
    else
        return 1
    fi
}

# Can we reach 192.168.91.1
if test_ip "192.168.91.1"; then
    echo "Found Powerwall Gateway"
else
    echo "Failed"
fi

And just for full measure, can you also run: ping -c 1 192.168.91.1 ?

Thanks for your help! I want to get the fixes in to help other PW3 owners.

pavandave commented 2 weeks ago

@jasonacox

Updated the env file per your recommendation. I had used the template info but updated to the below and redeployed and that worked. This may just be me, but for PW3 stuff while folks are still figuring it out, maybe a note in docs that PW3 config file differs and should have nothing in for email/pass may be helpful.

Example of working env config:

PW_EMAIL=
PW_PASSWORD=
PW_HOST=192.168.91.1
PW_TIMEZONE=America/Chicago
TZ=America/Chicago
PW_DEBUG=yes
PW_STYLE=grafana-dark
PW_GW_PWD=<REDACTED>

Output of the help file url:

Stat | Value
-- | --
pypowerwall | 0.10.6 Proxy t63
mode | Local
gets | 437
posts | 0
errors | 0
timeout | 0
ts | 1718846081
start | 1718845771
clear | 1718845771
uptime | 0:05:10
mem | 39852
site_name | My Home
cloudmode | False
fleetapi | False
tedapi | True
tedapi_mode | full
siteid | None
counter | 0
authmode | cookie
URI: /version | 1
URI: /soe | 62
URI: /temps/pw | 62
URI: /strings | 62
URI: /alerts/pw | 62
URI: /aggregates | 62
URI: /freq | 62
URI: /pod | 62
URI: /help | 1

Screenshot of working dashboard: image

I re-ran the setup.sh file and it worked but I think having that env file bypasses that check. If you want me to re-run without any credentials I can but when it comes to pinging 192.168.91.1 I found some strange behavior. From the WLS shell, I don't get a response.

PING 192.168.91.1 (192.168.91.1) 56(84) bytes of data.

--- 192.168.91.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

BUT from Windows terminal, I do,.

>ping 192.169.91.1

Pinging 192.169.91.1 with 32 bytes of data:
Reply from 192.169.91.1: bytes=32 time=7ms TTL=244
Reply from 192.169.91.1: bytes=32 time=5ms TTL=244
Reply from 192.169.91.1: bytes=32 time=4ms TTL=244
Reply from 192.169.91.1: bytes=32 time=4ms TTL=244

Ping statistics for 192.169.91.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 4ms, Maximum = 7ms, Average = 5ms

I'm not sure why this is differing on the same machine. But if option 4 is selected, I would consider getting rid of the ICMP repsonse check check in the PW3 scenario. Maybe run an API call to see if it returns a valid response, if not have the user validate their network or password (depending on the response).

Let me know if this helps or you would like me to test any further. I will gladly assist where possible.

jasonacox commented 2 weeks ago

Fantastic!

Can you try importing dashboard.json to see if that works? That is the default recommended during setup. I notice you are using the dashboard-no-animation.json version. Or, alternatively, can you try this and post the results? http://localhost:8675/example.html

Also, on the ping, you are correct. I had a few others mention that ping was bad. It is actually using curl as part of these setup.sh test. Can you run this in WSL?

curl -k --head --connect-timeout 1 https://192.168.91.1
pavandave commented 2 weeks ago

Interestingly I finally got some ping responses from WLS but I just saw it this morning but it's not something promising.

--- 192.168.91.1 ping statistics ---
37236 packets transmitted, 26768 received, +13 errors, 28.1126% packet loss, time 37803487ms
rtt min/avg/max/mdev = 0.784/2.855/2115.668/28.530 ms, pipe 4

The curl command gives me this:

$ curl -k --head --connect-timeout 1 https://192.168.91.1
HTTP/2 404
content-type: text/plain; charset=utf-8
x-content-type-options: nosniff
content-length: 19
date: Thu, 20 Jun 2024 13:27:36 GMT

As for the core dashboard, I took the screenshot from the wrong dashboard. It works. I fiddled with something that turned the power flow into a white box for now but that's on me and I do see the main data I want to see.

image

I plan on migrating the dashboard to another machine soon. Will follow up with any additional feedback from there.

jasonacox commented 2 weeks ago

One interesting note about the power flow animation: If you have another browser window/tab open with that, only one of them will display at a time. I'm not entirely sure why as you can bypass it by using a different browser (e.g. Chrome and Edge) and they will both render.

Anyway, thanks for the posting these and your PR. I have some comments but will leave them in the PR.

youzer-name commented 1 week ago

One interesting note about the power flow animation: If you have another browser window/tab open with that, only one of them will display at a time. I'm not entirely sure why as you can bypass it by using a different browser (e.g. Chrome and Edge) and they will both render.

Anyway, thanks for the posting these and your PR. I have some comments but will leave them in the PR.

I'm not sure when it changed, but I can now open two tabs with both showing the animation in Chrome on my Chromebook. I thought it might be because I'm running Grafana 10.3.1, but I just tried opening the default Grafana 9.1.2 dashboard and it sometimes works depending on the sequence of what I do.

I'm not sure exactly what's going on, but in an Incognito window I can reliably open 2 tabs but the third fails to display the animation. A second ago I had the animation showing in one regular tab and two incognito tabs at the same time.

I just tried it in Edge under Windows 10 and was able to open the dashboard with animation in two regular and two InPrivate tabs at the same time. A third tab of either type shows a blank animation.

jasonacox commented 1 week ago

Interesting! Thanks @youzer-name - the same would occur with the example iframe built into pypowerwall: http://localhost:8675/example.html so I don't think this is a Grafana issue. I should look again to see if there is a better way to handle it.