[gelöst] MQTT Ansatz für PV-Anlage Anker solix2mqtt

Begonnen von Clyde, 02 Februar 2025, 16:07:22

Vorheriges Thema - Nächstes Thema

Skusi

Zitat von: Clyde am 03 Februar 2025, 13:16:10Anmerkung. Auf https://www.ankersolix.com/de habe ich einen zusätzlichen 2ten Account angelegt. Dieser wird dann in der Anker App unter Profil/System verwalten/Eigentümer als Mitglied einer Familiengruppe eingeladen. Auf einem weiteren Gerät habe ich dann die Anker App mit diesem 2ten Account angelegt.
Dort unter Profil kann man sich dann über die Einladung auf den Eigentümer-Account verbinden. So kann man den Eigentümer-Account unabhängig weiter nutzen. Über diesen 2ten Account läuft dann auch das MQTT.


Danke für den Tipp. Ich war zwar auch schon so schlau und habe einen Gast Account laufen um mit dem Handy drauf zu schauen und fhem nicht gleich rauszuschmeissen. Aber ich dachte das das solix2mqtt den Admin Account braucht und ich per Handy als Gast nix bedienen kann.

Nun hab ich das andersherum probiert, und siehe da es geht!

Nun ist Fhem der Gast und kann Daten auslesen (leider geht schreiben ja nicht) und per Handy kann ich per Admin alle Einstellungen ändern.
TOP !

Aber jetzt fehlt nur noch das man auch die Entladeleistung per mqtt steuern kann. Das wär dann perfekt.
Wenn ich das richtig gedeutet habe, ist der Entwickler aber nicht mehr bereit da weiter zu machen, da er keine Solix mehr hat.
Schade das sich dem keiner von den "fähigen" annimt.

...wink mit dem sehr dicken Zaunpfahl...
HP ThinClient 630, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,Tasmota+IR Lesekopf an Stromz., MAX Fensterkontakte, IButton, Fingerprint, SonOff Tasmota, ESP LED Controler, WLed,zigbee2mqtt...

laufhem

Hallo ich möchte hier auch nochmal fragen, da ich konkret überlege eine 1600AC zu kaufen.
Ich möchte meinen Balkon PV Überschussstrom speichern. Den Stromzählerwert habe ich in FHEM schon vorliegen.
Leider liest es sich so, dass die Lade- und Entladeleistung nicht dynamisch über FHEM gesetzt werden kann, richtig?
Damit wäre mein Ansatz nicht möglich.
Hat sich jemand schon diese Integration näher angeschaut? Ist das damit vielleicht möglich?
https://github.com/thomluther/anker-solix-api

Clyde

Auch die https://github.com/thomluther/anker-solix-api verwendet wie in der Beschreibung zu lesen ist ein freigegebenes Gastkonto um auf die Anker-Cloud zuzugreifen. Über diesen Weg ist nur ein Lesen der Daten der App-Anzeige möglich. Daher wird es nicht möglich sein, Daten zu verändern.

Die fehlende API ist wirklich ein Nachteil. Ich habe zusätzlich zur Solarbank 2 Pro noch eine Anker Powerbank C1000 im System, um die Waschmaschine mit 2kW betreiben zu können. Der Ladezustand kann nicht gelesen werden, obwohl er in der App angezeigt wird. Die Ladeleistung der C1000 kann in 100 Watt Schritten bis 1000W eingestellt werden. Leider auch nur manuell in der App. Hier wäre eine Automation durch FHEM ein Kinderspiel.

Mal sehen was noch so kommt. Insgesamt bin ich mit Anker aber zufrieden, was die Funktionsstabilität/Installation betrifft. Auch im Winter steht sie bei mir draussen im Garten und auch das funktioniert.
Proxmox auf MINIX-Z100, LXC: FHEM, FS20, FHT, HM, Tradfri, Alexa, Anker Solix Solarbank 2

Lehmi54

Zitat von: Skusi am 11 April 2025, 17:58:54Danke für den Tipp. Ich war zwar auch schon so schlau und habe einen Gast Account laufen um mit dem Handy drauf zu schauen und fhem nicht gleich rauszuschmeissen. Aber ich dachte das das solix2mqtt den Admin Account braucht und ich per Handy als Gast nix bedienen kann.

Nun hab ich das andersherum probiert, und siehe da es geht!
Ich habe eine Solix 2 AC mit 1 x BP1600 und einem Shelly pro 3em. Leider liefert bei mir solix2mqtt mit Mitglieds-Account keine Werte. Mit dem Eigentümer-Account erhalte ich Werte, kann aber nichts steuern.
Aus diesem Grund habe ich auf einem Raspi 3B ,,Homeassistant" mit nur https://github.com/thomluther/ha-anker-solix  installiert , betreibe die anker-solix-api mit dem Eigentümer-Account und hole mir einige ausgewählte Daten per MQTT Statestream nach fhem. Über VPN kann ich jederzeit mit dem Handy auf diesen Account zugreifen und alle Einstellungen in der api verändern. In der Anker App nutze ich dann den Mitglieds-Account.
Anfangs wollte ich per MQTT von fhem aus, die Einstellungen der Anker-Api im Homeassistant steuern. Das war aber in meiner Konfiguration nicht notwendig.
Ich habe in der API als Benutzermodus ,,Smartmeter" eingestellt und das läuft seit Anfang März ohne Probleme. Der Speicher entlädt sich über Nacht bis auf 10% und wird durch die Sonne am nächsten oder übernächsten Tag wieder aufgeladen
Ich habe 2 Bilder mit Damians genialer uiTable Card Funktion angehängt.
je 1x Raspberry 4 und 3 - FHEM 6.4
z-wave Netzwerk, SIGNALduino, Shelly, Solix 2 AC

Clyde

1) Damit an sonnigen Tagen der Speicher nicht zu früh voll ist, braucht man tagsüber möglichst eine gute Last nahe der Wechselrichtergrenze von 800W. Die Leistungsaufnahme der Powerstation C1000 lässt sich in der App manuell auf Werte zwischen 200-1000W einstellen.

Vermutung: Die Powerstation wird in der HomeAutomatic nicht eingebunden, daher ist auch keine Steuerung möglich?

2) Die Solix 2 AC kann ja auch AC-Leistung aufnehmen.

Frage: Ist diese Leistungsaufnahme mit der HA-Anbindung steuerbar? (Um bei günstigen Preisen zu laden)
Proxmox auf MINIX-Z100, LXC: FHEM, FS20, FHT, HM, Tradfri, Alexa, Anker Solix Solarbank 2

Nuems

Ich bin mit von der Partie - seit ein paar Tagen habe ich die PV-Module auf dem Dach und die Solarbank 2 E1600 Pro im Keller, seit gerade eben bekomme ich in FHEM auch Daten per MQTT - erstmal testweise. Und schon stellen sich mir diverse Fragen ganz unterschiedlicher Art:
1) Wäre es sinnvoll, das Projekt von https://github.com/tomquist/solix2mqtt zu forken, da der Entwickler ja ganz klar sagt, dass er nicht weiter daran arbeitet?
2) Wäre es zweckmäßig, bei Anker nach einer stabilen Datenschnittstelle zumindest mit Lesezugriff zu fragen? Lösungen, die darauf hoffen, dass die Authentifizierungsmethode hoffentlich so bleibt, wie sie ist, sind für Hausautomatisierungszwecke m.E. nur mittelprächtig geeignet - die Gefahr, dass dann nach längerer Zeit ein Fehler auftritt, den man zunächst so gar nicht zuordnen kann, ist gegeben.
3) Wie startet Ihr das das solix2mqtt-Script? Als systemd-Service, von Hand (weil der Server eh nur einmal im Jahr neu startet...) oder noch anders?

4) @Clyde: Magst Du Deinen Aufbau mit der C1000 genauer erklären? Lädst Du die C1000 über separate PV-Module, hast Du irgendeine clevere Lösung zum Hin- und Herschalten oder stöpselst Du die Kabel jeweils hin und her?

Clyde

1) Da Anker bisher nix bzgl. offener API unternimmt, ist das unser einziges Schlüsselloch. Sollte sich da etwas ändern, haben viele ein Problem. Von daher wäre es schön, wenn da jemand dran wäre.

2) Hab das schon gemacht. Je mehr das nachfragen, umso besser. Auf jeden Fall ist Anker sehr aktiv. Ob sie sich allerdings öffnen, hängt wohl auch vom Druck der Nutzer ab.

https://community.anker.com/search?q=api%20order%3Alatest

4) Die Powerstation hängt an einem Anker-Plug und einer Schaltsteckdose am Netz und wird bei Bedarf darüber geladen. Die Ladeleistung der Powerstation wird manuell in der Anker App dem Bedarf angepasst. FHEM steuert die Schaltsteckdose, um das Laden sinnvoll zu freizugeben. (z.B. bei Solarüberschuß)
Proxmox auf MINIX-Z100, LXC: FHEM, FS20, FHT, HM, Tradfri, Alexa, Anker Solix Solarbank 2

Nuems

Vielen Dank, ich habe einen Like für den Vorschlag hinterlassen. Bei der Frage zur C1000 habe ich dann wohl den Wald vor lauter Bäumen nicht gesehen - aber handelst Du Dir auf diesem Wege nicht einiges an Wandlungsverlusten ein?

Clyde

Die Lösung ist bei mir ok, da wir viel waschen und unsere E-Scooter so auf Touren auch mal zwischendurch nachladen können. Die Idee mit der Powerstation ist daraus erwachsen, das ich

a) die Leistung der Waschmaschine von 2kW nicht mit den 0,8kW des Wechselrichters decken kann,
mit der Powerstation aber schon
b) ich tagsüber kaum Stromabnahme habe und der Speicher daher mittags schon voll ist. Mit der Powerstation habe ich einen zusätzlichen Abnehmer der sich zudem zwischen 0-1000W einstellen lässt und so tagsüber eine Abnahme nahe der 800 Watt habe.
c) ich die Powerstation auch noch für andere Zwecke nutzen möchte

In der Praxis hat sich gezeigt:
Die Kapazität der Powerstation reicht für Kurzprogramme der Waschmaschine bei 40°C.
Vollprogramme bei 60° werden dann mit Netzunterstützung ggf. solargestützt durchlaufen.
Eine größere Powerstation wäre besser, allerdings auch unhandlicher auf Touren.

Die Wandlungsverluste akzeptiere ich, da ich andererseits unvergütet ins Netz einspeisen würde, sobald der Speicher voll ist. Ein größerer Speicher wird nur an wenigen Tages des Jahres ausgenutzt, daher hab ich das erstmal geschoben, bis die Preise weiter fallen.


Proxmox auf MINIX-Z100, LXC: FHEM, FS20, FHT, HM, Tradfri, Alexa, Anker Solix Solarbank 2

Nuems

Ich muss noch an meiner Strategie zur Nulleinspeisung arbeiten, allerdings habe ich dank eines Vorbesitzers meines Hauses in manchen Räumen einen idealen Verbraucher: eine elektrische Fußbodenheizung. Wenn ich dann gar nicht mehr weiß, wohin mit dem Strom, sorge ich halt für warme Füße. In der Übergangszeit kann das tatsächlich sinnvoll sein, wenn mit Gratisstrom die konventionelle Heizung unterstützt wird. Für den Hochsommer brauche ich wohl etwas anderes und für den Winter rechne ich nicht mit einem ausreichend hohen Überschuss.

Ich habe hier außerdem eine systemd-Service-Definition:
[Unit]
Description=MQTT data provider for Anker Solix devices
After=network-online.target

[Service]
Type=simple
User=fhem
ExecStart=/opt/solix2mqtt/start.sh

[Install]
WantedBy=multi-user.target

Das muss bei Bedarf in /etc/systemd/system als "solix2mqtt.service" gespeichert werden. Dann aktiviert man diesen systemd-Service mit den Befehlen "systemctl enable solix2mqtt.service" sowie  "systemctl start solix2mqtt.service" für die automatische Ausführung.

"start.sh" ist das leicht modifizierte Shellscript von @Clyde:
#!/bin/sh
HERE=$(dirname $(realpath ${0}))
cd ${HERE}
export S2M_USER=<USERNAME DES 2. ANKER-ACCOUNTS>
export S2M_PASSWORD=<PASSWORT DES 2. ANKER-ACCOUNTS>
export S2M_COUNTRY=DE
export S2M_MQTT_URI=mqtt://localhost:1883
npm run start

Ich habe eben auch noch einmal einen Blick auf die oben bereits verlinkte Home-Assistant-Lösung geworfen (die ja ihrerseits solix2mqtt als Quelle benennt). Wenn ich die Angaben auf der Webseite dort richtig verstehe, sind Schreibzugriffe dort dadurch möglich, dass der Admin-Account verwendet wird, während die App dann nur lesend unterwegs ist. Insbesondere (aber nicht nur) weil ich von Home Assistant keine Ahnung habe, blicke ich jetzt aber nicht so schnell durch das Repository durch, um auf die Schnelle die Nutzbarkeit in einem anderen Kontext beurteilen zu können. Für meine Zwecke dürfte es bis auf Weiteres auch wichtiger sein, Zugriff auf den Ladestand des Akkus sowie die aktuelle PV-Leistung zu bekommen, um darauf automatisiert reagieren zu können. Dafür reicht Lesezugriff.
Ich bastle gerade noch an einer Integration in TabletUI V2, aber die ist bisher noch sehr rudimentär (=ziemlich hässlich und wenig funktional). Wenn ich mehr habe, poste ich noch einmal. Aber vielleicht sollten wir einen neuen Thread aufmachen, weil sich das ursprüngliche Thema erledigt hat?

cluberer99

Hallo,
ich hab derzeit ein kleines Problem das ganze wieder ans laufen zu bekommen. Nach der Erstinstallation lief alles für ca. 1,5 Stunden, dann kamen keine Daten mehr. Auch eine erneute Installation brachte keinen erfolg. Für die Datenabfrage nutze ich einen Zweiten Account, dieser sieht über die App auch die aktuellen Daten, wenn ich mich neu einlogge. Starte ich das Script kommt bei der APP eine Fehlermeldung das ein anderes Gerät angemeldet bereits angemeldet ist. Wenn ich das Script manuell starte kommt eine Fehlermeldung (Screenshot)
[2025-05-23T17:29:16.922Z] {"username":"+++","password":"***","country":"DE","loginStore":"auth.data","pollInterval":60,"mqttUrl":"mqtt://localhost:1883","mqttClientId":"solix2mqtt","mqttRetain":false,"mqttTopic":"solix","verbose":true}
[2025-05-23T17:29:16.939Z] Fetching data
[2025-05-23T17:29:16.973Z] Using cached auth data
[2025-05-23T17:29:16.974Z] ++++
[2025-05-23T17:29:16.979Z] {}
[2025-05-23T17:29:17.644Z] Failed fetching or publishing printer data AggregateError [ECONNREFUSED]:
    at internalConnectMultiple (node:net:1139:18)
    at afterConnectMultiple (node:net:1714:7) {
  code: 'ECONNREFUSED',
  [errors]: [
    Error: connect ECONNREFUSED ::1:1883
        at createConnectionError (node:net:1677:14)
        at afterConnectMultiple (node:net:1707:16) {
      errno: -111,
      code: 'ECONNREFUSED',
      syscall: 'connect',
      address: '::1',
      port: 1883
    },
    Error: connect ECONNREFUSED 127.0.0.1:1883
        at createConnectionError (node:net:1677:14)
        at afterConnectMultiple (node:net:1707:16) {
      errno: -111,
      code: 'ECONNREFUSED',
      syscall: 'connect',
      address: '127.0.0.1',
      port: 1883
    }
  ]
}
[2025-05-23T17:29:17.662Z] Sleeping for 59276ms...
Die Zeile "Error: connect ECONNREFUSED ::1:1883" sieht für mich merkwürdig aus.
Eventuell kann mir einer bei dem Problem helfen.

Nuems

Zum einen ist zu erwarten, dass die App meckert, sobald Du Dich mit dem Script auf dem gleichen Account einloggst: Pro Account kann nur ein  Gerät zur Zeit eingeloggt sein. Das ist ja gerade der Grund für den zweiten Account.
Zum zweiten verstehe ich die Fehlermeldung so, dass das Script lokal auf Port 1883 keine Verbindung herstellen kann. Im Kontext dieses Threads wäre das die MQTT-Instanz auf FHEM-Seite. Du könntest überprüfen, ob die korrekt läuft.

cluberer99

Zitat von: Nuems am 24 Mai 2025, 09:04:21Zum einen ist zu erwarten, dass die App meckert, sobald Du Dich mit dem Script auf dem gleichen Account einloggst: Pro Account kann nur ein  Gerät zur Zeit eingeloggt sein. Das ist ja gerade der Grund für den zweiten Account.
Zum zweiten verstehe ich die Fehlermeldung so, dass das Script lokal auf Port 1883 keine Verbindung herstellen kann. Im Kontext dieses Threads wäre das die MQTT-Instanz auf FHEM-Seite. Du könntest überprüfen, ob die korrekt läuft.

Ein guter Tipp. Da weder ein Neustart vom Raspberry noch von FHEM das Problem lösten, habe ich das Device in FHEM gelöscht und neu angelegt. Jetzt läuft es wieder wie gewünscht.

Nuems

#28
Ist es nur bei mir so, dass neben dem separaten Log für solix2mqtt auch im fhem-yyyy-mm.log _sehr_ viele Meldungen landen? Es ist jeweils das MQTT-Topic "PUBLISH" und offenbar JSON-formattiert. Es sind so viele Meldungen (bzw. so umfangreiche Daten), dass der Umgang mit dem Log sowohl im FHEM-Webinterface als auch auf der Kommandozeile auf meinem Odroid-N2 sehr träge ist. Es ist gut möglich, dass ich irgendwo etwas falsch konfiguriert habe, aber es wäre nett, wenn ihr mal kurz nachsehen könntet, was bei Euch in den Logs landet - vielleicht kann ich dann dem Problem besser auch die Spur kommen.

Edit: Es lag wahrscheinlich daran, dass ich (um das Verhalten eines Shellys nachvollziehen zu können) für MQTT2-Server das Attribut verbose=4 gesetzt hatte. Dass dann viel im Log landet, ist zu erwarten.

Beta-User

Zitat von: Nuems am 28 Mai 2025, 15:35:12Edit: Es lag wahrscheinlich daran, dass ich (um dem Verhalten eines Shellys nachvollziehen zu können) für MQTT2-Server das Attribut verbose=4 gesetzt hatte. Dass dann viel im Log landet, ist zu erwarten.
Soweit ist es logisch, aber: Warum macht der Server überhaupt ein "PUBLISH"? Ohne in den Code geschaut zu haben, würde ich mal annehmen, dass das nur dann der Fall ist, wenn irgendwas auch eine entsprechende subscription angemeldet hat, also gesendet wird, und nicht nur was empfangen. Also: Wer will "alles" wissen?
Hast du irgendwo ein 2. FHEM, das sich mit MQTT2_CLIENT verbindet? Dann ggf. dort die subscriptions einschränken.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors