Update local_test.py
This commit is contained in:
125
local_test.py
125
local_test.py
@@ -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
|
||||||
try:
|
measure_codes = {
|
||||||
data["grid_voltage"] = client.measure(1)
|
1: "grid_voltage",
|
||||||
data["grid_current"] = client.measure(2)
|
2: "grid_current",
|
||||||
data["grid_power"] = client.measure(3)
|
3: "grid_power",
|
||||||
data["frequency"] = client.measure(4)
|
4: "frequency",
|
||||||
data["inverter_temperature"] = client.measure(21)
|
5: "vbulk",
|
||||||
data["booster_temperature"] = client.measure(22)
|
6: "ileak_dc_dc",
|
||||||
data["input_1_voltage"] = client.measure(23)
|
7: "ileak_inverter",
|
||||||
data["input_1_current"] = client.measure(25)
|
8: "pin1",
|
||||||
data["isolation_resistance"] = client.measure(30)
|
9: "pin2",
|
||||||
except AttributeError:
|
21: "inverter_temperature",
|
||||||
data["measure_requests"] = "Methode nicht verfügbar"
|
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:
|
||||||
|
data[name] = measure_with_retry(client, code)
|
||||||
|
except AttributeError:
|
||||||
|
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user