Modul für Victron BMV600 / BMV602 / BMV700 / BMV702 / MPPT / Inverter

Begonnen von Askie, 25 Januar 2016, 11:19:14

Vorheriges Thema - Nächstes Thema

Askie

Moin!

Die Einbindung eines (relativ kostengünstigen) Victron Batteriemonitor BMV600 / BMV602 via RS232 wurde von Privat58 und mir gelöst.
Zusammen haben wir das Modul 00_BMV600.pm geschrieben (siehe Anhang).
Das Modul stellt alle Daten vom Batteriemonitor zur Verfügung (Spannung, (Lade-)Strom, Restlaufzeit, und eine Menge weiterer Daten).

Ist bei mir derzeit auf einem Pi A+ zusammen mit einem BMV600 und einer Insel-Anlage in Betrieb und läuft ohne Probleme.
Ich hoffe es hilft mal jemandem..
******************************************************************************************************
EDIT: 08.07.2018
Modul umbenannt und auf das VE.Direkt Text Protokoll erweitert.
Damit sollen nicht nur die BMV60x und BMV700x sondern auch eine ganze Reihe Victron MPPT und Inverter unterstützt werden.

EDIT 10.07.2018:
Neue DateiVersion von 00_VEDirect.pm.

EDIT 15.05.2019:
kleines Update und Fehlerkorrektur bei Leistung Lastausgang (MPPT)

Das Modul sollte jetzt vollständig funktionieren (incl. Checksumme)

define <Name> VEDirect /dev/ttyUSB0@19200
define <Name> VEDirect /dev/serial0@19200

******************************************************************************************************
EDIT: 03.10.2019
Komplett überarbeitet
Das neue Modul liegt jetzt in GIT  --> sie Antwort #54

******************************************************************************************************


Gruß

Askie
3x FHEM, CUL(Schaltsteckdosen), Jeelink (8 *Temp.-/Hygro, Z-Wave (Thermostat, Fenster- und Multisensoren, 2 Dimmer Steckdosen, Schaltaktor(Lüfter)), 4 Squeezeboxen, FritzBox (Schaltsteckdose f. Kühlschranküberwachung, Heizungssteuerung),  Batteriemonitor (BMV600), MPPT75/15, Phönix Inverter ...

mmatt

Super  :)

Denkst Du, das könnte mit den neueren BMV 700 und 702 auch funktionieren?
Müsste man glatt mal das Protokoll vergleichen.

Danke für das Modul
Gruesse Martin



- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

PV-Solar

Hallo,

ich würde das Modul gern für meinen BMV-700 nutzen. Das Device ist angelegt, Raw_Readings hatte ich auf ON gestellt. Ich habe leider nur genau einmal Daten bekommen. State ist "opened". Wo / wie kann ich das Intervall zum Auslesen festlegen?

Gruß
PV-Solar

Askie

Hallo PV-Solar,
Es gibt leider keinen Intervall zum abfragen. Das Modul wertet lediglich die 1 mal pro Sekunde empfangen Daten vom Bmv600 aus. Ob der 700er auch regelmäßig Daten sendet weiss ich leider nicht. Ich empfehle dir das mal zu testen in dem du einfach mal auf der seriellen Konsole guckst was kommt...
VG
Askie
3x FHEM, CUL(Schaltsteckdosen), Jeelink (8 *Temp.-/Hygro, Z-Wave (Thermostat, Fenster- und Multisensoren, 2 Dimmer Steckdosen, Schaltaktor(Lüfter)), 4 Squeezeboxen, FritzBox (Schaltsteckdose f. Kühlschranküberwachung, Heizungssteuerung),  Batteriemonitor (BMV600), MPPT75/15, Phönix Inverter ...

PV-Solar

Der BMV-700 sendet auch permanent. Ich habe es mit minicom sowie 2 anderen Tools geprüft. Das Modul selbst hat die Schnittstelle auf jeden Fall geöffnet, da ich nur dann lesbare Ausgaben von der Schnittstelle erhalte, wenn FHEM bzw. das Modul nicht läuft. Die Werte vom BMV-700 sind im Wesentlichen die gleichen wie beim BMV-600, es sendet auch zusätzlich den Wert für die aktuelle Leistung.

Nur leider ändern sich die Werte bei den Readings überhaupt nicht.

Gruß
PV-solar

Askie

hm.. dann scheint es ein Problem mit der Auswertung der Daten zu geben. Kannst du mit mal einen Auszug schicken was der BMV700 sendet?
Ich gucke ,mir das gerne mal an...(kann aber leider etwas dauern - hab gerade nicht so viel Zeit wie ich gerne zum Basteln hätte  :-[ )
3x FHEM, CUL(Schaltsteckdosen), Jeelink (8 *Temp.-/Hygro, Z-Wave (Thermostat, Fenster- und Multisensoren, 2 Dimmer Steckdosen, Schaltaktor(Lüfter)), 4 Squeezeboxen, FritzBox (Schaltsteckdose f. Kühlschranküberwachung, Heizungssteuerung),  Batteriemonitor (BMV600), MPPT75/15, Phönix Inverter ...

PV-Solar

#6
Ich habe mir mal die Rechte der Datei angesehen - User fhem, Gruppe dialout - sollte also passen.
Im fhem.log beim Starten habe ich nur 2 Einträge:
2017.02.18 22:38:53 3: Opening BMV700 device /dev/ttyUSB0
2017.02.18 22:38:53 3: BMV700 device opened


Hier mal ein Mitschnitt aus minicom:
Checksum Y
PID 0x203
V 25786
I -416
P -11
CE -138045
SOC 338
TTG 0
Alarm OFF
Relay ON
AR 0
BMV 700
FW 0307
Checksum -
H1 -177771
H2 -143550
H3 -129812
H4 6
H5 0
H6 -1706024
H7 24286
H8 28945
H9 280177
H10 13
H11 0
H12 0
H17 4312
H18 4655
Checksum W
PID 0x203
V 25787
I -414
P -11
CE -138046
SOC 338
TTG 0
Alarm OFF
Relay ON
AR 0
BMV 700
FW 0307
Checksum -
H1 -177771
H2 -143550
H3 -129812
H4 6
H5 0
H6 -1706024
H7 24286
H8 28945
H9 280179
H10 13
H11 0
H12 0
H17 4312
H18 4655
Checksum U

Soviel mehr als beim 600er ist das ja nicht.

Meine Definition
raw definition:
defmod BMV700 BMV600 /dev/ttyUSB0
attr BMV700 Raw_Readings On
attr BMV700 room Werkstatt

setstate BMV700 opened
setstate BMV700 2017-02-18 23:04:54 state opened


Es wäre schön, wenn ich irgendwo sehen kann, dass das Modul gerade ausgeführt wird bzw. wurde (timestamp).
Denn derzeit weiß ich nicht, ob das Modul überhaupt läuft.

Gruß
PV-Solar

Nachtrag:
Die zusätzlichen Werte des BMV-700 würde ich mir zutrauen in das Modul einzupflegen.

Askie

#7
Hm. Sieht nicht so viel anders aus... müsste -bis auf die neuen Werte- eigentlich gehen. Wenn du gucken möchtest ob das Modul funktioniert. bau vielleicht mal ein paar log3 ausdrücke ein...

Nachtrag: Stell mal bitte auf verbose 5 und guck mal ob Daten gelesen werden...
3x FHEM, CUL(Schaltsteckdosen), Jeelink (8 *Temp.-/Hygro, Z-Wave (Thermostat, Fenster- und Multisensoren, 2 Dimmer Steckdosen, Schaltaktor(Lüfter)), 4 Squeezeboxen, FritzBox (Schaltsteckdose f. Kühlschranküberwachung, Heizungssteuerung),  Batteriemonitor (BMV600), MPPT75/15, Phönix Inverter ...

PV-Solar

#8
Ich habe mal ein Log3 direkt nach
return "" if ( !defined($buf) );
eingefügt.

Das was ich dann im Log sehe lässt mich vermuten, dass eventuell die Schnittstelle mit der falschen Geschwindigkeit geöffnet wurde. Laut Victron 19200. Mein minicom-Aufruf lautet ja auch
minicom -b 19200 -D /dev/ttyUSB0

Kann ich die 19200 irgendwo einstellen?

Gruß
PV-Solar

Nachtrag:
Habe in DevIO.pm geschaut und dann die Definition angepasst
define BMV700 BMV600 /dev/ttyUSB0@19200
Jetzt funktioniert es.  :)
Als nächstes sind die neuen Werte dran...

Askie

Super...
Bitte dann auch wieder hier posten - es gibt bestimmt noch andere, die daran interessiert sind. :D
3x FHEM, CUL(Schaltsteckdosen), Jeelink (8 *Temp.-/Hygro, Z-Wave (Thermostat, Fenster- und Multisensoren, 2 Dimmer Steckdosen, Schaltaktor(Lüfter)), 4 Squeezeboxen, FritzBox (Schaltsteckdose f. Kühlschranküberwachung, Heizungssteuerung),  Batteriemonitor (BMV600), MPPT75/15, Phönix Inverter ...

ducati748sp

hallo zusammen,

seit ein paar tagen habe ich einen victron mppt 75/15 solarladeregler. über das extra bestellte ve.direct kabel kann ich am usb port des raspi (/dev/ttyUSB0) die seriellen daten empfangen. jede sekunde kommt folgendes datagramm:

PID     0xA042
FW      123
SER#    HQ1644SZ6Z9
V       12300
I       240
VPV     22850
PPV     8
CS      3
ERR     0
LOAD    ON
IL      400
H19     40
H20     15
H21     71
H22     13
H23     95
HSDS    3
Checksum        ,

laut victron dokumentation bedeuten die werte

PID     0xA042 | ProductID: BlueSolar MPPT 75/15
FW      123 | firmware version: 1.23
SER#    HQ1644SZ6Z9 | seriennummer: HQ1644SZ6Z9
V       12300 | Batteriespannung: 12,3V
I       270 | Batteriestrom: 270mA
VPV     21850 | Panelspannung: 21,850V
PPV     8 | Panelleistung: 8W
CS      3 | State of operation: 0 = off; 2 = Fault; 3 = Bulk, 4 = Absorption; 5 = Float
ERR     0 | Fehler: 0
LOAD    ON | Lastzustand: ON
IL      400 | Laststrom: 400mA
H19     40 | Gesamtertrag in 0.01kWh (10Wh) also 400Wh
H20     15 | Tagesertrag in 0.01kWh
H21     71 | Max. Tagessleistung:  71W
H22     13 | Ertrag gestern in 0.01kWh
H23     95 | Max. Tagesleistung gestern: 95Wh
HSDS    3 | Day sequence number 0...364
Checksum        * | Checksumme


wäre es euch möglich, euer modul dahingehend zu erweitern? meine perl kenntnisse reichen dafür nicht annähenrd aus.

schöne grüße,
frank

Askie

Moin Frank...
Das sollte eigentlich kein Problem sein. Versuch mal deinen laderegler mit dem bestehenden Modul einzubinden. Eigentlich sollten dann schon ein paar Daten kommen. Die fehlenden Daten müsste man dann noch nachziehen - was ich leider kurzfristig nicht schaffen werde, weil ich privat zu viel um die Ohren habe. Wenn du aber etwas Geduld hast....
VG
Askie..
3x FHEM, CUL(Schaltsteckdosen), Jeelink (8 *Temp.-/Hygro, Z-Wave (Thermostat, Fenster- und Multisensoren, 2 Dimmer Steckdosen, Schaltaktor(Lüfter)), 4 Squeezeboxen, FritzBox (Schaltsteckdose f. Kühlschranküberwachung, Heizungssteuerung),  Batteriemonitor (BMV600), MPPT75/15, Phönix Inverter ...

ducati748sp

hi askie,

danke für die schnelle antwort und den tip. ich habe mir das modul heruntergeladen, dann "define BMV700 BMV600 /dev/ttyUSB0@19200" eingegeben und es kommt tatsächlich schon was zurück.

DeviceOverview
BMV700
opened
Internals
CFGFN
DEF
/dev/ttyUSB0@19200
DeviceName
/dev/ttyUSB0@19200
FD
10
NAME
BMV700
NR
26
PARTIAL
STATE
opened
TYPE
BMV600
Readings
Firmware
123
2017-05-23 19:41:39
Power
-2.89
2017-05-23 19:41:39
Spannung_V
13.15
2017-05-23 19:41:39
Strom_A
-0.22
2017-05-23 19:41:39
state
opened
2017-05-23 19:36:31


und sei beruhigt, ich habe sehr viel geduld. weiß ja wie das ist, wenn man solche projekte nebenbei macht.

grüße,
frank

ducati748sp

hallo askie,

nachdem ich mich nun doch mal rangetraut habe und einfach mal mit copy&paste deinen code erweitert habe, konnte ich alle benötigten werte ermitteln.
hier meine änderungen, sie beginnen da, wo die trennlienien mit "fju" markiert sind. war einfacher, als ich dachte.

  #***************************************************************************************************************
      if($e_[0] eq "I")
{
if ($RawReading eq "On")
        {
          readingsBulkUpdate($hash,"_I",($e_[1] ));      # aktueller Strom in mA
        }
        readingsBulkUpdate($hash,"Batteriestrom in A",sprintf("%.2f",$e_[1] / 1000)); # aktueller Strom in A
        $Power = ($Power * $e_[1]) / 1000;           #für Leistungsberechnung als Reading
}
      #***************************************************************************************************************
  #*************** fju ******************************************************************************************
      if($e_[0] eq "VPV")  # mV Panelspannung in mV
{
if ($RawReading eq "On")
        {
          readingsBulkUpdate($hash,"_VPV",($e_[1] ));     
        }
        readingsBulkUpdate($hash,"Panelspannung",sprintf("%.2f",$e_[1] / 1000));
}
  #*************** fju ******************************************************************************************
      if($e_[0] eq "PPV")  # Panelleistung in W
{
if ($RawReading eq "On")
        {
          readingsBulkUpdate($hash,"_PPV",($e_[1] ));     
        }
        readingsBulkUpdate($hash,"Panelleistung",sprintf("%.2f",$e_[1]));
}
  #*************** fju ******************************************************************************************
      if($e_[0] eq "IL")  # Laststrom in A
{
if ($RawReading eq "On")
        {
          readingsBulkUpdate($hash,"_IL",($e_[1] ));     
        }
        readingsBulkUpdate($hash,"Laststrom in A",sprintf("%.2f",$e_[1] / 1000));
}
      #*************** fju ******************************************************************************************
      if($e_[0] eq "H19")    # Gesamtertrag in 0.01kWh (1/10Wh)
{
if ($RawReading eq "On")
        {
          readingsBulkUpdate($hash,"_H19",($e_[1] ));     
        }
        readingsBulkUpdate($hash,"Gesamtertrag in Wh",sprintf("%.2f",$e_[1] * 10));
}
      #*************** fju ******************************************************************************************
      if($e_[0] eq "H20")    # Tagesertrag in 0.01kWh (1/10Wh)
{
if ($RawReading eq "On")
        {
          readingsBulkUpdate($hash,"_H20",($e_[1] ));     
        }
        readingsBulkUpdate($hash,"Tagesertrag in Wh",sprintf("%.2f",$e_[1] * 10));
}
      #*************** fju ******************************************************************************************
      if($e_[0] eq "H21")    # Max. TagesPVleistung in W
{
if ($RawReading eq "On")
        {
          readingsBulkUpdate($hash,"_H21",($e_[1] ));     
        }
        readingsBulkUpdate($hash,"Max. TagesPVleistung in W",sprintf("%.2f",$e_[1] ));
}
      #*************** fju ******************************************************************************************
      if($e_[0] eq "H22")    # Ertrag gestern in 0.01kWh
{
if ($RawReading eq "On")
        {
          readingsBulkUpdate($hash,"_H22",($e_[1] ));     
        }
        readingsBulkUpdate($hash,"Ertrag gestern in Wh",sprintf("%.2f",$e_[1] * 10));
}
     #*************** fju ******************************************************************************************
      if($e_[0] eq "H23")    # Max. PVleistung gestern
{
if ($RawReading eq "On")
        {
          readingsBulkUpdate($hash,"_H23",($e_[1] ));     
        }
        readingsBulkUpdate($hash,"Max. TagesPVleistung gestern in W",sprintf("%.2f",$e_[1] ));
}


      #***************************************************************************************************************


grüße,
frank

Bob19

Hallo Gemeinde,
ich bin gerade seit 2 Wochen ein Neuling was Raspberry Pi und FHEM angeht, und habe schon ein Paar Sachen hier über das Forum gelesen.

Ich betreibe mein Raspberry PI 3 mit FHEM / Pilight / Homebridge und das klappt wunderbar.
Habe meine Sachen von Intertechno damit am laufen.

nun zu mein Vorhaben:

Ich habe im Garten eine Photovoltaik Anlage mit Victron BMV 700 und ein Bluetooth dongel. Was ich von zu Hause auslesen kann, weil die Entfernung sehr gering ist.
Mein Raspberry PI3 hat ja auch Bluetooth on Board.

Kann man den BMV 700 via Bluetooth am Raspberry PI auslesen und mir wenigstens die Batterieanzeige in % auf Apple Home anzeigen zu Lassen? Oder geht das nur über USB?

Danke im Voraus