Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Configuration & reverse engineering for the ebusd demon adapted to the boiler Chaffoteaux Mira C Green

License

NotificationsYou must be signed in to change notification settings

ysard/ebusd_configuration_chaffoteaux_bridgenet

Repository files navigation

Here you will find a configuration for the ebusd demon adapted to the Chaffoteaux boilers Mira C Green, Serelia and Talia Green.This configuration should also be compatible with other brands of the Ariston companyusing the BridgeNet/eBus2 protocol (Elco, Ariston, etc.).

The messages supported are explicit read/write & those broadcast by the boiler.

The goal is to achieve complete control of the device on solutions like Home Assistant:

If you are interested in more/other details, do not hesitate to consult this series of blog articles (french)Domotiser son chauffage avec Home Assistant.

Hardware related information is at:./hardware_reversing/.

Any help in filling in the gaps isVERY welcome.

Table of Contents

Open Contents

📖 Foreword

In an ethical world we wouldn't have to spend so much time trying to reverse this kind of proprietary protocols.If you don't think it's appropriate, if you don't have the energy to do this tedious/time-consuming/ work,or if you don't want to buy the overpriced devices sold by these companies, then you should considerto go with manufacturers who respect your right to repair/modify what you own without ruining yourself.

And you would be wise to do so.

🏦 Donations

This project took aLOT of time in reverse engineering, making the integration with Home Assistant,including documentation & tests.If it has been useful to you in any way, saving you time and hopefully energy or money for your home,you can consider the followingdonation links or at leastadd a star to the project.Any participation is appreciated because it means that the time invested was not in vain.

Donate

1EB6dc6YULzHR4TMqLi5fomZ6wmdP3N5cW

Official documentation

Some links to understand the interest of these data and their organization.

How to install it ?

Put the.csv files into a directory, then launchebusd with--configpath argument.

Example of command used to launch ebusd daemon:

ebusd -d 192.168.1.65:3333 --latency=200000 --configpath=/path_to_your_config_files/ --enablehex --receivetimeout=100 --sendretries=2

Logs will be generated into/var/log/ebusd.log.

Monitor unknown messages:

watch -n 3 -d ./build/src/tools/ebusctl grab result

How to install Home Assistant integration ?

See the Readme here:./home_assistant_integration/.

How to use it ?

Here is a quick usage example. Keep in mind thatread queries return cached values by default (see-m setting of ebusctl).Raw hex queries are not concerned by caching issues.

Turn on the heating (winter mode/ability to heat water in heaters if you prefer):

$ ebusctl write -c boiler heating_status on# or$ ebusctl hex 3c 2020 03 0120 01

Activate the heating of the water (command sent by thermostat for example):

$ ebusctl write -c boiler z1_heating_activation on# or$ ebusctl hex 3c 2020 03 1919 01

In SRA mode with an external temp probe, read the computed temp for the first 3 zones:

$ ebusctl read -c boiler hot_water_target_temp_143.4;58.0;58.0# or$ ebusctl hex 3c 2000 02 6197

Now, increase the offset of temp starting the computed temp:

$ ebusctl write -c boiler z1_thermoreg_offset 6

Check the modification:

$ ebusctl read -c boiler hot_water_target_temp_149.4;58.0;58.0

Protocol description

Primary & secondary command bytes (PBSB)

PBSBSignificationUncertain
2000cast features/read values
2001cast features/read values with additional data (allowed range of values?)x
2002error log interrogation
2004error detection/disappearance
200f
2010cast features/cast data read-only values/set values*
2020cast manual changes/dump registers/set values*
2031master device identificator broadcasts
2034bus reset
2036handshakex
2038
203arequest slave devicex
203bcast slave addr
2050time related datax
2051cast comfort timer programs**
2070broadcast date

*: 2010 command may be for values that should not be modified by a device and thatshould be accepted by another.i.e calculated/measured/status values (current temp measured, boiler status,settings change counter, computed target temp, heat request status).2020 commands may be for values that can be modified on the device and accepted by another.

**: Timer programs protocol is described below

Command IDs

Note: Naming is subject to change.Note: In case of multiple values, there is 1 value per zone (z1, z2, etc.).

Observed commands (max 7 zones)Uncertain observed valuesTech menu entry
Heat related commands
heat request status0191,0291,0391,0491,0591,0691,0791434
heat activation1919,1a19,1b19,1c19,1d19,1e19,1f19
heat temp range0081,0082,0083,0084,0085,0086,0087420
heat water computed target temp6197,6297,6397,6497,6597,6697,6797830
heat water max temp6071,6072,6073,6074,6075,6076,6077425
heat water min temp6171,6172,6173,6174,6175,6176,6177426
heat day temp6271,6272,6273,6274,6275,6276,6277
heat night temp6371,6372,6373,6374,6375,6376,6377
heat offset6471,6472,6473,6474,6475,6476,6477423
heat fixed temp6571,6572,6573,6574,6575,6576,6577402
?6671,6672,6673,6674,6675,6676,6677
?6771,6772,6773,6774,6775,6776,6777
?6971,6972,6973,6974,6975,6976,6977
heat slope6a71,6a72,6a73,6a74,6a75,6a76,6a77422
?6b71,6b72,6b73,6b74,6b75,6b76,6b77
?6c71,6c72,6c73,6c74,6c75,6c76,6c77
boiler statusc04b0x65,0x06,0x12 (pump circ??) unknown
heat thermoregulation selectionc079,c07a,c07b,c07c,c07d,c07e,c07f421
heat room temp influencec279,c27a,c27b,c27c,c27d,c27e,c27f424
heat request modec679,c67a,c67b,c67c,c67d,c67e,c67f
?c979,c97a,c97b,c97c,c97d,c97e,c97f
heat water temp out6810831
heat water temp in6910832
heat boost time (s)602b244
fan speed (x100 rpm)4013822
flame active0e11
Domestic Hot Water (DHW) related commands
DHW comfort modec028250
DHW water target temp6126200
DHW water antifreeze temp [0.2;15]6426
DHW water real temp6147
DHW comfort zonesd746250
?da46
?dc46
?de46
DHW cleansing function ??0b20
DHW Celectic status0f20256
Face panel related commands
heating status0120
DHW status0220
SRA status0520224
Misc
settings change counterd140
boiler life time (minutes)*50d9
ignition cycles42d8813
external temp7647835
external temp offset7426249
room temp7118,7218,7318,7418,7518,7618,7718
heating in progress0c19
burner heat life time4bd1810
SAV Menu
gas valve modulation type????221
boiler typec428228
nominal power6829229
maximal DHW power6229232
minimal power6429233
maximal power6329234
pressure monitoring devicec328247
Unknown
6047
6d26
6f10
7526
c528
6426
6bc0,2b70
6997,6a97,6b97,6c97,6d97,6e97,6f97
7997,7a97,7b97,7c97,7d97,7e97,7f97
0119,0219,0319,0419,0519,0619,0719
0990,0a90,0b90,0c90,0d90,0e90,0f90

*: Yes, the boiler life time value is accessible in read AND write modes...

Protocol of Timer programs

  • packets are emitted every minute
  • there are 14 different packets
  • the rotation of packets occurs every 14 minutes
  • the usable field is alternated every minute
  • there are 2 different fields per program
  • each usable field is composed of 24 nibbles/quartet, so 12 bytes, it covers 12 hours with a precision of 30 min

Packets dump (packets are ordered by reception time):

QQZZPBSB length IDDefault programProg 1Prog 2Prog3
37fe2051 0e 0007000000000000004055150000000000000000555555555555000000000000555500000000000000000000555500000000
37fe2051 0e 1007000000000000000000000000555555555555555555550000555500000055555555550000000000005555555555550000
37fe2051 0e 0107000000000000004055150000000000000000555555555555000000000000555500000000000000000000555500000000
37fe2051 0e 1107000000000000000000000000555555555555555555550000555500000055555555550000000000005555555555550000
37fe2051 0e 0207000000000000004055150000000000000000555555555555000000000000555500000000000000000000555500000000
37fe2051 0e 1207000000000000000000000000555555555555555555550000555500000055555555550000000000005555555555550000
37fe2051 0e 0307000000000000004055150000000000000000555555555555000000000000555500000000000000000000555500000000
37fe2051 0e 1307000000000000000000000000555555555555555555550000555500000055555555550000000000005555555555550000
37fe2051 0e 0407000000000000004055150000000000000000555555555555000000000000555500000000000000000000555500000000
37fe2051 0e 1407000000000000000000000000555555555555555555550000555500000055555555550000000000005555555555550000
37fe2051 0e 0507000000000000004055150000000000000000555555555555000000000000555500000000000000000000555500000000
37fe2051 0e 1507000000000000000000000000555555555555555555550000555500000055555555550000000000005555555555550000
37fe2051 0e 0607000000000000004055150000000000000000555555555555000000000000555500000000000000000000555500000000
37fe2051 0e 1607000000000000000000000000555555555555555555550000555500000055555555550000000000005555555555550000
Prog 1000000000000555555555555    => Heating enabled from 6h to 12h555555555555555555550000    => Heating enabled from 12h to 22hProg 2000000000000555500000000    => Heating enabled from 6h to 8h555500000055555555550000    => Heating enabled from 12h to 14h, then from 17h to 22hProg 3000000000000555500000000    => Heating enabled from 6h to 8h000000005555555555550000    => Heating enabled from 16h to 22hDefault prog000000000000004055150000    => ???000000000000000000000000    => no heating

Protocol for the errors

  • Appearance/disappearance packets always go through 3 repetitions.

  • The order of appearance plays no role since they can be deleted in any order.However, an error masks the previous one on the display.

  • Unknown errors (not supported by the boiler) are displayed as---, and cannot(for now?) be removed unless a bus reset command is sent.However, they do not prevent further testing of other errors.

  • Some errors are silent because they are not displayed. For example, disconnecting the externaltemperature sensor always triggers an error (0xec). On the other hand, disconnectingit when the control mode is 3 or 4 (external sensor required) will generate an additionalerror0x0c, code114, which is displayed this time.

  • The resolution command is made of the error code, followed by a default byte.

  • The minimal trigger command is made of the error code, followed by the default byte + a flag value.

  • You can generate/replay errors by broadcasting them, not just by touching the hardware(which is very useful for reversing).In this way, the following command will generate a411 error (z1 missing ambient probe)on the boiler display :

    ~/ebusd/build/src/tools/ebusctl hex fe20040469030061

However, to remove it, you need to use its resolution command :

~/ebusd/build/src/tools/ebusctl hex fe200403690100

Overall packet structure:

Any packet error consists of:

QQ,ZZ,PBSB,SS,XX,YY,00,ZZ
  • QQ: src address
  • ZZ: dest address
  • PBSB: command bytes, always 2004 here
  • SS: packet length in bytes
  • XX: error code (which we want to map with the code displayed on the boiler)
  • YY: zone flags (see below)
  • 00: spacer ?
  • ZZ: specific error codes sent by the boiler but not mandatory to define an error=> redundant data ?

Each bit in YY byte has a signification. The LSB seems to be always set when a zone is concerned.

Here is a table with all the zone flags deducted from packet sniffing operations :

zone flagsdec valuebin value
zone_enable10b00000001
z120b00000010
z240b00000100
z380b00001000
z4160b00010000
z5320b00100000
z6640b01000000
z7non-functional??

Examples

The XX and YY bytes, for a missing ambient probe on z1 (error 411)and z2 (error 412) will be :

XX: 0x69                                       <= code for "missing ambient probe" errorYY: zone_enable + z1 + z2 = 1 + 2 + 4 = 0x07

Thus, the minimal trigger command will be :

fe2004026907

The resolution command is the YY byte without the flags, but it's still an error related to some zones,so thezone_enable flag must be set :

fe2004026901

In fact, other bytes are present after YY such as ZZ sequence; but they are not mandatoryto trigger and resolute errors.

Packet sniffing

Steps to reverse the protocol:

  • Disconnect ambient probe from eBus if there is one ;
  • Set the thermoregulation type (command ids c079,c07a,c07b,c07c,c07d,c07e)to a mode that require it (4) for the various zones (z1 to z6) ;
  • Wait for packets in ebusd logs ;
  • Switch the thermoregulation type to 0 or 1 for a zone and wait for the resolution packet
# Trigger missing ambient probe z1 (411) by switching c079 to mode 4~/ebusd/build/src/tools/ebusctl hex fe202003c0790400:44:57.863     37fe200404 6903006100:44:57.985     37fe200404 6903006100:45:27.857     37fe200404 69030061# Resolution by switching to mode 0~/ebusd/build/src/tools/ebusctl hex fe202003c0790000:49:15.420     37fe200403 69010000:49:17.620     37fe200403 69010000:49:27.642     37fe200403 690100# Trigger missing ambient probe z2 (412) by switching c07a to mode 4~/ebusd/build/src/tools/ebusctl hex fe202003c07a0400:55:03.297     37fe200404 6905006200:55:07.301     37fe200404 6905006200:55:27.314     37fe200404 69050062# Resolution by switching to mode 1~/ebusd/build/src/tools/ebusctl hex fe202003c07a0100:55:56.450     37fe200403 69010000:55:57.279     37fe200403 69010000:57:27.213     37fe200403 690100# Trigger missing ambient probe z3 (413) by switching c07b to mode 4~/ebusd/build/src/tools/ebusctl hex fe202003c07b040:58:44.920      37fe200404 690900630:58:47.124      37fe200404 690900630:59:27.108      37fe200404 69090063# Resolution by switching to mode 1~/ebusd/build/src/tools/ebusctl hex fe202003c07b0101:00:28.030     37fe200403 69010001:00:37.280     37fe200403 69010001:01:27.235     37fe200403 690100

Cumulated errors & flags discovery

Trigger missing ambient probe errors for z4 + z5 + z6 + z3 + z2 + z1 via the previously showed commands.

QQZZPBSPSSXXYY00ZZActionYY flag formula
37fe20040469110064+z40x11-0x01 = 16
37fe2004056931006465+z50x31-0x11 = 32
37fe200406697100646566+z60x71-0x31 = 64
37fe20040769790063646566+z30x79-0x71 = 8
37fe200408697d006263646566+z20x7d-0x79 = 4
37fe200409697f00616263646566+z10x7f-0x7d = 2
37fe200408693f006162636465-z6
37fe200407691f0061626364-z5
37fe200406690f00616263-z4
37fe2004056907006162-z3
37fe20040469030061-z2
37fe200403690100-z1

Discovering error codes

See:Bruteforce the errors to discover their corresponding codes.

Home Assistant integration

See the Readme here:./home_assistant_integration/.

Full error codes for Mira C Green

YYDisplayed codeDocumented (x if yes)Signification
00101xSurchauffe du circuit primaire
01102Anomalie capteur de pression (court-circuité ou pas de signal)
021P1xAnomalie débit chauffage
031P2xAnomalie débit chauffage
041P3xAnomalie débit chauffage
05104xAnomalie débit chauffage
06107xAnomalie débit chauffage
071P4Pression insuffisante, remplissage demandé
081P4Pression insuffisante, remplissage demandé
09109Pression excessive >= 3bars
0a110xDéfaut sonde sortie échangeur princ.
0b112xDéfaut sonde entrée échangeur princ
0c114xAnomalie sonde extérieure
0d116xThermostat plancher ouvert
0e118xAnomalie sonde circuit primaire
0f103xAnomalie débit chauffage
10105xAnomalie débit chauffage
11106xAnomalie débit chauffage
12108xRemplissage circuit chauffage demandé
13111
141P5
151P6
161P7
171P8
18201xAnomalie sonde sanitaire - URBIA/ SERELIA GREEN
19309Dysfonctionnement du bloc Gaz
1a203xAnomalie sonde ballon - URBIA/ SERELIA GREEN
1b308Erreur de configuration atmosphérique
1c205xAnomalie sonde entrée sanitaire (solaire)
1e2P2Anti bactérie non complété (Urbia Green Evo Mod)
1f209xSurchauffe ballon - URBIA/ SERELIA GREEN
20301xAnomalie afficheur EEPROM
21303xAnomalie carte principale
22304xTrop de reset effectués (> 5 pour < 15min)
24306xAnomalie carte principale
26120
27121
28122
29123
2a311
2b312
2d501xAbsence de flamme
2e502xDétect. flamme vanne gaz fermée
2f504xAnomalie ionisation brûleur en fonct.
305P1xEchec première tentative allumage
315P2xEchec seconde tentative allumage
325P3xDécollement de flamme
335P4Anomalie ionisation brûleur en fonct.
34601Anomalie débordement fumée (modèle CF)
35602Contact de la sécurité VMC (modèle VMC)
36604Vitesse de l'extracteur insuffisante/Anomalie tachymètre
38607Contact pressostat fermé avec extracteur non alimenté
39421
3b610xSurchauffe échangeur primaire ; thermofusible ouvert
3c612xAnomalie sur ventilateur ; vitesse de ventilation faible pas de signal du tachymètre au démarrage
3d6P1Pas de fermeture contact du pressostat après 20s alimentation extracteur
3e6P2Défaut du pressostat lors d'un fonctionnement de l'extracteur
41422
42510
47511
493P9xPrévoir entretien. Contacter SAV
4b620
4c621
69410x*Sonde ambiance zone (*) non dispo.
69411xSonde ambiance zone z1 non dispo.
69412xSonde ambiance zone z2 non dispo.
69413xSonde ambiance zone z3 non dispo.
69414Sonde ambiance zone z4 non dispo.
69415Sonde ambiance zone z5 non dispo.
69416Sonde ambiance zone z6 non dispo.
ec---Sonde extérieure débranchée

*: Zone error : variations for each zone are not displayed

Missing codes for Mira C Green (not supported?) : '302', '305', '307'

Tools

Bruteforce the errors to discover their corresponding codes

Just use the interactive scripthere.It can be adapted with the displayed expected codes from the boiler documentation.Feel free to modify the settings of the script (i.e. the variablesEBUSCTL_BIN_PATH, LOG_FILE, EXPECTED_ERRORS).

Every boiler owner should run this program to obtain the error codes for your equipment.These are quite specific, and this procedure remains necessary until a database is built up.

  • Installation:

    $ pip install --user (--break-system-packages) argparse colorama

    Use --break-system-packages if you know what you are doingand not working inside a virtual env.

  • Usage:

$ ./bruteforce_errors.py -husage: bruteforce_errors.py [-h] {find_errors,analysis} ...options:-h, --help              show thishelp message andexitsubcommands:{find_errors,analysis}    find_errors         Broadcast errors& waitsfor the user to enter the                        code displayed on the boiler. Results are storedin                        the log file definedin LOG_FILE. User can skip the                        current code or quit at any time. Each error code is                        reset before the next test. If the reset is not                        effective, a bus reset can be triggered.    analysis            Display missing& extra codes vs the expected ones                        definedin EXPECTED_ERRORS; Output mapped errorsfor                        ebusd config file: _templates.csv.
$ ./bruteforce_errors.py find_errors -husage: bruteforce_errors.py find_errors [-h] [-s START] [-e END]options:  -h, --help            show thishelp message andexit  -s START, --start START                        Start valuefor code search (0<= val<= 255) (default: 0)  -e END, --end END     End valuefor code search (0<= val<= 255) (default: 128)

For example, to analyze the results of a boiler interrogation:

$ ./bruteforce_errors.py analysisMissing codes: ['302', '305', '307', '411', '412', '413']Excess codes: ['---', '102', '109', '111', '120', '121', ...]CSV template string: 0=101;1=102;2=1P1;3=1P2;4=1P3;5=104;6=107;7=1P4;8=1P4;...

Missing codes, are expected codes from your user manual but not found/functional ;excess codes are codes that are not in the user manual but are supported by the hardware.

The CSV template string can be used as it is in the ebusd config file (_templates.csv).

Finding registers

Use the interactive scripthere.Take the time to read the comments and adapt the script to your needs!

If you're looking for a register that manages an option you can read/modifyon your boiler control panel, then this script is for you.

LikeCheat Engine, by successive iterations and pruning, you'll be able to identify the register.

The script is mainly made to search for registers like the very important1919,which is used to switch the boiler ON/OFF from a thermostat for the Mira C Green boiler.

This register seems to be sent only by an eBus thermostatand it stays at 0 without it.The boiler doesn't broadcast its status.

People without "smart" thermostat (i.e. people that only have a thermostat withdry contact connected to the TA1 pins of the boiler's motherboard)can't guess the register without such a bruteforce script.

General process:

  • With some "read" iterations you will find registers that have changed(ex: Those that have a value of 0 when the boiler is off, and that havea value of 1 when it's on). The script can be modified to adopt another behaviour.

  • Then, "write" tests can be started. Multiple registers are testeduntil the boiler responds. The interactive script will help you to find theunique triggering register.

Installation:

$ pip install --user (--break-system-packages) colorama

Use --break-system-packages if you know what you are doingand not working inside a virtual env.

Handshake procedure

TODO: help needed; See Issue#3.

Help request

  • Handshake study of new device on the bus in order to emulate it with a custom one.
  • Packet dissections for missing ids. For example:
37fe2020 0c c079 01 c07a 01 c07b 01 c07c 01            z1 heat thermoregulation selection37fe2020 0c c07d 01 c07e 01 c07f 01 c279 0a            ^z5     ^z6     ^z7     ^z1 heat room temp influence37fe2020 0c c27a 0a c27b 0a c27c 0a c27d 0a            ^z2     ^z3     ^z4     ^z5 heat room temp influence37fe2020 0c c27e 0a c27f 0a c679 03 c67a 03            ^z6     ^z7     ^z1 ??  ^z2 ??37fe2020 0c c67b 03 c67c 03 c67d 03 c67e 03            ^z3     ^z4     ^z5 ??  ^z6 ??37fe2020 0c c67f 03 c979 06 c97a 06 c97b 06            ^z7     ^z1     ^z2 ??  ^z3 ??37fe2020 0c c97c 06 c97d 06 c97e 06 c97f 06            ^z4     ^z5     ^z6 ??  ^z7 ??

Other repositories & inspirations

📖 License

Released under the GPL (General Public License).

About

Configuration & reverse engineering for the ebusd demon adapted to the boiler Chaffoteaux Mira C Green

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp