Update local_test.py

This commit is contained in:
2026-03-05 15:24:24 +01:00
parent 66527c6ac3
commit e85822bac1

View File

@@ -1,15 +1,29 @@
### This file is used to test the aurora inverter (via TCP) locally without Homeassistant.
from aurorapy.client import AuroraTCPClient, AuroraError from aurorapy.client import AuroraTCPClient, AuroraError
import json import json
from datetime import datetime, timedelta from datetime import datetime, timedelta
import time
# Konfiguration # Konfiguration
TARGET_IP = "192.168.250.245" TARGET_IP = "192.168.250.245"
TARGET_PORT = 5000 TARGET_PORT = 5000
INVERTER_ADDRESS = 2 # Slave-ID deines Wechselrichters INVERTER_ADDRESS = 2 # Slave-ID deines Wechselrichters
def test_comprehensive_data(): def measure_with_retry(client, code, retries=2):
for attempt in range(retries + 1):
try:
value = client.measure(code)
# Filtere nur extrem kleine oder extrem große Werte, die offensichtlich unplausibel sind
if (abs(value) < 1e-30 and value != 0.0) or abs(value) > 1e10:
return "Wert unplausibel"
return value
except AuroraError as e:
if "Reading Timeout" in str(e) and attempt < retries:
time.sleep(1) # Warte 1 Sekunde vor dem nächsten Versuch
continue
return f"Fehler: {str(e)}"
return "Maximale Anzahl von Wiederholungen erreicht"
def test_comprehensive_data_all_measures():
try: try:
client = AuroraTCPClient(ip=TARGET_IP, port=TARGET_PORT, address=INVERTER_ADDRESS, timeout=10) client = AuroraTCPClient(ip=TARGET_IP, port=TARGET_PORT, address=INVERTER_ADDRESS, timeout=10)
client.connect() client.connect()
@@ -19,9 +33,29 @@ def test_comprehensive_data():
# 50: State Request # 50: State Request
try: try:
data["state"] = client.state_request() data["global_state"] = client.state(1)
except AttributeError: except AttributeError:
data["state"] = "Methode nicht verfügbar" data["global_state"] = "Methode nicht verfügbar"
try:
data["inverter_state"] = client.state(2)
except AttributeError:
data["inverter_state"] = "Methode nicht verfügbar"
try:
data["DCDC_ch1_state"] = client.state(3)
except AttributeError:
data["DCDC_ch1_state"] = "Methode nicht verfügbar"
try:
data["DCDC_ch2_state"] = client.state(4)
except AttributeError:
data["DCDC_ch2_state"] = "Methode nicht verfügbar"
try:
data["alarm_state"] = client.state(5)
except AttributeError:
data["alarm_state"] = "Methode nicht verfügbar"
# 58: Version Reading # 58: Version Reading
try: try:
@@ -49,8 +83,6 @@ def test_comprehensive_data():
data["daily_energy_float"] = client.cumulated_energy(period=1) data["daily_energy_float"] = client.cumulated_energy(period=1)
data["week_energy_float"] = client.cumulated_energy(period=2) data["week_energy_float"] = client.cumulated_energy(period=2)
data["month_energy_float"] = client.cumulated_energy(period=3) data["month_energy_float"] = client.cumulated_energy(period=3)
data["year_energy_float_global"] = client.cumulated_energy(period=4, global_measure=True)
data["total_energy_float_global"] = client.cumulated_energy(period=6, global_measure=True)
except AttributeError: except AttributeError:
data["cumulated_float_energy"] = "Methode nicht verfügbar" data["cumulated_float_energy"] = "Methode nicht verfügbar"
@@ -84,26 +116,75 @@ def test_comprehensive_data():
data["last_four_alarms"] = "Methode nicht verfügbar" data["last_four_alarms"] = "Methode nicht verfügbar"
# 59: Measure Requests # 59: Measure Requests
measure_codes = {
1: "grid_voltage",
2: "grid_current",
3: "grid_power",
4: "frequency",
5: "vbulk",
6: "ileak_dc_dc",
7: "ileak_inverter",
8: "pin1",
9: "pin2",
21: "inverter_temperature",
22: "booster_temperature",
23: "input_1_voltage",
25: "input_1_current",
26: "input_2_voltage",
27: "input_2_current",
28: "grid_voltage_dc_dc",
29: "grid_frequency_dc_dc",
30: "isolation_resistance",
31: "vbulk_dc_dc",
32: "average_grid_voltage",
33: "vbulk_mid",
34: "power_peak",
35: "power_peak_today",
36: "grid_voltage_neutral",
37: "wind_generator_frequency",
38: "grid_voltage_neutral_phase",
39: "grid_current_phase_r",
40: "grid_current_phase_s",
41: "grid_current_phase_t",
42: "frequency_phase_r",
43: "frequency_phase_s",
44: "frequency_phase_t",
45: "vbulk_plus",
46: "vbulk_minus",
47: "supervisor_temperature",
48: "alim_temperature",
49: "heat_sink_temperature",
50: "temperature_1",
51: "temperature_2",
52: "temperature_3",
53: "fan_1_speed",
54: "fan_2_speed",
55: "fan_3_speed",
56: "fan_4_speed",
57: "fan_5_speed",
58: "power_saturation_limit",
59: "riferimento_anello_bulk",
60: "vpanel_micro",
61: "grid_voltage_phase_r",
62: "grid_voltage_phase_s",
63: "grid_voltage_phase_t"
}
for code, name in measure_codes.items():
try: try:
data["grid_voltage"] = client.measure(1) data[name] = measure_with_retry(client, code)
data["grid_current"] = client.measure(2)
data["grid_power"] = client.measure(3)
data["frequency"] = client.measure(4)
data["inverter_temperature"] = client.measure(21)
data["booster_temperature"] = client.measure(22)
data["input_1_voltage"] = client.measure(23)
data["input_1_current"] = client.measure(25)
data["isolation_resistance"] = client.measure(30)
except AttributeError: except AttributeError:
data["measure_requests"] = "Methode nicht verfügbar" data[name] = "Methode nicht verfügbar"
except Exception as e:
data[name] = f"Fehler: {str(e)}"
client.close() client.close()
# Daten als JSON speichern # Daten als JSON speichern
with open('comprehensive_data.json', 'w') as f: with open('comprehensive_data_all_measures.json', 'w') as f:
json.dump(data, f, indent=4) json.dump(data, f, indent=4)
print("Daten erfolgreich in 'comprehensive_data.json' gespeichert.") print("Daten erfolgreich in 'comprehensive_data_all_measures.json' gespeichert.")
except AuroraError as e: except AuroraError as e:
print(f"Fehler bei der Kommunikation: {str(e)}") print(f"Fehler bei der Kommunikation: {str(e)}")
@@ -111,4 +192,4 @@ def test_comprehensive_data():
print(f"Allgemeiner Fehler: {str(e)}") print(f"Allgemeiner Fehler: {str(e)}")
if __name__ == "__main__": if __name__ == "__main__":
test_comprehensive_data() test_comprehensive_data_all_measures()