Moinsen alle zusammen,
ich habe einen solar xHybrid Wechselrichter, der auch immer fleißig alle 5 Minuten seine ganzen Daten (Ertrag, Verbrauch, Netzbezug, ...) zum Solar Portal schickt.
Ich möchte die Daten gerne lokal in meinem Netz auslesen und in einer DB speichern bzw. gerne direkt mit fhem auswerten, um bspw. bei zu viel Einspeisung einen Verbraucher hinzu zuschalten.
Gibt es in dieser Gemeinde hier im Forum solax User?
hat er rs485 schnittstelle?
Leider nein.
Eine rs485 hat mein gavazzi em24. Aber den bekomme ich auch nicht richtig ausgelesen.
Aber zu dem Thema gibt es auch schon einen thread: https://forum.fhem.de/index.php/topic,57257.msg672500.html#msg672500
Damit komme ich aber leider auch nicht weiter :'(
Hallo, habe meinen Solax sk-su über httpmod und solaxportal in fhem eingelesen. Alle Daten abrufbar. Die Einstellungen für den Login sind nicht ganz einfach. Da gibt es im Forum eine Anleitung für senec die wunderbar funktioniert
Hallo Archinaut,
da kann ich dann ja immer nur auf alle 5Minuten aktuellen Werte zugreifen und muss dass dann ausserhalb meines Hauses auf dem Solar Portal machen.
Mein Ziel wäre es innerhalb meines Hauses auf die vorhandene Infrastruktur (Wechselrichter / Zähler em24) zuzugreifen und dort mit Echtzeitdaten zu arbeiten.
Ich bin auch schon einen ganzen Schritt weiter (siehe https://forum.fhem.de/index.php/topic,77814.msg697368.html#msg697368 (https://forum.fhem.de/index.php/topic,77814.msg697368.html#msg697368)
Aber da fehlt mir der letzte Schritt zu den negativen Werten (=Einspeisung) auf dem Gavazzi Zähler.
LG
Stefan
Hallo in die Runde!
Falls es noch andere Solax User gibt, hier eine gute Lösung: https://github.com/GitHobi/solax
LG
Stefan
Ihr könnt den solax sk su per modbus-tcp port 502 per ethernet kabel komplett auslesen. Kann die modbusadressen gern zur verfügung stellen. Auch schreiben der einstellungen wäre möglic, leider bekommt man die schreibregister nicht vom hersteller zugesandt.
Hallo lieber Archinaut, das wäre fantastisch, wenn Du mir die Modbus Adressen des Solax xHybrid zur Verfügung stellen könntest!
Hier der link. Dort sind alle Register ersichtlich. Auch ist es ohne Probleme möglich , ein Lademanagement selber zu programmieren und z.B. statt eines Gavazzi Zähler direkt mit dem SK-SU über fhem einen SDM630 zu nutzen. So lade ich die Batterie nur mit den 70% Überschuss aus der PV im Sommer. Dies reduziert die Ammortisationszeit erheblich.
https://github.com/InfernoEmbedded/PowerScraper/tree/master/Inputs
Grüsse
anbei das abgeänderte modbus Modul vom SDM630m für den Solax. Ist aber nur ein Arbeitsstand. Bitte ggf. selber noch ergänzen und individuell anpassen.
Zitat von: stefan.apetz am 05 September 2018, 11:09:32
Hallo in die Runde!
Falls es noch andere Solax User gibt, hier eine gute Lösung: https://github.com/GitHobi/solax
LG
Stefan
Vielen Dank für den Hinweis, ich hoffe, nach der langen Zeit hier noch Informationen zu bekommen. Hast du dies umgesetzt und wenn ja, wie schaffst du es, die Daten in das Netzwerk des Raspberrys zu bekommen? Bei mir verbindet sich das Pocket-Wifi-Modul von Solax mit meinem Router, ist so im Netzwerk und bekommt auch eine entsprechende Netzwerkadresse. Auf die lokale Adresse und somit auf die Live-Daten komme ich jedoch nur, wenn ich mich mir dem generierten Wlan des Wifi-Modules verbinde :(
Vielleicht kannst du mir ja helfen.
Vielen Dank
Der Solax sk-su kann über den rj45 Anschluss auslesen werden.netzwerkabel Anschlüssen.ip einstellen und mit meinem Modul bekommst du alle Infos und kannst über die Einstellung fernlenkung die Ladeleistung einstellen.funktioniert zusammen mit einem sdm630 viel besser als über den gavazzi Zähler. Und das mit nur einem notify im Thema.
Na ich denke, ich stecke nicht ausreichend in der Materie oder mein Solax X1-Mini funktioniert noch ein wenig anders. Jedenfalls kann ich den RS485-Anschluss nicht direkt via Netzwerkkabel an den Router anschließen - kommt nichts an und nach nochmaliger Überprüfung erhalte ich weder direkt im Netzwerk des Wlan-Modules, noch Wlan-Modul verbunden mit Router, Zugriff auf die Live-Daten.....
Hui, hier hat sich ja doch noch einiges getan :-)
Also:döner123: mit dem Module von Hobi auf Github kann man ein Device Solax Direct erstellen. In diesem liegen die ganzen Readings aus dem Wechselrichter vor. Mittels Logging kann man die Daten ganz normal in ein Logfile (oder DB) schreiben und dann auswerten. Die Echtzeitdaten kann man dann natürlich "einfach so" aus den Readings ziehen.
Ich verbinde mich nicht auf das lokale Wifi des Solax: im Lokalen Wifi (und in dem Admin-Modus dazu) trägst du ja die Wifi Adressen deines Wlans ein (damit der Solax in das Solaxportal funken kann). Wenn du dann in deinen Router schaust siehst du, dass der Solax in deinem Heimnetz auch eine IP zugewiesen bekommen hat. Über diese (kann man beim Anlegen des Solax-Direct Devices von Tobi angeben) verbindet sich ehem dann über das Netzwerk mit dem Solax.
Zur Visualisierung verwende ich fuip (dazu hat Tobi auch Beispielhaften im Github mit abgelegt). Läuft alles prima.
archinaut220379: wenn du vom RJ45 sprichst, meinst du dann das normale Interface vom Solax für die Ethernet-Netzwerkanbindung am Router?
Hallo Stefan,
Wlan-Modul ist im Netzwerk, Kommunikation mit der Cloud funktioniert, die von dir beschriebene Vorgehensweise funktioniert bei mir jedoch nicht. Die Beschreibung vom Modul spricht ja auch von der lokalen Netzwerkadresse des Wlan-Moduls im eigenen Netzwerk. Ich habe die lokale Netzwerkadresse im Haus-Wlan verwendet zur Einrichtung des Moduls, wird aber dann nur Error im State angezeigt. Wie bereits beschrieben, scheint es Unterschiede zw. Solax X1-Mini und Solax Hybrid zu geben.
Beste Grüße
Hallo döner123,
schau bitte mal hier: https://github.com/GitHobi/solax/wiki/74_SolaxDirect.pm-module-description
Das steht da so nicht in der Doku, dass man eine andere URL / Host / IP eintragen kann, das hat Hobi aber im August 2018 hinzugefügt, siehe: https://github.com/GitHobi/solax/commit/9a3fe2ec6987007bbd1eb785830c4665199b8cb1
Meine Definition sieht bspw. so aus:
define solax SolaxDirect 192.168.178.55 80
attr solax DbLogExclude .*
attr solax alias Solax Wechselrichter LiveData
attr solax event-on-change-reading .*
attr solax host 192.168.178.55
attr solax interval 15
attr solax port 80
attr solax room hidden
attr solax userReadings pv_MoneyEarnings {sprintf("%.2f",ReadingsVal("solax","inverter_yield_month", 0)*0.26)}, pv_percentPower {sprintf("%.2f",ReadingsVal("solax","pv_total_power", 0)/5415*100)}
Damit spreche ich die URL http://192.168.178.55/api/realTimeData.htm an. Das ist die (feste) IP, die mein Solax in meinem Netzwerk hat.
Über diese kommt das JSON Objekt für das Modul zurück.
{"method":"uploadsn","version":"Solax_SI_CH_2nd_20160912_DE02","type":"AL_SE","SN":"CD2360D3","Data":[3.7,5.5,215.8,206.9,3.6,235.9,823,33,5.5,10799.5,-58,798,1137,55.70,19.74,1100,23,79,0.0,2669.5,,,,,,,,,,,,,,,,,,,,,,4387.80,4827.30,,,,,,,,49.97,,,0.0,0.0,0,0.00,0,0,0,0.00,0,9,0,0,0.00,0,9],"Status":"2"}
Ich habe auch mal einen Screenshot von meiner Visualisierung angefügt, die ich mit ftui gebaut habe (auf Basis der HTMLs von Hobi)
Ich habe das so gebaut, dass das PopUp mit den Detailinformationen aufgeht, wenn ich auf den Prozentkreis (im Bild die 32,5 %) zur aktuellen Produktion klicke.
Vielen Dank für deine Mühe aber wie gesagt, das Modul wurde auf einem Hybrid Wechselrichter aufgebaut, den du auch hast, oder?
Bei Anwahl meiner IP im Netzwerk mit http://192.168.69.38/api/realTimeData.htm kommt kein Ergebnis. Bedeutet also, dass bei meinem Gerät kein Aufruf über API möglich zu sein scheint :(
Schön umgesetzt bei dir!
Danke (für das Lob an die Umsetzung)
Was kommt, wenn du im Browser nur die IP aufrufst? Ein Login Fenster?
Welchen Wechselrichter hast du?
Edit: x1, steht ja oben. Da hab ich nicht richtig geschaut.
Wenn du dich mit dem lokalen wifi vom Solax verbindest und dann die url unter der entsprechenden IP aufrufst kommt das json Objekt? Ich habe in anderen Foren gelesen, dass Solax wohl auf neueren Geräten die api im nicht lokalen Netz dicht gemacht hat.
Dann mögliche kompliziertere Lösungen: einen Raspi mit dem Solax wifi verbinden und mit dem anderen Hausnetz (lan oder zweites wlan) und dann den raspi als router mit reverse proxy konfigurieren.
Ja genau, das ist das Problem. Offenbar ist sogar der Api Zugriff im lokalen Netz des Wlan Moduls gesperrt. Also selbst intern bekomme ich bei http://5.8.8.8/api/realTimeData.htm ein "The requested URL was not found on this server" und in meinem Heimnetz einzig die Einwahlseite wenn ich die lokale ID nutze.
Ich denke, das wurde komplett dicht gemacht, möglich wäre wahrscheinlich nur noch der HTML-Zugriff auf die Cloud. Aber da hab ich auch nicht wirklich einen Plan von.
Egal, wäre ein nice-to-have gewesen aber hängt nix von ab. Vielleicht ergibt sich später ja noch eine Möglichkeit.
edit:
Quark, Einwahlseite mit admin bekomme ich nur im lokalen Netz des Wechselrichters. Im Heimnetz funktioniert weder Api noch login
Ich habe in folgenden Thread in einem anderen Forum eine Anleitung zur Einbindung der Daten aus der Cloud für Node-Red gefunden.
https://community.home-assistant.io/t/solax-solar-inverter-setup-guide/48008/3 (https://community.home-assistant.io/t/solax-solar-inverter-setup-guide/48008/3)
hier ist folgende Konfigurationsdatei solax.yaml hinterlegt mit folgendem Inhalt:
[
{
"id": "e116cffd.09d8",
"type": "http request",
"z": "24df37fe.8d32f8",
"name": "Get Token",
"method": "POST",
"ret": "obj",
"url": "47.254.152.24:6080/proxy/login/login?password=PASSWORD&userName=USERNAME&userType=5",
"tls": "",
"x": 410,
"y": 100,
"wires": [
[
"65cfcd70.07b70c",
"cceebdee.ed2d58"
]
]
},
{
"id": "ea4af243.648128",
"type": "inject",
"z": "24df37fe.8d32f8",
"name": "",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "300",
"crontab": "",
"once": true,
"onceDelay": 0.1,
"x": 150,
"y": 100,
"wires": [
[
"e116cffd.09d8"
]
]
},
{
"id": "65cfcd70.07b70c",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 670,
"y": 100,
"wires": []
},
{
"id": "3ea8f259.003716",
"type": "http request",
"z": "24df37fe.8d32f8",
"name": "Get dailyInfo",
"method": "POST",
"ret": "obj",
"url": "47.254.152.24:6080/proxy//inverter/getDailyInfo?inverterSn=SERIALNUMBER&today=2018-08-25&tokenId={{{tokenId}}}&wifiSn=WIFISERIALNUMBER",
"tls": "",
"x": 410,
"y": 220,
"wires": [
[
"8a32497e.90ac78"
]
]
},
{
"id": "8a32497e.90ac78",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 680,
"y": 220,
"wires": []
},
{
"id": "cceebdee.ed2d58",
"type": "function",
"z": "24df37fe.8d32f8",
"name": "",
"func": "msg.tokenId = msg.payload.result.tokenId;\nmsg.userId = msg.payload.result.userId;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 170,
"y": 160,
"wires": [
[
"3ea8f259.003716",
"161a41e7.d0a926",
"784ccb02.f10aac"
]
]
},
{
"id": "161a41e7.d0a926",
"type": "http request",
"z": "24df37fe.8d32f8",
"name": "Get inverterInfo",
"method": "POST",
"ret": "obj",
"url": "47.254.152.24:6080/proxy//mysite/getInverterInfo?siteId=MYSITEID&tokenId={{{tokenId}}}",
"tls": "",
"x": 420,
"y": 280,
"wires": [
[
"28d9a3f1.7ffa34",
"709e7142.9818f8"
]
]
},
{
"id": "28d9a3f1.7ffa34",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 680,
"y": 280,
"wires": []
},
{
"id": "784ccb02.f10aac",
"type": "http request",
"z": "24df37fe.8d32f8",
"name": "Get siteId",
"method": "POST",
"ret": "obj",
"url": "47.254.152.24:6080/proxy//mysite/mySite?tokenId={{{tokenId}}}&userId={{{userId}}}",
"tls": "",
"x": 400,
"y": 160,
"wires": [
[
"cd814d82.5bb45"
]
]
},
{
"id": "cd814d82.5bb45",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 680,
"y": 160,
"wires": []
},
{
"id": "645bfd93.2413bc",
"type": "influxdb out",
"z": "24df37fe.8d32f8",
"influxdb": "90887afa.31e428",
"name": "GridPower",
"measurement": "GridPower",
"precision": "",
"retentionPolicy": "",
"x": 810,
"y": 520,
"wires": []
},
{
"id": "629f6371.66c11c",
"type": "influxdb out",
"z": "24df37fe.8d32f8",
"influxdb": "90887afa.31e428",
"name": "SolaxTemp",
"measurement": "SolaxTemp",
"precision": "",
"retentionPolicy": "",
"x": 810,
"y": 560,
"wires": []
},
{
"id": "b5877413.78aa88",
"type": "influxdb out",
"z": "24df37fe.8d32f8",
"influxdb": "90887afa.31e428",
"name": "KwHToday",
"measurement": "KwHToday",
"precision": "",
"retentionPolicy": "",
"x": 810,
"y": 600,
"wires": []
},
{
"id": "2de5110b.514f9e",
"type": "influxdb out",
"z": "24df37fe.8d32f8",
"influxdb": "90887afa.31e428",
"name": "KwHTotal",
"measurement": "KwHTotal",
"precision": "",
"retentionPolicy": "",
"x": 800,
"y": 640,
"wires": []
},
{
"id": "709e7142.9818f8",
"type": "function",
"z": "24df37fe.8d32f8",
"name": "Check request success",
"func": "if(msg.payload.success === true){\n return [msg, null];\n}else{\n return [null, msg]\n}",
"outputs": 2,
"noerr": 0,
"x": 230,
"y": 340,
"wires": [
[
"1b3ee1f0.6ea156"
],
[
"3124b3ac.574004",
"bfa8eb8c.f2c08"
]
]
},
{
"id": "3124b3ac.574004",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "Error",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"x": 990,
"y": 360,
"wires": []
},
{
"id": "20251465.4b9d24",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "Error <5 minuten",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"x": 1030,
"y": 300,
"wires": []
},
{
"id": "bfa8eb8c.f2c08",
"type": "api-call-service",
"z": "24df37fe.8d32f8",
"name": "Geen solaxCloud bericht",
"server": "584183bf.4f42dc",
"service_domain": "notify",
"service": "ios_iphone_richard",
"data": "{\"title\": \"SolaxCloud\", \"message\": \"Helaas, geen succesvolle response ontvangen\"}",
"mergecontext": "ok",
"x": 1050,
"y": 400,
"wires": [
[]
]
},
{
"id": "a7a8cf53.08116",
"type": "function",
"z": "24df37fe.8d32f8",
"name": "",
"func": "//msg.payload = msg.payload.result[0];\nvar gridPower, todayYield, totalYield, temperatrure;\ngridPower= {payload: msg.payload.gridPower};\ntodayYield= {payload: msg.payload.todayYield};\ntotalYield={payload: msg.payload.totalYield};\ntemperature={payload: msg.payload.temperature};\nlastUpdateTimes={payload: msg.payload.lastUpdateTimes};\nreturn [[gridPower], [todayYield], [totalYield], [temperature], [lastUpdateTimes]];",
"outputs": 5,
"noerr": 0,
"x": 170,
"y": 540,
"wires": [
[
"e5f9cdf.776afb",
"645bfd93.2413bc",
"2ac60dfb.ba2bca"
],
[
"1ad5d856.5d6ef8",
"b5877413.78aa88"
],
[
"59b7a4dc.4e700c",
"2de5110b.514f9e"
],
[
"cbf1ca54.d4baf8",
"629f6371.66c11c"
],
[
"b8a2949b.852778"
]
]
},
{
"id": "e5f9cdf.776afb",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 390,
"y": 480,
"wires": []
},
{
"id": "1ad5d856.5d6ef8",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 390,
"y": 540,
"wires": []
},
{
"id": "59b7a4dc.4e700c",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 390,
"y": 580,
"wires": []
},
{
"id": "cbf1ca54.d4baf8",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 370,
"y": 620,
"wires": []
},
{
"id": "b8a2949b.852778",
"type": "debug",
"z": "24df37fe.8d32f8",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 180,
"y": 660,
"wires": []
},
{
"id": "2ac60dfb.ba2bca",
"type": "mqtt out",
"z": "24df37fe.8d32f8",
"name": "MQTT publish",
"topic": "power/current/solar",
"qos": "",
"retain": "",
"broker": "80d9bcf2.ce518",
"x": 820,
"y": 480,
"wires": []
},
{
"id": "1b3ee1f0.6ea156",
"type": "function",
"z": "24df37fe.8d32f8",
"name": "",
"func": "// we checken of het tijdsverschil tussen solax last update en nu <= 10 minuten.\n\nmsg.payload = msg.payload.result[0];\nvar last = new Date(msg.payload.lastUpdateTime)\nvar current = new Date();\nvar difference = (current - last) / 1000 - (60*60*7);\n\nif(difference >= (10*60)){\n // Alleeen error (push bericht sturen)\n var msg1 = {};\n msg1.payload = difference;\n return[null, msg1];\n}else{\n // Geen error, alleen data sturen.\n return [msg ,null];\n}",
"outputs": 2,
"noerr": 0,
"x": 590,
"y": 320,
"wires": [
[
"a7a8cf53.08116"
],
[
"20251465.4b9d24",
"da1d798d.62f5e"
]
]
},
{
"id": "da1d798d.62f5e",
"type": "api-call-service",
"z": "24df37fe.8d32f8",
"name": "Solax cloud niet up to date",
"server": "584183bf.4f42dc",
"service_domain": "notify",
"service": "ios_iphone_richard",
"data": "{\"title\": \"SolaxCloud\", \"message\": \"Helaas, de SolaxCloud heeft geen recente meting binnengekregen\"}",
"mergecontext": "ok",
"x": 1060,
"y": 260,
"wires": [
[]
]
},
{
"id": "90887afa.31e428",
"type": "influxdb",
"z": "",
"hostname": "127.0.0.1",
"port": "8086",
"protocol": "http",
"database": "homeassistant",
"name": "Ha",
"usetls": false,
"tls": ""
},
{
"id": "584183bf.4f42dc",
"type": "server",
"z": "",
"name": "Home Assistant",
"legacy": false
},
{
"id": "80d9bcf2.ce518",
"type": "mqtt-broker",
"z": "",
"name": "",
"broker": "192.168.1.40",
"port": "1883",
"clientid": "NodeRed",
"usetls": false,
"compatmode": true,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthRetain": "false",
"birthPayload": "",
"closeTopic": "",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willRetain": "false",
"willPayload": ""
}
]
die Einrichtung scheint dort dann ziemlich einfach:
"The following items have to be customized in order to make it work.
USERNAME : the username (case sensitive) for the solax cloud site
PASSWORD: the password for the solax cloud site
SITEID: The ID of the site, you can find this ID by enabling the second debug switch.
InverterSN: you can find this serial number on the solax cloud site
WifiSN: the serial number of the WiFi dongle (printed on sticker)"
Ist hier jemand, der mir das für Fhem adaptieren kann ^^
Moin,
ich überlege einen X-Hybrid anzuschaffen (10kWp).
https://greenakku.de/Wechselrichter/Hybridwechselrichter/solaX-X-HYBRID-HV-Wechselrichter-3-PHASEN-X3-Hybrid-8-0T::1522.html
Gibt es jemanden, der diesen bereits erfolgreich ausliest?
Habe diesen Wechselrichter nirgends explizit erwähnt gefunden.
Grüße,
Stephan
Zitat von: archinaut220379 am 25 April 2019, 13:43:25
anbei das abgeänderte modbus Modul vom SDM630m für den Solax. Ist aber nur ein Arbeitsstand. Bitte ggf. selber noch ergänzen und individuell anpassen.
Moin Archinaut,
magst Du bitte kurz aufskizzieren, was man genau in ehem machen muss um da eine Verbindung mit hinzubekommen?
Es reicht ja nicht die Modul-Datei auf dem Server abzulegen.
Ich habe bislang die Modus Datei im FHEM Verzeichnis abgelegt und dann die Module neu eingelesen und dann entsprechend ein def durchgeführt:
DEF 1 60
FUUID 5f073136-f33f-0227-8d4f-279130af7cc08eb3
INTERVAL 60
MODBUSID 1
MODE master
MODULEVERSION Modbus 4.1.5 - 17.9.2019
NAME Solax
NOTIFYDEV global
NR 403
NTFY_ORDER 50-Solax
PROTOCOL RTU
STATE disconnected
TRIGGERTIME 1594307665.51238
TRIGGERTIME_FMT 2020-07-09 17:14:25
TYPE ModbusSolax
lastUpdate 1594307605.51238
Es baut sich keine Verbindung auf. Ich musste ja auch nirgends irgendwelche Daten zum Solax eintragen (IP oder sonstwas).
Wie findet dein Modul den Solax und wie kann ich dann mit deinem Modul arbeiten?
Wenn ich mit dem get Parameter auslesen möchte erhalte ich nur
no IO Device to communicate through
Wie sehen die defs in der config aus?
Danke! :-)
So, ich habe es jetzt gefunden. Ging leider so aus der Doku nicht hervor.
Ich habe archinauts Modul genommen und mir dann mit folgender definition eingerichtet:
define Solax2 ModbusSolax 3 60 192.168.178.66:502 TCP
Läuft prima. Jetzt forsche ich gerade mit einem Modbus Tool etwas herum und versuche so viele Register wie möglich zu identifizieren.
Also: Einstellung direkt am Solax etwas ändern und dann die Werte auf Modbus betrachten.
@archinaut: ich hoffe dadurch passende Register zu finden für die Ladebegrenzung etc., damit man dann die Werte auch schreiben kann. Da ich von Programmierung aber kaum bis keine Ahnung hat müsste dann vielleicht jemand übernehmen und das umsetzen ;-)
Hallo,
hier einige Register zum Setzen von Werten:
input_register:
- service: modbus.write_register # Battery Charge Amps
address: '36'
value: "{{ (trigger.to_state.state | float * 10) | int }}"
- alias: House Battery Disharge Rate
trigger:
- service: modbus.write_register # Battery Discharge 0
address: '37'
value: "{{ (trigger.to_state.state | float * 10) | int }}"
- alias: "House Battery Min Energy %"
- service: modbus.write_register # Min Discharge %
address: '32'
value: "{{ trigger.to_state.state | int }}"
- alias: Solax Backup
entity_id: input_boolean.solax_forcetime
to: 'on'
action:
- service: modbus.write_register # Auto Mode
address: '31'
value: '2'
- alias: Solax Backup Off
entity_id: input_boolean.solax_backup
to: 'off'
action:
- service: modbus.write_register # Auto Mode
address: '31'
value: '0'
- alias: Solax ForceTime
entity_id: input_boolean.solax_backup
to: 'on'
action:
- service: modbus.write_register # Auto Mode
address: '31'
value: '1'
- alias: Solax ForceTime Off
- service: modbus.write_register # Auto Mode
address: '31'
value: '0'
# - alias: Solax Force Grid Charge
# - service: modbus.write_register # Auto Mode
# address: '62'
# value: '1'
# - alias: Solax Force Grid Charge Off
# address: '62'
# value: '0'
Funktionieren auch alle soweit bei einem SK-SU.
Hier zum Nachlesen:
https://github.com/wills106/homeassistant-config/blob/master/packages/solax_hybrid_g3.yaml
Grüsse
Und noch wichtig.
Register 0 einmal das Passwort für den Zugang am WR setzen. Normalerweise 2014.
Dann habt Ihr über modbus-TCP entsprechende Schreibrechte.
danke, archinaut, für die Infos: das sind ja schon mal einige nette Register.
Wäre Klasse, wenn du dein 98_Modbus_Solax um die Schreibfunktionen ergänzen könntest, dergestalt, dass dann auch die notwendige Anmeldung (Passwort) mit berücksichtigt wird.
Klasse wäre auch der lesende und schreibende Wert für die Einspeisebegrenzung ;-)
Hallo archinaut!
Zunächst vielen Dank für Dein Modul!!
Ich habe einen Solax Hybrid 10kw und 2 Triple- Power Akkus von Solax daran.
Habe etwas in Deinem Modul editiert, z.B. die Batteriespannung da wurde nur ein Zehntel angezeigt.
Bezüglich der Register und deren Bedeutung habe ich folgendes gefunden...
https://github.com/wills106/homeassistant-config/blob/master/packages/solax_x3_hybrid_g3_triplepower.yaml (https://github.com/wills106/homeassistant-config/blob/master/packages/solax_x3_hybrid_g3_triplepower.yaml)
arbeitest Du noch weiter an Deinem Modul?
LG
KnuMu
Hallo zusammen,
bin nun auch stolzer Besitzer eines SolaX X1-Mini (0.7kw) inklusive Wifi dongle und wollte diesen nun ins FHEM integrieren.
Vor dem Wechselrichter läuft schon mal ein Shelly 2.5 um die erzeugte Strommenge zu loggen.
Die obengenannten URLS sind auch für mich nicht erreichbar:
5.8.8.8/api/.... = 404 Seite nicht gefunden
192.x.y.z/api/.... = Connection refused (sieht also aus, als ob kein Webserver da drauf lauscht, vielleicht lauscht dieser auch nur auf einen andern Port? Werde morgen mal ein NMAP durchlaufen lassen )
Da mir der vom Wechselrichter erzeugte WiFi Access Point extrem unsympathisch ist und im umkreis von 5 Häuser das WLAN mit extremer Signalstärke zur Verfügung stellt, würde ich dieses gerne abdrehen. Dazu ein paar Fragen:
-> weiß jemand, ob man das SolaX interne WLAN AP deaktivieren kann?
-> gibt es vielleicht andere Zugriffs Möglichkeiten auf die oben genannte API?
-> wie verhält es sich mit dem SolaX LAN Dongle, ist hierbei vielleicht ein direkter API zugriff möglich, ist dieser vielleicht nur bei WLAN deaktiviert(was auch sinnmachen würde)?
Hat sich schon jemand mit der API von Solax Cloud Monitoring beschäftigt? Hier laufen ja alle Daten vom Wechselrichter zusammen.
URL wäre wohl: https://www.eu.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do&sn= .......
Fakt von der Doku ist leider, nicht mehr wie 10 Requests / min oder gar 10.000 / Tag was im Schnitt jede 10 Sekunden einen entspricht.
curl "https://www.eu.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?sn={myRegistrationsnummer}&tokenId={myToken}"|jq
{
"exception": "Query success!",
"result": {
"inverterSN": "XMT072XXXXXXXXXXXXXX",
"sn": "SWYYYYYYYYYYYYY",
"acpower": 0,
"yieldtoday": 1.2,
"yieldtotal": 5.1,
"feedinpower": 0,
"feedinenergy": 0,
"consumeenergy": 0,
"feedinpowerM2": 0,
"soc": 0,
"peps1": 0,
"peps2": 0,
"peps3": 0,
"inverterType": "4",
"inverterStatus": "100",
"uploadTime": "2020-10-18 18:03:41"
},
"success": true
}
jetzt die Frage, gibt es eine einfache Möglichkeit diesen CURL abzufragen und den JSON Body als Readings im FHEM darzustellen? Im Anhang habe ich euch noch die Beschreibung vom JSON Body angefügt. Die Abfrage via Cloud gefällt mir zwar auch nicht unbedingt gut, aber anderer Seites ist es somit für alle SolaX Wechselrichter einheitlich... oder?
Oh wie peinlich, einmal google und schon funktionierts:
defmod SolaxMini1X HTTPMOD https://www.eu.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?sn=SWXXXXXXXXXXX&tokenId=YYYYYYYYYYYYYYYYYYYYY 60
attr SolaxMini1X extractAllJSON 1
attr SolaxMini1X room 08 Strom
setstate SolaxMini1X 2020-10-18 20:07:17 exception Query success!
setstate SolaxMini1X 2020-10-18 20:07:17 result_acpower 0
setstate SolaxMini1X 2020-10-18 20:07:17 result_consumeenergy 0
setstate SolaxMini1X 2020-10-18 20:07:17 result_feedinenergy 0
setstate SolaxMini1X 2020-10-18 20:07:17 result_feedinpower 0
setstate SolaxMini1X 2020-10-18 20:07:17 result_feedinpowerM2 0
setstate SolaxMini1X 2020-10-18 20:07:17 result_inverterSN XMYYYYYYYYYYYYYYYYY
setstate SolaxMini1X 2020-10-18 20:07:17 result_inverterStatus 100
setstate SolaxMini1X 2020-10-18 20:07:17 result_inverterType 4
setstate SolaxMini1X 2020-10-18 20:07:17 result_peps1 0
setstate SolaxMini1X 2020-10-18 20:07:17 result_peps2 0
setstate SolaxMini1X 2020-10-18 20:07:17 result_peps3 0
setstate SolaxMini1X 2020-10-18 20:07:17 result_sn SWYYYYYYYYYY
setstate SolaxMini1X 2020-10-18 20:07:17 result_soc 0
setstate SolaxMini1X 2020-10-18 20:07:17 result_uploadTime 2020-10-18 18:03:41
setstate SolaxMini1X 2020-10-18 20:07:17 result_yieldtoday 1.2
setstate SolaxMini1X 2020-10-18 20:07:17 result_yieldtotal 5.1
setstate SolaxMini1X 2020-10-18 20:07:17 success 1
Moin, ich muss das Thema nochmal auspacken. Hab jetzt nen X1 und einen LAN-Dongle, kann aber leider auf keine der genannten Arten lokal etwas auslesen.
Gibt es jemanden, der mir noch ein paar Tips geben könnte?
Danke und Grüße,
Stephan
Habe folgendes rausgefunden:
curl -v POST http://5.8.8.8/?optType=ReadRealTimeData
liefert folgendes ergebnis:
* Rebuilt URL to: POST/
* Could not resolve host: POST
* Closing connection 0
curl: (6) Could not resolve host: POST
* Trying 5.8.8.8...
* TCP_NODELAY set
* Connected to 5.8.8.8 (5.8.8.8) port 80 (#1)
> GET /?optType=ReadRealTimeData HTTP/1.1
> Host: 5.8.8.8
> User-Agent: curl/7.52.1
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< Content-Type: text/html
< Cache-Control: private, no-cache, max-age=0
< Pragma: no-cache
< Content-Length: 1227
< Date: Thu, 17 Jun 2021 16:41:35 GMT
< Server: LiteSpeed
< Connection: Keep-Alive
<
<!DOCTYPE html>
<html style="height:100%">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title> 403 Forbidden
</title></head>
<body style="color: #444; margin:0;font: normal 14px/20px Arial, Helvetica, sans-serif; height:100%; background-color: #fff;">
<div style="height:auto; min-height:100%; "> <div style="text-align: center; width:800px; margin-left: -400px; position:absolute; top: 30%; left:50%;">
<h1 style="margin:0; font-size:150px; line-height:150px; font-weight:bold;">403</h1>
<h2 style="margin-top:20px;font-size: 30px;">Forbidden
</h2>
<p>Access to this resource on the server is denied!</p>
</div></div><div style="color:#f0f0f0; font-size:12px;margin:auto;padding:0px 30px 0px 30px;position:relative;clear:both;height:100px;margin-top:-101px;background-color:#474747;border-top: 1px solid rgba(0,0,0,0.15);box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset;">
<br>Proudly powered by <a style="color:#fff;" href="http://www.litespeedtech.com/error-page">LiteSpeed Web Server</a><p>Please be advised that LiteSpeed Technologies Inc. is not a web hosting company and, as such, has no control over content found on this site.</p></div></body></html>
* Curl_http_done: called premature == 0
* Connection #1 to host 5.8.8.8 left intact
Wenn ich meinem Rechner ein virtuelles interface mit der 5.8.8.7 spendiere, ändert sich die Antwort:
* Rebuilt URL to: POST/
* Could not resolve host: POST
* Closing connection 0
curl: (6) Could not resolve host: POST
* Trying 5.8.8.8...
* TCP_NODELAY set
* connect to 5.8.8.8 port 80 failed: Keine Route zum Zielrechner
* Failed to connect to 5.8.8.8 port 80: Keine Route zum Zielrechner
* Closing connection 1
curl: (7) Failed to connect to 5.8.8.8 port 80: Keine Route zum Zielrechner
Hi
Just for help in french
to extract data's from your x1 hybrid on the cloud (with a lan key ) : justtype in php this code ands refer to the api help
bonjour à tous.
Pour recuperer les donnees deun onduleur solax en html et php rien de plus simple.
Dans votre compte solax recuperer l'adresse de l'API en y ajoutant votre token et sn puis programmez ces qques lignes en php:
//récuperation des données sur le cloud
$site=« https://www.eu.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?tokenId=$yourtoken&sn=$yoursn » ;
//formater le fichier json
$homepage = file_get_contents($site);
$arr = json_decode($homepage, true);
ce fichier comprends 3
arrays seul l'array result nous interesse
//recuperation de l'array result
$data=$arr[« result »];
//affichage des differentes variables décrites dans l'aide de l'api en exemple:
echo $data[« uploadTime »];
echo $data[« yieldtoday »]." Kw/h";
echo $data[« yieldtotal »]." Kw/h";
echo $data[« soc »]." %";
$powernow= $data[« powerdc1 »] +$data[« powerdc2 »];
echo $powernow;
J'espere vous avoir aidé
Moonhead
Thanky for your help.
Extracting the data from the cloud is neither my Problem nor my Target.
I would like to extract the values in much higher frequency than every 5 minutes, to calculate my excess-feedin? (Überschusseinspeisung), preferably local in my LAN.
So i had the hope to be able to request at least the actual power from the X1 every .. lets say every 2 seconds.
Cheers,
Stephan
Ich habe seit kurzem auch einen X1 mit Wifi-Stick (wird noch gegen einen LAN-Stick getauscht, der war nur nicht verfügbar) und kann die Daten in der Solax-Cloud schön sehen.
Was aber die lokale Auswertung angeht, da geht nichts mehr, die ganzen Links auf das Webinterface funktionieren nicht.
So wie ich das gelesen habe geht das jetzt nur noch über IP-Adresse des Solax-Wifi, also die 5.8.8.8 . Werde ich morgen mal testen.
Auch bei der Anmeldung auf dem Stick hat sich was geändert. Überall sind die Anmeldedaten mit admin:admin dokumentiert , bei den neuen Sticks ist der Benutzername admin und das Kennwort ist die Seriennummer des Stick. Habe ich nach elend langer Suche auf einer Seite aus CZ gefunden.
Hat jemand ein aktuelles bzw. neueres Gerät und kann die Daten irgendwie lokal auswerten? Bei mir funktionieren bisher nur die Daten aus der Cloud über ioBroker.
Gruß
Andreas
Hallo Andreas, ich habe seit 2 Jahren einen X3 und kann zum X1 daher nichts Konkretes sagen.
Anfangs habe ich die Daten mit dem JsonMod (https://www.eu.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?tokenId= ...) vom Server geholt. Das funktioniert auch immer noch. Da der X3 aber meine Batterie "nicht wirklich" kennt, sind die Daten auf dem Server nur bedingt brauchbar und teilweise (z.B. Eigenverbrauch) sogar falsch.
Ansonsten kann ich meine Daten über Modbus/tcp lesen. Allerdings hat bei mir der X3 zwei LAN-Interfaces. Ein Netz sichert die Verbindung zwischen X3 und Batterie. Darauf habe ich bisher keinen Zugriff. Das Andere liegt auf dem LAN-Stick und bekommt seine Adresse von meinem DHCP-Server. Darauf kann ich per Modbus ohne login zugreifen. Die Register sind dabei aber andere, als die allgemein bekannten. Die "Input-Register" z.B. sind gar nicht verfügbar. Für meine Zwecke reichen die lokal verfügbaren Register aber aus um auf den SolaX-Server verzichten zu können. Die fehlenden Register muss halt der Hauself berechnen.
Gruß
Hajo
Hallo Hajo,
danke für die Info.
Ich konnte inzwischen doch 'lokal' auf die Daten zugreifen, mit curl -X POST http://<INVERTER-IP> --data 'optType=ReadRealTimeData&pwd=)'
funktioniert es.
Ergebnis:
{"sn":"<SN vom Wifi-Stick>","ver":"3.003.02","type":4,"Data":[2368,6,150,630,0,25,0,160,0,4996,2,243,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,0,102,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"Information":[0.600,4,"<SN vom WR>",8,2.19,0.00,1.37,0.00,0.00,1]}
Bekomme die Daten aber noch nicht so richtig zerlegt und zugewiesen.
Modbus RTU ist auf meinem Stick/X1 aktiviert, wie funktioniert das dann?
List:
Internals:
.AttrList do_not_notify:1,0 IODev queueMax alignTime enableControlSet:0,1 enableSetInactive:0,1 nonPrioritizedSet:0,1 nonPrioritizedGet:0,1 sortUpdate:0,1 cacheUpdateHash:0,1 cacheParseInfo:0,1 propagateVerbose:0,1 connectionsRoom serverIdExpr scanDelay disable:0,1 event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading obj-[cdih][0-9]+-reading obj-[cdih][0-9]+-name obj-[cdih][0-9]+-min obj-[cdih][0-9]+-max obj-[cdih][0-9]+-hint obj-[cdih][0-9]+-map obj-[cdih][0-9]+-mapDefault obj-[cdih][0-9]+-rmapDefault obj-[cdih][0-9]+-set obj-[cdih][0-9]+-setexpr obj-[cdih][0-9]+-textArg obj-[cdih][0-9]+-revRegs obj-[cdih][0-9]+-bswapRegs obj-[cdih][0-9]+-len obj-[cdih][0-9]+-unpack obj-[cdih][0-9]+-decode obj-[cdih][0-9]+-encode obj-[cdih][0-9]+-expr obj-[cdih][0-9]+-ignoreExpr obj-[cdih][0-9]+-format obj-[ih][0-9]+-type obj-[cdih][0-9]+-showGet obj-[cdih][0-9]+-allowWrite obj-[cdih][0-9]+-group obj-[cdih][0-9]+-poll obj-[cdih][0-9]+-polldelay obj-[cdih][0-9]+-overrideFCread obj-[cdih][0-9]+-overrideFCwrite dev-([cdih]-)?read dev-([cdih]-)?write dev-([cdih]-)?combine dev-([cdih]-)?allowShortResponses dev-([cdih]-)?addressErrCode dev-([cdih]-)?valueErrCode dev-([cdih]-)?notAllowedErrCode dev-([cdih]-)?defRevRegs dev-([cdih]-)?defBswapRegs dev-([cdih]-)?defLen dev-([cdih]-)?defUnpack dev-([cdih]-)?defDecode dev-([cdih]-)?defEncode dev-([cdih]-)?defExpr dev-([cdih]-)?defSet dev-([cdih]-)?defHint dev-([cdih]-)?defSetexpr dev-([cdih]-)?defIgnoreExpr dev-([cdih]-)?defFormat dev-([cdih]-)?defShowGet dev-([cdih]-)?defAllowWrite dev-([cdih]-)?defPoll dev-([cdih]-)?defPolldelay dev-h-brokenFC3 dev-d-brokenFC2 dev-c-brokenFC5 dev-type-[A-Za-z0-9_]+-unpack dev-type-[A-Za-z0-9_]+-len dev-type-[A-Za-z0-9_]+-encode dev-type-[A-Za-z0-9_]+-decode dev-type-[A-Za-z0-9_]+-revRegs dev-type-[A-Za-z0-9_]+-bswapRegs dev-type-[A-Za-z0-9_]+-format dev-type-[A-Za-z0-9_]+-expr dev-type-[A-Za-z0-9_]+-map dev-type-[A-Za-z0-9_]+-hint dev-type-[A-Za-z0-9_]+-set dev-timing-timeout dev-timing-serverTimeout dev-timing-sendDelay dev-timing-commDelay poll-.* polldelay-.* queueDelay queueMax queueTimeout busDelay clientSwitchDelay frameGap dropQueueDoubles:0,1 enableQueueLengthReading:0,1 retriesAfterTimeout profileInterval openTimeout nextOpenDelay nextOpenDelay2 maxTimeoutsToReconnect skipGarbage:0,1 timeoutLogLevel:3,4 closeAfterResponse:0,1 silentReconnect:0,1
.LastUpdate 1657460201.10017
.TRIGGERTIME 1657460261.10017
.getList Grid_Voltage:noArg Grid_Current:noArg PV1_Power:noArg PV2_Power:noArg Solar_Energy_total:noArg Grid_Power:noArg Battery_Voltage:noArg Battery_Current:noArg Battery_Power:noArg Charger_Board_Temp:noArg Battery_Board_Temp:noArg Charger_Boost_Temp:noArg Battery_Capacity:noArg Battery_Energy_Charged:noArg PV1_Voltage:noArg BMS_Warning:noArg Battery_Energy_Discharged:noArg Battery_State_Health:noArg PV2_Voltage:noArg PV1_Current:noArg PV2_Current:noArg Inverter_Fault:noArg Charger_Fault:noArg Manager_Fault:noArg Grid_Frequency:noArg Power_feed_in:noArg Energy_feed_in:noArg Energy_consumed:noArg EPS_Voltage:noArg EPS_Current:noArg EPS_VA:noArg EPS_Frequency:noArg Temp_WR:noArg Energy_today:noArg Energy_total:noArg Battery_temp:noArg Run_Mode:noArg
.setList reconnect:noArg saveAsModule createAttrsFromParseInfo interval reread:noArg stop:noArg start:noArg close:noArg scanStop:noArg scanModbusObjects inactive active
.updateSetGet 0
CFGFN
DEF 3 60 192.168.100.161:502 TCP
DeviceName 192.168.100.161:502
EXPECT response
FD 77
FUUID 62cad5ac-f33f-b9f5-00f5-a35db951f8c2f1a1
IODev Solax_Modbus
Interval 60
LASTOPEN 1657460186.20803
MODBUSID 3
MODE master
MODULEVERSION Modbus 4.4.04 - 17.7.2021
NAME Solax_Modbus
NOTIFYDEV global
NR 3029
NTFY_ORDER 50-Solax_Modbus
PARTIAL
PROTOCOL TCP
STATE opened
TCPConn 1
TIMEOUTS 5
TYPE ModbusSolax
devioLoglevel 3
eventCount 4
nextOpenDelay 60
nextQueueRun 1657460212.14701
nextTimeout 1657460213.14423
.attraggr:
.attrminint:
FRAME:
QUEUE:
HASH(0x9f4e990)
HASH(0xbbe8b98)
READ:
READINGS:
2022-07-10 15:36:26 state opened
REMEMBER:
lid 3
lname Solax_Modbus
lsend 1657460211.14688
REQUEST:
ADR 74
DBGINFO getUpdate for combined i74 len 2 Energy_consumed with i76 len 1 EPS_Voltage and i77 len 1 EPS_Current and i78 len 1 EPS_VA and i79 len 1 EPS_Frequency and i80 len 1 Energy_today and i82 len 2 Energy_total
FCODE 4
FRAME �J
LEN 10
MODBUSID 3
OPERATION read
QUEUED 1657460201.12214
READING Energy_consumed
SENT 1657460211.14423
TID 219
TYPE i
MASTERHASH:
defptr:
Solax_Modbus 3
hmccu:
lastRead:
Attributes:
alias Solax_Modbus
room Solar
Wenn ich bei Solax_Modus ein 'get Solax_Modbus GridVoltage' oder 'get Solax_Modbus EnergyTotal' mache, kommt 'Timeout in Readanswer'
Gruß
Andreas
Hallo Andreas,
das RTU Protokoll ist für serielle Übertragung. Du hast das Modul für TCP konfiguriert, was auch korrekt ist.
Der einzige Unterschied zu meiner Definition ist, dass ich die ID 1 verwende. Das ist in meinem Fall aber nicht relevant. Wenn ich ID 3 nehme, bekomme ich das selbe Ergebnis.
Weshalb der X1 bei dir nicht antwortet, kann ich nicht sagen. Dein http Aufruf (anderes Protokoll!) spricht mit Port 80, Modbus/TCP nutzt Port 502. Ob der X1 bei Dir überhaupt auf Port 502 lauscht ist deshalb noch fraglich. Wahrscheinlich wirst du mit dem httpmod-Modul mehr Erfolg haben.
Gruß
Hajo
Daten bekomme ich jetzt auch, nur werden bei mir keine Komma-Stellen dargestellt wie in diesem Beispiel --> https://forum.fhem.de/index.php/topic,112828.msg1072685.html#msg1072685
Gaaannz langes List von meinem Device: :)
Internals:
.Content-Type text/html
.JSONEnabled 1
.LASTSEND 1657622282.21134
.LastUpdate 1657622282.2083
.TRIGGERTIME 1657622582.2083
.getList
.setList interval reread:noArg stop:noArg start:noArg clearCookies:noArg upgradeAttributes:noArg storeKeyValue
.updateRequestHash 1
BUSY 0
CFGFN
DEF http://<IP_ADRESSE_VOM_WIFI_STICK>/ 300
FUUID 62ccxsxsxs4886-fxsxsx33f-b9f5-edf4-02sxsxsxsxsxsxsc8
Interval 300
MainURL http://<IP_ADRESSE_VOM_WIFI_STICK>/
ModuleVersion 4.1.12 - 19.4.2022
NAME solax_httpmod2
NOTIFYDEV global
NR 67799
NTFY_ORDER 50-solax_httpmod2
STATE ???
TYPE HTTPMOD
eventCount 107
value
.attraggr:
.attrminint:
.readingParseList:
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
HttpUtils:
NAME
addr http://<IP_ADRESSE_VOM_WIFI_STICK>:80
auth 0
buf
code 200
compress 1
conn
data optType=ReadRealTimeData/?pwd=SXxxxxxxxx
displayurl http://<IP_ADRESSE_VOM_WIFI_STICK>/
header
host <IP_ADRESSE_VOM_WIFI_STICK>
httpheader HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 345
httpversion 1.0
hu_blocking 0
hu_filecount 1
hu_port 80
hu_portSfx
ignoreredirects 1
loglevel 4
path /
protocol http
redirects 0
timeout 2
url http://<IP_ADRESSE_VOM_WIFI_STICK>/
sslargs:
OLDREADINGS:
QUEUE:
READINGS:
2022-07-12 12:38:03 AC_Current 17
2022-07-12 12:38:03 AC_Power 427
2022-07-12 12:38:03 AC_Voltage 2372
2022-07-12 12:38:03 Data_10 2
2022-07-12 12:38:03 Data_12 0
2022-07-12 12:38:03 Data_14 0
2022-07-12 12:38:03 Data_15 0
2022-07-12 12:38:03 Data_16 0
2022-07-12 12:38:03 Data_17 0
2022-07-12 12:38:03 Data_18 0
2022-07-12 12:38:03 Data_19 0
2022-07-12 12:38:03 Data_20 0
2022-07-12 12:38:03 Data_21 0
2022-07-12 12:38:03 Data_22 0
2022-07-12 12:38:03 Data_23 0
2022-07-12 12:38:03 Data_24 0
2022-07-12 12:38:03 Data_25 0
2022-07-12 12:38:03 Data_26 0
2022-07-12 12:38:03 Data_27 0
2022-07-12 12:38:03 Data_28 0
2022-07-12 12:38:03 Data_29 0
2022-07-12 12:38:03 Data_30 0
2022-07-12 12:38:03 Data_31 0
2022-07-12 12:38:03 Data_32 0
2022-07-12 12:38:03 Data_33 0
2022-07-12 12:38:03 Data_34 0
2022-07-12 12:38:03 Data_35 0
2022-07-12 12:38:03 Data_36 0
2022-07-12 12:38:03 Data_37 0
2022-07-12 12:38:03 Data_38 0
2022-07-12 12:38:03 Data_39 47
2022-07-12 12:38:03 Data_4 0
2022-07-12 12:38:03 Data_40 0
2022-07-12 12:38:03 Data_42 0
2022-07-12 12:38:03 Data_43 0
2022-07-12 12:38:03 Data_44 0
2022-07-12 12:38:03 Data_45 0
2022-07-12 12:38:03 Data_46 0
2022-07-12 12:38:03 Data_47 0
2022-07-12 12:38:03 Data_48 0
2022-07-12 12:38:03 Data_49 0
2022-07-12 12:38:03 Data_50 0
2022-07-12 12:38:03 Data_51 0
2022-07-12 12:38:03 Data_52 0
2022-07-12 12:38:03 Data_53 0
2022-07-12 12:38:03 Data_54 0
2022-07-12 12:38:03 Data_55 52
2022-07-12 12:38:03 Data_56 0
2022-07-12 12:38:03 Data_57 0
2022-07-12 12:38:03 Data_58 0
2022-07-12 12:38:03 Data_59 0
2022-07-12 12:38:03 Data_6 0
2022-07-12 12:38:03 Data_60 0
2022-07-12 12:38:03 Data_61 0
2022-07-12 12:38:03 Data_62 0
2022-07-12 12:38:03 Data_63 0
2022-07-12 12:38:03 Data_64 0
2022-07-12 12:38:03 Data_65 0
2022-07-12 12:38:03 Data_66 0
2022-07-12 12:38:03 Data_67 0
2022-07-12 12:38:03 Data_68 0
2022-07-12 12:38:03 Data_69 0
2022-07-12 12:38:03 Data_70 0
2022-07-12 12:38:03 Data_71 0
2022-07-12 12:38:03 Data_72 0
2022-07-12 12:38:03 Data_73 0
2022-07-12 12:38:03 Data_74 0
2022-07-12 12:38:03 Data_75 0
2022-07-12 12:38:03 Data_76 0
2022-07-12 12:38:03 Data_77 0
2022-07-12 12:38:03 Data_78 0
2022-07-12 12:38:03 Data_79 0
2022-07-12 12:38:03 Data_8 0
2022-07-12 12:38:03 Data_80 0
2022-07-12 12:38:03 Data_81 0
2022-07-12 12:38:03 Data_82 0
2022-07-12 12:38:03 Data_83 0
2022-07-12 12:38:03 Data_84 0
2022-07-12 12:38:03 Data_85 0
2022-07-12 12:38:03 Data_86 0
2022-07-12 12:38:03 Data_87 0
2022-07-12 12:38:03 Data_88 0
2022-07-12 12:38:03 Data_89 0
2022-07-12 12:38:03 Data_90 0
2022-07-12 12:38:03 Data_91 0
2022-07-12 12:38:03 Data_92 0
2022-07-12 12:38:03 Data_93 0
2022-07-12 12:38:03 Data_94 0
2022-07-12 12:38:03 Data_95 0
2022-07-12 12:38:03 Data_96 0
2022-07-12 12:38:03 Data_97 0
2022-07-12 12:38:03 Data_98 0
2022-07-12 12:38:03 Data_99 0
2022-07-12 12:38:03 FW_Wifi 3.003.02
2022-07-12 12:38:03 Information_1 4
2022-07-12 12:38:03 Information_3 8
2022-07-12 12:38:03 Information_4 2.19
2022-07-12 12:38:03 Information_5 0
2022-07-12 12:38:03 Information_6 1.37
2022-07-12 12:38:03 Information_7 0
2022-07-12 12:38:03 Information_8 0
2022-07-12 12:38:03 Information_9 1
2022-07-12 12:38:03 Inverter_Frequenz 4997
2022-07-12 12:38:03 Inverter_Type 4
2022-07-12 12:38:03 PV_Current 79
2022-07-12 12:38:03 PV_Power 457
2022-07-12 12:38:03 PV_Voltage 577
2022-07-12 12:38:03 SN_Inverter XMyyyyyyyyyyyy
2022-07-12 12:38:03 SN_Wifi SXyyyyyyyy
2022-07-12 12:38:03 rated_capacity 0.6
2022-07-12 12:38:03 yield_monthly 127
2022-07-12 12:38:03 yield_today 12
2022-07-12 12:38:03 yield_total 279
REQUEST:
context reading
data optType=ReadRealTimeData/?pwd=SXxxxxxxxx
header
ignoreredirects 0
num unknown
retryCount 0
type update
url http://<IP_ADRESSE_VOM_WIFI_STICK>/
defptr:
readingBase:
AC_Current reading
AC_Power reading
AC_Voltage reading
Data_0 reading
Data_1 reading
Data_10 reading
Data_11 reading
Data_12 reading
Data_13 reading
Data_14 reading
Data_15 reading
Data_16 reading
Data_17 reading
Data_18 reading
Data_19 reading
Data_2 reading
Data_20 reading
Data_21 reading
Data_22 reading
Data_23 reading
Data_24 reading
Data_25 reading
Data_26 reading
Data_27 reading
Data_28 reading
Data_29 reading
Data_3 reading
Data_30 reading
Data_31 reading
Data_32 reading
Data_33 reading
Data_34 reading
Data_35 reading
Data_36 reading
Data_37 reading
Data_38 reading
Data_39 reading
Data_4 reading
Data_40 reading
Data_41 reading
Data_42 reading
Data_43 reading
Data_44 reading
Data_45 reading
Data_46 reading
Data_47 reading
Data_48 reading
Data_49 reading
Data_5 reading
Data_50 reading
Data_51 reading
Data_52 reading
Data_53 reading
Data_54 reading
Data_55 reading
Data_56 reading
Data_57 reading
Data_58 reading
Data_59 reading
Data_6 reading
Data_60 reading
Data_61 reading
Data_62 reading
Data_63 reading
Data_64 reading
Data_65 reading
Data_66 reading
Data_67 reading
Data_68 reading
Data_69 reading
Data_7 reading
Data_70 reading
Data_71 reading
Data_72 reading
Data_73 reading
Data_74 reading
Data_75 reading
Data_76 reading
Data_77 reading
Data_78 reading
Data_79 reading
Data_8 reading
Data_80 reading
Data_81 reading
Data_82 reading
Data_83 reading
Data_84 reading
Data_85 reading
Data_86 reading
Data_87 reading
Data_88 reading
Data_89 reading
Data_9 reading
Data_90 reading
Data_91 reading
Data_92 reading
Data_93 reading
Data_94 reading
Data_95 reading
Data_96 reading
Data_97 reading
Data_98 reading
Data_99 reading
FW Wifi reading
FW_Wifi reading
Grid_Voltage_AC reading
Information_0 reading
Information_1 reading
Information_2 reading
Information_3 reading
Information_4 reading
Information_5 reading
Information_6 reading
Information_7 reading
Information_8 reading
Information_9 reading
Inverter-Type reading
Inverter_Frequenz reading
Inverter_Type reading
Max Output reading
PV_Current reading
PV_Power reading
PV_Voltage reading
S/N Inverter reading
S/N Wifi reading
SN_Inverter reading
SN_Wifi reading
Serial_Inverter reading
grid_power_max reading
rated_capacity reading
sn reading
type reading
ver reading
yield_monthly reading
yield_today reading
yield_total reading
readingNum:
AC_Current 138
AC_Power 195
AC_Voltage 146
Data_0 146
Data_1 138
Data_10 111
Data_11 196
Data_12 147
Data_13 168
Data_14 144
Data_15 120
Data_16 109
Data_17 201
Data_18 125
Data_19 190
Data_2 195
Data_20 174
Data_21 139
Data_22 210
Data_23 105
Data_24 209
Data_25 179
Data_26 172
Data_27 135
Data_28 176
Data_29 131
Data_3 180
Data_30 187
Data_31 121
Data_32 163
Data_33 154
Data_34 162
Data_35 193
Data_36 183
Data_37 126
Data_38 200
Data_39 118
Data_4 205
Data_40 165
Data_41 141
Data_42 184
Data_43 117
Data_44 185
Data_45 156
Data_46 164
Data_47 143
Data_48 160
Data_49 153
Data_5 159
Data_50 206
Data_51 100
Data_52 171
Data_53 132
Data_54 170
Data_55 203
Data_56 208
Data_57 101
Data_58 204
Data_59 107
Data_6 136
Data_60 108
Data_61 192
Data_62 151
Data_63 167
Data_64 150
Data_65 122
Data_66 112
Data_67 198
Data_68 128
Data_69 188
Data_7 194
Data_70 173
Data_71 137
Data_72 211
Data_73 104
Data_74 212
Data_75 181
Data_76 175
Data_77 134
Data_78 177
Data_79 129
Data_8 140
Data_80 113
Data_81 197
Data_82 145
Data_83 169
Data_84 148
Data_85 119
Data_86 110
Data_87 202
Data_88 124
Data_89 189
Data_9 133
Data_90 114
Data_91 199
Data_92 155
Data_93 161
Data_94 152
Data_95 127
Data_96 116
Data_97 191
Data_98 123
Data_99 186
FW Wifi 106
FW_Wifi 106
Grid_Voltage_AC 146
Information_0 102
Information_1 158
Information_2 115
Information_3 157
Information_4 130
Information_5 103
Information_6 166
Information_7 149
Information_8 178
Information_9 182
Inverter-Type 207
Inverter_Frequenz 133
Inverter_Type 207
Max Output 102
PV_Current 159
PV_Power 194
PV_Voltage 180
S/N Inverter 115
S/N Wifi 142
SN_Inverter 115
SN_Wifi 142
Serial_Inverter 115
grid_power_max 102
rated_capacity 102
sn 142
type 207
ver 106
yield_monthly 141
yield_today 168
yield_total 196
readingOutdated:
requestReadings:
update:
AC_Current reading 138
AC_Power reading 195
AC_Voltage reading 146
Data_0 reading 146
Data_1 reading 138
Data_10 reading 111
Data_11 reading 196
Data_12 reading 147
Data_13 reading 168
Data_14 reading 144
Data_15 reading 120
Data_16 reading 109
Data_17 reading 201
Data_18 reading 125
Data_19 reading 190
Data_2 reading 195
Data_20 reading 174
Data_21 reading 139
Data_22 reading 210
Data_23 reading 105
Data_24 reading 209
Data_25 reading 179
Data_26 reading 172
Data_27 reading 135
Data_28 reading 176
Data_29 reading 131
Data_3 reading 180
Data_30 reading 187
Data_31 reading 121
Data_32 reading 163
Data_33 reading 154
Data_34 reading 162
Data_35 reading 193
Data_36 reading 183
Data_37 reading 126
Data_38 reading 200
Data_39 reading 118
Data_4 reading 205
Data_40 reading 165
Data_41 reading 141
Data_42 reading 184
Data_43 reading 117
Data_44 reading 185
Data_45 reading 156
Data_46 reading 164
Data_47 reading 143
Data_48 reading 160
Data_49 reading 153
Data_5 reading 159
Data_50 reading 206
Data_51 reading 100
Data_52 reading 171
Data_53 reading 132
Data_54 reading 170
Data_55 reading 203
Data_56 reading 208
Data_57 reading 101
Data_58 reading 204
Data_59 reading 107
Data_6 reading 136
Data_60 reading 108
Data_61 reading 192
Data_62 reading 151
Data_63 reading 167
Data_64 reading 150
Data_65 reading 122
Data_66 reading 112
Data_67 reading 198
Data_68 reading 128
Data_69 reading 188
Data_7 reading 194
Data_70 reading 173
Data_71 reading 137
Data_72 reading 211
Data_73 reading 104
Data_74 reading 212
Data_75 reading 181
Data_76 reading 175
Data_77 reading 134
Data_78 reading 177
Data_79 reading 129
Data_8 reading 140
Data_80 reading 113
Data_81 reading 197
Data_82 reading 145
Data_83 reading 169
Data_84 reading 148
Data_85 reading 119
Data_86 reading 110
Data_87 reading 202
Data_88 reading 124
Data_89 reading 189
Data_9 reading 133
Data_90 reading 114
Data_91 reading 199
Data_92 reading 155
Data_93 reading 161
Data_94 reading 152
Data_95 reading 127
Data_96 reading 116
Data_97 reading 191
Data_98 reading 123
Data_99 reading 186
FW Wifi reading 106
FW_Wifi reading 106
Grid_Voltage_AC reading 146
Information_0 reading 102
Information_1 reading 158
Information_2 reading 115
Information_3 reading 157
Information_4 reading 130
Information_5 reading 103
Information_6 reading 166
Information_7 reading 149
Information_8 reading 178
Information_9 reading 182
Inverter-Type reading 207
Inverter_Frequenz reading 133
Inverter_Type reading 207
Max Output reading 102
PV_Current reading 159
PV_Power reading 194
PV_Voltage reading 180
S/N Inverter reading 115
S/N Wifi reading 142
SN_Inverter reading 115
SN_Wifi reading 142
Serial_Inverter reading 115
grid_power_max reading 102
rated_capacity reading 102
sn reading 142
type reading 207
ver reading 106
yield_monthly reading 141
yield_today reading 168
yield_total reading 196
hmccu:
Attributes:
alias solax_httpmod2
reading100JSON Data_51
reading100Name Data_51
reading101JSON Data_57
reading101Name Data_57
reading102JSON Information_0
reading102Name rated_capacity
reading103JSON Information_5
reading103Name Information_5
reading104JSON Data_73
reading104Name Data_73
reading105JSON Data_23
reading105Name Data_23
reading106JSON ver
reading106Name FW_Wifi
reading107JSON Data_59
reading107Name Data_59
reading108JSON Data_60
reading108Name Data_60
reading109JSON Data_16
reading109Name Data_16
reading110JSON Data_86
reading110Name Data_86
reading111JSON Data_10
reading111Name Data_10
reading112JSON Data_66
reading112Name Data_66
reading113JSON Data_80
reading113Name Data_80
reading114JSON Data_90
reading114Name Data_90
reading115JSON Information_2
reading115Name SN_Inverter
reading116JSON Data_96
reading116Name Data_96
reading117JSON Data_43
reading117Name Data_43
reading118JSON Data_39
reading118Name Data_39
reading119JSON Data_85
reading119Name Data_85
reading120JSON Data_15
reading120Name Data_15
reading121JSON Data_31
reading121Name Data_31
reading122JSON Data_65
reading122Name Data_65
reading123JSON Data_98
reading123Name Data_98
reading124JSON Data_88
reading124Name Data_88
reading125JSON Data_18
reading125Name Data_18
reading126JSON Data_37
reading126Name Data_37
reading127JSON Data_95
reading127Name Data_95
reading128JSON Data_68
reading128Name Data_68
reading129JSON Data_79
reading129Name Data_79
reading130JSON Information_4
reading130Name Information_4
reading131JSON Data_29
reading131Name Data_29
reading132JSON Data_53
reading132Name Data_53
reading133JSON Data_9
reading133Name Inverter_Frequenz
reading134JSON Data_77
reading134Name Data_77
reading135JSON Data_27
reading135Name Data_27
reading136JSON Data_6
reading136Name Data_6
reading137JSON Data_71
reading137Name Data_71
reading138JSON Data_1
reading138Name AC_Current
reading139JSON Data_21
reading139Name Data_21
reading140JSON Data_8
reading140Name Data_8
reading141JSON Data_41
reading141Name yield_monthly
reading142JSON sn
reading142Name SN_Wifi
reading143JSON Data_47
reading143Name Data_47
reading144JSON Data_14
reading144Name Data_14
reading145JSON Data_82
reading145Name Data_82
reading146JSON Data_0
reading146Name AC_Voltage
reading147JSON Data_12
reading147Name Data_12
reading148JSON Data_84
reading148Name Data_84
reading149JSON Information_7
reading149Name Information_7
reading150JSON Data_64
reading150Name Data_64
reading151JSON Data_62
reading151Name Data_62
reading152JSON Data_94
reading152Name Data_94
reading153JSON Data_49
reading153Name Data_49
reading154JSON Data_33
reading154Name Data_33
reading155JSON Data_92
reading155Name Data_92
reading156JSON Data_45
reading156Name Data_45
reading157JSON Information_3
reading157Name Information_3
reading158JSON Information_1
reading158Name Information_1
reading159JSON Data_5
reading159Name PV_Current
reading160JSON Data_48
reading160Name Data_48
reading161JSON Data_93
reading161Name Data_93
reading162JSON Data_34
reading162Name Data_34
reading163JSON Data_32
reading163Name Data_32
reading164JSON Data_46
reading164Name Data_46
reading165JSON Data_40
reading165Name Data_40
reading166JSON Information_6
reading166Name Information_6
reading167JSON Data_63
reading167Name Data_63
reading168JSON Data_13
reading168Name yield_today
reading169JSON Data_83
reading169Name Data_83
reading170JSON Data_54
reading170Name Data_54
reading171JSON Data_52
reading171Name Data_52
reading172JSON Data_26
reading172Name Data_26
reading173JSON Data_70
reading173Name Data_70
reading174JSON Data_20
reading174Name Data_20
reading175JSON Data_76
reading175Name Data_76
reading176JSON Data_28
reading176Name Data_28
reading177JSON Data_78
reading177Name Data_78
reading178JSON Information_8
reading178Name Information_8
reading179JSON Data_25
reading179Name Data_25
reading180JSON Data_3
reading180Name PV_Voltage
reading181JSON Data_75
reading181Name Data_75
reading182JSON Information_9
reading182Name Information_9
reading183JSON Data_36
reading183Name Data_36
reading184JSON Data_42
reading184Name Data_42
reading185JSON Data_44
reading185Name Data_44
reading186JSON Data_99
reading186Name Data_99
reading187JSON Data_30
reading187Name Data_30
reading188JSON Data_69
reading188Name Data_69
reading189JSON Data_89
reading189Name Data_89
reading190JSON Data_19
reading190Name Data_19
reading191JSON Data_97
reading191Name Data_97
reading192JSON Data_61
reading192Name Data_61
reading193JSON Data_35
reading193Name Data_35
reading194JSON Data_7
reading194Name PV_Power
reading195JSON Data_2
reading195Name AC_Power
reading196JSON Data_11
reading196Name yield_total
reading197JSON Data_81
reading197Name Data_81
reading198JSON Data_67
reading198Name Data_67
reading199JSON Data_91
reading199Name Data_91
reading200JSON Data_38
reading200Name Data_38
reading201JSON Data_17
reading201Name Data_17
reading202JSON Data_87
reading202Name Data_87
reading203JSON Data_55
reading203Name Data_55
reading204JSON Data_58
reading204Name Data_58
reading205JSON Data_4
reading205Name Data_4
reading206JSON Data_50
reading206Name Data_50
reading207JSON type
reading207Name Inverter_Type
reading208JSON Data_56
reading208Name Data_56
reading209JSON Data_24
reading209Name Data_24
reading210JSON Data_22
reading210Name Data_22
reading211JSON Data_72
reading211Name Data_72
reading212JSON Data_74
reading212Name Data_74
requestData optType=ReadRealTimeData/?pwd=SXxxxxxxxx
room Solar
verbose 5
(Einige der Readings habe ich schon selber umbenannt, nicht wundern.)
Kann ich da noch irgendwas über Attribute machen oder muss ich die ganzen Readings umstricken?
Andreas
Bei mir läuft es jetzt so ganz gut und ich bekomme genug Informationen ->
defmod solax_httpmod2_local HTTPMOD http://<IP_ADRESSE_VOM_WIFI_STICK>/ 300
attr solax_httpmod2_local alias solax_httpmod2_local
attr solax_httpmod2_local reading102JSON Information_0
attr solax_httpmod2_local reading102Name rated_capacity
attr solax_httpmod2_local reading103JSON Information_5
attr solax_httpmod2_local reading103Name Information_5
attr solax_httpmod2_local reading106JSON ver
attr solax_httpmod2_local reading106Name FW_Wifi
attr solax_httpmod2_local reading115JSON Information_2
attr solax_httpmod2_local reading115Name SN_Inverter
attr solax_httpmod2_local reading130JSON Information_4
attr solax_httpmod2_local reading130Name Information_4
attr solax_httpmod2_local reading133JSON Data_9
attr solax_httpmod2_local reading133Name Inverter_Frequenz
attr solax_httpmod2_local reading133OExpr $val / 100
attr solax_httpmod2_local reading138JSON Data_1
attr solax_httpmod2_local reading138Name AC_Current
attr solax_httpmod2_local reading138OExpr $val / 10
attr solax_httpmod2_local reading141JSON Data_41
attr solax_httpmod2_local reading141Name yield_monthly
attr solax_httpmod2_local reading142JSON sn
attr solax_httpmod2_local reading142Name SN_Wifi
attr solax_httpmod2_local reading146JSON Data_0
attr solax_httpmod2_local reading146Name AC_Voltage
attr solax_httpmod2_local reading146OExpr $val / 10
attr solax_httpmod2_local reading149JSON Information_7
attr solax_httpmod2_local reading149Name Information_7
attr solax_httpmod2_local reading157JSON Information_3
attr solax_httpmod2_local reading157Name Information_3
attr solax_httpmod2_local reading158JSON Information_1
attr solax_httpmod2_local reading158Name Information_1
attr solax_httpmod2_local reading159JSON Data_5
attr solax_httpmod2_local reading159Name PV_Current
attr solax_httpmod2_local reading159OExpr $val / 10
attr solax_httpmod2_local reading166JSON Information_6
attr solax_httpmod2_local reading166Name Information_6
attr solax_httpmod2_local reading168Format %.3f
attr solax_httpmod2_local reading168JSON Data_13
attr solax_httpmod2_local reading168Name yield_today
attr solax_httpmod2_local reading168OExpr $val / 10
attr solax_httpmod2_local reading178JSON Information_8
attr solax_httpmod2_local reading178Name Information_8
attr solax_httpmod2_local reading180JSON Data_3
attr solax_httpmod2_local reading180Name PV_Voltage
attr solax_httpmod2_local reading180OExpr $val / 10
attr solax_httpmod2_local reading181JSON Data_75
attr solax_httpmod2_local reading181Name Data_75
attr solax_httpmod2_local reading182JSON Information_9
attr solax_httpmod2_local reading182Name Information_9
attr solax_httpmod2_local reading194JSON Data_7
attr solax_httpmod2_local reading194Name PV_Power
attr solax_httpmod2_local reading195JSON Data_2
attr solax_httpmod2_local reading195Name AC_Power
attr solax_httpmod2_local reading196JSON Data_11
attr solax_httpmod2_local reading196Name yield_total
attr solax_httpmod2_local reading196OExpr $val / 10
attr solax_httpmod2_local reading207JSON type
attr solax_httpmod2_local reading207Name Inverter_Type
attr solax_httpmod2_local requestData optType=ReadRealTimeData/?pwd=<SERIENNUMMER_VOM_WIFI_STICK>
attr solax_httpmod2_local requestHeader1 Content-Type: application/json
attr solax_httpmod2_local requestHeader2 Accept: application/json
attr solax_httpmod2_local room Solar
attr solax_httpmod2_local stateFormat {sprintf("AC-Strom: %.2f A <br> AC-Spannung: %.2f V <br> AC-Leistung: %.2f W <br>PV-Strom: %.2f A <br> PV-Spannung: %.2f V <br> PV-Leistung: %.2f W <br> Gesamt-Leistung: %.2f kW" ,ReadingsVal("solax_httpmod2_local","AC_Current",0),ReadingsVal("solax_httpmod2_local","AC_Voltage",0),ReadingsVal("solax_httpmod2_local","AC_Power",0),ReadingsVal("solax_httpmod2_local","PV_Current",0),ReadingsVal("solax_httpmod2_local","PV_Voltage",0),ReadingsVal("solax_httpmod2_local","PV_Power",0),ReadingsVal("solax_httpmod2_local","yield_total",0))}
attr solax_httpmod2_local verbose 0
Es kommen nach der Einrichtung jede Menge Readings (siehe List in meinen Beitrag vorher).
Irgendwo versteckt sich auch noch die Temperatur vom Inverter, da werde ich dann morgen früh mal schauen. Da mein Inverter derzeit noch draußen aufgebaut ist, sollte Aussentemperatur=Invertertemperatur sein.
Hallo Andreas,
leider klappt es bei mir nicht mit folgender Abfrage:
curl -X POST http://5.8.8.8 --data 'optType=ReadRealTimeData&pwd=SVG. . . . . . )'
0:code,message:"failed"
oder mit:
curl -X POST http://5.8.8.8/?optType=ReadRealTimeData
curl: (52) Empty reply from server
wenn ich das eingebe:
curl -v POST http://5.8.8.8/?optType=ReadRealTimeData
* Could not resolve host: POST
* Closing connection 0
curl: (6) Could not resolve host: POST
* Trying 5.8.8.8:80...
* Connected to 5.8.8.8 (5.8.8.8) port 80 (#1)
> GET /?optType=ReadRealTimeData HTTP/1.1
> Host: 5.8.8.8
> User-Agent: curl/7.74.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 401 Authorization Required
< Server: MySocket Server
< WWW-Authenticate: Basic realm=SolaxPower
< Content-Type: text/html; charset=UTF-8
< Content-Length: 180
<
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</HEAD>
<BODY><H1>401 Unauthorized</H1></BODY>
* transfer closed with 17 bytes remaining to read
* Closing connection 1
curl: (18) transfer closed with 17 bytes remaining to read
und:
curl -v -X POST http://5.8.8.8/?optType=ReadRealTimeData
* Trying 5.8.8.8:80...
* Connected to 5.8.8.8 (5.8.8.8) port 80 (#0)
> POST /?optType=ReadRealTimeData HTTP/1.1
> Host: 5.8.8.8
> User-Agent: curl/7.74.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host 5.8.8.8 left intact
curl: (52) Empty reply from server
Mein Wechselrichter ist ein X1 Hybrid G4 und der Wifi-Stick hat die Firmware 3.001.02.
Irgendwie komme ich nicht weiter. Die lokale Abfrage über die App Solax-Cloud funktioniert einwandfrei.
Gruß
Knut
Hi,
gibt es eigentlich einen aktuellen Arbeitstand von Archinauts ModbusSolax Modul?
Mein Ziel ist es meinen Solax X1 Hybrid 5.0 ohne den WiFi Stick zu steuern, nur mit ModBus over TCP mittels LAN Kabel.
Hi,
Ich habe gerade mit Erschrecken festgestellt, das mein Solax X1 Hybrid 5.0 G4 überhaupt keine LAN Anschluss hat. Der COM Port ist kein LAN sonder ein RS485 Anschluss.
ICh brauche also warscheinlich ein RS485 Modul und ein ESP. Kennt hier auch jemand eine Lösung um mein X1 an FHEM anzubinden?
Zitat von: Sunratte am 18 August 2022, 10:33:52
Hallo Andreas,
leider klappt es bei mir nicht mit folgender Abfrage:
curl -X POST http://5.8.8.8 --data 'optType=ReadRealTimeData&pwd=SVG. . . . . . )'
0:code,message:"failed"
Du bist im gleichen Netz wie der Solax-Stick, bist also per WLAN direkt mit ihm verbunden?
Der Rechner, mit dem Du die Abfrage startest, müsste also eine IP aus dem Netz 5.8.8.0 haben.
Oder hat der Stick eine Verbindung mit Deinem normalen WLAN?
Dann schau auf Deinem Router welche IP er bekommen hat, dann die gleiche Abfrage nochmal mit der IP.
Andreas
Zitat von: Tobias am 18 August 2022, 13:58:01
Mein Ziel ist es meinen Solax X1 Hybrid 5.0 ohne den WiFi Stick zu steuern, nur mit ModBus over TCP mittels LAN Kabel.
Es gibt doch auch einen LAN-Stick, den könntest Du doch anstelle des WLAN-Stick nehmen.
Ich bin derzeit auch noch auf der Suche nach 'nem Anbieter der keine Horror-Preise verlangt, bisher erfolglos.
Andreas
Hi,
ich versuche gerade das Tasmota Solax X1 Modul für RS485 in Gang zu bekommen. Das schickt dann alle Daten per MQTT. Ich melde mich.
Mein Ziel ist es auch, den Solax komplett ohne WiFi Stick zu betreiben. Das offene Solax WLAN ist mir ein Dorn im Auge.
Offensichtlich gibt es sehr wohl Unterschiede zwischen einem Solax X1 Hybrid und einem X3 Hybrid
Offen ist das WLAN ja nicht direkt, mit dem Kennwort 'admin' ist es doch erstmal geschützt ;D
Das Kennwort kannst Du auf der Weboberfläche ändern.
Bei meinem Stick war die Serienummmer als Passwort hinterlegt.
Man sollte jetzt denken, das es sicherer ist - Pustekuchen - die SSID war gleich der Serienummer :-\
Neues Kennwort vergeben wollte erst nicht klappen, bis ich bemerkt habe das es max. 8 Zeichen haben darf.
Auf Dauer werde ich auf die LAN-Variante umstellen, ist sicherlich besser.
Hallo Andreas,
ich probiere es mit einem alten Pi ohne integriertem Wlan. Der USB-Wlanstick funkt nur zum Solax mit der IP 5.8.8.8.
Die Abfragen mache ich dann über LAN am Pi. Ist das vielleicht der Fehler?
Gruß
Knut
Hi,
Mein X1 hat nur WLAN oder Modbus RTU.
Die Abfrage via Wlan hat funktioniert, aufgrund des offenen WLAN's aber für mich ein NoGo.
Das Modbus Protokoll hat sich imho von der G3 zur G4 Serie geändert, deswegen funktionieren die meisten Lösungen die auf Modbus RTU setzen nicht. Dazu gehört auch die Tasmota Solax X1 Implementierung.
Ich habe es jetzt hinbekommen mit einem ESP32 die Inverter SN aus der offiziellen Solax Modbus Protokoll Doku abzufragen und werde darauf aufbauend jetzt ein Modbus-RTU - MQTT Gateway schreiben. Funktioniert dann für X1 und X3 der G4 Serie sowie unabhängig der eingesetzten Haussteuerung (FHEM, symcon, openhab oder homeassist)
Mein erstes Beispiel zum Testen ob es mit eurem WR grundsätzlich funktioniert kann ich gerne zur Verfügung stellen. Es muss aber ein ESP32 sein, über Softwareserial mit einem esp8266 funktioniert es nicht oder nur mit Einschränkungen und Problemen.
Edit: mein Projekt mit Code ist im Github zu finden: https://github.com/tobiasfaust/SolaxModbusGateway
Hallo, ich bin neu hier und neu in Homeassistant unterwegs. Ich versuche meinen Solax WR mit Lan Adapter in Homeassistant zu integrieren. Der Wechselrichter sendet Daten in die Cloud. Das funktioniert also. Ich kann die Daten auch per API abrufen. Ich kann die Adresse 5.8.8.8 erreichen aber komm dort nicht weiter. Ich wollte jetzt versuchen über Integraton Solax den WR in HA einzubinden. Da wird die IP ,der Port und das Passwort abgefragt.IP habe ich 5.8.8.8 Port 80 und Passwort ????.Das Hat also nicht geklappt. Dann habe ich noch den Code im Netz gefunden und entsprechend angepasst und in config.yaml kopiert. Dort erhalte ich ein grünes Häkchen, aber bei Entwicklerwerkzeuge bekomme ich folgende Meldung" Integration error: sensors - Integration 'sensors' not found." Vielleicht kann mir jemand helfen. Vielen Dank im vorraus
#########################################################
# #
# SOLAX CLOUD. #
# #
#########################################################
sensors:
- platform: rest
resource: https://www.solaxcloud.com/proxyApp/proxy/api/getRealtimeInfo.do?tokenId=2022********&sn=SY******
value_template: '{{ ( value_json.result.yieldtotal | round(0) ) }}'
name: "Solax total"
unit_of_measurement: "KWh"
- platform: rest
resource: https://www.solaxcloud.com/proxyApp/proxy/api/getRealtimeInfo.do?tokenId=2022********&sn=SY******
value_template: '{{ ( value_json.result.acpower | round(0) ) }}'
name: "Solax now"
unit_of_measurement: "W"
- platform: rest
resource: https://www.solaxcloud.com/proxyApp/proxy/api/getRealtimeInfo.do?tokenId=tokenId=2022********&sn=SY******
value_template: '{{ value_json.result.yieldtoday }}'
name: "Solax today"
unit_of_measurement: "KWh"
- platform: rest
resource: https://www.solaxcloud.com/proxyApp/proxy/api/getRealtimeInfo.do?tokenId=2022********&sn=SY******
value_template: "{{ value_json.result.uploadTime }}"
name: "Solax upload time"
- platform: rest
resource: https://www.solaxcloud.com/proxyApp/proxy/api/getRealtimeInfo.do?tokenId=tokenId=2022********&sn=SY******
value_template: >
{% if value_json.result.inverterStatus == '100' %}Wait
{% elif value_json.result.inverterStatus == '101' %}Check
{% elif value_json.result.inverterStatus == '102' %}Normal
{% elif value_json.result.inverterStatus == '103' %}Fault
{% elif value_json.result.inverterStatus == '104' %}Permanent Fault
{% elif value_json.result.inverterStatus == '105' %}Update
{% elif value_json.result.inverterStatus == '106' %}EPS Check
{% elif value_json.result.inverterStatus == '107' %}EPS
{% elif value_json.result.inverterStatus == '108' %}Self-test
{% elif value_json.result.inverterStatus == '109' %}Idle
{% elif value_json.result.inverterStatus == '110' %}Standby
{% elif value_json.result.inverterStatus == '111' %}Pv Wake Up Bat
{% elif value_json.result.inverterStatus == '112' %}Gen Check
{% elif value_json.result.inverterStatus == '113' %}Gen Run
{% else %}I dont know{% endif %}
name: "Solax status"
#########################################################
# #
# END OF CONFIGURATION FILE #
# #
#########################################################
Hi,
Warum schmeißt du eigentlich dein wlan Stick vom Solax nicht weg und greifst die Daten via Modbus ab? Das geht viel schneller und du teilst nix in die China cloud.
In homeassist integrierst du die Daten dann über die MQTT topics.
Fertig....
Ich habe meinen Qcells auch so ausgelesen. Über Modbus / Rs485 und dann über einen USB Wandler an den Raspi. In Fhem dann über Modbus und ModbusAtrr auf die Register zugegriffen...
Zitat von: Tobias am 10 Oktober 2022, 07:37:01
Hi,
Mein X1 hat nur WLAN oder Modbus RTU.
Die Abfrage via Wlan hat funktioniert, aufgrund des offenen WLAN's aber für mich ein NoGo.
Das Modbus Protokoll hat sich imho von der G3 zur G4 Serie geändert, deswegen funktionieren die meisten Lösungen die auf Modbus RTU setzen nicht. Dazu gehört auch die Tasmota Solax X1 Implementierung.
Ich habe es jetzt hinbekommen mit einem ESP32 die Inverter SN aus der offiziellen Solax Modbus Protokoll Doku abzufragen und werde darauf aufbauend jetzt ein Modbus-RTU - MQTT Gateway schreiben. Funktioniert dann für X1 und X3 der G4 Serie sowie unabhängig der eingesetzten Haussteuerung (FHEM, symcon, openhab oder homeassist)
Mein erstes Beispiel zum Testen ob es mit eurem WR grundsätzlich funktioniert kann ich gerne zur Verfügung stellen. Es muss aber ein ESP32 sein, über Softwareserial mit einem esp8266 funktioniert es nicht oder nur mit Einschränkungen und Problemen.
Edit: mein Projekt mit Code ist im Github zu finden: https://github.com/tobiasfaust/SolaxModbusGateway
Hi.
Das Tasmota Projekt habe ich ebenfalls im blick.
Das funktioniert aber nicht?
Doch, das funktioniert. Aber nur mit dem Solax Mini. Der hat ein anderes Protokoll.
Könnte ich bei mir auch einbauen, ist nur eine Konfiguration, muss aber jemand machen der ein Gerät Vorort zum Testen hat.
Ich hab einen X1 Mini 1.1
Bin auch ganz zufrieden. Nur die Sammlung von lokalen Daten klappt nicht so ganz.
Also, Daten bekomme ich. Mit curl usw.
Alles gut. Aber es fehlt an weiteren Infos zum Mapping.
Ich sträube mich eigentlich gegen den Einsatz weiterer Hardware, wenn doch das Int. WLAN Modul alles bereitzustellen scheint. Von der China Cloud ist das Teil entkoppelt (Filter auf meiner OpnSense).
Also wenn jmd Infos zum Json Mapping hätte ...
Zitat von: Loetkolben am 15 Juli 2022, 15:35:04
Bei mir läuft es jetzt so ganz gut und ich bekomme genug Informationen ->
defmod solax_httpmod2_local HTTPMOD http://<IP_ADRESSE_VOM_WIFI_STICK>/ 300
attr solax_httpmod2_local alias solax_httpmod2_local
attr solax_httpmod2_local reading102JSON Information_0
attr solax_httpmod2_local reading102Name rated_capacity
attr solax_httpmod2_local reading103JSON Information_5
attr solax_httpmod2_local reading103Name Information_5
attr solax_httpmod2_local reading106JSON ver
attr solax_httpmod2_local reading106Name FW_Wifi
attr solax_httpmod2_local reading115JSON Information_2
attr solax_httpmod2_local reading115Name SN_Inverter
attr solax_httpmod2_local reading130JSON Information_4
attr solax_httpmod2_local reading130Name Information_4
attr solax_httpmod2_local reading133JSON Data_9
attr solax_httpmod2_local reading133Name Inverter_Frequenz
attr solax_httpmod2_local reading133OExpr $val / 100
attr solax_httpmod2_local reading138JSON Data_1
attr solax_httpmod2_local reading138Name AC_Current
attr solax_httpmod2_local reading138OExpr $val / 10
attr solax_httpmod2_local reading141JSON Data_41
attr solax_httpmod2_local reading141Name yield_monthly
attr solax_httpmod2_local reading142JSON sn
attr solax_httpmod2_local reading142Name SN_Wifi
attr solax_httpmod2_local reading146JSON Data_0
attr solax_httpmod2_local reading146Name AC_Voltage
attr solax_httpmod2_local reading146OExpr $val / 10
attr solax_httpmod2_local reading149JSON Information_7
attr solax_httpmod2_local reading149Name Information_7
attr solax_httpmod2_local reading157JSON Information_3
attr solax_httpmod2_local reading157Name Information_3
attr solax_httpmod2_local reading158JSON Information_1
attr solax_httpmod2_local reading158Name Information_1
attr solax_httpmod2_local reading159JSON Data_5
attr solax_httpmod2_local reading159Name PV_Current
attr solax_httpmod2_local reading159OExpr $val / 10
attr solax_httpmod2_local reading166JSON Information_6
attr solax_httpmod2_local reading166Name Information_6
attr solax_httpmod2_local reading168Format %.3f
attr solax_httpmod2_local reading168JSON Data_13
attr solax_httpmod2_local reading168Name yield_today
attr solax_httpmod2_local reading168OExpr $val / 10
attr solax_httpmod2_local reading178JSON Information_8
attr solax_httpmod2_local reading178Name Information_8
attr solax_httpmod2_local reading180JSON Data_3
attr solax_httpmod2_local reading180Name PV_Voltage
attr solax_httpmod2_local reading180OExpr $val / 10
attr solax_httpmod2_local reading181JSON Data_75
attr solax_httpmod2_local reading181Name Data_75
attr solax_httpmod2_local reading182JSON Information_9
attr solax_httpmod2_local reading182Name Information_9
attr solax_httpmod2_local reading194JSON Data_7
attr solax_httpmod2_local reading194Name PV_Power
attr solax_httpmod2_local reading195JSON Data_2
attr solax_httpmod2_local reading195Name AC_Power
attr solax_httpmod2_local reading196JSON Data_11
attr solax_httpmod2_local reading196Name yield_total
attr solax_httpmod2_local reading196OExpr $val / 10
attr solax_httpmod2_local reading207JSON type
attr solax_httpmod2_local reading207Name Inverter_Type
attr solax_httpmod2_local requestData optType=ReadRealTimeData/?pwd=<SERIENNUMMER_VOM_WIFI_STICK>
attr solax_httpmod2_local requestHeader1 Content-Type: application/json
attr solax_httpmod2_local requestHeader2 Accept: application/json
attr solax_httpmod2_local room Solar
attr solax_httpmod2_local stateFormat {sprintf("AC-Strom: %.2f A <br> AC-Spannung: %.2f V <br> AC-Leistung: %.2f W <br>PV-Strom: %.2f A <br> PV-Spannung: %.2f V <br> PV-Leistung: %.2f W <br> Gesamt-Leistung: %.2f kW" ,ReadingsVal("solax_httpmod2_local","AC_Current",0),ReadingsVal("solax_httpmod2_local","AC_Voltage",0),ReadingsVal("solax_httpmod2_local","AC_Power",0),ReadingsVal("solax_httpmod2_local","PV_Current",0),ReadingsVal("solax_httpmod2_local","PV_Voltage",0),ReadingsVal("solax_httpmod2_local","PV_Power",0),ReadingsVal("solax_httpmod2_local","yield_total",0))}
attr solax_httpmod2_local verbose 0
Es kommen nach der Einrichtung jede Menge Readings (siehe List in meinen Beitrag vorher).
Irgendwo versteckt sich auch noch die Temperatur vom Inverter, da werde ich dann morgen früh mal schauen. Da mein Inverter derzeit noch draußen aufgebaut ist, sollte Aussentemperatur=Invertertemperatur sein.
Gehe ich soweit mit.
Ich denke aber, dass Data_41 eher YIELD TOTAL und Data_11 eher MONTHLY YIELD entspricht?!
Was meinst du?
Noch nicht ganz zuordnen kann ich:
Data_10
Data_39 (Temperatur?)
Data_55Hier meine Interpretation:
attr httpmod_Solax_Wifi userReadings 00_AC_Voltage { ReadingsVal($name, "Data_0", 0) / 10 }, \
00_AC_Current { ReadingsVal($name, "Data_1", 0) / 10 }, \
00_AC_Power { ReadingsVal($name, "Data_2", 0) }, \
00_DC_Voltage { ReadingsVal($name, "Data_3", 0) / 10 }, \
00_DC_Current { ReadingsVal($name, "Data_5", 0) / 10 }, \
00_DC_Power { ReadingsVal($name, "Data_7", 0) }, \
00_AC_Frequency { ReadingsVal($name, "Data_9", 0) / 100 }, \
00_Yield_Today { ReadingsVal($name, "Data_13", 0) / 10 }, \
00_Yield_Month { ReadingsVal($name, "Data_11", 0) / 10 }, \
00_Yield_Total { ReadingsVal($name, "Data_41", 0) / 10 }
Also ich für meinen Teil würde mich freuen wenn du meinen ModBusMQTT Gateway ausprobieren könntest. Dann könnte ich nämlich die register.h mit deinen Daten erweitern und alle anderen Solax Mini User könnten davon profitieren.
Hallo Tobias,
ich besitze seit Ende letzten Jahres einen Solax WR X3-Hybrid-G4 und bin an den Daten für meine Hausautomatisierung interessiert. Mit Interesse habe ich von Deinem Projekt hier gelesen und das auch mit einem ESP32 umgesetzt. Das hat auch prima funktioniert. Dar Zugriff auf den µC über den PC funktioniert. Leider kommen keine Daten vom WR an. Alle Deine Möglichkeiten zum Troubleshooting habe ich ausprobiert, jedoch ohne Erfolg. Ich bin mir ehrlich geschrieben aber auch nicht sicher, ob über die RTU-Schnittstelle vom WR überhaupt Daten kommen. Ich habe den Ausgang mal mit dem Oszi geprüft und das ist ziemliche Ruhe, wogegen aus dem Smartmeter (auch Modbus) Traffic zu erkennen ist. Am Wechselrichter ist RS485 für den COM eingestellt. Deshalb nun die Frage an Dich: Werden die Daten auf Abruf von außen geliefert oder sendet der WR selbst Daten auf den Modbus?
Danke und viele Grüße
Thomas
Hallo,
und wie hast Du das genau definiert bzw eingebunden?
Zitat von: Tomk am 01 Januar 2023, 10:43:49Ich habe meinen Qcells auch so ausgelesen. Über Modbus / Rs485 und dann über einen USB Wandler an den Raspi. In Fhem dann über Modbus und ModbusAtrr auf die Register zugegriffen...
@alveole: qcells WR haben exakt das selbe Protokoll wie der Solax X3. Damit funktioniert es
@emmes: der WR sendet nur auf Anforderung, nicht selbständig.
Hast du im WR alle Modbus Einstellungen kontrolliert?
Wenn es am Ende immer noch nicht funktioniert, benutze bitte das Example Programm. Das ist minimalistisch und konzentriert sich nur auf das wesentliche der Kommunikation
Hallo Tobias,
ich habe ein anderes Breakout Board verwendet und seit dem kommen auch Werte an. Ich hatte bisher ein SP3485. Mit dem HW-0519 funktioniert es.
Die Werte sehen an manchen Stellen nicht plausibel aus. Ich habe an meiner Anlage einen Batteriespeicher installiert. Die Ausgabe zeigt aber 0% an. Ich habe 2 Screenshots angehangen.
Wie kann ich das korrigieren?
Ich besitze einen Wechselrichter X3-Hybrid-G4.
Danke und viele Grüße
ThomasAshampoo_Snap_Donnerstag, 13. April 2023_7h40m23s.png
Schau mal in mein Wiki. Da steht's wie man eigene Items findet bzw in deinem Fall korrigieren kann.
Schlussendlich brauche ich deine Ergebnisse damit ich sie in mein repo übernehmen kann
Ich habe meinen Solax Wechselrichter jetzt über WLAN ins FHEM einbinden können und die meisten (zumindest die für mich relevanten) Daten entschlüsselt.
Solax.png
Solax2.png
Mein Fehler war die ganze Zeit der abschließende Slash, wenn man den nicht beim DEF mit angibt, kommt bei den HttpUtils immer ein "malformed or unsupported URL" zurück. Außerdem lässt nur der WLAN-Dongle am Solax-Wechselrichter den Zugriff über http (ich vermute wegen der WLAN-Einbindungs-Möglichkeit ins eigene Netzwerk, beim LAN-Dongle kommt immer "Zugriff verweigert"). Außerdem laufen einige Werte (z.B. Batterieleistung und Einspeise-Leistung auch ins negative, was anscheinend bei dem von Solax zurückgegebenen Wert zu einem int-16-bit overflow führt, was man an den hohen Werten nahe 65.535 sehen kann. Das hab ich jetzt einfach so gelöst, dass ich bei Überschreiten des halben Puffers (also 65.535/2) einfach von 65.535 abziehe.
Hier ist mein aktueller Arbeitsstand der Mappings, solltet ihr andere Mappings finden/verwenden, gerne her damit:
defmod solax_local HTTPMOD <IP-Adress deines WLAN-Dongles mit abschließendem Slash, z.B. http://192.168.0.208/> 30
attr solax_local disable 0
attr solax_local extractAllJSON 1
attr solax_local group energy
attr solax_local reading101JSON Data_103
attr solax_local reading101Name result_soc
attr solax_local reading102JSON Information_0
attr solax_local reading102Name rated_capacity
attr solax_local reading103JSON Data_6
attr solax_local reading103Name AC_Power1
attr solax_local reading103OExpr if ($val > 65535/2) {return $val-65535} else {return $val}
attr solax_local reading104JSON Data_7
attr solax_local reading104Name AC_Power2
attr solax_local reading104OExpr if ($val > 65535/2) {return $val-65535} else {return $val}
attr solax_local reading105JSON Data_8
attr solax_local reading105Name AC_Power3
attr solax_local reading105OExpr if ($val > 65535/2) {return $val-65535} else {return $val}
attr solax_local reading106JSON ver
attr solax_local reading106Name FW_Wifi
attr solax_local reading107JSON Data_34
attr solax_local reading107Name result_feedinpower
attr solax_local reading107OExpr if ($val > 65535/2) {return $val-65535} else {return $val}
attr solax_local reading108JSON Data_169
attr solax_local reading108Name BAT_Voltage
attr solax_local reading108OExpr $val/100
attr solax_local reading109JSON Data_14
attr solax_local reading109Name result_powerdc1
attr solax_local reading109OExpr if ($val > 65535/2) {return $val-65535} else {return $val}
attr solax_local reading110JSON Data_15
attr solax_local reading110Name result_powerdc2
attr solax_local reading110OExpr if ($val > 65535/2) {return $val-65535} else {return $val}
attr solax_local reading115JSON Information_2
attr solax_local reading115Name result_inverterSN
attr solax_local reading138JSON Data_2
attr solax_local reading138Name AC_Current1
attr solax_local reading138OExpr $val / 10
attr solax_local reading141JSON Data_44
attr solax_local reading141Name result_batPower
attr solax_local reading141OExpr if ($val > 65535/2) {return $val-65535} else {return $val}
attr solax_local reading142JSON sn
attr solax_local reading142Name result_sn
attr solax_local reading146JSON Data_0
attr solax_local reading146Name AC_Voltage1
attr solax_local reading146OExpr $val / 10
attr solax_local reading147JSON Data_1
attr solax_local reading147Name AC_Voltage2
attr solax_local reading147OExpr $val/10
attr solax_local reading148JSON Data_2
attr solax_local reading148Name AC_Voltage3
attr solax_local reading148OExpr $val/10
attr solax_local reading149JSON Data_3
attr solax_local reading149Name AC_Current1
attr solax_local reading149OExpr $val/10
attr solax_local reading150JSON Data_4
attr solax_local reading150Name AC_Current2
attr solax_local reading150OExpr $val/10
attr solax_local reading151JSON Data_5
attr solax_local reading151Name AC_Current3
attr solax_local reading151OExpr $val/10
attr solax_local reading159JSON Data_12
attr solax_local reading159Name DC_Current1
attr solax_local reading159OExpr $val / 10
attr solax_local reading160JSON Data_13
attr solax_local reading160Name DC_Current2
attr solax_local reading160OExpr $val/10
attr solax_local reading168Format %.3f
attr solax_local reading168JSON Data_70
attr solax_local reading168Name result_yieldtoday
attr solax_local reading168OExpr $val / 10
attr solax_local reading179JSON Data_10
attr solax_local reading179Name DC_Voltage1
attr solax_local reading179OExpr $val / 10
attr solax_local reading180JSON Data_11
attr solax_local reading180Name DC_Voltage2
attr solax_local reading180OExpr $val / 10
attr solax_local reading181JSON Data_75
attr solax_local reading181Name Data_75
attr solax_local reading193JSON Data_9
attr solax_local reading193Name result_acpower
attr solax_local reading193OExpr if ($val > 65535/2) {return $val-65535} else {return $val}
attr solax_local reading195JSON Data_47
attr solax_local reading195Name result_consumepower
attr solax_local reading195OExpr if ($val > 65535/2) {return $val-65535} else {return $val}
attr solax_local reading196JSON Data_68
attr solax_local reading196Name result_yieldtotal
attr solax_local reading196OExpr $val / 10
attr solax_local reading207JSON type
attr solax_local reading207Name Inverter_Type
attr solax_local reading90JSON Data_88
attr solax_local reading90Name result_consumeenergy
attr solax_local reading90OExpr $val/100
attr solax_local reading99JSON Data_105
attr solax_local reading99Name BAT_Temperature
attr solax_local requestData optType=ReadRealTimeData/?pwd=<SN deines WLAN-Dongles, QR-Code>
attr solax_local requestHeader1 Content-Type: application/json
attr solax_local requestHeader2 Accept: application/json
attr solax_local room energy
attr solax_local stateFormat {sprintf(\
"PV-Leistung (Solax DC): %i W <br>\
WR-Leistung (Solax AC): %i W <br>\
Einspeise-Leistung(Solax): %i W<br>\
Haus-Leistung (Solax): %i W<br>\
Batterie-Leistung: %i W<br>\
Batterie-Loading: %i %%<br>\
Yield (Heute/Gesamt): %.1f / %.1f kWh<br>\
SN (Dongle/WR): %s / %s",\
ReadingsVal($name,"result_powerdc1",0)+ReadingsVal($name,"result_powerdc2",0),\
ReadingsVal($name,"result_acpower",0),\
ReadingsVal($name,"result_feedinpower",0),\
ReadingsVal($name,"result_consumepower",0),\
ReadingsVal($name,"result_batPower",0),\
ReadingsVal($name,"result_soc",0),\
ReadingsVal($name,"result_yieldtoday",0),\
ReadingsVal($name,"result_yieldtotal",0),\
ReadingsVal($name,"result_sn",""),\
ReadingsVal($name,"result_inverterSN",""))\
}
Alternativ kann man den Solax Wechselrichter auch über die Internet-Web-Schnittstelle anbinden, dazu muss er aber im Internet hängen und die Daten werden nur alle 5 Minuten aktualisiert, da bekommt man auch wesentlich weniger Daten raus, genügt aber für den normalen Gebrauch, nur die Haushalts-Energie hab ich dort noch nicht gefunden, lässt sich aber auch einfach durch acpower-feedinpower ausrechnen:
defmod solax HTTPMOD https://www.solaxcloud.com/proxyApp/proxy/api/getRealtimeInfo.do?tokenId=<token über die solaxcloud generiert>&sn=<SN deines WLAN-Dongles, QR-Code> 60
attr solax extractAllJSON 1
attr solax group energy
attr solax requestHeader1 Content-Type: application/json
attr solax requestHeader2 Accept: application/json
attr solax room energy
attr solax stateFormat {sprintf(\
"PV-Leistung (Solax DC): %i W <br>\
WR-Leistung (Solax AC): %i W <br>\
Einspeise-Leistung(Solax) %i W<br>\
Haus-Leistung (Solax): %i W<br>\
Batterie-Leistung: %i W<br>\
Batterie-Loading: %i %%<br>\
Yield (Heute/Gesamt): %.1f / %.1f kWh<br>\
SN (Dongle/WR): %s / %s",\
ReadingsVal($name,"result_powerdc1",0)+ReadingsVal($name,"result_powerdc2",0),\
ReadingsVal($name,"result_acpower",0),\
ReadingsVal($name,"result_feedinpower",0),\
ReadingsVal($name,"result_acpower",0)-ReadingsVal($name,"result_feedinpower",0),\
ReadingsVal($name,"result_batPower",0),\
ReadingsVal($name,"result_soc",0),\
ReadingsVal($name,"result_yieldtoday",0),\
ReadingsVal($name,"result_yieldtotal",0),\
ReadingsVal($name,"result_sn",""),\
ReadingsVal($name,"result_inverterSN",""))\
}
Hallo Tobias,
Habe dein Gateway mit meinem X3-Hybrid G4 verbunden. Bekomme auch die Werte in FHEM und kann sie verarbeiten. Funktioniert soweit super.
Auf "Off Grid Current L1" bekomme ich komische Werte: dort schwankt es zwischen -2400A und 3000A. Da würd es alle Kabel verglühen. :)
Ist für mich eher unwichtig.
Viel interessanter:
Gibt es auch einen Rückkanal? Kann über FHEM der WR auch gesteuert werden? z.B. umschalten zwischen Eigenbedarf / Einspeisung, damit die Batterie nicht schon um 11 Uhr voll ist, sondern erst später geladen wird.
Danke, und schönen Gruß
Jens
Hi,
Die unplausiblen Werte für "Off Grid Current L1" hatte ich auch - nach einigem Experimentieren liegt es wohl daran, dass das jeweils letzte gelesene Register vom modbusGW nicht korrekt ausgewertet wird. Liest man 1 Register mehr, dann stimmt der Wert auch :)
Ich habe die Registerbereiche in der json so angepasst:
"RequestLiveData": [
[
"#ClientID",
"0x04",
"0x00",
"0x00",
"0x00",
"0x55"
],
[
"#ClientID",
"0x04",
"0x00",
"0x66",
"0x00",
"0x6B"
],
[
"#ClientID",
"0x04",
"0x00",
"0xFF",
"0x00",
"0x23"
]
],
So liegt das jeweils letzte gelesene Register in einem ungenutzten Bereich ("REV" lt. Spec), und die Werte werden richtig angezeigt.
Der dritte Bereich oben gibt noch ein paar interessante Werte aus - zumindest bei meinem QVolt-HYP-G3-3P, der baugleich zum Solax X3 sein sollte.
Wenn man die Live Data Bereich so wie oben verwendet, müssen auch die "positions" in der json angepasst werden. Ich hänge mal meine json an, wie gesagt angepasst für den QCells, sollte aber auch beim Solax X3 funktionieren...
QVolt-HYP-G3-3P.json
Da lag glaub ich ein Denkfehler meinerseits vor. Ich bin gerade den ganzen Code durchgegangen, konnte aber kein Codingproblem feststellen.
Der "OffGridCurrent L1" liegt im Register 77. Da die Register aber mit 0 anfangen muss ich also folglich 78 register lesen um auch das 77er register zu lesen. Da in der Antwort als letztes immer ein CRC angehangen wird, wurde als "OffGridCurrent L1" der CRC versucht auszuwerten.
Problem erkannt, Gefahr gebannt. Ich passe die register jsons an und übernehme deines als neues QCells modul.
Warum als eigenes? Dadurch das du 3 Aufrufe in der RequestLiveData hast, hast du zwar auch mehr an Daten aber auch das Limit auf 3sek angehoben. Jeder Request braucht 1sek. ;)
im Anhang die angepasst Solax-X3.json.
Kann die mal bitte jemand testen?