Ich wollte gern das Projekt NibePi mit einem aktuellen Raspian Buster selbst aufsetzen und habe dazu eine Anleitung geschrieben.
Warum? Weil ich gern ein normales R/W System haben wollte, was auf dem aktuellsten Stand ist, um den RPi so auch anderweitig nutzen zu können. Das "NibePi Clean" Image basiert auf Raspian Stretch und ist als "Read only" konfiguriert. Da ich mit Node Red auch noch meine Wechselrichter per Modbus auslese, stieß ich hier irgendwann an die Grenze, da auch Node Red und Node.js veraltert sind.
Ich verwende meinen alten RPi 3B mit RS485 Adapter (Kosten < 50€).
Per VPN kann man so die Wärmepumpe von überall aus steuern inkl. Servicemenü.
Der Stromverbrauch des RPi 3B liegt bei 1,7W.
Als Neukauf würde ich den RPi 2B empfehlen (neu < 35€), der hat weder Wlan noch Bluetooth.
Mein RS485 Adapter: Hersteller JOY-IT, Artikelnummer RB-RS485 (10,50€). Oder USB-RS485-Adapter (3,22€) Link zu Reichelt
** Hinweis: wichtige Fehlerkorrekturen, daher alle alten Versionen gelöscht
Da ich die Nibe Wärmepumpe von Zuhause und unterwegs aus über Node-RED bediene, habe ich zusätzlich noch einige Werte von meiner PV-Anlage in ein Tab integriert:
Hier eine Anleitung und der Flow:
Als erstes muss in den Wechselrichtern Modbus TCP aktiviert werden.
Bei WR ohne Webinterface muss man es über den Sunny Explorer machen.
Anschließend testet man ob der Modbus auch funktioniert:
das hatte bei mir auf Anhieb mit beiden Wechselrichtern geklappt, am besten mit Register 30775 (dort seht ihr dann bei "+1" die Leistung).
Node RED
In der Palette muss "node-red-contrib-modbus" & "node-red-contrib-buffer-parser" installiert werden.
Hier mein Flow für meinen SB3000-TL21 und STP6.0-3AV-40:
Unter Hintergrundwissen findet man für alle möglichen SMA Wechselrichter die Register.
Viele Register sind gleich.
Wichtig: die Daten des Energy Meter (Home Manager 2.0) zieht sich der STP6.0 über Speedwire und nur deshalb kann ich sie über den STP6.0 per Modbus TCP abfragen! Der HM kann nicht per Modbus abgefragt werden, dafür aber anderweitig (siehe Blogeintrag).
Im Webinterface vom STP6.0 muss ein Energymeter konfiguriert sein:
Wenn ihr z.B. zwei Wechselrichter ohne Webinterface und damit auch ohne Zugriff auf das Energy Meter habt, müsst ihr die Register die den Hausanschluss abfragen löschen (der Objektname in der Registerbschreibung beginnt mit "Metering.xxx").
Anzupassen sind: "Modbus Getter" --> "Server" --> IP und Port anpassen.
Die alte Version (durchgestrichen) war technisch nicht korrekt, sie funktionierte zwar erstaunlich gut bis auf zwei Werte: Wenn die Blindleistung negativ wurde oder die Spannung über 655V stieg.
Warum ist das so?
Wir fragen 32 Bit Werte ab s.g. S32 oder U32.
Zitat aus der SMA Anleitung: Ein Modbus-Register ist 16 Bit breit. Für breitere Daten werden zusammenhängende ModbusRegister verwendet und als Datenblock betrachtet. Die Adresse des ersten Modbus-Registers in einem Datenblock ist die Startadresse des Datenblocks. Die Anzahl der zusammenhängenden Modbus-Register ergibt sich aus dem Datentyp und dem Offset zwischen den Registeradressen.
Also S32 = Vorzeichenbehafteter Integer (32 Bit) 0x8000 0000 (NaN) und U32 = Vorzeichenloser Integer (32 Bit) 0xFFFF FFFF (NaN)
D.h. ein Register besteht aus zwei 8 Bit Werten (oder auch zwei x 1 Byte), Beispiel:
Bis ich das verstanden hatte, hat es etwas gedauert (es hat ja auch so funktioniert), noch mal Danke an die Helfer des Node-RED Forums, besonders Stephen McLaughlin.
Vorher habe ich nur einen 16 Bit Wert abgefragt (Quantity 1 und 3 im Beispiel)
Um ein Register korrekt abzufragen und wieder zusammen zu setzen braucht es in NodeRED den "Buffer Parser".
Ich frage zusammenhängende Register der Reihe nach ab, bei zu vielen parallelen Abfragen stürzt der Modbusserver ab!
Im Buffer Parser kann ich die abzufragenden Werte über das Offset bestimmen, sowie den Datentyp (S32 oder U32) und ggf. den Faktor (am FIX_ zu erkennen).
Ohne DC Spannung (nachts) schaltet der Hauptprozessor des WR ab:
Daher bitte nicht wundern, wenn nachts viele Werte auf 0x 8000 0000 - den s.g. NaN (not a number) springen, Dezimal = -2147483648.
Da der SBS 2.5 immer noch keine Firmware für den BYD Speicher bekommen hat, ist er noch nicht integriert. Werde ich dann hoffentlich diesen Monat im Oktober noch nachholen.
Dank eines (oder einiger) pfiffiger Schweden, kann man günstig per Raspberry Pi das Nibe Modbus Modul 40 (~800€) simulieren.
Hier meine Umsetzung in Node-RED für die F1x55:
Ich verwende meinen alten RPi 3B mit RS485 Adapter (Kosten < 50€).
Per VPN kann man so die Wärmepumpe von überall aus steuern inkl. Servicemenü.
Der Stromverbrauch des RPi 3B liegt bei 1,7W.
Als Neukauf würde ich den RPi 2B empfehlen (neu < 35€), der hat weder Wlan noch Bluetooth. Wenn es Wlan sein soll, wie vom Autor empfohlen den RPi ZeroW, den kann man mit 12-5V Adapter in der Wärmepumpe betreiben. Für die normalen RPi reicht die Leistung der internen 12V Versorung nicht aus (zumindest nicht nach Datenblatt), bitte 5,1V Netzteil benutzen.
Mein RS485 Adapter: Hersteller JOY-IT, Artikelnummer RB-RS485 (10,50€). Sollte aber auch mit einem USB-RS485-Adapter klappen (nicht** getestet, 3,30€).
* * * * * * Aktuelle Flows von mir * * * * * * Es muss zuerst eine Funktion nachinstalliert werden: => Palette verwalten => installieren => Suche nach "contrib-calculate" => installieren.
Anleitung Installation: Link zum PDF Anleitung Ergänzung:Link zum PDF / Download LOG.SET Ergänzung Uhrzeit: Die Zeitzone ist auf Schweden voreingestellt, zum ändern in der Konsole: "sudo dpkg-reconfigure tzdata" Vorher wieder Schreibzugriff aktivieren und anschließend wieder nur Lesezugriff aktivieren. Uhrzeit auslesen mit "uptime" in der Konsole.
Da der Hausbau schon lange beendet ist und ich keinen zweiten Blog eröffnen will, werde ich hier nun bei Gelegenheit Fachartikel erstellen.
Seit Jahren verwende ich nun schon Wireguard VPN und bin begeistert.
Ich habe sehr lange versucht einen VPN Tunnel zu bauen der dual läuft, also per IPv4 & IPv6 erreichbar ist und auch im Tunnel beides überträgt. Letzteres habe ich lange nicht geschafft.
Diese Anleitung richtet sich an Wireguard Nutzer, die bereits einen IPv4 Tunnel betreiben und sich grundsätzlich auskennen mit Wireguard, Pi-Hole und Netzwerkeinstellungen.
Die erste Einrichtung habe ich damals nach dieser Anleitung durchgeführt: Link Github / Link Github 2 Mit dem Script aus Link 2 kann man schnell viele Clienten anlegen inkl. QR-Codes, anstatt alle Schlüsselpaare manuell zu erstellen.
Ich verwende eine FritzBox welche jedem Netzwerkgerät neben der öffentlichen auch eine private IPv6 zuteilt, das muss man jedoch einstellen unter: Heimnetz - Netzwerk - Netzwerkeinstellungen - IPv6-Konfiguration:
gelber Kasten
(Als loker DNS Server trägt man später unten die IPv6 Adresse des Raspberry ein, um Pi-Hole für IPv4 & IPv6 zu nutzen.)
So bekommt jedes IPv6 fähige Netzwerkgerät mindestens 3 Adresse:
1. öffentlich, beginnt mit 2003: (bei der Telekom, Providerabhängig)
2. privat, beginnt mit fd00: (ich habe mich für den Prävix fd00:aaaa: entschieden)
3. link lokal, beginnt mit fe80: (wird sich immer selber von jedem Gerät zugewiesen)
Siehe auch Bereiche im Link: Erklärung
Als erstes öffnet man /etc/dhcpcd.conf und stellt um auf eine feste, aus der MAC-Adresse generierte IPv6 (oberer Pfeil)
wenn man diese hat (neu starten, "ip a"), trägt man sie ein (unterer gelber Pfeil).
Die IPv4 Adresse habt ihr wahrscheinlich schon fest vergeben, wenn ihr Pi-Hole bereits nutzt, genauso wie Router & DNS. (DNS 127.0.0.1 bedeutet dass der Raspberry selber der DNS Server ist, das stellt PiHole bei der Konfiguration so ein).
Als nächstes kann man in /etc/sysctl.confIPv6 Forwarding aktivieren (langer gelber Pfeil), IPv4 Forwarding müsste schon aktiviert sein wenn man Wireguard mit IPv4 nutzt (kurzer gelber Pfeil):
Nun kann man die wg0.config anpassen indem man sie mit IPv6 Adressen bestückt & und die Firewall "iptables6" anpasst (alles gelb markiert):
Die IP Adressen für den Tunnel sind von mir frei gewählt aus dem privaten Bereich (192.168.99.x & fd08:x), wichtig ist, dass sie aus einem anderen Bereich sind als die Netze, die ihr miteinander verbindet (FritzBox klassisch 192.168.178.x & fd00:x) Wireguard neu starten (sudo wg-quick down wg0 & sudo wg-quick up wg0) und schauen ob es keine Fehlermeldung gibt. Abschließend die Portweiterleitung bzw. Öffnung (51820 UDP) in der FritzBox für IPv4 & IPv6 aktivieren, darauf achten dass die richtige IPv6 Interface-ID eingetragen ist !
Pi-Hole müsst ihr ggf. noch mal neu konfigurieren mit "pihole -r". Als letztes die Konfig auf den Clienten anpassen, hier ein Beispiel:
Man kann zwei identische Profile anlegen*: 1. IPv4 - Endpunkt z.B. xy.myfritz.net (man wird per IPv4 verbunden) 2. IPv6 - Endpunkt z.B. xy.dynv6.net (man wird per IPv6 verbunden) Die restliche Konfig bleibt gleich. Man kann so z.B. in einem reinen IPv4 Netz (wie im Moment bei O2) durch den Wireguard Tunnel das Internet per IPv4 und IPv6 benutzen inkl. Pi-Hole.
* gilt natürlich nur wenn man Zuhause eine echte IPv4 Adresse bekommt
Man kann verschiedene Clienten Profile anlegen und diese anschließend als QR-Code bereit stellen zum schnellen abscannen per Handy/Tablet. 1. Profile manuell in Ordnern anlegen z.B. in Dokumente/Profil/profil.config 2. "sudo apt-get install qrencode" 3. z.B. cd /home/pi/Documents/Handy1 4. qrencode -t ansiutf8 < handy1_IPv4.conf => QR Code wird in der Konsole angezeigt (zum testen) 5. qrencode -o IPv4.png < handy1_IPv4.conf => QR Code wird als .png gespeichert