Add support for 720-based regulators#564
Conversation
Co-authored-by: Samuel Cabrero <samuel@orica.es>
|
@john30 Feel free to ping me when you've updated the web service. While I certainly have some concerns when it comes to this entire setup, I'll be happy to give it another try! |
|
@burmistrzak |
I understand your concerns and actually I'm not that happy with it either as it consumes resources I'd rather not spend in the first place. However, the device memory is just too small and I'm already looking for other alternatives (like the ESP32-C5) that support PSRAM where all that is no issue any more. In parallel I'm planning on adding the option to BYOD, i.e. to create your own version of the firmware online with the needed files bundled into it so that the device does not need an online service after that anymore. ok, same problem you might say but I don't see a lot of alternatives with all the limitations. not having the firmware open source is for a good reason and I'm sure you understand that I don't want to spend my time answering tickets for other device manufacturers (which is already happening on ebusd btw) that actually expect me to do that for no benefit at all. and the amount of time I spend for everything around ebus is just crazy - basically every free minute I have and even stopping other private activities due to that. how do I ensure the web service stays online - well just like I did for years and years with the ebusd config webservice (before I moved it to github pages). if the server is unreachable the devices would just continue to work as basically they only contact it to download newer versions of the definitions. once downloaded these are stored on the device anyway. contingency/succession plan: just like for ebusd I would say. the amount of reasonable contribution is almost 0 there btw. all the source is on github anyway and a colleague of mine would be able to make it public in case I die (if you meant that). protection: it is as protected as it can be I'd say, but of course sitting on a hosting provider with all its pros and cons. guarantee: how much guarantee can be provided by a developer doing it for free? do I really need to answer that? anyway, I don't have any plans to drop the pure interface mode of ebusd-esp32 if that's what you meant. I recently spent almost a whole weekend to track down a frustrating issue generated by espressif for the Raspi GPIO communication, so I guess that should be enough proof of committment. wrt development: as long as the firmware is closed it is rather impossible to have co-workers for it unless they can be trusted 100% as an NDA is just useless in that context |
|
I've sent an email to John WRT what I found to be missing on the TSP side, in order to correctly implement our B524 discoveries into ebusd. It basically sums up to: No instance parameterizationMulti-instance groups (HC, Zones, Radio Sensors) require full copy-paste duplication per instance. The current 15.ctlv2.tsp has 3 instances each for GG=0x02 and GG=0x03, totalling significant duplication. For groups like GG=0x09 (Radio Sensors VRC7xx) with up to 11 instances and 32 registers per instance, this would mean 352 duplicated model definitions. Some groups have dynamic number of instances (Primary Heating Generators have support for two devices on some VRC7xx series and eight devices on newer ones). A parameterized No conditional/gated registersSome B524 registers are conditionally present: dormant registers (ACK + 0 bytes payload) when the associated feature is not configured (cooling, quick mode). Registers gated by TSP has no mechanism to express "this register only exists when condition X is met." Everything is unconditionally present. A @condition or @gate decorator would be valuable for representing the real hardware behavior. No dual-opcode awareness within a groupGG=0x09 means completely different things on OP=0x02 (local radio sensor config / system quick mode write targets) vs OP=0x06 (remote radio device live data). The @base decorator handles this structurally (different opcode in the base), but there's no way to express that both address spaces share the same GG semantic domain. This is purely a documentation/authoring convention issue, not a functional blocker. Generation-based gatingDifferent regulator generations (VRC 700 vs 720, wireless vs wired, different firmware versions) support different register subsets. Currently this is handled by separate TSP files ( Once some form of these is implemented, I can easily backport the 700 and 720 work discovered during the Helianthus development to ebusd in a human readable and maintainable fashion. Meanwhile, I'm working hard on a new edition of the VRC Explorer that has a much better integration of all 6 B524 opcodes. It should be ready by tomorrow and can be previewed in the wip/b524-opcode-namespace-split-integration branch. |
|
@john30 I really appreciate you taking the time for a detailed response!
Eh, flashing a fresh firmware just to e.g. test a new definition seems overkill, IMHO.
I can see how random people constantly bothering you is affecting your life. Please take care of yourself! Giving folks the benefit of the doubt, it's plausible that some might mistaken this entire operation to be your day job and/or primarily commercial in nature (and e.g. Maybe putting some distance between them by e.g. rebranding your hardware side hustle to eAS could be helpful here?
By guarantee I mean some sort of assurances that existing offline modes/features etc. can't be taken away or put behind a paywall. At the moment, you (or anyone else for that matter) could theoretically take the interface for a bunch of heating systems hostage and demand we "upgrade" to a subscription. TL;DR Open sourcing the (core?) firmware would allow for free experimentation with more powerful hardware, introduce a solid alternative to pre-compiled blobs, limit your liability to hardware only, and open the doors for helping hands. |
I'm not sure if @burmistrzak objected here (or agreed), on my 720/2 they are valid (fuel values remain zero for my HP system) with the following exceptions (removed):
All
Will do this shortly... |
Just checked:
Any advice here?
|
@chrizzzp Same. I assumed @john30 was referring to these Regarding timers, current implementation is here ebusd-configuration/src/vaillant/_templates.tsp Lines 571 to 581 in 68b4f0f I'd agree that having silent mode is essential. |
this usually can't be expressed so simple as the conversion needs to know where the part to be incremented sits, which could be the last or the first byte of an @ext decorator e.g. or something from an inherited r/w pair model.
TSP does not have that construct indeed, thats why I added this via the @condition and @conditionExt decorators to ebus-typespec. this is already used heavily in the files subject to this PR e.g.
not entirely sure what you mean with this as it is not part of this PR as well. please share a concrete example or point to such.
I totally agree and already pointed that out in earlier pull requests of this one. |
not for testing of course, but for being independent of the device needing internet connection.
well in doubt everyone can just use an older version of the firmware that does still have that feature, so even if I'd do something like that, it would still be possible to use the device as before. I really think you're a bit pessimistic here assuming I would intentionally block features just because I could. basically the same is true for a lot of projects I guess and I don't think there is any example for such in any of the work I've done in this context for the past 13 years...
yes, but then I can also just quit doing development there in the first place as a larger company could then just too quickly develop a new device and make a whole lot of money out of that (examples of that exist already, even with expectations to me doing their support). and recent examples of decompiling binaries just fit perfectly to the same scenario btw |
ok so those need to be kept then instead of being removed.
thanks for your feedback!
hm, did that work with the former csv then? the csv message definition for writing didn't change for cc e.g.
these are in the csv as well, so please check again (lines 555 and following of the generated csv). |
Ok, then we're not on the same line and talk about different CSVs. I used the 15.ctlv2.csv you linked here. This does not have the definitions for silent and cooling timers. Could you point me to the CSVs you referred to so I can check all timers again? |
Could you point me to the latest CSVs of this PR? It's a shame I still |
@john30 I'm not pessimistic per se, but there've been enough examples of these stunts (bait & switch, rug-pulls, etc.) in the technology sector to justify at least some caution. Especially in cases where proprietary firmware and FOSS intermingle. I'm a big advocate for right to own/repair and relying on closed-source firmware anywhere (from servers to dishwashers) is an inherent liability and restricts what folks able to do (repair, improve, etc.) with the things they've paid for. IMHO, keeping the eAS firmware closed puts you in an awkward position where people to some extent expect support like they get when buying e.g. a smart lightbulb.
A corp can always out-spent the average individual, but that's the case regardless of firmware licensing. They either hire a room full of devs or throw a bunch of AI against the problem. You rely on folks (like myself) who see the value in your work, are sympathetic to the overall cause and decide to buy your hardware (incl. token subscription) instead.
Well, how does that saying go? Information wants to be free? |
|
@chrizzzp There's no CSV. You'll have to compile it yourself. 😅 You need to pull the repo, checkout the |
those were for a different PR and not related to this one. |
|
Tested the timers from the above
BTW
|
|
Concerning this PR some HWC-related suggestions: The following ExtHWC-related definitions should not be bound to the condition Instead these definitions should be bound the condition: Another issue: However, some of the HWC-related basic settings apply also to the 'external DHW circuit' (e.g. |
|
@chrizzzp Just checked, myVaillant allows max. three time slots per day. 👀 |
|
And here are a few additions to the 15.720.csv (basic regulator settings): |
For 720 series regulators: |
thanks for testing!
I recognized that during the review and expected that to be intentional. so if it wasn't then these should get rolled back as well I guess
wrt the slotCountWeek template usage I only see "*_Timeframes" in the old tsp and the new, so where do you see the discrepancy exactly? |
Yes, roll back to three time slots or - maybe more efficient - have a single read time slot predefined (e.g. Monday0) and add a definition that allows indexed reading of any number of time slots: e.g.
This is what I meant, it's rather a naming inconsistency. Therefore I suggest to rename " |
|
@chrizzzp ok I've addressed your suggestions in d581175, 0d63db7, 10b51ed, and 74360dd. I've also made TariffAuxHeater writable as it would be unreasonable otherwise (maybe you can confirm that?). now to your other findings:
does that depend on some setup, so is this specific for yours e.g. or would this be available always?
if these are "mirrors", where would the non-mirrored value be then? is this related to e.g. PrFuelSumHcThisMonth and which unit do these have (probably kWh)? |
|
added the MultiInputSetting as well and merged to master in 4875c46 |
|
I investigated more into the Tariff-related definitions. To implement it properly we need a few more definitions, e.g. I just discoverd the tariff timer (for dual tariff operations in trivalence hybrid manager mode, actually quite a neat feature as it considers energy cost and heat demand) and the the register that defines the backup heater type (gas or electrical). I'm currently trying to find the register that specifies single/dual tariff selection, so the tariff timer can be bound to dual tariff as a condition. I will compile my findings here very soon... |
|
OK, here are the updated definitons for the tariff settings. Unfortunately, I could not identify the register for single/dual tariff selection. However, I suggest to make all these definitions conditional to:
EDIT: The following registers were confirmed to be writable. According to the VRC720 manual, BackupHeaterType 0 and 1 are specific to gas boilers (Condensing = "Brennwert" in german). The Vaillant manual uses the term "Backup Boiler" instead of "Backup Heater". Not sure if we aim for consistency here with Vaillant nomenclature. Here are the Tariff timer definitions: should be conditional to the dual tariff, but as mentioned I didn't find this register yet. (sorry for the mix of old and new CSV definitions) The manual states up to 12 tariff time slots can be defined, so I suggest to add indexed reading also for this timer (sorry not done yet for the above snippet). |
OK, I had to revise the b524 mirrored energy statistics a little. Some were not assigned correctly (which I hadn't checked before) and I found more. All values are in kWh. They are mirrored/collected once per day (I think at midnight) from - I assume - the b516 energy statistics (and converted from Wh to kWh). That's why I suggest a new naming with reference to the b516 I haven't checked yet if they are writable, but I assume yes. These values correspond to the energy values that can be queried from the VRC720 regulator UI. There must be more values (including HWC and more HC and probably solar, environmental and fuel stats). |
This PR is a superset of #482, including register definitions for the following regulator models:
15.72015.basv15.basv215.basv315.ctls215.ctlv215.ctlv315.bassIf you have one of the aforementioned devices, feel free to give this unified configuration a try and report back!
There're still a few unsupported devices at the moment, specifically:
15.ctlv*15.ctls*15.ctls315.bass215.bass3*might not exist..?
In case you own one of them, please comment below with your setup details!
I also have incorporated (hopefully) all the recent discoveries made by @stadid, @chrizzzp & @jonesPD. 🤝
A fork of the CDN repo with pre-compiled definitions is available in English and German.
Testing & Validation
devbranch (should be default)EBUSD_CONFIGPATHto<MOUNTPOINT>/ebus.github.io/dev/enEBUSD_MQTTVARto e.g.:filter-direction=r|u|^w,filter-circuit=^bas*$,filter-non-circuit=^hmu*$,filter-name=^*,filter-non-name=^Z2|^Z3|^Hc2|^Hc3(adjust to match your system)ebusdcontainer (or service).