Projekt 18S DIY - MP2 - 8,2kWp

Hallo Zusammen!
Meine 8,2kWp PV Anlage läuft mit ca. 10000kWh im Jahr seit 2016 sehr zufriedenstellend aber leider machten für mich kommerzielle Heimspeicher rein finanziell keinen Sinn.
Im März habe ich dann ein Video von Andreas über seinen Speicher gesehen und ab da hatte mich das "DIY Virus" im Griff... ich habe Stunden gelesen und gerechnet.
Raus gekommen sind nun folgende Komponenten:
- 18x EVE LF280K
- Victron Multiplus II 48/5000/70
- Victron MK3-USB Interface
- JKBMS JK-B2A24S20P
- USB/RS232 Wandler
- RaspberryPi mit Venus OS
- ESP8266 (Wemos D1) mit DS18B20 Temperatursensoren
- Siemens NH-Trenner mit 160A NH-Sicherung
...
Diverse Stromzähler habe ich bereits verbaut und mittels ioBroker ausgelesen, demnach wollte ich natürlich auch keinen zusätzlichen Zähler hierfür.
Der "Grid" Zähler wird also über MQTT, durch ein angepasstes Python Script an Venus OS durchgereicht.
...
Am RaspberryPi mit Venus OS hängt nun der Fronius WR (Modbus TCP), der MP2 übers MK3 Interface und das JKBMS über den USB-RS232 Wandler um dem dbus-serialbattery Treiber.
...
Schöne Grüße
Eloeee
Hallo Eloeee,

danke für die ausführliche Schilderung und die regelmäßigen Updates, z. B. mit den Federn.
Ich bin jetzt schon einige Tage am Einlesen im Forum hier, hab aber noch mehr Lücken als Übersicht :angel:
Ich habe eine 4,7 kWp Anlage mit SMA Wechselrichter STP 5000TL‐20, ohne Speicher, Überschusseinspeisung.

Deine Anlage kommt der Erweiterung, die mir vorschwebt sehr nahe, könnte meine Referenz werden.

Habe wegen meiner "Lücken" ein paar Fragen, vielleicht kannst Du mir helfen, ich bitte um Nachsicht, wenn die allzu primitiv sind.

Der MP2 ist also so konfiguriert (bzw. konfigurierbar), dass er die Batterie aus dem AC-Netz lädt ?
Für Laden aus und Einspeisen ins Netz hast Du nur den Anschluß AC-IN benutzt ?
Oder hast Du auch Anschluß AC OUT 1 verwendet ?

Um zu sehen ob die PV Anlage mehr liefert als Dein Haus verbraucht (und also die Batterie geladen werden kann) schaut der MP2 denke ich auf das was Du "Grid" Zähler nennst. Mein EHZ Grid Zähler ist auch über einen IR Lesekopf an FHEM angebunden, die aktuelle Wirkleistung steht also in FHEM zur Verfügung, ich würde auch sehr gerne vermeiden einen 2. Zähler nur für den MP2 zu setzen. Wie genaut schaufelt Dein python Skript die Daten an den MP2 ? Ich nehme an Du schickst sie an das raspi mit VenusOS - aber wie dockst Du da an ? Und wie schnell aktualisierst Du die Daten ? Ich taste im Moment mit 15s ab, reicht das ? Ich könnte schon schneller, denke aber so bei 5s wäre das Limit.

Das Entladen der Batterie funktioniert genau so ? Der MP2 schaut auf den Ladezustand der Batterie (was ist maßgeblich, eine Spannungsuntergrenze oder ein SOC Wert vom JKBMS ?) und versucht die Leistungsentnahme aus dem Netz auf 0 zu regeln, so lange die Batterie noch entladen werden darf, richtig ?

Ich habe verstanden Dein VenusOS redet auch mit Deinem Fronius PV WR, per Modbus TCP.
Mein SMA WR spricht auch Modbus TCP, jedenfalls versteht er sich darüber mit meiner OpenWallbox.
Die Frage ist, nutzt bzw. braucht der MP2 die Daten vom Wechselrichter auch, oder genügen die Daten vom Grid Zähler ?
D. h. hast Du den Fronius nur zwecks Datenvisualsierung ans VenusOS angebunden, oder ist das zwingend nötig, damit der MP2 richtig arbeitet ?

Wenn ich dereinst mehr PV Module verbauen wollte (auf meinem Dach ist noch Platz für 2 Strings, zusammen vielleicht 4 kWp), dann könnte ich diese weiteren Module entweder über einen weiteren WR (z. B. SMA) mit der Anlage AC-seitig koppeln ? Oder besser über die Victron MPPT Laderegler DC-seitig mit der Batterie ? Wie hattest Du das vor ?

Und noch eine letzte Frage: Ich verstehe das so, dass - in Deiner Konfiguration - der MP2 niemals (saldierend über die 3 Phasen) ins Netz einspeist. Sondern eben die Batterie lädt, solange die PV mehr liefert als das Haus verbraucht bzw. sie entlädt, solange das Haus Strom aufnimmt und sie noch nicht leer ist. Vermutlich heißt das Nulleinspeisung. Muss das dann trotzdem der Netzbetreiber wissen ? Da der MP2 nur einphasig ist kommt es ja zu einer Schieflast.

Danke !

Hi, schön das dir das Projekt gefällt, ich versuche mal deine Fragen zu beantworten...

- MP2 hängt aktuell nur am AC-IN da ich bisher noch keine Notstromfähigkeit nutze, kommt aber noch.
- Grid Zähler (Siemens PAC3200) hängt quasi vor dem EVU Zähler, könntest du so auch mit deinem EHZ Zähler mit IR Lesekopf abbilden. Wenn du die Werte schon im FHEM hast umso besser, musst sie nur auf einem MQTT Server bereitstellen. Das Python Script habe ich dir unten angehängt. Ist eine Anpassung von HIER, dort steht auch wie es installiert wird. Ich taste mit 1s ab, 5s gehen natürlich auch, da kann der MP2 natürlich einen Bedarf durchs Haus nicht so schnell ausregeln, prozentual gesehen ist das aber nicht die Welt... auch bei schnellerer Abtastung braucht der MP2 ein paar Sekunden bis er seine Leistung anpasst.
- Fronius müsste nicht unbedingt mit Venus reden, Venus weiß auch über den Grid zähler alles was nötig ist.
- Wenn du weitere Module verbauen willst kannst du einfach nen weiteren WR AC gekoppelt oder mit nem MPPT DC gekoppelt laden. DC gekoppelt hat halt den Charme das du "Schwarzstartfähig" bist bzw. bei einem Stromausfall der Akku auch geladen würde und der MP2 dich dann an seinem Notstrom Ausgang versorgen könnte. Ein 3-Phasen WR dürfte nur anspringen wenn er 3 Phasen sieht, da ein MP2 aber nur 1 Phasig arbeitet bräuchtest du 3 Stück oder Einphasige WRs damit du auch bei Stromausfall laden könntest.
- Genau, der MP2 speist eigentlich nicht ein, will den Strom ja selbst verbrauchen :smiley: Lediglich der Überschuss = ErtragPV - LadenAkku - EigenverbrauchHaus wird eingespeißt. Angemeldet werden muss die Anlage (meines Wissens nach) trotzdem. Schieflast ist soweit OK weil noch innerhalb der Regularien.

Hoffe ich konnte dir alles halbwegs beantworten :thumbup:

Gruß Eloeee


#!/usr/bin/env python
try:
import gobject # Python 2.x
except:
from gi.repository import GLib as gobject # Python 3.x
import platform
import logging
import time
import sys
import json
import os
import paho.mqtt.client as mqtt
try:
import thread # for daemon = True / Python 2.x
except:
import _thread as thread # for daemon = True / Python 3.x

our own packages

sys.path.insert(1, os.path.join(os.path.dirname(file), '../ext/velib_python'))
from vedbus import VeDbusService
path_UpdateIndex = '/UpdateIndex'

MQTT Setup

broker_address = "192.168.1.100"
port = 1883
MQTTNAME = "Iobroker"

Variblen setzen

verbunden = 0
durchlauf = 0
maxcellvoltage = 3.0
powercurr = 0
totalin = 0
totalout = 0

MQTT Abfragen:

def on_disconnect(client, userdata, rc):
global verbunden
print("Client Got Disconnected")
if rc != 0:
print('Unexpected MQTT disconnection. Will auto-reconnect')
else:
print('rc value:' + str(rc))
try:
print("Trying to Reconnect")
client.connect(broker_address)
verbunden = 1
except Exception as e:
logging.exception("Fehler beim reconnecten mit Broker")
print("Error in Retrying to Connect with Broker")
verbunden = 0
print(e)
def on_connect(client, userdata, flags, rc):
print("Verbunden mit IoBroker: " + broker_address)
client.subscribe("zaehler/strom/EVU/WirkleistungGesamt")
client.subscribe("zaehler/strom/EVU/WirkleistungL1")
client.subscribe("zaehler/strom/EVU/WirkleistungL2")
client.subscribe("zaehler/strom/EVU/WirkleistungL3")
client.subscribe("zaehler/strom/EVU/StromL1")
client.subscribe("zaehler/strom/EVU/StromL2")
client.subscribe("zaehler/strom/EVU/StromL3")
client.subscribe("zaehler/strom/EVU/Bezug")
client.subscribe("zaehler/strom/EVU/Einspeisung")
def on_message(client, userdata, message):
global powercurr,power_p1, power_p2, power_p3, totalin, totalout, i_p1, i_p2, i_p3
msg = str(message.payload.decode("utf-8"))
print("message received: ", msg)
print("message topic: ", message.topic)
if message.topic == "zaehler/strom/EVU/WirkleistungGesamt":
powercurr = float(msg)
if message.topic == "zaehler/strom/EVU/WirkleistungL1":
power_p1 = float(msg)
if message.topic == "zaehler/strom/EVU/WirkleistungL2":
power_p2 = float(msg)
if message.topic == "zaehler/strom/EVU/WirkleistungL3":
power_p3 = float(msg)
if message.topic == "zaehler/strom/EVU/StromL1":
i_p1 = float(msg)
if message.topic == "zaehler/strom/EVU/StromL2":
i_p2 = float(msg)
if message.topic == "zaehler/strom/EVU/StromL3":
i_p3 = float(msg)
if message.topic == "zaehler/strom/EVU/Bezug":
totalin = float(msg)
if message.topic == "zaehler/strom/EVU/Einspeisung":
totalout = float(msg)
class DbusDummyService:
def init(self, servicename, deviceinstance, paths, productname='Smart Meter', connection='MQTT'):
self._dbusservice = VeDbusService(servicename)
self._paths = paths
logging.debug("%s /DeviceInstance = %d" % (servicename, deviceinstance))

Create the management objects, as specified in the ccgx dbus-api document

self._dbusservice.add_path('/Mgmt/ProcessName', file)
self._dbusservice.add_path('/Mgmt/ProcessVersion', 'Unkown version, and running on Python ' + platform.python_version())
self._dbusservice.add_path('/Mgmt/Connection', connection)

Create the mandatory objects

self._dbusservice.add_path('/DeviceInstance', deviceinstance)
self._dbusservice.add_path('/ProductId', 45069) # value used in ac_sensor_bridge.cpp of dbus-cgwacs
self._dbusservice.add_path('/ProductName', productname)
self._dbusservice.add_path('/FirmwareVersion', 0.1)

self._dbusservice.add_path('/Role', 'grid')

self._dbusservice.add_path('/HardwareVersion', 0)
self._dbusservice.add_path('/Connected', 1)
_kwh = lambda p, v: (str(v) + 'kWh')
_a = lambda p, v: (str(v) + 'A')
_w = lambda p, v: (str(v) + 'W')
_v = lambda p, v: (str(v) + 'V')
_s = lambda p, v: (str(v) + 's')
_x = lambda p, v: (str(v))
self._dbusservice.add_path('/Ac/Energy/Forward', None, gettextcallback=_kwh)
self._dbusservice.add_path('/Ac/Energy/Reverse', None, gettextcallback=_kwh)
self._dbusservice.add_path('/Ac/L1/Current', None, gettextcallback=_a)
self._dbusservice.add_path('/Ac/L1/Energy/Forward', None, gettextcallback=_kwh)
self._dbusservice.add_path('/Ac/L1/Energy/Reverse', None, gettextcallback=_kwh)
self._dbusservice.add_path('/Ac/L1/Power', None, gettextcallback=_w)
self._dbusservice.add_path('/Ac/L1/Voltage', None, gettextcallback=_v)
self._dbusservice.add_path('/Ac/L2/Current', None, gettextcallback=_a)
self._dbusservice.add_path('/Ac/L2/Energy/Forward', None, gettextcallback=_kwh)
self._dbusservice.add_path('/Ac/L2/Energy/Reverse', None, gettextcallback=_kwh)
self._dbusservice.add_path('/Ac/L2/Power', None, gettextcallback=_w)
self._dbusservice.add_path('/Ac/L2/Voltage', None, gettextcallback=_v)
self._dbusservice.add_path('/Ac/L3/Current', None, gettextcallback=_a)
self._dbusservice.add_path('/Ac/L3/Energy/Forward', None, gettextcallback=_kwh)
self._dbusservice.add_path('/Ac/L3/Energy/Reverse', None, gettextcallback=_kwh)
self._dbusservice.add_path('/Ac/L3/Power', None, gettextcallback=_w)
self._dbusservice.add_path('/Ac/L3/Voltage', None, gettextcallback=_v)
self._dbusservice.add_path('/Ac/Power', None, gettextcallback=_w)
self._dbusservice.add_path('/Ac/Current', None, gettextcallback=_a)
self._dbusservice.add_path('/Ac/Voltage', None, gettextcallback=_v)
for path, settings in self._paths.items():
self._dbusservice.add_path(
path, settings['initial'], writeable=True, onchangecallback=self._handlechangedvalue)
gobject.timeout_add(1000, self._update) # pause 1000ms before the next request
def _update(self):

self._dbusservice['/Ac/Power'] = (str(round(powercurr, 2)) + 'W') # positive: consumption, negative: feed into grid

self._dbusservice['/Ac/L1/Voltage'] = (str(round(230, 2)) + 'V')

self._dbusservice['/Ac/L2/Voltage'] = (str(round(230, 2)) + 'V')

self._dbusservice['/Ac/L3/Voltage'] = (str(round(230, 2)) + 'V')

self._dbusservice['/Ac/L1/Current'] = (str(round(i_p1, 2)) + 'A')

self._dbusservice['/Ac/L2/Current'] = (str(round(i_p2, 2)) + 'A')

self._dbusservice['/Ac/L3/Current'] = (str(round(i_p3, 2)) + 'A')

self._dbusservice['/Ac/L1/Power'] = (str(round(power_p1, 2)) + 'W')

self._dbusservice['/Ac/L2/Power'] = (str(round(power_p2, 2)) + 'W')

self._dbusservice['/Ac/L3/Power'] = (str(round(power_p3, 2)) + 'W')

self._dbusservice['/Ac/Energy/Forward'] = (str(round(totalin/1000, 2)) + 'kWh')

self._dbusservice['/Ac/Energy/Reverse'] = (str(round(totalout/1000, 2)) + 'kWh')

self._dbusservice['/Ac/Power'] = round(powercurr, 2)
self._dbusservice['/Ac/Current'] = '{0:0.2f}'.format(i_p1+i_p2+i_p3)
self._dbusservice['/Ac/Voltage'] = '{0:0.2f}'.format(230)
self._dbusservice['/Ac/L1/Voltage'] = '{0:0.2f}'.format(230)
self._dbusservice['/Ac/L2/Voltage'] = '{0:0.2f}'.format(230)
self._dbusservice['/Ac/L3/Voltage'] = '{0:0.2f}'.format(230)
self._dbusservice['/Ac/L1/Current'] = '{0:0.2f}'.format(i_p1)
self._dbusservice['/Ac/L2/Current'] = '{0:0.2f}'.format(i_p2)
self._dbusservice['/Ac/L3/Current'] = '{0:0.2f}'.format(i_p3)
self._dbusservice['/Ac/L1/Power'] = round(power_p1, 2)
self._dbusservice['/Ac/L2/Power'] = round(power_p2, 2)
self._dbusservice['/Ac/L3/Power'] = round(power_p3, 2)
self._dbusservice['/Ac/Energy/Forward'] = '{0:0.2f}'.format(totalin/1000)
self._dbusservice['/Ac/Energy/Reverse'] = '{0:0.2f}'.format(totalout/1000)
logging.info("House Consumption: {:.0f}".format(powercurr))

increment UpdateIndex - to show that new data is available

index = self._dbusservice[path_UpdateIndex] + 1 # increment index

if index > 255: # maximum value of the index

index = 0 # overflow from 255 to 0

self._dbusservice[path_UpdateIndex] = index

return True
def _handlechangedvalue(self, path, value):
logging.debug("someone else updated %s to %s" % (path, value))
return True # accept the change
def main():
logging.basicConfig(level=logging.DEBUG) # use .INFO for less logging
thread.daemon = True # allow the program to quit
from dbus.mainloop.glib import DBusGMainLoop

Have a mainloop, so we can send/receive asynchronous calls to and from dbus

DBusGMainLoop(set_as_default=True)
#formatting
_kwh = lambda p, v: (str(round(v, 2)) + 'kWh')
_a = lambda p, v: (str(round(v, 1)) + 'A')
_w = lambda p, v: (str(round(v, 1)) + 'W')
_v = lambda p, v: (str(round(v, 1)) + 'V')

pvac_output = DbusDummyService(

servicename='com.victronenergy.grid.evu',

deviceinstance=21,

paths={

'/Ac/Power': {'initial': 0, 'textformat': _w},

'/Ac/L1/Voltage': {'initial': 0, 'textformat': _v},

'/Ac/L2/Voltage': {'initial': 0, 'textformat': _v},

'/Ac/L3/Voltage': {'initial': 0, 'textformat': _v},

'/Ac/L1/Current': {'initial': 0, 'textformat': _a},

'/Ac/L2/Current': {'initial': 0, 'textformat': _a},

'/Ac/L3/Current': {'initial': 0, 'textformat': _a},

'/Ac/L1/Power': {'initial': 0, 'textformat': _w},

'/Ac/L2/Power': {'initial': 0, 'textformat': _w},

'/Ac/L3/Power': {'initial': 0, 'textformat': _w},

'/Ac/Energy/Forward': {'initial': 0, 'textformat': _kwh}, # energy bought from the grid

'/Ac/Energy/Reverse': {'initial': 0, 'textformat': _kwh}, # energy sold to the grid

path_UpdateIndex: {'initial': 0},

})

pvac_output = DbusDummyService(
servicename='com.victronenergy.grid.cgwacs_ttyUSB0_di30_mb1',
deviceinstance=21,
paths={
})
logging.info('Connected to dbus, and switching over to gobject.MainLoop() (= event based)')
mainloop = gobject.MainLoop()
mainloop.run()

Konfiguration MQTT

client = mqtt.Client(MQTTNAME) # create new instance
client.on_disconnect = on_disconnect
client.on_connect = on_connect
client.on_message = on_message
client.connect(broker_address, port) # connect to broker
client.loop_start()
if name == "main":
main()

1 „Gefällt mir“



Ich habe eine 4,7 kWp Anlage mit SMA Wechselrichter STP 5000TL‐20, ohne Speicher, Überschusseinspeisung.
Wenn ich dereinst mehr PV Module verbauen wollte (auf meinem Dach ist noch Platz für 2 Strings, zusammen vielleicht 4 kWp), dann könnte ich diese weiteren Module entweder über einen weiteren WR (z. B. SMA) mit der Anlage AC-seitig koppeln ? Oder besser über die Victron MPPT Laderegler DC-seitig mit der Batterie ? Wie hattest Du das vor ?

Das Entladen der Batterie funktioniert genau so ? Der MP2 schaut auf den Ladezustand der Batterie (was ist maßgeblich, eine Spannungsuntergrenze oder ein SOC Wert vom JKBMS ?) und versucht die Leistungsentnahme aus dem Netz auf 0 zu regeln, so lange die Batterie noch entladen werden darf, richtig ?

Ich habe noch 2 Punkte von Dir aufgegriffen:

1) Prüfe mal, ob du deinen WR mit noch 1-2 Modulen pro String belegen kannst. Ich habe 4,8kWp and einem 4,0 Sunnyboy (OstWest). Das wäre bestimmt die günstigste Variante etwas mehr Strom zu ernten. Wechselrichter sind ausserdem Mangelware.
2) Du kannst dein BMS auch noch mit dem Venus verbinden. Meistens geht das über ein RS485 auf USB Kabel und das serialbattery Script von Louis van der Walt. Ansonsten wird die Spannungsuntergrenze herangezogen.
Bei mehreren Akkus empfielt sich der Smart Shunt von Victron.
Hi, schön das dir das Projekt gefällt, ich versuche mal deine Fragen zu beantworten...
...
Hoffe ich konnte dir alles halbwegs beantworten :thumbup:

Gruß Eloeee
Vielen Dank !
Ich glaube die Lücken lichten sich :)

Grüße, Pfalzkind

Ich habe noch 2 Punkte von Dir aufgegriffen:

1) Prüfe mal, ob du deinen WR mit noch 1-2 Modulen pro String belegen kannst. Ich habe 4,8kWp and einem 4,0 Sunnyboy (OstWest). Das wäre bestimmt die günstigste Variante etwas mehr Strom zu ernten. Wechselrichter sind ausserdem Mangelware.
2) Du kannst dein BMS auch noch mit dem Venus verbinden. Meistens geht das über ein RS485 auf USB Kabel und das serialbattery Script von Louis van der Walt. Ansonsten wird die Spannungsuntergrenze herangezogen.
Bei mehreren Akkus empfielt sich der Smart Shunt von Victron.
Danke tulamidan,
das mit 1) ist ein guter Hinweis, denke der WR hätte sicher noch Luft, aber wegen 2 oder 3 Modulen wollte ich jetzt nicht auf's Dach. Ich muss mich mit der Idee selber Haken zu setzen, Profile dranzuschrauben, Module zu befestigen und zu verkabeln auch erst noch eine Weile anfreunden :angel:
Ja, 2) hab ich glaube ich verstanden, traue ich mir als raspi Bastler auch zu. Aber ich frag doch nochmal nach: das raspi mit Venus OS ersetzt dann das Cerbo GX, richtig ? Und das raspi/Venus OS spricht dann mit dem MP2 (und ggf. mit MPPT Ladereglern) über dieses "VE.Direct zu USB-Interface" richtig ?
Grüße, Pfalzkind
...
Hoffe ich konnte dir alles halbwegs beantworten :thumbup:
Gruß Eloeee
Also beim Überfliegen des python Skripts ist mir aufgefallen (soweit ich's verstanden habe), dass vom Zähler offenbar für jede Phase Strom und Wirkleistung abgefragt und zum Venus OS übertragen werden. Mein EHZ liefert aber nur die Wirkleistung (saldiert und vorzeichenbehaftet, negativ für Einspeisung) über alle 3 Phasen sowie Zählerstand für Bezug und Einspeisung. Das wird dem MP2 evtl. nicht reichen, was meinst Du ? Eigentlich regelt er doch auf die Wirkleistung über alle 3 Phasen (mein Verständnis), die kommt ja. Wozu braucht er die Info zu den 3 Phasen ? Meinst Du man könnte das "faken" ?

Was war der Grund warum Du einen extra "Grid Zähler verbaut" hast ? Hast Du gar keinen EHZ, oder bist Du erst später drauf gekommen, dass man die EHZ Daten über den geschilderten Weg zum Venus schaufeln kann ?

Grüße, Pfalzkind

Bei uns gibts noch keine EHZ Zähler und ich wollte sowieso getrennte Zähler für Haus und Wärmepumpe (intern, nicht für den EVU), drum hatte ich die sowieso schon.

Dem MP2 reicht (wenn ich mich recht erinnere) auch die Saldierte Leistung, er regelt ja nicht auf einzelne Phasen sondern sowieso nur auf die Summe. Ich habe die Einzelwerte nur übertragen weil ich sie habe und es in der Anzeige dann schöner aussieht :smiley:
Du kannst aber glaube auch nur die Gesamtwirkleistung schicken oder alternativ dann im Script (oder FHEM) dann die Gesamtwirkleistung / 3 pro Phase noch übertragen, glaube aber eben nicht dass das nötig ist.

Schöne Grüße
Eloeee

Korrekt, die Phasen sind dem MP2 egal. Auf die Summe kommt es an.

Das VenusOS kann anstelle eines Cerbo verwendet werden. Es wird allerdings zwingend ein MK3-USB interface benötigt. Das kostet (Liste) 70€. Der Cerbo kann auch mit günsitigeren DIY Kabeln verbunden werden bzw. ist im MP2 CX integriert.
Wenn man keinen Raspi runliegen hat - kann - der Cerbo sogar günstiger sein. Er hat auch noch ein paar andere Schnittstellen (z.B. CAN) was man beim Raspi nachrüsten muss.

Für mich war der Raspi total sinnvoll, habe das Kabel günstig geschossen und eh noch einen Pi rumliegen. CAN brauche ich nicht und ich habe auch keine weiteren Victron Komponenten.



Das VenusOS kann anstelle eines Cerbo verwendet werden. Es wird allerdings zwingend ein MK3-USB interface benötigt. ...
Kurze Frage:
Wesehalb wird bei Verwendung eine RasPi das MK3-UBS Interface benötigt?

Grüße

Michael


Das VenusOS kann anstelle eines Cerbo verwendet werden. Es wird allerdings zwingend ein MK3-USB interface benötigt. ...
Kurze Frage:
Wesehalb wird bei Verwendung eine RasPi das MK3-UBS Interface benötigt?

Grüße

Michael
Du musst ja irgendwie den Multiplus mit dem Raspberry verbinden.
Das machst du via Ve-Bus, da der Rasperry kein Ve-Bus hat, braucht du einen USB zu VE-Bus Adapter, das ist der besagte MK3

Hallo Eloeee, um bei all den Planungen (wo die Batterien bestellen, 280Ah oder 230Ah oder .., welches Gestell bauen, wie topbalancen, wo die Kabel herbekommen, und und und :crazy: :wtf: ) mal was greifbares zu haben hab ich auf einem alten raspi 2B VenusOS (2.92) installiert. Einfach. ssh Zugang - easy. Mal die IP vom SMA WR eingetragen (dem hab ich ModbusTCP freigeschalten, für die OpenWB) - zack, einige Daten da.

Aber jetzt: Bei den Schritten für das Skript, welches die EHZ Daten per MQTT ins VenusOS einschleusen soll scheitere ich schon ganz am Anfang.
Man braucht ja erstmal einen MQTT Client und soll den auf der Konsole damit installieren:
python -m ensurepip --upgrade pip install paho-mqtt
Scheinbar ist pip nicht standardmäßig installiert im venusos (python, genauer 3.8.13 schon), hab ich gemäß dem Link probiert nachzuholen.

Trotzdem liefert obiger Befehl das hier, also scheinbar falsche Syntax beim Aufruf ?:
root@raspberrypi2:~/pip-6.0.7# python -m ensurepip --upgrade pip install paho-mqtt
usage: python -m ensurepip [-h] [--version] [-v] [-U] [--user] [--root ROOT] [--altinstall] [--default-pip]
python -m ensurepip: error: unrecognized arguments: pip install paho-mqtt

Wenn ich nur den pip Befehl losschicke kommt sowas:
root@raspberrypi2:~/pip-6.0.7# pip install paho-mqtt
Traceback (most recent call last):
File "/usr/bin/pip", line 11, in <module>
load_entry_point('pip==6.0.7', 'console_scripts', 'pip')()
File "/usr/lib/python3.8/site-packages/pkg_resources/init.py", line 490, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python3.8/site-packages/pkg_resources/init.py", line 2854, in load_entry_point
return ep.load()
File "/usr/lib/python3.8/site-packages/pkg_resources/init.py", line 2445, in load
return self.resolve()
File "/usr/lib/python3.8/site-packages/pkg_resources/init.py", line 2451, in resolve
module = import(self.module_name, fromlist=['name'], level=0)
File "/usr/lib/python3.8/site-packages/pip-6.0.7-py3.8.egg/pip/init.py", line 13, in <module>
from pip.utils import get_installed_distributions, get_prog
File "/usr/lib/python3.8/site-packages/pip-6.0.7-py3.8.egg/pip/utils/init.py", line 22, in <module>
from pip._vendor import pkg_resources, six
File "/usr/lib/python3.8/site-packages/pip-6.0.7-py3.8.egg/pip/_vendor/pkg_resources/init.py", line 1649, in <module>
register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider)
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'

Vielleicht eine Idee oder einen Tip ?

Grüße, Pfalzkind

Die pip Version, die du über den Link installiert hast, ist recht alt.

Eigentlich kann man pip im Venus OS mittels
opkg install python3-pip
installieren. Probier das mal.

Dein Aufruf pip install paho-mqtt sieht ok aus.

Danke matspi für den Tip den "python3 pip" zu installieren. Jetzt hab ich wohl 2 pips.
Mir ist allerdings nicht klar, welcher pip wie aufgerufen wird.
Ich hab's mal so probiert:
root@raspberrypi2:~/pip-6.0.7# pip3 install paho-mqtt
Requirement already satisfied: paho-mqtt in /usr/lib/python3.8/site-packages (1.5.1)

Also Erfolg ? Was meinst Du ?

Schaut gut aus.
Im Zweifel:
python -c "import paho.mqtt"
Wenn der Befehl nicht meckert, sondern sich still und heimlich beendet, ist alles gut.

...
Wenn der Befehl nicht meckert, sondern sich still und heimlich beendet, ist alles gut.
Kein Mecker, läuft! Danke!

Also der MQTT Client scheint jetzt zu laufen. Und den Rest der Anleitung konnte ich m. E. auch umsetzen. Ich sehe den MQTTMeter in der remote Konsole (siehe Anhang). Noch ohne Werte, aber ich schicke mit FHEM noch nix los. Ich bin aber zuversichtlich dass es klappt, hab mit einer OpenWB "geübt." Der OpenWB schicke ich von FHEM aus auch Werte per MQTT und das klappt.
Aber bei einer Stelle der Anleitung steh ich komplett auf dem Schlauch:

Add a symlink to the file /data/rc.local:
ln -s /data/mqtttogrid/service /service/mqtttogrid
Or if that file does not exist yet, store the file rc.local from this service on your Raspberry Pi as /data/rc.local .
You can then create the symlink by just running rc.local:
rc.local

Bei mir gibt es keine Datei /data/rc.local
Aber welches soll die Datei "rc.local des Services" sein ?
Wenn ich den Befehl
ln -s /data/mqtttogrid/service /service/mqtttogrid
losschicke, dann läuft scheinbar das Skript, ich sehe folgendes:
root@raspberrypi2:/etc# svstat /service/mqtttogrid
/service/mqtttogrid: up (pid 1953) 1668 seconds

Das Skript überlebt aber keinen Neustart.
Soll ich jetzt einfach eine rc.local anlegen ?
Wenn ja, was soll da drin stehen ? Der "ln -s ..." Befehl ?

Vielleicht kann jemand meine Denkblockade lösen...

Hallo Zusammen!
...
- Siemens NH-Trenner mit 160A NH-Sicherung
...
Schöne Grüße
Eloeee
Servus,

könntest du eventuell mal die BestNr des Siemens NH Trenners einstellen.
Ich nehme mal an das der oben und unten je eine "Anschlussschraube" hat?
Ich finde nur NH Trenner für die Stromschienenmontage mit diesem Haken auf der Rückseite.

mfg

Michael

Ist glaube ein 3NP1131-1CA20, leider hat der keine "Anschlussschraube", auch Flachanschluss genannt.
Habe aber gerade gesehen das es auch den 3NP1131-1CA10 gibt, der hat den sog. Flachanschluss... wäre mir auch lieber gewesen, vielleicht wechsle ich nochmal :smiley:
Bin mir aber nicht mehr ganz sicher wie er befestigt ist, aber auf jeden Falls mit Dübeln an der Wand, bin mir nur nicht mehr sicher ob Löcher in der Rückwand drinnen waren oder ob ich da nachgeholfen habe :mrgreen:
Laut Beschreibung ist er ja aber auch "für Aufbau auf Montageplatte", geht also auf jeden Fall irgendwie.

Ich habe einen hager lt052. Mit Siemens 160A Sicherung und Trennmesser

Ist glaube ein 3NP1131-1CA20, leider hat der keine "Anschlussschraube", auch Flachanschluss genannt.
Habe aber gerade gesehen das es auch den 3NP1131-1CA10 gibt, der hat den sog. Flachanschluss... wäre mir auch lieber gewesen, vielleicht wechsle ich nochmal :D
Bin mir aber nicht mehr ganz sicher wie er befestigt ist, aber auf jeden Falls mit Dübeln an der Wand, bin mir nur nicht mehr sicher ob Löcher in der Rückwand drinnen waren oder ob ich da nachgeholfen habe :mrgreen:
Laut Beschreibung ist er ja aber auch "für Aufbau auf Montageplatte", geht also auf jeden Fall irgendwie.
und der 3NP1131-1CA10 hätte dann zwei Flachanschlüsse?

Ich habe einen hager lt052. Mit Siemens 160A Sicherung und Trennmesser
der ist aber dreipolig? Hat der zwei Flachanschlüsse? gibts den auch einpolig?

Ich bin da jetzt nicht auf Siemens festgelegt, aber ich soche halt einen mit zweimal Flachanschluss NH00 1polig


beste Grüße

Michael