Closed raffy1234 closed 1 year ago
Hi, ist so out of the Box nicht vorgesehen direkt auf USB zuzugreifen. Kommst du über eine REST-API an die aktuellen Zählerwerte von ioBroker? Sollte laut kurzer Recherche irgendwie funktionieren, schau dir mal https://github.com/ioBroker/ioBroker.simple-api an.
Wenn das funktioniert dann kann ich die Abfrage-URL in den Code übernehmen. Du müsstest mich da allerdings unterstützen und mir den JSON-String geben sowie die URL die aufgerufen werden muss. Ich würde das dann irgendwie variabel einbinden falls möglich.
Hi, habe es grad probiert. Auf diesem Weg komme ich leider nicht an die aktuellen Werte. Scheint also nicht zu funktionieren, schade.
Doch, das muss mit dem Plugin funktionieren. Wahrscheinlich musst du das erst installieren. Dann kommst du an alle Werte.
Gibt das hier eine Rückgabe im Browser?: http://ipaddress:8087/help
Gibt leider keine Rückgabe.
Danke für den Hinweis mit dem Adapter. Nach Hinzufügen des SimpleAPI Adapters (auf Deutsch: Einfache RESTful API) läuft es mit den Standardeinstellungen.
Ein CURL gibt auch direkt den Wert aus.
z.B.
curl http://10.xxx.xxx.71:8087/getPlainValue/alias.0.Zaehler.Zaehler_Netzbezug
435
Kannst Du das nicht für alle Zähler einbauen? Also Quasi eine URL die den jeweiligen Wert zurückgibt. Das sollte doch ziemlich flexibel sein.
Ja geht halt nicht immer, aber das würde ich dann als Lösung für ioBroker einbauen. Bei TASMOTA funktioniert das z.B. nicht, der gibt nur JSON zurück welches is dann auflösen muss.
Hast du es schon laufen?
Ich wollte mir das am WE mal genauer ansehen.
Script läuft im Moment nicht so gut, da ich zu Testzwecken mehrere WR habe, die aber nicht komplett mit Modulen bestückt sind (1x1500er mit 2x Modul, 1x1500er mit 1x Modul, 1x400er). Außerdem ist die Sonne nicht sehr beständig im Moment.
Mein Setup: Ich einen IR Leser am Zähler des VNB via Tasmota und mehrere Zwischenzähler, die ich per RS485/Modbus anbinden möchte. (Ich hab im Moment aus historischen Gründen einen ziemlichen Zoo, Volkszähler, FHEM, Cerbo....)
Da der Tasmota ja schon direkt bei Werteänderung per MQTT an den IoBRoker Daten schiebt, wollte ich das arme Kerlchen nicht unnötig abfragen. Der Modbus Zähler vor den WR wird auch an IoBroker liefern. (Tut er aber im Moment noch nicht.) Den "Energiebedarf" Rechne ich trotzdem im IoBroker aus (Netzbezug + Summe PV Erzeugung aus OpenDTU).
Übrigens gibt es "getPlainValue" - ohne parsen- scheinbar nur für Einzelwerte.
Man kann auch via "getBulk" mehrere Werte in einer Abfrage auslesen. Dann muss man wieder parsen.
curl http://10.xxx.xxx.71:8087/getBulk/alias.0.Zaehler.Zaehler_Netzbezug,alias.0.Zaehler.Zaehler_Energiebedarf
[{"id":"alias.0.Zaehler.Zaehler_Netzbezug","val":340,"ts":1681379835195,"ack":true},{"id":"alias.0.Zaehler.Zaehler_Energiebedarf","val":1258,"ts":1681379835195,"ack":true}]
Macht ja vielleicht auch Sinn, um die Anzahl der Abfragen zu reduzieren.
Da hab ich wohl quatsch geschrieben.
"getPlainValue" kann sehr wohl mehrere Werte
curl http://10.xxx.xxx.71:8087/getPlainValue/alias.0.Zaehler.Zaehler_Netzbezug,alias.0.Zaehler.Zaehler_Energiebedarf
ergibt
450
729
Es würde also eine Basis URL reichen und dann die jeweiligen Objektkbezeichner.
Gibt leider keine Rückgabe.
Wie hast Du den den simple API Adapter installiert und konfiguriert?
Moin, ich brauche ja nur einen Wert und das ist die aktuelle Leistung vom Hauptzähler und optional noch die aktuelle Gesamtleistung der Inverter (intermediate meter).
Bei dem Zwischenzähler wird vom Script aktuell nur ein Zähler unterstützt (das könnte ich in Zukunft noch ausbauen, aber da wirds für ein Script ganz schnell kompliziert), von daher ist das ja ganz gut wenn du alles über den Broker zusammenführst.
Am Ende müsste ich also jeweils einen Wert abfragen für GridUsage(W) und optional SolarPower(W). Ich mache das in Python ohne CURL Aufruf, sondern über Requests. Daher würde ich dann über den GetBulk Aufruf gehen.
Habe es mal in den Code übernommen, kannst du das testen? https://github.com/reserve85/HoymilesZeroExport/tree/dev_iobroker
Hey. danke,
scheint aber nicht 100Pro zu klappen.
"intermediate meter" wird erkannt, mit dem "Haupzähler" schein was krumm zu sein.
ok, kannst du mal noch die sektion [IOBROKER] aus der Ini posten? Wie ich das sehe hast du IOBROKER_POWER_CALCULATE auf true stehen? Wahrscheinlich findet der Parser im Result das IOBROKER_POWER_INPUT_ALIAS nicht.
` [IOBROKER]
IOBROKER_IP = 10.xxx.xxx.71 IOBROKER_PORT = 8087 IOBROKER_CURRENT_POWER_ALIAS = alias.0.Zaehler.Zaehler_Netzbezug
IOBROKER_POWER_CALCULATE = FALSE
IOBROKER_POWER_INPUT_ALIAS = alias.0.Zaehler.Zaehler_CurrentInputWatt
IOBROKER_POWER_OUTPUT_ALIAS = alias.0.Zaehler.Zaehler_CurrentOutputWatt
`
irgendwie komme ich mit dem github markup nicht klar
Alias, Port und IP stimmen aber.
mit curl bekomme ich auch den Wert.
curl http://10.1.120.71:8087/getPlainValue/alias.0.Zaehler.Zaehler_Netzbezug
602
in [SELECT_POWERMETER] steht USE_IOBROKER auf true und alle anderen auf false?
in [SELECT_POWERMETER] steht USE_IOBROKER auf true und alle anderen auf false?
ja
ah ja, fehler gefunden kannst du diese zeile ändern:
IOBROKER_POWER_CALCULATE = config.get('IOBROKER', 'IOBROKER_POWER_CALCULATE')
in
IOBROKER_POWER_CALCULATE = config.getboolean('IOBROKER', 'IOBROKER_POWER_CALCULATE')
ja, das hat es gebracht!
Der PowerMeter Wert wird jetzt ausgelesen.
powermeter IOBROKER: 526 Watt
Die eigentliche Regelung kann ich Wetterbedingt leider nicht testen.
Zwischenzähler und Hauptzähler können also aus IoBroker gelesen werden TOP!
Apropos Zwischenzähler, da bei mir nicht alle WR an einer "Leitung" hängen gibt es mehrere. Nur falls du dich fragst warum macht man sowas. Die müssten man dann im Zweifel addieren oder als virtuellen Zähler im IoBroker anlegen und dort addieren.
ja genau, die musst du dann im ioBroker addieren und als einen Gesamtwert bereitstellen.
Dann nehm ich das so nachher mit in die MAIN.
edit: erledigt
Gibt leider keine Rückgabe.
Wie hast Du den den simple API Adapter installiert und konfiguriert?
Gibt leider keine Rückgabe.
Wie hast Du den den simple API Adapter installiert und konfiguriert?
Das wird bei mir angezeigt, leider kann ich damit überhaupt nichts anfangen.
{ "getPlainValue": "http://192.168.178.45:8087/getPlainValue/stateID", "get": "http://192.168.178.45:8087/get/stateID/?prettyPrint", "getBulk": "http://192.168.178.45:8087/getBulk/stateID1,stateID2/?prettyPrint", "set": "http://192.168.178.45:8087/set/stateID?value=1&prettyPrint", "toggle": "http://192.168.178.45:8087/toggle/stateID&prettyPrint", "setBulk": "http://192.168.178.45:8087/setBulk?stateID1=0.7&stateID2=0&prettyPrint", "setValueFromBody": "http://192.168.178.45:8087/setValueFromBody?stateID1", "objects": "http://192.168.178.45:8087/objects?pattern=system.adapter.admin.0*&prettyPrint", "states": "http://192.168.178.45:8087/states?pattern=system.adapter.admin.0*&prettyPrint", "search": "http://192.168.178.45:8087/search?pattern=system.adapter.admin.0*&prettyPrint", "query": "http://192.168.178.45:8087/query/stateID1,stateID2/?dateFrom=2019-06-06T12:00:00.000Z&dateTo=2019-06-06T12:00:00.000Z&noHistory=false&aggregate=minmax&count=3000&prettyPrint" }
Na dann läuft es doch offenbar schon.
Du musst dir aus der Objektliste die stateid der Leistung in W raussuchen.
Bei mir wäre das z.B.
sonoff.0.tasmopwr.PWR_power-live
wird bei Dir anders sein, vielleicht ja ein Alias.
In die URL
http://192.168.178.45:8087/getPlainValue/stateID
Setzt Du zum testen mal dein StateID ein.
Sieht dann so aus:
http://192.168.178.45:8087/getPlainValue/hier.deine.stateid.power
hier.deine.stateid.power musst du natürlich anpassen.
Die URL testest Du (rufst sie einfach im Browser auf). Wenn der Wert Leistungswert kommt hast Du alle Infos für die Konfigurationsdatei.
HoymilesZeroExport_Config.ini
in der [IOBROKER] Sektion
IOBROKER_IP = 192.168.178.45 IOBROKER_PORT = 8087 IOBROKER_CURRENT_POWER_ALIAS = hier.deine.stateid.power
Super, es läuft. Jetzt muss nur noch besseres Wetter werden ;-) Vielen Dank für Eure Hilfe und diese tolle Lösung.
Ich habe den Lesekopf über USB direkt am Raspberry Pi stecken und über ioBroker sehe ich auch die Werte des Zählers. Wie muss ich denn die Config.ini anpassen, um die Nulleinspeisung zu realisieren?