Situation
I have a Multiplus-II 48/5000/70 connected to a Raspberry Pi 3B+ running Venus OS with a MK3-USB. For test purposes, I have a 48V 70Ah LeadAcid AGM battery connected.
I am following the documentation ESS mode 2 and 3 - 3.3 Running software on the CCGX and using DBus paths.
The goal is to use my own script for doing the control loop, so I need Mode 3, where the MP2 inverter is fully under the scripts control.
I wrote a script in Python, based on the code from dummy_vebus.py. It claims the dbus service "com.victronenergy.vebus.ttyO1" as described in the docs. Here is the simple code in order to get me started:
# Based on code from https://github.com/victronenergy/dbus_vebus_to_pvinverter/blob/master/test/dummy_vebus.py # This script is a simple test for controlling the MultiPlus-II via ESS Mode 3 # publishing values on dbus for the MultiPlus-II to charge or discharge the battery from dbus.mainloop.glib import DBusGMainLoop import gobject import dbus import dbus.service import platform import logging import sys import os # our own packages sys.path.insert(1, os.path.join(os.path.dirname(__file__), '../ext/velib_python')) from vedbus import VeDbusService dbusservice = None def update(): dbusservice['/Hub4/L1/AcPowerSetpoint'] = -150 # discharge battery a little logging.info("/Hub4/L1/AcPowerSetpoint: -150W") gobject.timeout_add(500, update) # update every 500ms # Init logging logging.basicConfig(level=(logging.INFO)) logging.info(__file__ + " is starting up") logLevel = {0: 'NOTSET', 10: 'DEBUG', 20: 'INFO', 30: 'WARNING', 40: 'ERROR'} logging.info('Loglevel set to ' + logLevel[logging.getLogger().getEffectiveLevel()]) # Have a mainloop, so we can send/receive asynchronous calls to and from dbus DBusGMainLoop(set_as_default=True) dbusservice = VeDbusService('com.victronenergy.vebus.ttyO1') # Create the management objects, as specified in the ccgx dbus-api document dbusservice.add_path('/Management/ProcessName', __file__) dbusservice.add_path('/Management/ProcessVersion', 'Unkown version, and running on Python ' + platform.python_version()) dbusservice.add_path('/Management/Connection', 'Mode3 battery regulator service') # Create the mandatory objects dbusservice.add_path('/DeviceInstance', 0) dbusservice.add_path('/ProductId', 'NoID') dbusservice.add_path('/ProductName', 'Mode3 battery regulator') dbusservice.add_path('/FirmwareVersion', 0) dbusservice.add_path('/HardwareVersion', 0) dbusservice.add_path('/Connected', 1) # Create all the objects that we want to export to the dbus dbusservice.add_path('/Hub4/L1/AcPowerSetpoint', -123) # discharge battery a little dbusservice.add_path('/Hub4/DisableCharge', 0) dbusservice.add_path('/Hub4/DisableFeedIn', 0) dbusservice.add_path('/Dc/V', 48.8) dbusservice.add_path('/Dc/Battery/Voltage', 48.9) dbusservice.add_path('/Devices/0/Version', 'test') gobject.timeout_add(100, update) # update in 100ms print 'Connected to dbus, and switching over to gobject.MainLoop() (= event based)' mainloop = gobject.MainLoop() mainloop.run()
Problem
I see no reaction of the MultiPlus-II on the signals being published on dbus. The inverter stays idle, the status is shown as "Passthru".
I do see all paths and values when I am using dbus-spy, so the script does what I told it to do.
Question
What am I missing here? There is probably only a little thing that I am doing wrong.
Does anyone have sample code that gets me going? Any help is welcome!