Zitat von henfri
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Anbindung Wechselrichter Huawei SUN2000 (SUN2000-3-10KTL-M1)
Einklappen
X
-
Ich habs mal gestetet. Das funktioniert ganz gut soweit. Es wird allerdings etwas fummelig, wenn man mehrere WR hat und vor allem, wenn man dann noch die Batterie und den Smart Power Sensor auslesen will. Da muss man dann definieren, wo der genau dran hängt. Hier mal ein Beispiel:
Code:from huawei_solar import AsyncHuaweiSolar, register_names as rn import asyncio async def test_huaweisolar(): slave_id = 16 client = await AsyncHuaweiSolar.create("192.168.1.7", 502, slave_id) result = await client.get(rn.NB_PV_STRINGS, slave_id) logger.info('Number of PV strings: {}'.format(result.value)) results = await client.get_multiple([rn.LINE_VOLTAGE_A_B, rn.LINE_VOLTAGE_B_C, rn.LINE_VOLTAGE_C_A], slave_id) logger.info('A-B voltage: {}, B-C voltage: {}, C-A voltage: {}'.format(results[0].value, results[1].value, results[2].value)) results = await client.get_multiple([rn.MODEL_NAME, rn.SERIAL_NUMBER, rn.MODEL_ID], slave_id) logger.info('Modell-Name: {}, Seriennummer: {}, Modell-ID: {}'.format(results[0].value, results[1].value, results[2].value)) results = await client.get_multiple([rn.STORAGE_UNIT_1_STATE_OF_CAPACITY, rn.STORAGE_UNIT_1_BATTERY_TEMPERATURE], slave_id) logger.info('Batterie Kapazität: {}, Batterie Temperatur: {}'.format(results[0].value, results[1].value)) results = await client.get_multiple([rn.ACTIVE_GRID_A_POWER, rn.ACTIVE_GRID_B_POWER, rn.ACTIVE_GRID_C_POWER], slave_id) logger.info('Meter Power A: {}, Meter Power B: {}, Meter Power C: {}'.format(results[0].value, results[1].value, results[2].value)) await client.stop() asyncio.run(test_huaweisolar())
- Likes 1
Kommentar
-
Ich bin schon recht weit gekommen gewesen und konnte auch im kommenden Plugin zumindest schon mal die Daten des WR auslesen. Allerdings gab es immer wieder Verbindungsabbrüche, sodass ich die huawei-solar-lib mal aktualisiert habe. Nun bekomme ich aber einen merkwürdigen Fehler, den ich nicht wirklich lösen kann. Auch die Suche im Netz führte zwar zu Ergebnissen, aber dennoch nicht zur entscheidenden Lösung. Das heißt selbst die "simple" Logik geht jetzt nicht mehr:
Code:2023-07-23 14:39:54 ERROR logics.test In der Logik ist ein Fehler aufgetreten: Logik 'test', Datei '/usr/lib/python3.9/asyncio/events.py', Zeile 642 function get_event_loop(), Exception: There is no current event loop in thread 'logics.test'.
Kommentar
-
Der Kontext in dem Logiken laufen, hört auf zu existieren wenn die Logik endet. Damit wird auch die in asyncio.run() implizit erzeugte eventloop beendet.
Du könntest versuchen explizit eine eventloop erzeugen und diese im logic Objekt ablegen, damit sie die das Ende der Logik Ausführung überlebt.
Alternativ könntest Du versuchen eine nie endende Logik zu erzeugen, damit der Kontext erhalten bleibt.
Insgesamt ist die Nutzung von asyncio in einer Logik aus oben genannten Grünen problematisch (weshalb ich es auch noch nie probiert habe).
Viele Grüße
Martin
There is no cloud. It's only someone else's computer.
Kommentar
-
Nachvollziehbar. Ich habe doch noch in den Package der lib was gefunden. Zum testen. Damit geht es wahrscheinlich auch in der Logik:
Code:loop = asyncio.new_event_loop() async def test_single(name): hs = await AsyncHuaweiSolar.create("192.168.1.7", 502, slave_id) logger.info(await hs.get(name)) await hs.stop() loop.run_until_complete(test_single("model_name"))
Code:2023-07-23 17:14:01 ERROR logics.test In der Logik ist ein Fehler aufgetreten: Logik 'test', Datei '/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/huawei_solar.py', Zeile 78 function AsyncHuaweiSolar(), Exception: unsupported operand type(s) for |: 'type' and 'NoneType'
Code:_reconnect_task: asyncio.Task | None = None
- Likes 1
Kommentar
-
Ich komme leider nicht weiter, ohne das Problem zu lösen. Hat jemand einen Tipp? Das steht im Log:
Code:2023-09-05 09:29:07 ERROR lib.plugin Plugin 'huawei_sun2000' exception during import of __init__.py: unsupported operand type(s) for |: 'type' and 'NoneType' Traceback (most recent call last): File "/usr/local/smarthome/lib/plugin.py", line 571, in __init__ exec("import {0}".format(classpath)) File "<string>", line 1, in <module> File "/usr/local/smarthome/plugins/huawei_sun2000/__init__.py", line 33, in <module> from huawei_solar import AsyncHuaweiSolar, register_names as rn File "/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/__init__.py", line 6, in <module> from .bridge import HuaweiSolarBridge # noqa File "/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/bridge.py", line 16, in <module> from .huawei_solar import DEFAULT_BAUDRATE, DEFAULT_SLAVE, DEFAULT_TCP_PORT, AsyncHuaweiSolar, Result File "/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/huawei_solar.py", line 75, in <module> class AsyncHuaweiSolar: File "/home/smarthome/.local/lib/python3.9/site-packages/huawei_solar/huawei_solar.py", line 78, in AsyncHuaweiSolar _reconnect_task: asyncio.Task | None = None TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'
Code:_reconnect_task: asyncio.Task | None = None
Andererseits stelkt sich die Frage, wieso die lib mit SmartHomeNG nicht funktioniert, woanders sollte sie ja laufen. Vor allem, weil die ältere Version der lib an der Stelle läuft. Der Fehler wird wahrscheinlich woanders sein oder?Zuletzt geändert von Cannon; 05.09.2023, 08:48.
Kommentar
-
Heho gibt es da Neuigkeiten?
Man könnte inzwischen ja auch über die solarfusion api gehen, siehe
https://pypi.org/project/fusion-solar-py/
und https://forum.huawei.com/enterprise/...13868771979264
statt smartmeter und dongle kommt jetzt ja die EMMA, das wird aber vermutlich nicht viel ändern. Das knx Gerät hat niemand im Einsatz?
Kommentar
-
Zitat von Onkelandy Beitrag anzeigenHeho gibt es da Neuigkeiten?
Zitat von Onkelandy Beitrag anzeigenMan könnte inzwischen ja auch über die solarfusion api gehen
Zitat von Onkelandy Beitrag anzeigenDas knx Gerät hat niemand im Einsatz?
- Likes 1
Kommentar
Kommentar