Fronius Gen24 Speichersteuerung per Modbus

Begonnen von sky64, 17 Januar 2021, 18:52:26

Vorheriges Thema - Nächstes Thema

sky64

Hallo

Da in der Firmware des Gen24 fehlt die in der Doku vorhandene Speichersteuerung leider noch.
In der Vorgängerversion konnte man zwar die (versteckte) Webseite noch aufrufen, war aber ohne Funktion.
Deshalb habe ich heute mal mit dem Modbus die Register für die Speichersteuerung gesucht.
Und siehe da es funktioniert :)
Sicher kann das der eine oder andere gebrauchen.


   obj-h40109-format %.2f
   obj-h40109-len 2
   obj-h40109-reading Temperatur
   obj-h40109-unpack f>
   obj-h40358-reading StorCtl_Mod
   obj-h40358-set 1
   obj-h40360-expr $val/100
   obj-h40360-format %.2f %
   obj-h40360-reading BYD_min_Reserve
   obj-h40360-set 1
   obj-h40360-setexpr $val * 100
   obj-h40361-expr $val/100
   obj-h40361-format %.2f %
   obj-h40361-reading BYD_SoC
   obj-h40365-expr $val/100
   obj-h40365-format %.2f %
   obj-h40365-reading BYD_max_discharge
   obj-h40365-set 1
   obj-h40365-setexpr $val * 100
   obj-h40366-expr $val/100
   obj-h40366-format %.2f %
   obj-h40366-reading BYD_max_charge
   obj-h40366-set 1
   obj-h40366-setexpr $val * 100


Der Wert "StorCtl_Mod" sind eigentlich 2 Bit-Werte, Bit0 und Bit 1 für die Freigabe der Lade- bzw. Entladesteuerung.
Das war bei mir 0. Bit0 und Bit1 zusammen sind dann eben dezimal 3 und muss einmalig gesetzt werden.
Die Werte für die Lade-/Entladebegrenzung sind %-Werte der Speicherkapazität, zumindest bei mir mit 5,2Kwh (2 Module BYD HVS)
Das heißt bei mir sind 20% 1040W.
Es gibt zwar Register für die Watt-Zahl, aber das sind nur Read-Register.
Es gibt noch Readregister für den 100%-Wert. Wenn man es universell machen möchte und konkrete Wattzahlen lesen bzw. setzen möchten muss man das entsprechend umrechnen.
Es kann sein, das es bei größeren Batterien anderen Grenzwerte gibt.
Bei Fronius gibt es im Downloadbereich ein Zip mit enthaltenen Excel-Listen für alle verfügbaren Modbus-Register.
(Gen24_Primo_Symo_Inverter_Register_Map_Float_storage.xls)

Als nächstes steht dann die Einbindung der Sonnen-Prognose an.

Gruß Ron
FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

ch.eick

Zitat von: sky64 am 17 Januar 2021, 18:52:26
Als nächstes steht dann die Einbindung der Sonnen-Prognose an.

Hallo Ron,
Wetter- / Leistungs-Prognose
Das läuft bei uns bereits seit 1 Jahr ziemlich gut :-) und ist unabhängig vom Wechselrichter verwendbar.
Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

sky64

Ja, Danke. Das ist sehr umfangreich.
Ich habe das schon mal versucht zu lesen, aber viele Sachen habe ich noch nicht verstanden.
Ich weiß das ich als nächstes mit DBlog anfangen muss.
Ohne zumindest etwas Verständnis was und wie das funktioniert geht es nicht wenn ich es für mich anpassen will.

Gruß Ron
FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

ch.eick

Zitat von: sky64 am 17 Januar 2021, 19:40:06
Ich habe das schon mal versucht zu lesen, aber viele Sachen habe ich noch nicht verstanden.
Ich weiß das ich als nächstes mit DBlog anfangen muss.
Ohne zumindest etwas Verständnis was und wie das funktioniert geht es nicht wenn ich es für mich anpassen will.
Ich habe die Leistungsprognose für Dich mal in einen anderen Thread ausgelagert.
Leistungsprognose für Wechselrichter

VG
  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

yoda_gh

Hallo sky64

Zitat von: sky64 am 17 Januar 2021, 18:52:26
Deshalb habe ich heute mal mit dem Modbus die Register für die Speichersteuerung gesucht.
Und siehe da es funktioniert :)
Sicher kann das der eine oder andere gebrauchen.

[...]

Super, vielen Dank!! Das hilft mir sehr und erspart mir sicher die ein oder andere Stunde ausprobieren und graue Haare. :)

Aber.. bisher tut sich gar nix.

Ich habe das Device angelegt, erstmal nur mit den "obj-h40109-*"-Attributen, aber FHEM legt leider kein REading an. Kannst Du bitte mal das Define für's Device auch posten - oder idealerweise die ganze "Raw definition" von der Device-Seite? Bin mir bezüglich der anderen Settings noch nicht ganz sicher.

Einen Screenshot der Einstellungen im WR habe ich angehängt, hoffe das passt? Sicherheitshalber habe ich erstmal nur lesenden Zugriff aktiviert.


sky64

Hallo

.. also "..Steuerung über Modbus" muss du schon einschalten  ;)
Rest folgt morgen ..
FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

yoda_gh

#6
Zitat von: sky64 am 17 Mai 2021, 22:08:46
.. also "..Steuerung über Modbus" muss du schon einschalten  ;)
Rest folgt morgen ..

Nein, es geht auch ohne, solange man nur Werte lesen möchte. Was mir noch gefehlt hat, war ein "obj-h40109-poll 1", sonst wird das Reading nur auf expliziten Trigger aktualisiert.

Hier mal meine aktuell funktionierende Definition:


define gen24 ModbusAttr 1 180 192.168.0.123:502 TCP
attr gen24 obj-h40109-format %.2f
attr gen24 obj-h40109-len 2
attr gen24 obj-h40109-poll 1
attr gen24 obj-h40109-reading CabinetTemperature
attr gen24 obj-h40109-unpack f>
attr gen24 room Solar


Vielleicht magst Du das noch in Deinen initialen Post aufnehmen?

Vermutlich will man noch eigene Typen definieren oder Defaults setzen, damit man nicht "-format", "-len", "-poll" etc. bei jedem einzelnen Register spezifizieren muss, das schaue ich mir nochmal an, wenn ich mehrere Register am Laufen habe. :)

yoda_gh

#7
Update 2022-04-22: Batterie und Schreibzugriff ergänzt

Hier mal meine komplette Definition für das Lesen und Schreiben von Werten (nur die aus meiner Sicht interessanten), für einen Gen24 mit Batterie:


define gen24 ModbusAttr 1 120 192.168.0.123:502 TCP
attr gen24 dev-h-combine 125
attr gen24 dev-h-defFormat %.1f
attr gen24 dev-h-defLen 2
attr gen24 dev-h-defPoll 1
attr gen24 dev-h-defUnpack f>
attr gen24 event-min-interval ACActEnergy:7200,ACPower:7200,Battery.*:7200
attr gen24 event-on-change-reading .*Energy:0.1,ACPower:1,DCPowerMPPT.*:1,status,Battery.*harge.*:1,BatteryState
attr gen24 obj-h40073-reading ACCurrentPhaseA
attr gen24 obj-h40075-reading ACCurrentPhaseB
attr gen24 obj-h40077-reading ACCurrentPhaseC
attr gen24 obj-h40085-reading ACVoltagePhaseA
attr gen24 obj-h40087-reading ACVoltagePhaseB
attr gen24 obj-h40089-reading ACVoltagePhaseC
attr gen24 obj-h40091-format %.0f
attr gen24 obj-h40091-reading ACPower
attr gen24 obj-h40093-reading ACFrequency
attr gen24 obj-h40109-reading CabinetTemperature
attr gen24 obj-h40117-format %s
attr gen24 obj-h40117-len 1
attr gen24 obj-h40117-map 1:off,2:sleeping,3:starting,4:active,5:throttled,6:shutdown,7:fault,8:standby
attr gen24 obj-h40117-reading status
attr gen24 obj-h40117-unpack n
attr gen24 obj-h40196-expr $val / 1000
attr gen24 obj-h40196-format %.2f
attr gen24 obj-h40196-len 4
attr gen24 obj-h40196-reading ACActEnergy
attr gen24 obj-h40196-unpack Q>
attr gen24 obj-h40267-format %d
attr gen24 obj-h40267-group 1-1
attr gen24 obj-h40267-len 1
attr gen24 obj-h40267-reading DCPowerScale
attr gen24 obj-h40267-unpack s>
attr gen24 obj-h40284-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40284-group 1-2
attr gen24 obj-h40284-len 1
attr gen24 obj-h40284-reading DCPowerMPPT1
attr gen24 obj-h40284-unpack n
attr gen24 obj-h40304-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40304-group 1-3
attr gen24 obj-h40304-len 1
attr gen24 obj-h40304-reading DCPowerMPPT2
attr gen24 obj-h40304-unpack n
attr gen24 obj-h40324-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40324-group 1-4
attr gen24 obj-h40324-len 1
attr gen24 obj-h40324-reading BatteryChargeWatt
attr gen24 obj-h40324-unpack n
attr gen24 obj-h40344-expr $val * 10 ** ReadingsVal($name, 'DCPowerScale', 1)
attr gen24 obj-h40344-group 1-5
attr gen24 obj-h40344-len 1
attr gen24 obj-h40344-reading BatteryDischargeWatt
attr gen24 obj-h40344-unpack n
attr gen24 obj-h40355-len 1
attr gen24 obj-h40355-reading BatConfigMaxReferenceWatt
attr gen24 obj-h40355-unpack n
attr gen24 obj-h40358-format %s
attr gen24 obj-h40358-len 1
attr gen24 obj-h40358-map 0:none,1:chargeMax,2:dischrMax,3:bothMax
attr gen24 obj-h40358-reading BatConfigMaxEnabled
attr gen24 obj-h40358-set 1
attr gen24 obj-h40358-unpack n
attr gen24 obj-h40360-expr $val / 100
attr gen24 obj-h40360-len 1
attr gen24 obj-h40360-reading BatConfigReserve
attr gen24 obj-h40360-unpack n
attr gen24 obj-h40361-expr $val / 100
attr gen24 obj-h40361-len 1
attr gen24 obj-h40361-reading BatteryChargePercent
attr gen24 obj-h40361-unpack n
attr gen24 obj-h40364-format %s
attr gen24 obj-h40364-len 1
attr gen24 obj-h40364-map 1:off,2:empty,3:discharging,4:charging,5:full,6:holding,7:testing
attr gen24 obj-h40364-reading BatteryState
attr gen24 obj-h40364-unpack n
attr gen24 obj-h40365-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-len 1
attr gen24 obj-h40365-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40365-reading BatConfigMaxDischargeWatt
attr gen24 obj-h40365-set 1
attr gen24 obj-h40365-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr gen24 obj-h40365-unpack s>
attr gen24 obj-h40366-expr $val / 10000 * ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-len 1
attr gen24 obj-h40366-max ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-min -ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1)
attr gen24 obj-h40366-reading BatConfigMaxChargeWatt
attr gen24 obj-h40366-set 1
attr gen24 obj-h40366-setexpr $val / ReadingsVal($name, 'BatConfigMaxReferenceWatt', 1) * 10000
attr gen24 obj-h40366-unpack s>
attr gen24 stateFormat status BatteryState ACPower W
attr gen24 userReadings PVConsumedEnergy { ReadingsVal($name,"ACActEnergy",0) - ReadingsVal("gen24_meter","EnergyExported",0) }


Die Register habe ich dem Dokument "Fronius GEN24 Modbus TCP & RTU" (z.Zt. https://www.fronius.com/~/downloads/Solar%20Energy/Operating%20Instructions/42%2C0410%2C2649.pdf) und vor allem den Tabellen in "gen24-modbus-api-external-docs.zip" (z.Zt. http://www.fronius.com/QR-link/0024) entnommen, wo es noch deutlich mehr Werte zum Abruf gibt...

Die event-*-Settings sind natürlich Geschmackssache - zur Reduzierung der Datenlast logge ich letztlich das hier mit (Regexp-Part vom FileLog-Device):


gen24:AC.*:.*|gen24:DCPowerMPPT.*:.*|gen24:Battery.*:.*|gen24:PVConsumedEnergy:.*|gen24:status:.*


sky64

Sorry, ein Tag zu spät.
hier mein Device zur Steuerung der Batterie am Fronius Gen24.
Alle anderen Werte lese ich z.Z. über die API aus.
Ich bin noch unschlüssig welcher Weg der bessere zur Abfrage ist. Zum Steuern geht nur Modbus, zum Auslesen ist die API einfacher, da sich das Device praktisch selbst konfiguriert.

list Modbus_Fronius
Internals:
   DEF        1 30 192.168.xxx.xxx:502 TCP
   DeviceName 192.168.xxx.xxx:502
   EXPECT     idle
   FD         11
   FUUID      5ff5cafd-f33f-5588-ce21-672f940aabac9443
   IODev      Modbus_Fronius
   Interval   30
   LASTOPEN   1621173510.31268
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.3.11 - 2.1.2021
   NAME       Modbus_Fronius
   NOTIFYDEV  global
   NR         336
   NTFY_ORDER 50-Modbus_Fronius
   PARTIAL   
   PROTOCOL   TCP
   STATE      SOC:40.10 | Reserve:15.00<br>
Begrenzung Entl.:100.00 | Lad.:20.00<br>
Temp: 52.93 °C
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2021-05-19 09:22:05   BYD_SoC         40.10
     2021-05-19 09:22:05   BYD_max_charge  20.00
     2021-05-19 09:22:05   BYD_max_discharge 100.00
     2021-05-19 09:22:05   BYD_min_Reserve 15.00
     2021-05-19 09:22:05   Hersteller      Fronius
     2021-05-19 09:22:05   StorCtl_Mod     3
     2021-05-19 09:22:05   Temperatur      52.93
     2021-05-16 15:58:30   state           opened
   REMEMBER:
     lid        1
     lname      Modbus_Fronius
     lrecv      1621408925.98864
     lsend      1621408925.98602
   defptr:
     Modbus_Fronius 1
   gotReadings:
     BYD_max_charge 20.00
Attributes:
   DbLogExclude .*
   obj-h40004-len 8
   obj-h40004-poll 900
   obj-h40004-reading Hersteller
   obj-h40004-unpack A*
   obj-h40109-format %.2f
   obj-h40109-len 2
   obj-h40109-poll 300
   obj-h40109-reading Temperatur
   obj-h40109-unpack f>
   obj-h40358-poll 60
   obj-h40358-reading StorCtl_Mod
   obj-h40358-set 1
   obj-h40360-expr $val/100
   obj-h40360-format %.2f
   obj-h40360-poll 60
   obj-h40360-reading BYD_min_Reserve
   obj-h40360-set 1
   obj-h40360-setexpr $val * 100
   obj-h40361-expr $val/100
   obj-h40361-format %.2f
   obj-h40361-poll 60
   obj-h40361-reading BYD_SoC
   obj-h40365-expr $val/100
   obj-h40365-format %.2f
   obj-h40365-poll 60
   obj-h40365-reading BYD_max_discharge
   obj-h40365-set 1
   obj-h40365-setexpr $val * 100
   obj-h40366-expr $val/100
   obj-h40366-format %.2f
   obj-h40366-poll 60
   obj-h40366-reading BYD_max_charge
   obj-h40366-set 1
   obj-h40366-setexpr $val * 100
   room       PV-Anlage,Verbrauch
   stateFormat SOC:BYD_SoC | Reserve:BYD_min_Reserve<br>
Begrenzung Entl.:BYD_max_discharge | Lad.:BYD_max_charge<br>
Temp: Temperatur °C
   verbose    1


FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

yoda_gh

#9
Inzwischen lese ich auch das Smart Meter TS65-A3 am Einspeisepunkt über Modbus, indirekt über TCP über den Gen24. Leider funktionieren die Summenzähler pro Phase nicht, da bekomme ich immer nur undefinierte Werte zurück, sonst aber alle Details, die man so möchte:


define gen24_meter ModbusAttr 200 120 192.168.0.123:502 TCP
attr gen24_meter dev-h-combine 125
attr gen24_meter dev-h-defFormat %.1f
attr gen24_meter dev-h-defLen 2
attr gen24_meter dev-h-defPoll 1
attr gen24_meter dev-h-defUnpack f>
attr gen24_meter event-min-interval Power[ABC].*:7200,Energy.*:7200
attr gen24_meter event-on-change-reading Power[ABC].*:1,Energy.*:0.1
attr gen24_meter obj-h40081-reading VoltageA
attr gen24_meter obj-h40083-reading VoltageB
attr gen24_meter obj-h40085-reading VoltageC
attr gen24_meter obj-h40095-reading Frequency
attr gen24_meter obj-h40097-reading Power
attr gen24_meter obj-h40099-reading PowerA
attr gen24_meter obj-h40101-reading PowerB
attr gen24_meter obj-h40103-reading PowerC
attr gen24_meter obj-h40123-reading PfA
attr gen24_meter obj-h40125-reading PfB
attr gen24_meter obj-h40127-reading PfC
attr gen24_meter obj-h40129-expr $val / 1000
attr gen24_meter obj-h40129-reading EnergyExported
attr gen24_meter obj-h40137-expr $val / 1000
attr gen24_meter obj-h40137-reading EnergyImported
attr gen24_meter room Zähler
attr gen24_meter stateFormat PA: PowerA PB: PowerB PC: PowerC
attr gen24_meter userReadings PowerA_oPV {\
  ReadingsVal($name,"PowerA",0) + ReadingsVal("gen24","ACPower",0)/3 },\
PowerB_oPV {\
  ReadingsVal($name,"PowerB",0) + ReadingsVal("gen24","ACPower",0)/3 },\
PowerC_oPV {\
  ReadingsVal($name,"PowerC",0) + ReadingsVal("gen24","ACPower",0)/3 }


Damit die userReadings besser funktionieren, nutze ich zusätzlich ein at-Device, dass möglichst zeitgleich das Lesen der Werte von "gen24_meter" und "gen24" (Definition siehe oben) anstößt:


defmod atMeterRead at +*00:02:00 set gen24 reread ;; sleep 5;; set gen24_meter reread


Wenn man das Lesen mit dem at-Device anstößt, ist das Lese-Intervall in den ModbusAttr-Definitionen jeweils auf 0 zu setzen (also die 120 im define für gen24 und gen24_meter jeweils durch eine 0 ersetzen),

sn0000py

Eine Frage funktioniert bei euch das noch?

Habe gerade den Modbus Atrr neu angelegt - ich möchte eben den -BYD Speicher steuern damit.

BYD_max_discharge
0.00 %
2022-01-09 16:44:54
BYD_min_Reserve
0.00 %
2022-01-09 16:45:04


und wenn ich den BYD_min_Reserve setze dann ändert isch nichts, auch wenn ich ein reread mache ändert sich an den readings nichts.

Ich möchte eben gerne zeitgesteuert und / oder prognose gesteuert den PV Speicher mal mehr mal weniger voll lassen über nacht.

sky64

Bei mir funktioniert es nach wie vor, aktuelle Gen24-Firmware.
Einstellungen wie oben.

Hat es bei dir schon funktioniert?
Wenn nicht, ist im WR Steuerung per Modbus freigegeben?
StorCtl_Mod auf 3?

FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast

sn0000py

ah okay, jetztt gehts
ich hatte noch diese attr drinnen
attr gen24 dev-h-combine 125
attr gen24 dev-h-defFormat %.1f
attr gen24 dev-h-defLen 2
attr gen24 dev-h-defPoll 1
attr gen24 dev-h-defUnpack f>

die gelöscht und nun funkt es mal
danke

sn0000py

Eine Frage noch, gibt es eigentlich auch den Wert mit dem definiert wird mit wieviel Watt der Speicher aus demm Netz gealden wird?

Im Moment wird ja mit 500 Watt aus dem Netz geladen (von der PV mit nicht ganz 6kW) würde gerne einstellen das auch aus den Netz mit 6kW geladen werden kann (in der Nacht zB)

sky64

Man kann wohl den Speicher dazu bringen aus dem Netz zu laden.
Hab ich aber noch nicht versucht. Die 500W-Ladungen sind ja "nur" Zwangsladungen.
Das geht wohl wenn man die LadeLeistungsBegrenzung negativ setzt.
Aber wie gesagt ohne Gewähr.

Im WR kann/muss man sicher noch Laden aus dem Netz aktivieren.
Und zum dritten, darfst du das? Ich musste beim Netzanschlussantrag angeben ob ich aus dem Netz lade.
Macht es auch Sinn aus dem Netz zu laden, sprich hast du einen variablen Tarif und ist der so niedrig das er die Speicherverluste ausgleicht?
FHEM auf Ubuntu-VM (VMware), Heizung FHEM auf Raspi
Module: Volkszähler, ESPEASY, RFXtrx433, LaCrosseGateway, jeeLink, EMT7110, IRBlaster, LuftdatenInfo, MQTT, ESPDuino, Shelly, Abfallanzeige, (OilFox), Weatherman,  KeyValueProtocol
Modbus für Fronius Gen24-PV incl. ForeCast mit DWD und SolCast