Victron Venus GX über MQTT auslesen

Begonnen von andremar6918, 14 Oktober 2022, 16:29:11

Vorheriges Thema - Nächstes Thema

goalv

[..]

Jetzt suche ich im Moment nur noch den passenden Eintrag um den Inverter abzuschalten. -> siehe Screenshot (ESS-Settings)

Die Leistung auf Null setzen geht ja mit
set Victron_Client publish W/--- hier Deine VRM-ID ---/settings/0/Settings/CGwacs/MaxDischargePower {\"value\":0}

hab allerdings bis jetzt nur in der Victron-Doku gesucht und gesehen, dass es per Modbus auf jeden Fall geht. Vielleicht liest ja hier Jemand mit, der es per MQTT schon umgesetzt hat ...

Liebe Grüße,
Oli
[/quote]

Wahrscheinlich hast Du schon eine Lösung gefunden. Falls nicht, versuch doch mal eine setList mit folgenden Einträgen, die den "Mode" des Multiplus setzen:

off W/<vrm_ID>/vebus/288/Mode {"value":4}
on W/<vrm_ID>/vebus/288/Mode {"value":3}
inv W/<vrm_ID>/vebus/288/Mode {"value":2}
chg W/<vrm_ID>/vebus/288/Mode {"value":1}
Mode W/<vrm_ID>/vebus/288/Mode {"value":$EVTPART1}
GridCurrentLimit W/<vrm_ID>/vebus/288/Ac/In/1/CurrentLimit {"value":$EVTPART1}
MinSOC W/<vrm_ID>/settings/0/Settings/CGwacs/BatteryLife/MinimumSocLimit {"value":$EVTPART1}
Relay0 W/<vrm_ID>/system/0/Relay/0/State:.* {"value":$EVTPART1}
Relay1 W/<vrm_ID>/system/0/Relay/1/State:.* {"value":$EVTPART1}

viel Erfolg!

kask

Hallo,
ich versuche meinen Victron auch über MQTT auszulesen. Aber ich bekomme keine values rein.

lediglich:
define MQTT2_venus MQTT2_DEVICE venus
attr MQTT2_venus readingList venus:N/xxxxxxxxxxxx/keepalive:.* { json2nameValue($EVENT, 'keepalive_', $JSONMAP) }\
venus:N/xxxxxxxxxxxx/system/0/Serial:.* { json2nameValue($EVENT, 'Serial_', $JSONMAP) }
attr MQTT2_venus room MQTT2_DEVICE,Solar,Strom
#   CFGFN     
#   CID        venus
#   DEF        venus
#   FUUID      64207dce-f33f-3c15-9af4-274984bcb22a2b57
#   IODev      venus
#   NAME       MQTT2_venus
#   NR         1681
#   STATE      ???
#   TYPE       MQTT2_DEVICE
#   eventCount 2
#   Helper:
#     DBLOG:
#       Serial_value:
#         logdb:
#           TIME       1679850958.23266
#           VALUE      xxxxxxxxxxxx
#       keepalive_value:
#         logdb:
#           TIME       1679850958.20996
#           VALUE      1
#   READINGS:
#     2023-03-26 19:15:58   IODev           venus
#     2023-03-26 19:15:58   Serial_value    xxxxxxxxxxxx
#     2023-03-26 19:15:58   keepalive_value 1
#
setstate MQTT2_venus 2023-03-26 19:15:58 IODev venus
setstate MQTT2_venus 2023-03-26 19:15:58 Serial_value xxxxxxxxxxxx
setstate MQTT2_venus 2023-03-26 19:15:58 keepalive_value 1


xxxxxxxxxxxx ist gleich der ID. Keine Ahnung ob man diese publishe sollte/kann.

Habe mich an https://wiki.fhem.de/wiki/Victron gehalten und auch das hier gepostet umzusetzen/testen.
Aber irgend etwas schein ich nicht gemacht zu haben.

Kann einer mal "eben" alle seine benötigten raw definitions posten das ich vergleichen kann.

Schlafsack

Hallo kask,

bei mir schicke ich den Keepalive jede Minute mit der SerialNumber
Wenn du auf Nummer sicher gehen willst, schicke ihn aller 50s

Keepalive
defmod keepalive DOIF {\
  [+:01];;\
    {fhem("set CerboClient publish R/xxxxxxxxxxxx/system/0/Serial xxxxxxxxxxxx")}\
}


CerboClient
defmod CerboClient MQTT2_CLIENT 192.168.1.52:1883

Victron Gerät
defmod Victron MQTT2_DEVICE CerboClient
attr Victron readingList CerboClient:N/xxxxxxxxxxxx/system/0/Dc/Battery/Power:.* { {"Batterie_Leistung"=>($EVENT =~ /..value...([-]?[\d]+)./g)} }\
CerboClient:N/xxxxxxxxxxxx/system/0/Dc/Battery/Soc:.* { {"Batterie_Ladezustand"=>($EVENT =~ /..value...([\d]+)./g)} }\
CerboClient:N/xxxxxxxxxxxx/grid/30/Ac/Power:.* { {"Zaehler_Netzleistung"=>sprintf("%.0f",$EVENT =~ /..value...([-]?[\d]+\.[\d]+)./g)} }

Gruß Schlafsack

kask

Danke, das war es.
Das keepalive muss geschickt werden, und das tat es nicht.
Jetzt geht es!

sukram

#19
Zitat von: Beta-User am 06 Januar 2023, 10:31:15Zu den regexen bzw. den Log-Eintägen:

Hallo,

Ich habe gar nicht mitbekommen, dass es Antworten gab  ::)

Danke für deinen Input, das werde ich die Tage mal ausprobieren!

Zitat von: Beta-User am 06 Januar 2023, 10:31:15Nachtrag noch: Das at könnte man noch ersetzen durch einen periodicCmd im MQTT2_DEVICE, es müßte dann halt ein entsprechender setter oder getter angelegt werden.
Kann man leider nicht. Also prinzipiell ja, aber praktisch nein. Der Timeout bei Venus GX ist fest auf 60 Sekunden, der periodicCMD kann aber nur minimal im Minutentakt. d.h. ich laufe jedesmal bei etwas mehr Last auf dem System Gefahr, dass die Gegenseite "den Hahn zudreht" und keine Daten mehr liefert.

MfG

Huabafranze

Hallo zusammen,
ich habe meinen Victron SMartSolar MPPT 100/30 nach dieser Anleitung in FHEM eingebunden:
https://wiki.fhem.de/wiki/Victron
Ich bekomme auch hunderte von readings. Ich würde gerne folgendes realisieren:
Ich möchte vom Solarregler wissen bzw. auslesen ob er im Zustand "Bulk", "Absorption" oder "Float" ist. Je nach zustand möchte ich dann einen Schaltvorgang auslösen. Das reading müsste also ein "state" ausgeben. Wie ich den Schaltbefehl dann mache weis ich, ich habe nur keine Ahnung wie ich den state für die 3 Ladezustände bekommen.
Könnte mir das jemand Anfängerfreundlich erklären?

Viele Grüße, Franz

Schlafsack

Hallo Huabafranze

du brauchst ein Reading glaube mit N/Serialnumber/solarcharger/279/MppOperationMode vom Victron. Da müsste eine Zahl rauskommen. Bei deinem Doif kannst du doch einfach sagen: wenn Zahl 2 (Bulk) --> mache was und wenn Zahl 3 --> mache was Anderes


Gruß
 

Huabafranze

Zitat von: Schlafsack am 25 Februar 2024, 14:58:52Hallo Huabafranze

du brauchst ein Reading glaube mit N/Serialnumber/solarcharger/279/MppOperationMode vom Victron. Da müsste eine Zahl rauskommen. Bei deinem Doif kannst du doch einfach sagen: wenn Zahl 2 (Bulk) --> mache was und wenn Zahl 3 --> mache was Anderes

Gruß
 

Hallo Schlafsack,
dieses Reading MppOperationMode habe ich, simmt aber nicht mit den Zahlen überein die von Victron angegeben werden  (0=Aus/ 2=Fehler/ 3=Bulk/ 4=Absorption/ 5=Float).
Außerdem ändert sich die Zahl nicht immer mit dem Ladezustand. Hast du das so eingerichtet?

Gruß Franz

Huabafranze

Habe es nun super hinbekommen. Bin fast zufrieden. Habe jetzt noch mitbekommen, dass ich ja dieses keepalive senden muss, da ich sonst nicht regelmäßig Daten bekomme.
Dazu ein paar Fragen. Ich habe
   
defmod di_MPPT_keepalive DOIF {[+30]; {fhem("set MQTT_MPPT1 publish R/XXXXXXXXXX/system/0/Serial XXXXXXXXX")}}
im MQTT2_DEVICE angelegt. Es soll also alle 30 Sekunden updaten. (MQTT_MPPT1 ist das DEVICE)
1. Stimmt der Befehl?
2. Ist das defmod im MQTT2_DEVICE oder MQTT2_CLIENT anzulegen?
3. Brauche ich auch das Reading für das keepalive in der readingList?
Gruß Franz

Schlafsack

Hallo Huabafranze,

- Der Befehl stimmt
- Du musst den client im Doif nehmen
- kein Reading anlegen, nur das Doif und los geht's


Gruß Schlafsack

Huabafranze

#25
Danke schon mal.
Er hat aber immer einen Syntax error.

#  DEF        {[+3]; {fhem("set venus publish R/Xxxxxxxxxxx/system/0/Serial Xxxxxxxxxxx")}}

block_01

condition c01: syntax error, line 1, at EOF

mode

enabled

state

initialized

timer_01_c01

28.02.2024 22:56:46


EDIT: der Fehler scheint weg zu sein. Ich habe das Device einfach noch mal enabled und jetzt scheint es zu funktionieren.