Vaillant eBUS hardware adapter (ebusd software) Thread

I request data for the dashboard via node-red, could be by modifying the csv, but this works for me:

Do you know if I export the flows as text, is my mqtt username and mqtt password in this export? Just by searching the text, it’s not there. But maybe it uses some encryption?

Did you sort this @glyn.hudson ? I have not been able to get flowrate data even with the edits to the /etc/default/ebusd and /etc/ebusd/mqtt-hassio.cfg suggested in this thread and eBUS hardware adapter (and ebusd software) Thread - #31 by psimonkey . Ebusd seems not to poll with this setup, as the results of ebusctl find -V never show the WaterThroughput having stored data, even after several hours.

I guess I shall have to try NR as per @fluppie007 or try editing the csv files.

You can poll by posting to the respective MQTT topic with a /get appended, e.g. ebusd/hmu/WaterThroughput/get. I’m doing this every 10 seconds in a script to update all relevant sensors.

No, I gave up. It’s baffling why there is not a standard ebusd config file for a Vaillant heat pump! Surely this must be a very standard use case! Everyone seems to muddling through and confused the whole time, or maybe that’s just me! I would love to write up a definitive guide to integrate ebusd into OpenEnergyMonitor if I ever manage to get it to work :rofl:

I can’t use home assistant since the particular Vaillant I’m testing is remote to me and I only have shell access to a raspi on-site. Installing a full HA instance just to get MQTT data seems a total over kill!

That looks really interesting, I like the simplicity of manual polling. Could you share your flow? The flow export does not include credentials. You can search the test to double check.

1 Like

Just doing that is not enough; it will just return the last cached value. You need to specify a max age too. Or configure ebusd to poll these values every X seconds.

Based on this description you’re currently retrieving a lot of stale data. :face_with_peeking_eye:

:100: — mind-boggling indeed. There is a PR on the official repo where many of us are collaborating on exactly this problem.

The compounded challenge is that every Vaillant heatpump needs slightly different configuration. :melting_face:

The real problem here is Vaillant being a terrible partner: even customers who just want to monitor things (not even tweak/adjust/control) are left to figure it out for themselves. It would cost them NOTHING to share the specs of how these devices communicate!

What we need is regulation here: MID-approved electricity and heat meters in every heatpump, with standardized local data access. Maybe in a decade :crossed_fingers:

2 Likes

I have read this multiple times and can say that it just isn’t true for me. For noisy data (flow throughput, yield power) I am getting a new (different) value every 10 seconds, i.e. every time I poll. I have not modified the default poll interval or set any of the parameters in the csv to any specific polling priority (rX).

What’s the reason for this? How can we figure out the configuration we need for each particular unit?

So true! The UK service guys also appear to know very little about how things work. Add a cooling resistor and they just shrug shoulders when the cooling doesn’t work as it should.

Not just you! I’m still trying to progress getting ebusd data into EmonCMS, currently using https://github.com/john30/ebusd-configuration/files/11194651/08.hmu.csv. My trouble is that it takes me an age trying to understand the coding of all the various components along the route (long Covid doesn’t help). I (probably) have got what I need from ebusd polling now, with data sent to MQTT. I haven’t had the concentration to make the next step from MQTT into EmonCMS. Can’t face that just yet.
I agree that producing a simple “how to” document for this integration would be worthwhile. If I get as far as success then I’m happy to contribute, although I suspect many here could contribute better solutions.

1 Like

In theory it auto-detects this. Did for me anyway…

Reason: Vaillant uses different messages for each device and does not publish any info about these.

How to figure out: reverse engineering — pressing buttons and observing what messages these trigger, and comparing the contents of those messages with what your thermostat and indoor unit show.

See 4. Configuration · john30/ebusd Wiki · GitHub for docs.

For Vaillant aroTHERM Split and Plus heatpumps, see New entries for 08.hmu.csv by JongsmaSimon · Pull Request #330 · john30/ebusd-configuration · GitHub (I’m in there too :wave: )

Only if you are using older Vaillant devices.

Auto-detected for me with Arotherm+ 7kw

Fascinating! Maybe the UK models are different. It’s clear that there’s plenty of deviations and exceptions in the model numbers (which impact which config files are loaded!), so that could explain it.

It’d be great if you could contribute your system info to the aforementioned PR :blush::pray:

The initial issue that I had was that it wasn’t auto-detecting because there was an issue with the config path. This is what you can expect to see if/when it detects the file"

address 08: slave #11, scanned "MF=Vaillant;ID=HMU00;SW=0901;HW=5103", loaded "vaillant/08.hmu.csv"

Indeed, that’s one of the many stumbling blocks to get this up and running. But that 08.hmu.csv file is not complete enough for it to work for most aroTHERM Plus/Split owners. See the PR I linked above. A lot of additions are needed for crucial information to become available.

I have these auto-loaded:

  • “MF=Vaillant;ID=VR_71;SW=0104;HW=0503”, loaded “vaillant/26.vr_71.csv”
  • “MF=Vaillant;ID=HMU00;SW=0607;HW=5103”, loaded “vaillant/08.hmu.csv”
  • “MF=Vaillant;ID=BASV0;SW=0217;HW=8803”, loaded “vaillant/15.basv.csv”

I also have these without a config loaded:

  • “MF=Vaillant;ID=VR921;SW=2801;HW=5703”

Even with these configured, I still have a bunch of things that are invalid/unreadable. Don’t expect a polished product because it’s not. If i remember either tha basv or hmu file I pulled from a branch, as it had more in it that the version in master.

@glyn.hudson Had any thoughts on integrating ebusd → Emoncms as an alternative to heat and potentially also electricty meters? I believe all the information (flow/return temp, flow rate, external temp, room temp etc) is avaialble and aroTherm+ we know includes a MID-approved elecricity meter.

The only potential concern is that I think Vaillant may only report consumption from the external unit, which doesn’t include any internal valves/pumps etc. This would be less of an issue with simple open-loop systems though.

Could be a much simpler/cheaper (no plumbing required) way to get started using Emoncms for heat-pump monitoring than a full heat pump monitoring package.

@glyn.hudson a bit late but hereby my flows.

[{"id":"040b65ed35d1899b","type":"inject","z":"195603df6813fb1c","name":"ebusd read HMU iedere 10 min","props":[],"repeat":"600","crontab":"","once":true,"onceDelay":"9","topic":"","x":220,"y":20,"wires":[["c6a846f4c84d5e35"]]},{"id":"6bba3484e5a18008","type":"debug","z":"195603df6813fb1c","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":700,"y":40,"wires":[]},{"id":"c6a846f4c84d5e35","type":"http request","z":"195603df6813fb1c","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://192.168.1.131:8889/data/hmu?maxage=60","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":510,"y":40,"wires":[["6bba3484e5a18008"]]},{"id":"38e3119d9d3b0e38","type":"inject","z":"195603df6813fb1c","name":"ebusd read iedere 15s","props":[{"p":"payload"}],"repeat":"900","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":170,"y":160,"wires":[["e849eec2631f9bd6","c1ceda44ddb35251","a176cf135e297609","4a6f64aaedfda56b","1a3c5137c09a045c","04f01101a1bbae10","bef3ab4ff0c5c8f0"]]},{"id":"e849eec2631f9bd6","type":"mqtt out","z":"195603df6813fb1c","name":"ebusd/hmu/BuildingCircuitPumpPower/get","topic":"ebusd/hmu/BuildingCircuitPumpPower/get","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"9238c12aafcf708d","x":560,"y":220,"wires":[]},{"id":"c1ceda44ddb35251","type":"mqtt out","z":"195603df6813fb1c","name":"ebusd/hmu/WaterThroughput/get","topic":"ebusd/hmu/WaterThroughput/get","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"9238c12aafcf708d","x":540,"y":280,"wires":[]},{"id":"a176cf135e297609","type":"mqtt out","z":"195603df6813fb1c","name":"","topic":"ebusd/hmu/CurrentConsumedPower/get","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"9238c12aafcf708d","x":560,"y":340,"wires":[]},{"id":"4a6f64aaedfda56b","type":"mqtt out","z":"195603df6813fb1c","name":"","topic":"ebusd/hmu/CurrentYieldPower/get","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"9238c12aafcf708d","x":540,"y":400,"wires":[]},{"id":"1a3c5137c09a045c","type":"debug","z":"195603df6813fb1c","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":460,"y":160,"wires":[]},{"id":"04f01101a1bbae10","type":"mqtt out","z":"195603df6813fb1c","name":"","topic":"ebusd/hmu/FlowTemp/get","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"9238c12aafcf708d","x":510,"y":460,"wires":[]},{"id":"bef3ab4ff0c5c8f0","type":"mqtt out","z":"195603df6813fb1c","name":"","topic":"ebusd/hmu/ReturnTemp/get","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"9238c12aafcf708d","x":520,"y":520,"wires":[]},{"id":"ddec63ee86f94448","type":"mqtt out","z":"195603df6813fb1c","name":"ebusd/hmu/Status01/get","topic":"ebusd/hmu/Status01/get","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"9238c12aafcf708d","x":510,"y":580,"wires":[]},{"id":"1ce5f156c914aeec","type":"inject","z":"195603df6813fb1c","name":"ebusd read iedere 60s","props":[],"repeat":"3600","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":170,"y":580,"wires":[["ddec63ee86f94448"]]},{"id":"b0e0543524c3ba6d","type":"inject","z":"195603df6813fb1c","name":"ebusd read 700 thermostaat iedere 10 min","props":[],"repeat":"600","crontab":"","once":true,"onceDelay":"140","topic":"","x":230,"y":100,"wires":[["c24e4101afbc3902"]]},{"id":"d00342b446d4616d","type":"debug","z":"195603df6813fb1c","name":"debug 3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":700,"y":100,"wires":[]},{"id":"c24e4101afbc3902","type":"http request","z":"195603df6813fb1c","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://192.168.1.131:8889/data/700?maxage=60","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":510,"y":100,"wires":[["d00342b446d4616d"]]},{"id":"9238c12aafcf708d","type":"mqtt-broker","name":"Lokale MQTT broker","broker":"127.0.0.1","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]

Thanks for sharing this: it was really helpful for a node-red complete novice!

I’m using Ebus adapter 5 and the current ebud release, with configuration from the master branch at GitHub - jonesPD/ebusd-configuration: ebusd configuration files cloned locally. csvs in the current release have moved on a bit I think, so the flows require minor reconfiguration to work for anyone. Nevertheless, its easy to see how. Do you have a custom file for --mqttint or are you using /etc/ebusd/mqtt-hassio.cfg unedited?

I’m still wondering whether a script running ebusctl reads under cron would be an easier solution for me.

As an aside, @glyn.hudson ebusctl read -f -V -c hmu BuildingCircuitFlow returns the flow rate in l/hr correctly with my configuration

I now have this running every minute via cron

#!/bin/bash

ebusctl r -f -c hmu EnergyIntegral
ebusctl r -f -c hmu CompressorSpeed
ebusctl r -f -c hmu CompressorUtilization
ebusctl r -f -c hmu Status01
ebusctl r -f -c basv z1roomtemp
ebusctl r -f -c basv z1ActualRoomTempDesired
ebusctl r -f -c hmu waterthroughput
ebusctl r -f -c hmu currentconsumedpower
ebusctl r -f -c hmu currentyieldpower
ebusctl r -f -c hmu BuildingCircuitPumpPower
ebusctl r -f -c basv z1ActualRoomTempDesired
ebusctl r -f -c basv Hc1ActualFlowTempDesired
ebusctl r -f -c hmu FlowTemp
ebusctl r -f -c hmu ReturnTemp

I’ve hashed out the following line in /etc/ebusd/mqtt-hassio.cfg so that every field gets squirted across to Home Assistant for me.

#filter-name = status|temp|humidity|yield|count|energy|power|runtime|hours|starts|mode|curve|^load$|^party$|sensor|timer

Leaving the filter line in means not all fields go across.

From HA configuration.yaml I then send the fields over to emoncms.

emoncms_history:
  api_key: 3xxxxxxxxxxxxxxxxxxxxxx9
  url: https://emoncms.org
  inputnode: 99
  whitelist:
    - sensor.ebusd_hmu_status01_temp1
    - sensor.ebusd_hmu_status01_temp1_2
    - sensor.ebusd_broadcast_outsidetemp_temp2
    - sensor.ebusd_basv_z1roomtemp_tempv
    - sensor.ebusd_hmu_waterthroughput
    - sensor.ebusd_hmu_buildingcircuitflow
    - sensor.ebusd_hmu_currentconsumedpower
    - sensor.ebusd_hmu_currentyieldpower
    - sensor.ebusd_hmu_energyintegral_integral
    - sensor.ebusd_basv_hc1actualflowtempdesired_tempv
    - sensor.ebusd_hmu_buildingcircuitpumppower
    - sensor.ebusd_basv_z1actualroomtempdesired_tempv
    - sensor.ebusd_hmu_compressorspeed
    - sensor.ebusd_hmu_flowtemp
    - sensor.ebusd_hmu_returntemp_temps2

A bit convoluted, but works for me.