Code Monkey home page Code Monkey logo

dbus-mqtt-devices's Introduction

dbus-mqtt-devices 0.8.0

This VenusOS Driver for GX devices works in concert with the Victron dbus-mqtt gateway, now known as dbus-flashmq. It has been designed to allow Wi-Fi enabled edge devices (such as ESP32, some Arduino microcontrollers or Raspberry Pis) to self register to the dbus over MQTT. This avoids the need for additional dedicated custom drivers to be developed and deployed.

The following Victron dbus services are currently supported:

  • temperature (com.victronenergy.temperature.device)
  • tank (com.victronenergy.tank.device)
  • pvinverter (com.victronenergy.pvinverter.device)
  • grid (com.victronenergy.grid.device)
  • gps (com.victronenergy.gps.device)
  • evcharger (com.victronenergy.evchgarger.device)

If you find this driver useful and you want to say thanks, feel free to buy me a coffee using the "Thank You" link below.

Say Thanks

Contents

  1. Install and Setup
  2. Updating after VenusOS updates
  3. How this driver works - The Registration Protocol
  4. The MQTT Proxy (optional)
  5. Troubleshooting
  6. Developers

Install and Setup

Please Note: this driver is not supported on CCGX due to it's limited system resources. Installation on CCGX can cause random reboots.

To get the driver up and running, follow the steps below to download the latest release from github and then run the setup script.

  1. ssh into venus device (as root)

If you have not yet enabled root (superuser) access via SSH, follow the instructions here: https://www.victronenergy.com/live/ccgx:root_access.

  1. Download the latest zip from github and extract contents
mkdir -p /data/drivers
cd /data/drivers
wget -O dbus-mqtt-devices.zip https://github.com/freakent/dbus-mqtt-devices/archive/refs/tags/v0.8.0.zip
unzip dbus-mqtt-devices.zip
  1. Run the setup script
./dbus-mqtt-devices-0.8.0/bin/setup.sh
  1. Check the contents of /data/rc.local to ensure the correct version starts automatically on reboot
# cat /data/rc.local
/data/drivers/dbus-mqtt-devices-0.8.0/bin/setup-dependencies.sh
ln -s /data/drivers/dbus-mqtt-devices-0.8.0/bin/service /service/dbus-mqtt-devices
  1. Reboot device (recommended)
reboot

Updating after VenusOS updates

The driver will automatically check and update (if required) it's own module dependencies on every reboot. There should be no need to do anything to the installation after a VenusOS upgrade. If you do experience issues after a VenusOS upgrade, please follow the usual troubleshooting tips described later.

How this driver works - The Registration Protocol

This driver uses a pair of MQTT topics under the "device/*" MQTT namespace to establish the device registration using the following protocol.

Please note: <client id> is a unique, short name you can use to identify the device (you MUST avoid using special characters ,.-/: in the client id). It is recommended (but not essential) that you use the same client ID during MQTT initialisation and connection.

  1. When a device initialises and EVERY time it connects to MQTT, it MUST do 2 things :

    1. subscribes to a topic "device/<client id>/DBus".

    2. publishes a status message on the MQTT topic "device/<client id>/Status".

      The Status payload is a json object containing :

      { "clientId": <client id>, "connected": <either 1 or 0>, "version": "<text string>", "services": [<a dictionary of services that this device wants to use>] }

      example 1:

      { "clientId": "fe001", "connected": 1, "version": "v1.0 ALPHA", "services": {"t1": "temperature"} } In example 1, the device is registering that it is equipped with one temperature sensor which we are calling "t1". The label t1 is just an arbitrary identifier that distinguishes one service from another within a device. "temperature" is the exact name of the service used in Victron's dbus. The version field can contain any string you like and is displayed within the GX console and on VRM.

      example 2:

      { "clientId": "fe002", "connected": 1, "version": "v2.3", "services": {"t1": "temperature", "t2": "temperature", "tk1": "tank" } } In example 2, the device is registering that it is equipped with two temperature sensors and a tank level sensor. The labels t1, t2, tk2 are the unique arbitrary identifiers that distinguish one service from another within a device.

  2. The driver will then use this information to :

    • obtain a numeric device instance (for VRM) for each device service (using the ClassAndVrmInstance dbus service),
    • set up local settings for persistent storage of some attributes
    • register the device on the dbus,
    • set up the appropriate dbus paths for the service type (i.e. temperature sensor can provide Temperature, Pressure and Humidity)
  3. Once successfully registered, the driver publishes a message on the device/<client id>/DBus topic. This must be the same topic the device subscribed to in step 1.1. The DBus message contains the all important numeric device instances (one for each service) that the device should use when publishing messages for dbus-mqtt to process. It also contains the portal id needed to construct a dbus-mqtt topic (see 4).

    For example:

    Topic: "device/<client id>/DBus"
    Payload: {"portalId": "<vrm portal id>", deviceInstance":{"t1": 5, "t2":12}, "topicPath": {...} }
    

    Please note:

    1. the original device/<client id>/DeviceInstance topic has been deprecated in favour of device/<client id>/DBus. Publishing to the DeviceInstance topic will be removed in a future release. (By combining the <portal id> and <device instance> in the same message payload, client code will be simpler and it leaves scope for future expansion.)
    2. for topicPath details see the MQTT Proxy section below.
  4. Custom code on the device then uses the device instance to periodically publish messages to the appropriate dbus-mqtt topics for the service(s) they are providing. Note the "W" at the start of the topic. See the Victron dbus-mqtt documentation for an explanation.

    For example:

    Topic: "W/<portal id>/temperature/<device instance>/Temperature"
    Payload: { "value": 24.91 }
    
  5. When a device disconnects it should notify the driver by publishing a status message with a connected value of 0. With MQTT the preferred method of achieving this is through publishing an MQTT "last will" message.

    For example:

    { "clientId": "fe001", "version": "v1.0", "connected": 0, "services": {"t1": "temperature", "t2": "temperature"}}
    

    please note: on disconnect the contents of the "services" are actually irrelevant as all the device services are cleared by this action.

Design notes

  • Client devices MUST always self register (by sending a Status message with connected = 1) everytime they connect to MQTT. Re-registering an already registered device has no adverse affect.
  • The device can have multiple sensors of the same type (e.g. two temperature sensors), each publishing to different dbus-mqtt topics as different device services and unique Device Instance values.
  • Each device service will appear separately on the Venus GX device, and each can have a customised name that will show on the GX display and in VRM.
  • This driver currently supports a subset of the Victron services exposed through dbus-mqtt but the protocol and the driver have been designed to be easily extended for other services supported by dbus-mqtt (see services.yml config file).
  • A working Arduino Sketch (for Arduino Nano 33 IOT) that publishes temperature readings from an Adafruit AHT20 temperature and humidity module using this driver and mqtt-dbus is available at https://github.com/freakent/mqtt_wifi_sis
  • Simple client examples (gps-simulator and tank-simulator) can be found in the samples directory. These are NOT designed to be run on the GX, but you can run them from any other computer connected to the same network as the Venus OS device.

The MQTT Proxy

The design of VenusOS MQTT api (either flashmq-mqtt or dbus-mqtt) requires the client device to publish separate MQTT messages for each data value to be published on the DBUS. In many cases this can require a lot of extra boiler plate code to format each data value payload and publish each individual value to the appropriate "W" topic. The goal of this driver is to simplify use of the DBUS MQTT api especially for edge sensing client devices. Reducing the amount of boiler plate code running on the client device will help simplify device code and simplify development.

The use of the Proxy is entirely optional, the client device can continue to use the driver for dbus registration and publish values to the "W" topics without using the proxy.

To use the proxy, format your payload as follows and publish to topic device/<clientId>/Proxy:

{
   "topicPath": "W/<portalid>/<service>/<deviceid>", # deviceid is the Id returned by registration process
   "values": {
       "<attribute 1>" : <value 1>,
       "<attribute 2": <value 2>,
       "<attribute n>": <value n>
    }
}

For example, to publish data for a temperature device you would format your payload like this:

{
   "topicPath": "W/<portalid>>/temperature/1", # Note the W for a write topic
   "values": {
       "Temperature" : 23,
       "Pressure": 900,
       "Humidity": 56
    }
}

When you publish that payload to topic device/<clientId>/Proxy, the Proxy will perform some basic validation and perform a publish on behalf of the client for each attribute and value pair in the payload. The actual topic written to is a concatenation of the topic path and the attribute name.

Topic Path

To help simplify client code further, a "topic path" collection is returned in the device/<device>/DBus message, removing the need for the client to have to build this topic path string. for example:

if a device known as "venusnr", with a temperature service known as "temp01" were to publish the following payload to device/venusnr/Status

{"clientId": "venusnr", "connected": 1, "version": "v1.0.0", "services": {"temp01": "temperature"} }

The following registration message would be published by the driver to device/venusnr/DBus

{ 
  "portalId": "<portalId>",
  "deviceInstance": {"temp01": 7}, 
  "topicPath": {"temp01": {"N': "N/portId>/temperature/7", "R": "R/<portalid>/temperature/7", "W": "W/<portalId>/temperature/7"} }
}

The expectation is that the client can then simply select the correct topic path by using an expression such as payload.topicPath["temp01"]["W"].

Troubleshooting

during installation

If you receive an error during setup that includes the lines

ModuleNotFoundError: No module named 'dataclasses'

Try running the following before running the setup.sh script again.

opkg install python3-modules

at runtime

  1. First thing to check is that the dbus-mqtt-devices service is running, from the ssh command line use
svstat /service/dbus-mqtt-devices

More info on deamontools that VenusOs uses here: https://cr.yp.to/daemontools.html

  1. If the service is not running then ensure that your rc.local script has execute permissions.
ls -l /data/rc.local
...
chmod +x /data/rc.local
  1. If the service is running, then next thing to check is the log with the command:
$ more /var/log/dbus-mqtt-devices/current

It should contain something like this:

@400000006238ead134c233e4 INFO:device_manager:Received device status message {'clientId': 'fe001', 'connected': 1, 'version': 'v1.0', 'services': {'t1': 'temperature'}}
@400000006238ead134c25324 INFO:device:**** Registering device: fe001, services: {'t1': 'temperature'} ****
@400000006238ead134c25edc INFO:device:Registering Service temperature for client fe001
@400000006238ead134c26a94 INFO:device_service_config:About to open config file
@400000006238ead136d95fcc INFO:device_service:Unregistered mqtt_fe001_t1 from dbus
@400000006238ead136df10d4 INFO:device_service:Unregistered mqtt_fe001_t1 from dbus
@400000006238ead136ea9ddc INFO:device_service:Unregistered mqtt_fe001_t1 from dbus
@400000006238ead13755bbbc INFO:device_service:Registering service temperature for client fe001 at path com.victronenergy.temperature.mqtt_fe001_t1
@400000006238ead13903b20c INFO:settingsdevice:Setting /Settings/Devices/mqtt_fe001_t1/ClassAndVrmInstance does not exist yet or must be adjusted
@400000006238ead13a94dd44 INFO:vedbus:registered ourselves on D-Bus as com.victronenergy.temperature.mqtt_fe001_t1
@400000006238ead13ac572c4 INFO:device_service:Registered Service com.victronenergy.temperature.mqtt_fe001_t1 under DeviceInstance 1
@400000006238ead13ad8d79c INFO:device_manager:publish {'portalId': '<portal id>', 'deviceInstance': 't1': '1'} to device/fe001/DBus, status is 0

If you can have ssh open in another window, then

tail -f /var/log/dbus-mqtt-devices/current 

is a useful way to monitor the driver.

If you need human readable timestamps you have to pipe the output through tai64nlocal, for example

tail -f /var/log/dbus-mqtt-devices/current | tai64nlocal
  1. If you have re-installed more than once, make sure there is only one line in your rc.local for dbus-mqtt-devices.
more /data/rc.local 
  1. I highly recommend using MQTT-Explorer (http://mqtt-explorer.com/) to monitor the N/* topics while debugging and if you are doing anything with MQTT. There is a keepalive script in the samples directory if you need it.

  2. In the unlikely event that the installation fails, and your ccgx device will not boot, follow these instructions to recover it. https://community.victronenergy.com/questions/48309/ccgx-firmware-upgrade-problem.html

  3. If you are still having a problem feel free to start an Discussion on the Github project here: https://github.com/freakent/dbus-mqtt-devices/discussions I get email alerts from Github which I don't seem to get from the Victron community forum.

Developers

if you are wanting to run the pytests on macos you need to install a few dependencies:

using homebrew

$ brew install dbus pygobject3 gtk+3
$ pip3 install pytest python-dbus paho-mqtt PyGObject
$ pytest --ignore=ext

dbus-mqtt-devices's People

Contributors

freakent avatar patatman avatar stundenblume avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dbus-mqtt-devices's Issues

Help needed with OpenHab sending JSON

Thank you for the great tool. Exactly what I need.

I have a working keep alive rule (DSL rule)

val actions = getActions("mqtt", "mqtt:broker:VenusOS") actions.publishMQTT("R/xxxxxxxx/keepalive", '["grid/40/Ac/Frequency", "grid/40/Ac/Energy/Forward"]') logInfo("Solar", "CCGX MQTT Keep Alive Timer fired!!")

I can't manage to send the JSON

Example:
actions.publishMQTT(„device/fe001/Status“, '[{ "clientId": "fe001", "connected": 1, "version": "v1.0 ALPHA", "services": {"t1": "temperature"} }]')

...is not working.

actions.publishMQTT(„device/fe001/Status“, '{ "clientId": "fe001", "connected": 1, "version": "v1.0 ALPHA", "services": {"t1": "temperature"} }')

also not.

Error during install script

Hello,

I got the following error:

`root@ccgx:# cd
root@ccgx:
# cd /data/
root@ccgx:/data# mkdir -p drivers
root@ccgx:/data# cd drivers/
root@ccgx:/data/drivers# wget -O dbus-mqtt-devices.zip https://github.com/freakent/dbus-mqtt-devices/archive/refs/tags/v0.4.1.zip
--2022-04-30 07:20:55-- https://github.com/freakent/dbus-mqtt-devices/archive/refs/tags/v0.4.1.zip
Resolving github.com... 140.82.121.3
Connecting to github.com|140.82.121.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/freakent/dbus-mqtt-devices/zip/refs/tags/v0.4.1 [following]
--2022-04-30 07:20:55-- https://codeload.github.com/freakent/dbus-mqtt-devices/zip/refs/tags/v0.4.1
Resolving codeload.github.com... 140.82.121.9
Connecting to codeload.github.com|140.82.121.9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: ‘dbus-mqtt-devices.zip’

dbus-mqtt-devices. [ <=> ] 21.47K --.-KB/s in 0.01s

2022-04-30 07:20:56 (2.15 MB/s) - ‘dbus-mqtt-devices.zip’ saved [21983]

root@ccgx:/data/drivers# unzip dbus-mqtt-devices.zip
Archive: dbus-mqtt-devices.zip
creating: dbus-mqtt-devices-0.4.1/
inflating: dbus-mqtt-devices-0.4.1/.gitignore
inflating: dbus-mqtt-devices-0.4.1/.gitmodules
inflating: dbus-mqtt-devices-0.4.1/LICENSE
inflating: dbus-mqtt-devices-0.4.1/README.md
creating: dbus-mqtt-devices-0.4.1/bin/
creating: dbus-mqtt-devices-0.4.1/bin/service/
creating: dbus-mqtt-devices-0.4.1/bin/service/log/
inflating: dbus-mqtt-devices-0.4.1/bin/service/log/run
inflating: dbus-mqtt-devices-0.4.1/bin/service/run.tmpl
inflating: dbus-mqtt-devices-0.4.1/bin/setup.sh
inflating: dbus-mqtt-devices-0.4.1/bin/uninstall.sh
inflating: dbus-mqtt-devices-0.4.1/dbus_mqtt_devices.py
inflating: dbus-mqtt-devices-0.4.1/device.py
inflating: dbus-mqtt-devices-0.4.1/device_manager.py
inflating: dbus-mqtt-devices-0.4.1/device_service.py
inflating: dbus-mqtt-devices-0.4.1/device_service_config.py
creating: dbus-mqtt-devices-0.4.1/ext/
creating: dbus-mqtt-devices-0.4.1/ext/dbus-mqtt/
creating: dbus-mqtt-devices-0.4.1/ext/velib_python/
inflating: dbus-mqtt-devices-0.4.1/requirements.txt
inflating: dbus-mqtt-devices-0.4.1/services.yml
creating: dbus-mqtt-devices-0.4.1/test-data/
inflating: dbus-mqtt-devices-0.4.1/test-data/device-status.json
inflating: dbus-mqtt-devices-0.4.1/test-data/pvinverter-simulator.py
inflating: dbus-mqtt-devices-0.4.1/test-data/tank-level.json
inflating: dbus-mqtt-devices-0.4.1/test-data/tank-simulator.py
inflating: dbus-mqtt-devices-0.4.1/test-data/temperature.json
creating: dbus-mqtt-devices-0.4.1/tests/
inflating: dbus-mqtt-devices-0.4.1/tests/test_validation.py
root@ccgx:/data/drivers# ./dbus-mqtt-devices-0.4.1/bin/setup.sh
Setup dbus-mqtt-devices in /data/drivers/dbus-mqtt-devices-0.4.1 started
Ensure Python's Pip is installed
pip 20.0.2 from /usr/lib/python3.8/site-packages/pip (python 3.8)
Pip install module dependencies
Collecting PyYAML==6.0
Downloading PyYAML-6.0.tar.gz (124 kB)
|████████████████████████████████| 124 kB 978 kB/s
Installing build dependencies ... error
ERROR: Command errored out with exit status -9:
command: /usr/bin/python /usr/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /var/volatile/tmp/pip-build-env-jqwzyv56/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel Cython
cwd: None
Complete output (7 lines):
Collecting setuptools
Downloading setuptools-62.1.0-py3-none-any.whl (1.1 MB)
Collecting wheel
Downloading wheel-0.37.1-py2.py3-none-any.whl (35 kB)
Collecting Cython
Downloading Cython-0.29.28-py2.py3-none-any.whl (983 kB)
Installing collected packages: setuptools, wheel, Cython

ERROR: Command errored out with exit status -9: /usr/bin/python /usr/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /var/volatile/tmp/pip-build-env-jqwzyv56/overlay --no-warn-script-location --no-binary :none: --only-binary :none: -i https://pypi.org/simple -- setuptools wheel Cython Check the logs for full command output.
Set up Victron module libraries
Set up device service to autorun on restart
grep: /data/rc.local: No such file or directory
Setup dbus-mqtt-devices complete`

Energy Meter missing under settings

My energy meter is showing correctly under the normal device list:
image

I can see all of the values as expected:
image

But if I navigate to Settings > Energy Meters it's blank:
image
image

Is this an issue with my config or an expected behavior as the GX can't control or change any settings on my MQTT meter?

Driver crashed looking up portal id

Hey,
I registered one device without problems, now (on the second) I get this error and the service restarts:

@40000000627bd6243b47d5ac INFO:logger:Loglevel set to INFO
@40000000627bd6251ce3d214 Traceback (most recent call last):
@40000000627bd6251ce3f53c   File "/usr/lib/python3.8/site-packages/dbus/bus.py", line 177, in activate_name_owner
@40000000627bd6251ce404dc     return self.get_name_owner(bus_name)
@40000000627bd6251ce40cac   File "/usr/lib/python3.8/site-packages/dbus/bus.py", line 361, in get_name_owner
@40000000627bd6251ce41c4c     return self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
@40000000627bd6251ce4241c   File "/usr/lib/python3.8/site-packages/dbus/connection.py", line 652, in call_blocking
@40000000627bd6251ce5cde4     reply_message = self.send_message_with_reply_and_block(
@40000000627bd6251ce5dd84 dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'com.victronenergy.system': no such name
@40000000627bd6251ce5f10c
@40000000627bd6251ce5f4f4 During handling of the above exception, another exception occurred:
@40000000627bd6251ce600ac
@40000000627bd6251ce65e6c Traceback (most recent call last):
@40000000627bd6251ce6663c   File "/data/drivers/dbus-mqtt-devices-0.5.1/dbus_mqtt_devices.py", line 83, in <module>
@40000000627bd6251ce675dc     main()
@40000000627bd6251ce679c4   File "/data/drivers/dbus-mqtt-devices-0.5.1/dbus_mqtt_devices.py", line 65, in main
@40000000627bd6251ce68964     handler = MQTTDeviceManager(
@40000000627bd6251ce68d4c   File "/data/drivers/dbus-mqtt-devices-0.5.1/device_manager.py", line 37, in __init__
@40000000627bd6251ce6e33c     self.portalId = self._lookup_portalId()
@40000000627bd6251ce7680c   File "/data/drivers/dbus-mqtt-devices-0.5.1/device_manager.py", line 116, in _lookup_portalId
@40000000627bd6251ce777ac     portalId = VeDbusItemImport(self._dbus_conn, "com.victronenergy.system", "/Serial").get_value()
@40000000627bd6251ce7874c   File "/data/drivers/dbus-mqtt-devices-0.5.1/ext/velib_python/vedbus.py", line 217, in __init__
@40000000627bd6251ce796ec     self._proxy = bus.get_object(serviceName, path, introspect=False)
@40000000627bd6251ce7e8f4   File "/usr/lib/python3.8/site-packages/dbus/bus.py", line 241, in get_object
@40000000627bd6251ce7f4ac     return self.ProxyObjectClass(self, bus_name, object_path,
@40000000627bd6251ce80064   File "/usr/lib/python3.8/site-packages/dbus/proxies.py", line 250, in __init__
@40000000627bd6251ce80c1c     self._named_service = conn.activate_name_owner(bus_name)
@40000000627bd6251ce817d4   File "/usr/lib/python3.8/site-packages/dbus/bus.py", line 182, in activate_name_owner
@40000000627bd6251ce9d13c     self.start_service_by_name(bus_name)
@40000000627bd6251ce9dcf4   File "/usr/lib/python3.8/site-packages/dbus/bus.py", line 277, in start_service_by_name
@40000000627bd6251ce9ec94     return (True, self.call_blocking(BUS_DAEMON_NAME, BUS_DAEMON_PATH,
@40000000627bd6251ce9f84c   File "/usr/lib/python3.8/site-packages/dbus/connection.py", line 652, in call_blocking
@40000000627bd6251cea8cbc     reply_message = self.send_message_with_reply_and_block(
@40000000627bd6251cea9874 dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name com.victronenergy.system was not provided by any .service files

I think I tried to register a device twice (on the same name) or something, now the service is just dead. Even after a cerbo restart. Can I reset all my changes (devices)? I removed them on the cerbo but this is not enough as it seems.
Thanks for help

Custom name missing after CCGX reboot

@freakent
Hi Martin,
After further investigation, the re-registration is not overwriting the local /data/conf/settings.xml file after a reboot and a re-registration. The GUI shows the default name, again the settings.xml still has custom name. I have to re-enter the custom name in the GUI for it to take effect.

Thoughts?
Thanks,
Gene

Error with 0.4.x

Both 0.4.x versions don't work for me.
0.3.1 with my own services.yml is working as expected.

0.3.1:

@4000000062476b8932614914 INFO:device_manager:[Connected] Result code 0
@4000000062476b8e32c3cfbc ERROR:mqtt_gobject_bridge:[Disconnected] Lost connection to broker
@4000000062476b8e32cfaecc INFO:mqtt_gobject_bridge:[Disconnected] Set timer
@4000000062476b9925897d4c *** CCGX booted (0) ***
@4000000062476b9f23dc80fc *** starting dbus-mqtt-devices ***
@4000000062476bb53a99a004 -------- dbus_mqtt_devices, v0.3.1 is starting up --------
@4000000062476bb53a99bf44 INFO:logger:Loglevel set to INFO
@4000000062476bb60378b1dc INFO:device_manager:Using portalId <id>
@4000000062476bb603a284e4 INFO:mqtt_gobject_bridge:[Init] Connecting to local broker
@4000000062476bb60f357c6c INFO:device_manager:[Connected] Result code 0
@4000000062476bd832c6e4cc INFO:device_manager:Received device status message {'clientId': 'a01', 'connected': 1, 'version': 'v1.0 ALPHA', 'services': {'t1': 'temperature', 'pv1': 'pvinverter', 'pv2': 'pvinverter', 'g1': 'grid'}}
@4000000062476bd832f38694 INFO:device:**** Registering device: a01, services: {'t1': 'temperature', 'pv1': 'pvinverter', 'pv2': 'pvinverter', 'g1': 'grid'} ****
@4000000062476bd83347402c INFO:device:Registering Service temperature for client a01
@4000000062476bd833475b84 INFO:device_service_config:About to open config file
@4000000062476bd91947949c INFO:device_service:Registering service temperature for client a01 at path com.victronenergy.temperature.mqtt_a01_t1
@4000000062476bd91b568edc INFO:settingsdevice:Setting /Settings/Devices/mqtt_a01_t1/ClassAndVrmInstance does not exist yet or must be adjusted
@4000000062476bd92024c85c INFO:vedbus:registered ourselves on D-Bus as com.victronenergy.temperature.mqtt_a01_t1
@4000000062476bd9205c4f34 INFO:device_service:Registered Service com.victronenergy.temperature.mqtt_a01_t1 under DeviceInstance 5
@4000000062476bd92067094c INFO:device:Registering Service pvinverter for client a01
@4000000062476bd920702d24 INFO:device_service_config:About to open config file
@4000000062476bda05ab2a0c INFO:device_service:Registering service pvinverter for client a01 at path com.victronenergy.pvinverter.mqtt_a01_pv1
@4000000062476bda06489ea4 INFO:settingsdevice:Setting /Settings/MqttDevices/mqtt_a01_pv1/CustomName does not exist yet or must be adjusted
@4000000062476bda0bc298e4 INFO:settingsdevice:Setting /Settings/Devices/mqtt_a01_pv1/ClassAndVrmInstance does not exist yet or must be adjusted
@4000000062476bda0f5387d4 INFO:vedbus:registered ourselves on D-Bus as com.victronenergy.pvinverter.mqtt_a01_pv1
@4000000062476bda10fe4204 INFO:device_service:Registered Service com.victronenergy.pvinverter.mqtt_a01_pv1 under DeviceInstance 5
@4000000062476bda10fe652c INFO:device:Registering Service pvinverter for client a01
@4000000062476bda10fe74cc INFO:device_service_config:About to open config file
@4000000062476bda2e74cca4 INFO:device_service:Registering service pvinverter for client a01 at path com.victronenergy.pvinverter.mqtt_a01_pv2
@4000000062476bda2f4ad59c INFO:settingsdevice:Setting /Settings/MqttDevices/mqtt_a01_pv2/CustomName does not exist yet or must be adjusted
@4000000062476bda3a43fa3c INFO:settingsdevice:Setting /Settings/Devices/mqtt_a01_pv2/ClassAndVrmInstance does not exist yet or must be adjusted
@4000000062476bdb017d1c74 INFO:vedbus:registered ourselves on D-Bus as com.victronenergy.pvinverter.mqtt_a01_pv2
@4000000062476bdb0217a30c INFO:device_service:Registered Service com.victronenergy.pvinverter.mqtt_a01_pv2 under DeviceInstance 6
@4000000062476bdb0217c634 INFO:device:Registering Service grid for client a01
@4000000062476bdb0217d5d4 INFO:device_service_config:About to open config file
@4000000062476bdb228d738c INFO:device_service:Registering service grid for client a01 at path com.victronenergy.grid.mqtt_a01_g1
@4000000062476bdb25354a9c INFO:settingsdevice:Setting /Settings/Devices/mqtt_a01_g1/ClassAndVrmInstance does not exist yet or must be adjusted
@4000000062476bdb28113d84 INFO:vedbus:registered ourselves on D-Bus as com.victronenergy.grid.mqtt_a01_g1
@4000000062476bdb28a1dcf4 INFO:device_service:Registered Service com.victronenergy.grid.mqtt_a01_g1 under DeviceInstance 1
@4000000062476bdb28c69f1c INFO:device_manager:publish {'portalId': '<id>', 'deviceInstance': {'t1': '5', 'pv1': '5', 'pv2': '6', 'g1': '1'}} to device/a01/DBus, status is 0
@4000000062476bdb29027f3c INFO:device_service:setting changed, setting: CustomName, old: PV Inverter MQTT, new: PV Inverter MQTT
@4000000062476bdb2916a764 INFO:device_service:setting changed, setting: CustomName, old: PV Inverter MQTT, new: PV Inverter MQTT

0.4.0:

@40000000624769772b8457bc INFO:device:Registering Service grid for client a01
@40000000624769772b8bbe44 INFO:device_service_config:About to open config file
@400000006247697802186a44 INFO:device_service_config:No configuration for Service grid, please update services.yml
@4000000062476978025caaec INFO:device_service:Registering service grid for client a01 at path com.victronenergy.grid.mqtt_a01_g1
@400000006247697805875a14 *** starting dbus-mqtt-devices ***
@400000006247697928efb6a4 -------- dbus_mqtt_devices, v0.4.1 is starting up --------
@400000006247697928efd1fc INFO:logger:Loglevel set to INFO
@400000006247697929ddbc3c INFO:device_manager:Using portalId <id>
@40000000624769792a01de3c INFO:mqtt_gobject_bridge:[Init] Connecting to local broker
@40000000624769792c684364 INFO:device_manager:[Connected] Result code 0
@40000000624769b61c22146c INFO:device_manager:Received device status message {'clientId': 'a01', 'connected': 1, 'version': 'v1.0 ALPHA', 'services': {'t1': 'temperature', 'pv1': 'pvinverter', 'pv2': 'pvinverter', 'g1': 'grid'}}
@40000000624769b61c466d1c INFO:device:**** Registering device: a01, services: {'t1': 'temperature', 'pv1': 'pvinverter', 'pv2': 'pvinverter', 'g1': 'grid'} ****
@40000000624769b61c4e4104 INFO:device:Registering Service temperature for client a01
@40000000624769b61c56a95c INFO:device_service_config:About to open config file
@40000000624769b62fb347e4 INFO:device_service:Registering service temperature for client a01 at path com.victronenergy.temperature.mqtt_a01_t1
@40000000624769b63165d9e4 INFO:settingsdevice:Setting /Settings/Devices/mqtt_a01_t1/ClassAndVrmInstance does not exist yet or must be adjusted
@40000000624769b633d2421c INFO:vedbus:registered ourselves on D-Bus as com.victronenergy.temperature.mqtt_a01_t1
@40000000624769b634269bdc INFO:device_service:Registered Service com.victronenergy.temperature.mqtt_a01_t1 under DeviceInstance 5
@40000000624769b6342fcb6c INFO:device:Registering Service pvinverter for client a01
@40000000624769b634389d3c INFO:device_service_config:About to open config file
@40000000624769b70b1e4a64 INFO:device_service:Registering service pvinverter for client a01 at path com.victronenergy.pvinverter.mqtt_a01_pv1
@40000000624769b70d2e3abc INFO:settingsdevice:Setting /Settings/Devices/mqtt_a01_pv1/ClassAndVrmInstance does not exist yet or must be adjusted
@40000000624769b70f81d364 INFO:vedbus:registered ourselves on D-Bus as com.victronenergy.pvinverter.mqtt_a01_pv1
@40000000624769b70ffdecec INFO:device_service:Registered Service com.victronenergy.pvinverter.mqtt_a01_pv1 under DeviceInstance 5
@40000000624769b7100595dc INFO:device:Registering Service pvinverter for client a01
@40000000624769b7100d275c INFO:device_service_config:About to open config file
@40000000624769b72277f3a4 INFO:device_service:Registering service pvinverter for client a01 at path com.victronenergy.pvinverter.mqtt_a01_pv2
@40000000624769b7248d4eb4 INFO:settingsdevice:Setting /Settings/Devices/mqtt_a01_pv2/ClassAndVrmInstance does not exist yet or must be adjusted
@40000000624769b726d980d4 INFO:vedbus:registered ourselves on D-Bus as com.victronenergy.pvinverter.mqtt_a01_pv2
@40000000624769b7275632b4 INFO:device_service:Registered Service com.victronenergy.pvinverter.mqtt_a01_pv2 under DeviceInstance 6
@40000000624769b7275e02b4 INFO:device:Registering Service grid for client a01
@40000000624769b727659fec INFO:device_service_config:About to open config file
@40000000624769b739894944 INFO:device_service_config:No configuration for Service grid, please update services.yml
@40000000624769b739d38914 INFO:device_service:Registering service grid for client a01 at path com.victronenergy.grid.mqtt_a01_g1
@40000000624769b800a254a4 *** starting dbus-mqtt-devices ***
@40000000624769b9229f172c -------- dbus_mqtt_devices, v0.4.1 is starting up --------
@40000000624769b9229f366c INFO:logger:Loglevel set to INFO
@40000000624769b9237464a4 INFO:device_manager:Using portalId <id>
@40000000624769b92396c184 INFO:mqtt_gobject_bridge:[Init] Connecting to local broker
@40000000624769b925e6e75c INFO:device_manager:[Connected] Result code 0

0.4.0.1:

[...]
@40000000624767c70bb62564 *** starting dbus-mqtt-devices ***
@40000000624767c82d14fe24 -------- dbus_mqtt_devices, v0.4.1 is starting up --------
@40000000624767c82d15197c INFO:logger:Loglevel set to INFO
@40000000624767c82df3adf4 INFO:device_manager:Using portalId <id>
@40000000624767c82e1612a4 INFO:mqtt_gobject_bridge:[Init] Connecting to local broker
@40000000624767c8305924d4 INFO:device_manager:[Connected] Result code 0
@400000006247681a2621cd7c INFO:device_manager:Received device status message {'clientId': 'a01', 'connected': 1, 'version': 'v1.0 ALPHA', 'services': {'t1': 'temperature', 'pv1': 'pvinverter', 'pv2': 'pvinverter', 'g1': 'grid'}}
@400000006247681a2645727c INFO:device:**** Registering device: a01, services: {'t1': 'temperature', 'pv1': 'pvinverter', 'pv2': 'pvinverter', 'g1': 'grid'} ****
@400000006247681a264d2724 INFO:device:Registering Service temperature for client a01
@400000006247681a26550e94 INFO:device_service_config:About to open config file
@400000006247681b03a7dffc ERROR:device_service_config:Unexpected error: <class 'yaml.parser.ParserError'>
@400000006247681b044fa14c INFO:device_service:Registering service temperature for client a01 at path com.victronenergy.temperature.mqtt_a01_t1
@400000006247681b0605e0b4 *** starting dbus-mqtt-devices ***
[...]

Change VRM device ID

Hello everyone, it is possible to change the VRM Device ID.I use the Louis DB driver for my JKBMs and this driver, like this driver, uses the ID 1.The adapter is excellent, thank you for that

How to remove an old sensor from VRM Portal (online)?

Hi, thank you for providing this code, enabling us to easily integrate MQTT sensors into VRM installations. It is currently running very smoothly on a Raspberry Pi in a camper installation.

I have abused the implementation somewhat, by skipping the MQTT registration entirely on my sensor (to enable deep sleep and maximize battery life). The registration and formatting to the portal ID is now done in Node Red; my sensor only publishes its own data via ESP Now.

Having worked recently on the installation with a colleague (it's not mine) we have swapped out the sensor in favor of another one. During this, i have changed the sensor IDs/names as well, requiring new topics. However, even after posting a "connected":0 key/value to the old topic, it didn't go away from the VRM portal. It is still visible and cannot be removed by the device list, since the devices through this driver do not appear there:

grafik

The VRM instance, "1" is not handed out to newer devices so some part of the system must still know that the device still exists.
Is there a possibility to remove the device remotely without SSH? It will be a few days before I can get back to the unit physically and enter it through SSH.

Best regards

How to set up a second gridmeter?

To display the heatpump I would like to add a second gridmeter.
But if I add a second one, it is displayed with the first one. Only in the portal settings, I see the device.

PV Inverter not showing up

Hi,

i try to push "AC/Power" to the venus (with OpenHab rule Javascript).

var energie = items['Active_power']; actions.get('mqtt', 'mqtt:broker:VenusOS').publishMQTT('W/xxxxxxx/pvinverter/1/Ac/Power', '{"value": ' + energie + ' }');

Init:
actions.get('mqtt', 'mqtt:broker:VenusOS').publishMQTT('device/pv001/Status', '{ "clientId": "pv001", "connected": 1, "version": "v1.0 ALPHA", "services": {"pv1": "pvinverter"} }');

PV-Inverter shoes up in Settings (Remote console und VRM Portal) but not in the dashboard (Remote console und VRM Portal)
I changed the "services.yml" already to get the role thing, but it is still not showing up.

What am I missing or doing wrong?

GPS Driver

Hi,

on my camper I've a router with an external GPS antenna. This device could easily send the position data to my Cerbo GX via MQTT.

I’m already using dbus-mqtt-devices for tank and temperature devices. Would it be possible to add a GPS driver?

Thanks!

Markus

Feature Request: List, Add, Remove devices

Hello,

to spread this tool as robust as possible into the world I would like to use it the following way.
I would like to:

  • Install the tool via your installer (ok)
  • I would like to add 1 grid and 2 pv inverter, without knowledge (feature request)
    --> go via SSH on the system
    --> call: ./dbus-mqtt-devices add grid NAME ATTR1 ATTR2 ...
    --> call: ./dbus-mqtt-devices add pvinverter NAME_1 ATTR1 ATTR2 ...
    --> call: ./dbus-mqtt-devices add pvinverter NAME_2 ATTR1 ATTR2 ...

In this case the mqtt magic behind add and remove would be hardcoded per device via python.
In my ideal world no "normal" user would need to understand this.

After the devices are created they should be visible in victron (first magic moment).
--> Then i can read some docu per device type and browse with MQTT Explorer on real existing topics per device.

Further more, for cleanup and testing a "list" and "remove" would be great
--> call: ./dbus-mqtt-devices list all
---> Would output a list of all added devices with the important information

--> call: ./dbus-mqtt-devices remove all
--> call: ./dbus-mqtt-devices remove MAGIC_ID //would remove (connect=0) this specific device.

From my knowlegde as programmer I would hope, that this is not a big task to code, but would massive push all users and reduce documentation needs for so much detailes, because the complex stuff would be capsuled.

Best regards
Sebastian

Epever Solar Charger

Moin,
ich hoffe das mir hier jemand eventuell auf deutsch weiter helfen kann ansonsten muss ich mit dem Übersetzer arbeiten.
Ich möchte meine beiden Epever Laderegler mit in dem Venus OS integrieren.
Die Laderegler sind bereits mit einem anderen RaspberryPi verbunden und stellen alle Werte über MQTT zu Verfügung.
Ich habe dbus-mqtt-devices nach Anleitung installiert.
Ich verstehe nicht wie und wo ich die Geräte registrieren kann. Geht das alles über Node-RED? Kann mir jemand ein Beispiel Flow zur Verfügung stellen damit ich die Zusamenhänge verstehen kann und sehe wo ich was eintragen muss.

Vielen dank Rudi

Cerbo GX crashes when writing to grid L1/L2 topics

Note: My current setup is off-grid. I want to validate that I can get the sensor values into ESS before I make the grid connection.

I am able to write to Ac/Energy and Ac/Power without issue. I can also write to L1/Voltage and L2/Voltage. But if I write to L*/Power or L*/Current the screen crashes. If I leave my client connected long enough entire Cerbo will reboot.

dbus-mqtt-device logs:

@4000000063dc161125893314 INFO:device_manager:Received device status message {'clientId': 'ctsensor', 'connected': 1, 'version': '1', 'services': {'L1': 'grid'}}
@4000000063dc1611259a0f7c INFO:device:**** Registering device: ctsensor, services: {'L1': 'grid'} ****
@4000000063dc161125a5db04 INFO:device:Registering Service grid for client ctsensor
@4000000063dc161125b19ad4 INFO:device_service_config:About to open config file
@4000000063dc16112e44eebc INFO:device_service:Unregistered mqtt_ctsensor_L1 from dbus
@4000000063dc16120f1c474c INFO:device_service:Registering service grid for client ctsensor at path com.victronenergy.grid.mqtt_ctsensor_L1
@4000000063dc16121233c07c INFO:settingsdevice:Setting /Settings/Devices/mqtt_ctsensor_L1/ClassAndVrmInstance does not exist yet or must be adjusted
@4000000063dc161217c1a464 INFO:vedbus:registered ourselves on D-Bus as com.victronenergy.grid.mqtt_ctsensor_L1
@4000000063dc161218a6b11c INFO:device_service:Registered Service com.victronenergy.grid.mqtt_ctsensor_L1 under DeviceInstance 1
@4000000063dc161218d81d74 INFO:device_manager:publish {'portalId': '102c6b64af99', 'deviceInstance': {'L1': '1'}} to device/ctsensor/DBus, status is 0
@4000000063dc163d19a44ee4 INFO:device_manager:Received device status message {'clientId': 'ctsensor', 'connected': 0, 'version': '1'}
@4000000063dc163d1d1f5c44 INFO:device_service:Unregistered mqtt_ctsensor_L1 from dbus
@4000000063dc163d1d1f7f6c INFO:device:Removed Service L1 from client ctsensor
@4000000063dc163d1d1f8b24 INFO:device_manager:**** Unregistering device ctsensor ****
^C

MQTT Explorer:

image

Mosquitto_pub:

❯ mosquitto_sub -h venus.local -t "device/#" -t "W/#" -v
device/ctsensor/Status {"clientId": "ctsensor", "connected": 1, "version": "1", "services": {"L1": "grid"}}
device/ctsensor/DeviceInstance {"L1": "1"}
device/ctsensor/DBus {"portalId": "102c6b64af99", "deviceInstance": {"L1": "1"}}
W/102c6b64af99/grid/1/Ac/L1/Voltage {"value": "120.2"}
W/102c6b64af99/grid/1/Ac/L2/Voltage {"value": "120.2"}
W/102c6b64af99/grid/1/Ac/L1/Current {"value": "11.98"}
W/102c6b64af99/grid/1/Ac/L2/Current {"value": "18.51"}
W/102c6b64af99/grid/1/Ac/L1/Power {"value": "1411.1"}
W/102c6b64af99/grid/1/Ac/L2/Power {"value": "2154.1"}
W/102c6b64af99/grid/1/Ac/Energy/Forward {"value": "30.12"}
W/102c6b64af99/grid/1/Ac/Power {"value": "3565"}
device/ctsensor/Status {"clientId": "ctsensor", "connected": 0, "version": "1"}

Before mqtt client connects:

image

After mqtt client writes to L1/L2 current/power:

image

sending data from ESP32 to cerbo gx

Hi there, I'm working on a solar project which its battery voltage is 384VDC. i will design a esp32 board to monitor the battery voltage, power from inverter, and also start and stop generator when needed. but i will like to remotely monitor the esp32 through a cerbo gx. can you assist me ?

Dokumentation request

Hello Martin,

first of all. Thanks for the great project.
I try to connect a "Powerfox" Grid meter to my Victron management system.
Until now I have a MQTT Topic which updates every 3 sec. the WATT number from all phases.

I am not sure if this questions are right in the Issue section, but i did not find a discussion page or something like that.

Now I have to ask stupid questions. But maybe this helps to enhance the documentation.

  1. clientId
  • On which MQTT server or client is this generated?
  • How can I find it?
    At the moment I use my own mosquito, Redflow and MQTT Explorer to try to generate exact the tuple your driver would need.
    So I play locally before pushing wrong data to your driver.
  1. And maybe you could also add a "grid" example?

  2. "devices/*" vs "device"
    In the documentation I am not sure which is the right MQTT root path.
    device"s" vs. device?

Request for support com.victronenergy.solarcharger

I am currently trying to add a solarcharger,
to feed in data from an additional power-source (a balkony system
where i measure the power with tasmota in mqtt).
My goal is to change the mqtt-Data from Tasmota via Nodered to be compatible to this
driver so i can see the data in the vrm plots and graphs.

My current work in Progress is below.
I see the device popping up and showing some numbers, but it stays in not activ status.
Can someone help me where i might have an error?
Has someone a working example? I tried to stay basic, then i added addidional values.
If I add the commented out # ErrorCode, it does not show up at all. Why?

best regards, Joe

solarcharger:
  ProductId:
    default: 41074 # 
  CustomName:
    default: "Solarcharger"
    persist: true
  NrOfTrackers:
    description: "Trackers"
    default: 1
  Pv/P: # 
    description: "W"
    persist: true
    default: 0
    format: "{} W"
  Pv/0/P: # 
    description: "W"
    persist: true
    default: 0
    format: "{} W"
  Pv/0/V: #
    description: "V"
    default: 0
    format: "{} V"
  Pv/V: # DD
    description: "V"
    default: 0
    format: "{} V"
  Dc/0/Current: # DD
    description: "A"
    default: 0
    format: "{} A"
  Dc/0/Voltage: # DD
    description: "V"
    default: 52
    format: "{} V"
  Yield/Power: #
    description: "W"
    default: 0
    format: "{} W"
  Yield/SYSTEM: #
    description: "W"
    default: 0
    format: "{} W"
  Yield/User: #
  Link/NetworkStatus:
    description: ""
    default: 4 # 0x8
  Link/NetworkMode:
    description: ""
    default: 13 # 0x8
  Link/ChargeCurrent:
    description: ""
    default: 20 # 0x8
#  ErrorCode
#    description: "0=No Error"
#    default: 0 # not showing in in console???
#  Connected:
#    description: ""
#    default: 1 #
  Mode:
    description: ""
    default: 1 #
  MppOperationMode:
    description: ""
    default: 2 #

Installation error on CerboGX

Hello,

I have the problem that when I want to install on my CerboGX I get an installation error.

ERROR: Command errored out with exit status 1:
  command: /usr/bin/python /usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmps13l3ngw
      cwd: /var/volatile/tmp/pip-install-xn7uhxjb/PyYAML
 Complete output (48 lines):
 running egg_info
 writing lib/PyYAML.egg-info/PKG-INFO
 writing dependency_links to lib/PyYAML.egg-info/dependency_links.txt
 writing top-level names to lib/PyYAML.egg-info/top_level.txt
 Traceback (most recent call last):
   File "/usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py", line 257, in <module>
     main()
   File "/usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py", line 240, in main
     json_out['return_val'] = hook(**hook_input['kwargs'])
   File "/usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py", line 91, in get_requires_for_build_wheel
     return hook(config_settings)
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_wheel
     return self._get_build_requires(config_settings, requirements=['wheel'])
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 323, in _get_build_requires
     self.run_setup()
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 338, in run_setup
     exec(code, locals())
   File "<string>", line 288, in <module>
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/__init__.py", line 107, in setup
     return distutils.core.setup(**attrs)
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/_distutils/core.py", line 185, in setup
     return run_commands(dist)
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
     dist.run_commands()
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
     self.run_command(cmd)
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/dist.py", line 1234, in run_command
     super().run_command(command)
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
     cmd_obj.run()
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/command/egg_info.py", line 314, in run
     self.find_sources()
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/command/egg_info.py", line 322, in find_sources
     mm.run()
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/command/egg_info.py", line 551, in run
     self.add_defaults()
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/command/egg_info.py", line 589, in add_defaults
     sdist.add_defaults(self)
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/command/sdist.py", line 104, in add_defaults
     super().add_defaults()
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/_distutils/command/sdist.py", line 251, in add_defaults
     self._add_defaults_ext()
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/_distutils/command/sdist.py", line 336, in _add_defaults_ext
     self.filelist.extend(build_ext.get_source_files())
   File "<string>", line 204, in get_source_files
   File "/var/volatile/tmp/pip-build-env-ml43w1px/overlay/lib/python3.8/site-packages/setuptools/_distutils/cmd.py", line 107, in __getattr__
     raise AttributeError(attr)
 AttributeError: cython_sources
 ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python /usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmps13l3ngw Check the logs for                                full command output.

Setting up a "Multi" inverter

I have successfully imported the basics of my Hybrid inverter functionality to Venus OS. But there is one thing that I have not managed to figure out.

AC In and AC Out only show up as single phase. But when I check VRM, then I can see and display all three phases separately
image
vs
image

This is what I have in my services.yml for my inverter setup:
image

pvinverter not in dashboard

Hi,
have installed dbus-mqtt-devices latest version on Cerbo v2.91.
Pvinverters will be registered and are listed as devices in VRM with deviceInstance number.
I can also publish values to them and values are showed in Cerbo remote control.

image

But the pvinverters are not showed on the VRM Portal Dashbord neither on Cerbo display.

image

In the configuration of the pvinverters i have no "Setup" entry:

image

image

PV Inverter 31 is a ET112 which is metering whole energy of the inverters, but i want to display each pvinverter standalone in the VRM Portal and Cerbo.

All pvinverters are default on AC-IN1, but i have all on AC-OUT,how can i change this? Because Setup entrypoint is not available.

Thanks,
Peter

possible to add services like ac-charger and dc-system?

I tuned my Victron ESS with

  • an additional charger to load the batteries faster when there is much sun
  • an additional small 300W-Inverter with better efficiency

No i want to have them in the Venus-GUI To get correct calculations of the house consumption

I guess i have to adapt services.yml?

Anybody did this before?

What is the right service to show up in the main GUI site - only very few are possible?

I think the best would be for my purpose a DC-System?

Why are some lines in services.yml for "grid" commented?

Hi Martin,
do you know why the lines in services.yml for grid are commented?
I have a very small installation (HM-600 / AhoyDTU, venusOS, Smartmeter / Tasmota) for a friend and would like to emulate a gridmeter. It seems to work, but the visualisation in VRM isn't nice.

thx
Sebastian

grafik

ERROR:mqtt_gobject_bridge:[Disconnected] Lost connection to broker

When running : more /var/log/dbus-mqtt-devices/current
I get this error message: ERROR:mqtt_gobject_bridge:[Disconnected] Lost connection to broker
I think this prevents me from adding sensors and values
Any suggestions on how to solve?

I''m running a R.Pi 4 (1.15) so can't run an official version download from Victron...

Thanks for clear description :)

Thanks,

Boudewijn

Setting up an LED charge indicator

The Heidelberg Energy display is difficult to see. The ESP should still have a free pin. This could be used, for example, to control an LED NeoPixel Ring WS2812 with 32 LEDs as a charge indicator. Since 5V has to be placed in the box anyway, you could use the voltage as the power supply for the LED. A simple running light during the charging process would be enough.

PV Inverter missing after reboot

I hope I tested enough for this issue.

Problem:
After power loss or reboot from the CCGX system, the devices are not registered anymore.

Normal behaviour:

  • CCGX is online + MQTT + Driver
  • Tasmota PV Inverter Rule: Register device with needed MQTT Device ... after first successfull MQTT connect. (working)

Assumtion Bug:

  • Tasmota Devices are online
  • CCGX is rebooting
  • CCGX MQTT Server is online (driver not)
  • Tasmota Devices push the registration MQTT message (working) -> I see it in the MQTT explorer
  • CCGX starting the driver DBUS
  • Devices are not registered ... :-(
  • Reboot of Tasmota devices, with second registration and so on, will solve the issue.

From what I see, on the MQTT side all looks perfekt.

I had the issue after a complete power shutdown, and then I did not see my PV inverter anymore and checked what could be wrong.

Adopt services.yml for pvinverters

Pls add following lines and/or adopt some lines in the pvinverter section:

image

to:

AllowedRoles:
   default: ["grid", "pvinverter", "genset", "acload"]
 Role:
   description: "grid, pvinverter, genset, acload"
   persist: true
   default: "pvinverter"

The default line in AllowedRoles has some format issues with ''.

And adopt the comment field:

image

to:

ProductId:
   default: 45069 # 45069 ET340, 45068 ET112 - 0xB00D, ESS Demo mode uses 45058

ET340 is for 3 phases and ET112 is for one phase metering.

With this changes it is possible to change default location of the inverter from AC-OUT to AC-IN or vice versa in the Cerbo settings menue.

Thanks,
Peter

Detect device failure

Hi,
I simulate a Grid meter with an Shelly 3EM and everything is working fine.
The Shelly is polled using HTPP request.
But when stop polling the Shelly, the last valid values are still used by the Venus OS and operating continues.
Is there a possibilty to detect such an issue?
I would expect that the ESS stops working like with an original EM24 grid meter,

ModuleNotFoundError: No module named 'dataclasses'

Hi, i installed the Driver today but get a module Error

I am using a Cerbo GX with Firmware 2.92

`root@einstein:/data/drivers# ./dbus-mqtt-devices-0.5.1/bin/setup.sh
Setup dbus-mqtt-devices in /data/drivers/dbus-mqtt-devices-0.5.1 started
Ensure Python's Pip is installed
pip 20.0.2 from /usr/lib/python3.8/site-packages/pip (python 3.8)
Pip install module dependencies
Collecting PyYAML==6.0
Using cached PyYAML-6.0.tar.gz (124 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
ERROR: Exception:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 186, in _main
status = self.run(options, args)
File "/usr/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 331, in run
resolver.resolve(requirement_set)
File "/usr/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py", line 177, in resolve
discovered_reqs.extend(self._resolve_one(requirement_set, req))
File "/usr/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py", line 333, in _resolve_one
abstract_dist = self._get_abstract_dist_for(req_to_install)
File "/usr/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py", line 282, in _get_abstract_dist_for
abstract_dist = self.preparer.prepare_linked_requirement(req)
File "/usr/lib/python3.8/site-packages/pip/_internal/operations/prepare.py", line 515, in prepare_linked_requirement
abstract_dist = _get_prepared_distribution(
File "/usr/lib/python3.8/site-packages/pip/_internal/operations/prepare.py", line 95, in _get_prepared_distribution
abstract_dist.prepare_distribution_metadata(finder, build_isolation)
File "/usr/lib/python3.8/site-packages/pip/_internal/distributions/sdist.py", line 38, in prepare_distribution_metadata
self._setup_isolation(finder)
File "/usr/lib/python3.8/site-packages/pip/_internal/distributions/sdist.py", line 96, in _setup_isolation
reqs = backend.get_requires_for_build_wheel()
File "/usr/lib/python3.8/site-packages/pip/_vendor/pep517/wrappers.py", line 151, in get_requires_for_build_wheel
return self._call_hook('get_requires_for_build_wheel', {
File "/usr/lib/python3.8/site-packages/pip/_vendor/pep517/wrappers.py", line 255, in _call_hook
raise BackendUnavailable(data.get('traceback', ''))
pip._vendor.pep517.wrappers.BackendUnavailable: Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py", line 63, in _build_backend
obj = import_module(mod_path)
File "/usr/lib/python3.8/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1014, in _gcd_import
File "", line 991, in _find_and_load
File "", line 961, in _find_and_load_unlocked
File "", line 219, in _call_with_frames_removed
File "", line 1014, in _gcd_import
File "", line 991, in _find_and_load
File "", line 975, in _find_and_load_unlocked
File "", line 671, in _load_unlocked
File "", line 843, in exec_module
File "", line 219, in _call_with_frames_removed
File "/var/volatile/tmp/pip-build-env-lhpek7qm/overlay/lib/python3.8/site-packages/setuptools/init.py", line 18, in
from setuptools.dist import Distribution
File "/var/volatile/tmp/pip-build-env-lhpek7qm/overlay/lib/python3.8/site-packages/setuptools/dist.py", line 42, in
from setuptools.config import setupcfg, pyprojecttoml
File "/var/volatile/tmp/pip-build-env-lhpek7qm/overlay/lib/python3.8/site-packages/setuptools/config/init.py", line 10, in
from . import setupcfg
File "/var/volatile/tmp/pip-build-env-lhpek7qm/overlay/lib/python3.8/site-packages/setuptools/config/setupcfg.py", line 18, in
from setuptools.extern.packaging.requirements import Requirement, InvalidRequirement
File "/var/volatile/tmp/pip-build-env-lhpek7qm/overlay/lib/python3.8/site-packages/setuptools/_vendor/packaging/requirements.py", line 8, in
from ._parser import parse_requirement
File "/var/volatile/tmp/pip-build-env-lhpek7qm/overlay/lib/python3.8/site-packages/setuptools/_vendor/packaging/_parser.py", line 10, in
from ._tokenizer import DEFAULT_RULES, Tokenizer
File "/var/volatile/tmp/pip-build-env-lhpek7qm/overlay/lib/python3.8/site-packages/setuptools/_vendor/packaging/_tokenizer.py", line 3, in
from dataclasses import dataclass
ModuleNotFoundError: No module named 'dataclasses'

Set up Victron module libraries
Set up device service to autorun on restart
Setup dbus-mqtt-devices complete`

Victron Wallbox support

Hello,

is it already possible to inject a Victron Wallbox?
com.victronenergy.evcharger

And how complex would it be?

Best regards
Sebastian

Display total solar is missing - Adding SMA Inverter

Hello
I have a question about the integration of a SMA inverter.
It is a Tripower X 20-50, which is unfortunately not automatically detected by Venus OS. That is why I have inserted the values via mqtt.
This also works so far only the solar yield is not displayed in the VRM. The following (red marked) parts are missing:

grafik

First of all: I did not make any adjustments in the services.yml.

Does anyone have an idea how I can include solar generation in the VRM portal?
Without the solar generation, unfortunately, the consumption values are not displayed correctly:
grafik

Installation error on RPi

since now I can´t install 0.6.2 on RPi with Venus 3.00 or 3.01:

root@raspberrypi4:/data/drivers# ./dbus-mqtt-devices-0.6.2/bin/setup.sh
dbus-mqtt-devices: Setup in /data/drivers/dbus-mqtt-devices-0.6.2 started
dbus-mqtt-devices: Checking to see if Python's Pip is installed
/usr/bin/python: No module named pip
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/all/Packages.gz.
Updated source 'all'.
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/Packages.gz.
Updated source 'cortexa7hf-neon-vfpv4'.
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/raspberrypi4/Packages.gz.
Updated source 'raspberrypi4'.
Installing python3-debugger (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-debugger_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-tkinter (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-tkinter_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-mailbox (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-mailbox_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-idle (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-idle_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-db (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-db_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-smtpd (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-smtpd_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-syslog (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-syslog_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-curses (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-curses_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-xmlrpc (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-xmlrpc_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-terminal (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-terminal_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-venv (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-venv_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-image (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-image_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-mmap (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-mmap_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-profile (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-profile_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-resource (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-resource_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing libjitterentropy2 (2.2.0) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/libjitterentropy2_2.2.0-r0_cortexa7hf-neon-vfpv4.ipk.
Installing libsysfs2 (2.1.0) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/libsysfs2_2.1.0-r5_cortexa7hf-neon-vfpv4.ipk.
Installing python3-doctest (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-doctest_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-pip (20.0.2) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-pip_20.0.2-r0_cortexa7hf-neon-vfpv4.ipk.
Installing rng-tools (6.9) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/rng-tools_6.9-r0_cortexa7hf-neon-vfpv4.ipk.
Installing python3-modules (3.8.13) on root
Downloading https://updates.victronenergy.com/feeds/venus/release/packages/dunfell/cortexa7hf-neon-vfpv4/python3-modules_3.8.13-r0_cortexa7hf-neon-vfpv4.ipk.
Configuring python3-debugger.
Configuring python3-tkinter.
Configuring libjitterentropy2.
Configuring libsysfs2.
Configuring rng-tools.
 Adding system startup for /etc/init.d/rng-tools.
Starting random number generator daemon.
Configuring python3-mailbox.
Configuring python3-idle.
Configuring python3-db.
Configuring python3-smtpd.
Configuring python3-syslog.
Configuring python3-curses.
Configuring python3-xmlrpc.
Configuring python3-terminal.
Configuring python3-venv.
Configuring python3-image.
Configuring python3-pip.
Configuring python3-mmap.
Configuring python3-doctest.
Configuring python3-profile.
Configuring python3-resource.
Configuring python3-modules.
dbus-mqtt-devices: Pip install module dependencies
Collecting PyYAML==6.0
  Downloading PyYAML-6.0.tar.gz (124 kB)
     |████████████████████████████████| 124 kB 2.9 MB/s
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python /usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmpep9wokuu
       cwd: /var/volatile/tmp/pip-install-qqs6mc58/PyYAML
  Complete output (48 lines):
  running egg_info
  writing lib/PyYAML.egg-info/PKG-INFO
  writing dependency_links to lib/PyYAML.egg-info/dependency_links.txt
  writing top-level names to lib/PyYAML.egg-info/top_level.txt
  Traceback (most recent call last):
    File "/usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py", line 257, in <module>
      main()
    File "/usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py", line 240, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "/usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py", line 91, in get_requires_for_build_wheel
      return hook(config_settings)
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_wheel
      return self._get_build_requires(config_settings, requirements=['wheel'])
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 323, in _get_build_requires
      self.run_setup()
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 338, in run_setup
      exec(code, locals())
    File "<string>", line 288, in <module>
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/__init__.py", line 107, in setup
      return distutils.core.setup(**attrs)
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/_distutils/core.py", line 185, in setup
      return run_commands(dist)
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
      dist.run_commands()
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
      self.run_command(cmd)
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/dist.py", line 1234, in run_command
      super().run_command(command)
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
      cmd_obj.run()
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/command/egg_info.py", line 314, in run
      self.find_sources()
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/command/egg_info.py", line 322, in find_sources
      mm.run()
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/command/egg_info.py", line 551, in run
      self.add_defaults()
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/command/egg_info.py", line 589, in add_defaults
      sdist.add_defaults(self)
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/command/sdist.py", line 104, in add_defaults
      super().add_defaults()
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/_distutils/command/sdist.py", line 251, in add_defaults
      self._add_defaults_ext()
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/_distutils/command/sdist.py", line 336, in _add_defaults_ext
      self.filelist.extend(build_ext.get_source_files())
    File "<string>", line 204, in get_source_files
    File "/var/volatile/tmp/pip-build-env-97kyqpxl/overlay/lib/python3.8/site-packages/setuptools/_distutils/cmd.py", line 107, in __getattr__
      raise AttributeError(attr)
  AttributeError: cython_sources
  ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python /usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /tmp/tmpep9wokuu Check the logs for full command output.
dbus-mqtt-devices: Set up Victron module libraries
dbus-mqtt-devices: Set up device service to autorun on restart
dbus-mqtt-devices: Adding device service to /data/rc.local
dbus-mqtt-devices: Setup complete
root@raspberrypi4:/data/drivers#

Please try yourself and confirm

How to remove a device?

How can I remove a device?
Is that even necessary?

While testing I created a lot of different devices. Now I have some unused device instances. Should they be released or doesn't that matter?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.