ESP32 firmware to read and control EMS and Heatronic compatible equipment such as boilers, thermostats, solar modules, and heat pumps

logo

EMS-ESP is an open-source firmware for the Espressif ESP8266 and ESP32 microcontroller that communicates with EMS (Energy Management System) based equipment from manufacturers like Bosch, Buderus, Nefit, Junkers, Worcester and Sieger.

This is the firmware for the ESP32. Compared to version 2 on the ESP8266, this version has

  • Ethernet Support
  • Pre-configured board layouts
  • Writing values directly from the Web UI
  • Mock API server for faster offline development
  • Expose to more commands, via MQTT
  • Improvements to Dallas sensors, Shower service

version release-date license Codacy Badge downloads Average time to resolve an issue Percentage of issues still open
chat

If you like EMS-ESP, please give it a star, or fork it and contribute!

GitHub stars GitHub forks donate

Note, EMS-ESP requires a small hardware circuit that can convert the EMS bus data to be read by the microcontroller. These can be ordered at https://bbqkees-electronics.nl.


Features

  • Compatible with both ESP8266 and ESP32
  • A multi-user secure web interface to change settings and monitor the data
  • A console, accessible via Serial and Telnet for more monitoring
  • Native support for Home Assistant via MQTT Discovery
  • Can run standalone as an independent WiFi Access Point or join an existing WiFi network
  • Easy first-time configuration via a web Captive Portal
  • Support for more than 70 EMS devices (boilers, thermostats, solar modules, mixer modules, heat pumps, gateways)

Screenshots

Web Interface:

Telnet Console:

In Home Assistant:

Installing

Refer to the official documentation to how to install the firmware and configure it. The documentation is being constantly updated as new features and settings are added.

You can choose to use an pre-built firmware image or compile the code yourself:

Support Information

If you're looking for support on EMS-ESP there are some options available:

Documentation

Support Community

  • Discord Server: For support, troubleshooting and general questions. You have better chances to get fast answers from members of the community
  • Search in Issues: You might find an answer to your question by searching current or closed issues

Developer's Community

  • Bug Report: For reporting Bugs
  • Feature Request: For requesting features/functions
  • Troubleshooting: As a last resort, you can open new Troubleshooting & Question issue on GitHub if the solution could not be found using the other channels. Just remember: the more info you provide the more chances you'll have to get an accurate answer

Contributing

You can contribute to EMS-ESP by

  • providing Pull Requests (Features, Fixes, suggestions)
  • testing new released features and report issues on your EMS equipment
  • contributing to missing Documentation

Credits

A shout out to the people helping EMS-ESP get to where it is today...

  • @MichaelDvP for all his amazing contributions and patience. Specifically for the improved uart library, thermostat and mixer logic.
  • @BBQKees for his endless testing and building the awesome circuit boards
  • @rjwats for his esp8266-react framework that provides the new Web UI
  • @nomis for his core console, telnet and syslog core libraries
  • plus everyone else providing suggestions, PRs and the odd donation that keeps this project open source. Thanks!

License

This program is licensed under GPL-3.0

Comments
  • ems-esp is rebooting twice a day

    ems-esp is rebooting twice a day

    @proddy Hi Paul, I recognized that my ESP32 gateway is rebooting approx. after 11-12 hours. I can't see any reason why. Free memory is not the problem. Could it be that having http get requests per device every 15 sec per api is initiating the rebooting after a while?

    It's not a major issue for me. I just miss some data for approx 90 secs because of my 60 tx-delay on startup. Could I help to resolve this problem?

  • Multi-language/I18n support

    Multi-language/I18n support

    Support multi-locale for Telnet console commands, MQTT, SysLog messages and the Web. Since there is not enough memory to hold all the translations it will have to be different builds (DE, NL, UK). String literals will be stored in translation files and built at compile time.

    @MichaelDvP @bbqkees what you vote for this feature?

  •  nervous modulation

    nervous modulation

    Hi,

    Running

    • BUDERUS Logamax plus GB192iT40
    • BOSCH RC310 thermostaat
    • BUDERUS Gateway Logamatic web KM100
    • BBQkees Gateway Premium II
    • ems-esp v2.1.1b7

    I noticed a very nervous behavior of the power consumption: With good modulation I would expect more cures like (1) and not sequences like (2) 2020-12-08_22-13-33

    or, some more recent graphs: 2020-12-09_17-04-38

    As you can see: (1) are the points where my automatic schedule of the thermostat starts, but no idea why (2) is such a strange behaviour.

    Has this something to do with the boiler, or is it a problem of communication between ems-esp and the ems-bus? Can someone share some experiences with this?

    kind regards, Bart Plessers

  • ESP32 uart handling

    ESP32 uart handling

    Question Do you have an implementation for ESP32 uart handling? Currently I am only interested in receiving. Unfortunately I have to ESP32 because it also servers other purposes.

    Additional context I have seen another question in Q&A (May 2019) where you stated that you aren't happy with your current ESP32 implementation - I hope now for some new status (especially if receiving only is relevant)...

  • Problem with system with more than 4 mixers.

    Problem with system with more than 4 mixers.

    Good afternoon.

    My heating system has the following equipment:

    1. 1 x Junkers CerapurMaxx ZBR 100-3
    2. 1 x Gateway MB LAN 2
    3. 1 x CW400 Thermostat
    4. 7 x MM100 Mixing modules

    I use 5 MM100 modules for heating, 1 MM100 module for hot water and 1 MM100 module for heating the pool. If I control the system via the Thermostat CW400, then everything works fine for me. Now I decided to connect the heating system to the Home Assistant via MQTT and I bought BBQKees Gateway E32. I can see all my equipment perfectly in the EMS-ESP web interface, but there is one problem. Mixer with 1-4 are shown as h1-h4, 5 becomes wwc1 Mixer, Mixer 6 becomes wwc2, but the mixer 7 (id8 for hot water) is wwc1!!! Thus in EMS-ESP got two mixer wwc1, MQTT and considers them as one and constantly reads the information for sensors from one to the other mixer!!! Is it possible to rename the mixer so that they are displayed correctly via MQTT? Is it possible, if there are more than 4 mixers in the system, then, for example, mixers 1-8 should be assigned the values h1-h8, and mixers 9 - wwc1, 10 - wwc2 (for CW800 users, for example)?

  • Adopt the OpenAPI 3.0 standard for the REST API

    Adopt the OpenAPI 3.0 standard for the REST API

    The current REST API is a bit sloppy and inconsistent. I'd like to use an industry standard for interfacing with EMS-ESP with these requirements in mind:

    • it's secure. Using Access Tokens for commands and eventually HTTPS with self-signed certificates
    • it's readable and easy to understand and adapt, with the specification publically available on Postman
    • Return responses make sense
    • it could possibly be used to replace MQTT when interfacing with home automation systems, like Home Assistant

    I picked OpenAPI, but also looked at RAML and JsonAPI.

    I'll be using the branch ft_https for implementation

  • Debugging missing data in ems-esp with help of km200 with use of API and Syslog

    Debugging missing data in ems-esp with help of km200 with use of API and Syslog

    Since I am using ems-esp and km200 in parallel, I ask myself what would be the most efficient / elegant way to debug missing fields in ems-esp while triggering changes on km200.

    My idea would be: Within a javascript code writing changes to km200 and analyzing the respective telegrams by "filtering the right ones" out of syslog.

    What do you think or what would be the easiest way to identify the right telegram types and content.

  • How to add new values into code?

    How to add new values into code?

    I would like to add new values / entities into the code. From Discord I got from @MichaelDvP the following introduction:

    There is a guide "contributing.md" how to make the PR, but for the code structure you have to read the code. It's mostly selfexplaining.

    Start with reading a simple device like switch.cpp to see the registertelegram() with it's callback process(telegramname). In the callback the value is read by has_update(..) and publishing the value is handled by the register _device_value().
    That's neary all to do.

    In thermostat for hc dependend telegrams you have to add a check in heatingcircuit(telegram).

  • (ESP32) refactor device value rendering

    (ESP32) refactor device value rendering

    there's a lot of code duplication in the device libraries so I'm working through to clean up the code, moving functions back to the base class. One of the changes is in the way the device information is printed to the shell which is very similar to how we create the data to send to the web. I propose

    • have one method to form a structured json document with the key/value pairs
    • use this method for both web and console
    • remove the n= v= elements from the json object as this creates a lot of unnecessary memory. Just use a sequenced list of values as pairs, e.g. n1, v2, n2, v2....

    I've tested with Boiler with good results so far.

  • High RX Fail count and frequent restarts

    High RX Fail count and frequent restarts

    Bug description Unit is showing high RX Fail count and frequent restarts - raised at request of @proddy after discussion on Discord.

    Steps to reproduce Run the EMS-ESP32 and look at data in HA, telnet or web interface.

    Expected behavior Few RX Fails and stable operation.

    Screenshots image image image

    Device information

      |   -- | -- System |   version | "3.2.2b10" uptime | "000+04:51:32.053" uptime_sec | 17492 freemem | 129 Status |   bus | "connected" bus protocol | "HT3" telegrams received | 17581 read requests sent | 193 write requests sent | 0 incomplete telegrams | 3569 tx fails | 0 rx line quality | 80 tx line quality | 100 MQTT publishes | 22530 MQTT publish fails | 0 dallas sensors | 1 dallas reads | 3496 dallas fails | 1 Devices |   0 |   type | "Boiler" name | "Worcester Logamax Plus/GB192/Condens GC9000 (DeviceID:0x08 ProductID:208, Version:01.01)" handlers | "0x10 0x11 0xC2 0x14 0x15 0x1C 0x18 0x19 0x1A 0x35 0x16 0x33 0x34 0x26 0x2A 0xD1 0xE3 0xE4 0xE5 0xE6 0xE9 0xEA" 1 |   type | "Thermostat" name | "RC300/RC310/Moduline 3000/1010H/CW400/Sense II (DeviceID:0x10, ProductID:158, Version:33.03)" handlers | "0xA3 0x06 0xA2 0x12 0x2A5 0x2B9 0x2AF 0x29B 0x471 0x2A6 0x2BA 0x2B0 0x29C 0x472 0x2A7 0x2BB 0x2B1 0x29D 0x473 0x2A8 0x2BC 0x2B2 0x29E 0x474 0x2F5 0x31B 0x31D 0x31E 0x23A 0x267 0x240" 2 |   type | "Controller" name | "ErP (DeviceID:0x09, ProductID:209, Version:01.03)"

    Additional context Device is connected to boiler service jack. Not clear yet whether this is hardware or software problem (or both!!)

  • Improvements to the API

    Improvements to the API

    As reported from @tp1de

    While using rest api the return values from info command per device returns json on data fields with description and not with names of data fields. Is there any reason why not returning the field names? By the way when using the id return json is different and contains datafield names: eg mixer http://ems-esp/api?device=mixer&cmd=info vs http://ems-esp/api?device=mixer&id=2&cmd=info: {"(hc2) setpoint flow temperature":27,"(hc2) flow temperature in assigned hc (TC1)":29,"(hc2) pump status in assigned hc (PC1)":"on","(hc2) mixing valve actuator in assigned hc (VC1)":5} {"id":160,"flowsettemp":27,"flowtemphc":29,"pumpstatus":1,"valvestatus":5}

    Two things to do here:

    • fix the formatting if an id or hc is provided in the URL
    • decide whether to use verbose or short names
  • Changing a value works at first, but is then reset to it's original value

    Changing a value works at first, but is then reset to it's original value

    Bug description I'm using home assistant & node red to set mode and temp, and every couple of days, i'm not able to set the mode and temp anymore. If i change the mode from ex day to auto, it changes back to day after a second delay. Wen i'm using the webbrowser to write the command, i get the error: write command failed.

    Only thing that helps is to restart the ems in the webbrowser. Then i can set the temp and mode as i wish.

    I've already tried the fix with sending 0 to boiler/selflowtemp every few seconds, but the system does not respond. Heatingactivated is set to on, and i can't write to this command.

    I'm on ems V3.4.4

    After restart ems in browser All just works, see log

    2022-11-23 16:46:40.233 D 636: [mqtt] Publishing topic homeassistant/sensor/ems-esp/boiler_wwstarts/config (#280, retain=1, retry=1, size=244, pid=1) 2022-11-23 16:46:40.334 D 637: [mqtt] Publishing topic homeassistant/sensor/ems-esp/boiler_wwworkm/config (#281, retain=1, retry=1, size=283, pid=1) 2022-11-23 16:46:40.435 D 638: [mqtt] Publishing topic ems-esp/boiler_data_ww (#282, retain=0, retry=1, size=484, pid=1) 2022-11-23 16:46:40.536 D 639: [mqtt] Publishing topic ems-esp/boiler_data (#283, retain=0, retry=1, size=643, pid=1) 2022-11-23 16:46:40.576 D 640: [telegram] Sending read Tx [#45], telegram: 0B 98 12 00 1B 2022-11-23 16:46:40.637 D 641: [mqtt] Publishing topic ems-esp/thermostat_data (#284, retain=0, retry=1, size=1493, pid=1) 2022-11-23 16:46:40.672 D 642: [emsesp] Last Tx read successful 2022-11-23 16:46:40.672 D 643: [emsesp] This telegram (RCErrorMessage) is not recognized by the EMS bus 2022-11-23 16:46:40.672 D 644: [emsesp] No telegram type handler found for ID 0x12 (src 0x18) 2022-11-23 16:46:40.738 D 645: [mqtt] Publishing topic homeassistant/sensor/ems-esp/thermostat_lastcode/config (#285, retain=1, retry=1, size=215, pid=1) 2022-11-23 16:46:40.839 D 646: [mqtt] Publishing topic homeassistant/number/ems-esp/thermostat_intoffset/config (#286, retain=1, retry=1, size=362, pid=1) 2022-11-23 16:46:40.940 D 647: [mqtt] Publishing topic homeassistant/number/ems-esp/thermostat_minexttemp/config (#287, retain=1, retry=1, size=371, pid=1) 2022-11-23 16:46:41.041 D 648: [mqtt] Publishing topic homeassistant/switch/ems-esp/thermostat_damping/config (#288, retain=1, retry=1, size=342, pid=1) 2022-11-23 16:46:41.076 D 649: [telegram] Sending read Tx [#46], telegram: 0B 98 A2 00 1B 2022-11-23 16:46:41.142 D 650: [mqtt] Publishing topic homeassistant/select/ems-esp/thermostat_building/config (#289, retain=1, retry=1, size=288, pid=1) 2022-11-23 16:46:41.172 D 651: [emsesp] Last Tx read successful 2022-11-23 16:46:41.172 D 652: [emsesp] This telegram (RCError) is not recognized by the EMS bus 2022-11-23 16:46:41.172 D 653: [emsesp] No telegram type handler found for ID 0xA2 (src 0x18) 2022-11-23 16:46:41.243 D 654: [mqtt] Publishing topic homeassistant/select/ems-esp/thermostat_wwmode/config (#290, retain=1, retry=1, size=265, pid=1) 2022-11-23 16:46:41.340 D 655: [command] Calling command 'thermostat/mode' (mode) with value night 2022-11-23 16:46:41.340 D 656: [emsesp] Write command successful 2022-11-23 16:46:41.354 D 657: [mqtt] Publishing topic homeassistant/select/ems-esp/thermostat_wwcircmode/config (#291, retain=1, retry=1, size=311, pid=1) 2022-11-23 16:46:41.455 D 658: [mqtt] Publishing topic homeassistant/select/ems-esp/thermostat_wwcircprog/config (#292, retain=1, retry=1, size=311, pid=1) 2022-11-23 16:46:41.556 D 659: [mqtt] Publishing topic homeassistant/switch/ems-esp/thermostat_wwdisinfecting/config (#293, retain=1, retry=1, size=341, pid=1) 2022-11-23 16:46:41.576 D 660: [telegram] Sending write Tx [#59], telegram: 0B 10 3D 07 00 2022-11-23 16:46:41.592 D 661: [emsesp] No telegram type handler found for ID 0x3D (src 0x0B) 2022-11-23 16:46:41.620 D 662: [emsesp] Last Tx write successful 2022-11-23 16:46:41.620 D 663: [telegram] Sending post validate read, type ID 0x3D to dest 0x10 2022-11-23 16:46:41.657 D 664: [mqtt] Publishing topic homeassistant/select/ems-esp/thermostat_wwdisinfectday/config (#294, retain=1, retry=1, size=336, pid=1) 2022-11-23 16:46:41.758 D 665: [mqtt] Publishing topic homeassistant/number/ems-esp/thermostat_wwdisinfecthour/config (#295, retain=1, retry=1, size=305, pid=1) 2022-11-23 16:46:41.859 D 666: [mqtt] Publishing topic homeassistant/number/ems-esp/thermostat_wwmaxtemp/config (#296, retain=1, retry=1, size=355, pid=1) 2022-11-23 16:46:41.960 D 667: [mqtt] Publishing topic homeassistant/switch/ems-esp/thermostat_wwonetimekey/config (#297, retain=1, retry=1, size=353, pid=1) 2022-11-23 16:46:42.022 D 668: [telegram] Sending read Tx [#60], telegram: 0B 90 3D 00 1B 2022-11-23 16:46:42.061 D 669: [mqtt] Publishing topic homeassistant/sensor/ems-esp/thermostat_wwswitchtime/config (#298, retain=1, retry=1, size=281, pid=1) 2022-11-23 16:46:42.162 D 670: [mqtt] Publishing topic homeassistant/sensor/ems-esp/thermostat_wwcircswitchtime/config (#299, retain=1, retry=1, size=317, pid=1) 2022-11-23 16:46:42.191 D 671: [emsesp] Last Tx read successful 2022-11-23 16:46:42.263 D 672: [mqtt] Publishing topic homeassistant/sensor/ems-esp/thermostat_wwholidays/config (#300, retain=1, retry=1, size=265, pid=1) 2022-11-23 16:46:42.364 D 673: [mqtt] Publishing topic homeassistant/sensor/ems-esp/thermostat_wwvacations/config (#301, retain=1, retry=1, size=270, pid=1) 2022-11-23 16:46:42.465 D 674: [mqtt] Publishing topic ems-esp/thermostat_data (#302, retain=0, retry=1, size=1494, pid=1) 2022-11-23 16:46:42.566 D 675: [mqtt] Publishing topic ems-esp/thermostat_data (#303, retain=0, retry=1, size=1494, pid=1) 2022-11-23 16:46:42.569 D 676: [mqtt] Removing HA config for mixer_hc2_flowtemphc 2022-11-23 16:46:42.569 D 677: [mqtt] Removing HA config for mixer_hc2_valvestatus 2022-11-23 16:46:42.569 D 678: [mqtt] Removing HA config for mixer_hc2_flowsettemp 2022-11-23 16:46:42.569 D 679: [mqtt] Removing HA config for mixer_hc2_pumpstatus 2022-11-23 16:46:42.569 D 680: [mqtt] Removing HA config for mixer_hc2_activated 2022-11-23 16:46:42.569 D 681: [mqtt] Removing HA config for mixer_hc2_valvesettime 2022-11-23 16:46:42.597 D 682: [telegram] Sending read Tx [#61], telegram: 0B 90 3D 1B 20

    Screenshots If applicable, add screenshots to help explain your problem.

    Device information { "System Status": { "version": "3.4.4", "uptime": "000+04:32:48.537", "freemem": 128, "reset reason": "Power on reset / APP CPU reset by PRO CPU" }, "Network Status": { "connection": "Ethernet", "hostname": "ems-esp", "MAC": "8C:CE:4E:94:BC:17", "IPv4 address": "10.0.1.201/255.255.255.0", "IPv4 gateway": "10.0.1.1", "IPv4 nameserver": "10.0.1.1", "phy type": 1, "eth power": 16, "eth phy addr": 1, "eth clock mode": 0, "static ip config": true, "enable IPv6": false, "low bandwidth": false, "disable sleep": false, "AP provision mode": "disconnected", "AP security": "wpa2", "AP ssid": "ems-esp" }, "NTP Status": { "network time": "connected", "enabled": true, "server": "time.google.com", "tz label": "Europe/Amsterdam" }, "OTA Status": { "enabled": true, "port": 8266 }, "MQTT Status": { "MQTT status": "connected", "MQTT publishes": 38182, "MQTT publish fails": 0, "enabled": true, "client_id": "ems-esp", "keep alive": 36000, "clean session": true, "base": "ems-esp", "discovery prefix": "homeassistant", "nested format": 1, "ha enabled": true, "mqtt qos": 0, "mqtt retain": false, "publish time boiler": 10, "publish time thermostat": 1, "publish time solar": 10, "publish time mixer": 10, "publish time other": 1, "publish time sensor": 1, "publish single": false, "publish2command": false, "send response": false }, "Syslog Status": { "enabled": false }, "Sensor Status": { "temperature sensors": 0, "temperature sensor reads": 0, "temperature sensor fails": 0, "analog sensors": 0, "analog sensor reads": 0, "analog sensor fails": 0 }, "API Status": { "API calls": 0, "API fails": 0 }, "Bus Status": { "bus status": "connected", "bus protocol": "Buderus", "bus telegrams received (rx)": 21492, "bus reads (tx)": 5516, "bus writes (tx)": 20, "bus incomplete telegrams": 0, "bus reads failed": 0, "bus writes failed": 0, "bus rx line quality": 100, "bus tx line quality": 100 }, "Settings": { "board profile": "E32", "tx mode": 1, "ems bus id": 11, "shower timer": false, "shower alert": false, "rx gpio": 5, "tx gpio": 17, "dallas gpio": 4, "pbutton gpio": 33, "led gpio": 2, "hide led": false, "notoken api": true, "readonly mode": false, "fahrenheit": false, "dallas parasite": false, "bool format": 1, "bool dashboard": 1, "enum format": 1, "analog enabled": true, "telnet enabled": true }, "Devices": [ { "type": "Boiler", "name": "BK13/BK15/Smartline/GB1x2", "device id": "0x08", "product id": 64, "version": "03.05", "entities": 67, "handlers received": "0x10 0x11 0x15 0x1C 0x18 0x19 0x34", "handlers fetched": "0x14 0x16 0x33", "handlers pending": "0xBF 0xC2 0x1A 0x35 0x26 0x2A 0xD1 0xE3 0xE4 0xE5 0xE6 0xE9 0xEA", "handlers ignored": "0x04" }, { "type": "Thermostat", "name": "ES72/RC20", "device id": "0x18", "product id": 113, "version": "02.01", "entities": 1, "handlers received": "0xAF", "handlers pending": "0xA3 0x06 0xA2 0x12 0xAE 0xAD", "handlers ignored": "0x01 0xA6 0x35" }, { "type": "Thermostat", "name": "RC35", "device id": "0x10", "product id": 86, "version": "21.04", "entities": 93, "handlers received": "0xA3 0x06 0xA2 0x12 0x42 0x4C 0x52 0x51 0x53 0x56 0x5C 0x5B 0x5D 0x60 0x38 0x39", "handlers fetched": "0x3E 0x3D 0x3F 0x48 0x47 0x49 0xA5 0x37", "handlers ignored": "0x01 0x1A 0x13 0xAC 0xA4 0x35 0x9D 0x05" }, { "type": "Mixer", "name": "MM10", "device id": "0x21", "product id": 69, "version": "02.00", "entities": 6, "handlers received": "0xAB", "handlers fetched": "0xAA", "handlers pending": "0xAC" }, { "type": "Switch", "name": "WM10", "device id": "0x11", "product id": 71, "version": "02.00", "entities": 2, "handlers received": "0x9C 0x1E", "handlers pending": "0x9D" }, { "type": "Controller", "name": "BC10/RFM20", "device id": "0x09", "product id": 68, "version": "02.03", "entities": 0 } ] }

    Additional context

    Is there a possibility to restart the ems from within HA or NR? This way i could temporary fix the problem this way.

    system log Full system log attached Bottom line of this system log gives extra info on the problem (time)16:33:31 log.txt :

    2022-11-23 16:33:17.227 D 60608: [emsesp] No telegram type handler found for ID 0x35 (src 0x18) 2022-11-23 16:33:17.700 D 60609: [emsesp] No telegram type handler found for ID 0x35 (src 0x10) 2022-11-23 16:33:18.082 D 60610: [mqtt] Publishing topic ems-esp/thermostat_data (#41354, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:18.183 D 60611: [mqtt] Publishing topic ems-esp/switch_data (#41355, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:19.092 D 60612: [mqtt] Publishing topic ems-esp/thermostat_data (#41356, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:19.193 D 60613: [mqtt] Publishing topic ems-esp/switch_data (#41357, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:20.102 D 60614: [mqtt] Publishing topic ems-esp/boiler_data_ww (#41358, retain=0, retry=1, size=484, pid=1) 2022-11-23 16:33:20.203 D 60615: [mqtt] Publishing topic ems-esp/boiler_data (#41359, retain=0, retry=1, size=794, pid=1) 2022-11-23 16:33:20.304 D 60616: [mqtt] Publishing topic ems-esp/thermostat_data (#41360, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:20.405 D 60617: [mqtt] Publishing topic ems-esp/mixer_data (#41361, retain=0, retry=1, size=117, pid=1) 2022-11-23 16:33:20.506 D 60618: [mqtt] Publishing topic ems-esp/switch_data (#41362, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:21.011 D 60619: [mqtt] Publishing topic ems-esp/thermostat_data (#41363, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:21.112 D 60620: [mqtt] Publishing topic ems-esp/switch_data (#41364, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:22.021 D 60621: [mqtt] Publishing topic ems-esp/thermostat_data (#41365, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:22.122 D 60622: [mqtt] Publishing topic ems-esp/switch_data (#41366, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:23.031 D 60623: [mqtt] Publishing topic ems-esp/thermostat_data (#41367, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:23.132 D 60624: [mqtt] Publishing topic ems-esp/switch_data (#41368, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:24.043 D 60625: [mqtt] Publishing topic ems-esp/thermostat_data (#41369, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:24.144 D 60626: [mqtt] Publishing topic ems-esp/switch_data (#41370, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:25.053 D 60627: [mqtt] Publishing topic ems-esp/thermostat_data (#41371, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:25.154 D 60628: [mqtt] Publishing topic ems-esp/switch_data (#41372, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:26.063 D 60629: [mqtt] Publishing topic ems-esp/thermostat_data (#41373, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:26.164 D 60630: [mqtt] Publishing topic ems-esp/switch_data (#41374, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:27.073 D 60631: [mqtt] Publishing topic ems-esp/thermostat_data (#41375, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:27.174 D 60632: [mqtt] Publishing topic ems-esp/switch_data (#41376, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:28.083 D 60633: [mqtt] Publishing topic ems-esp/thermostat_data (#41377, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:28.184 D 60634: [mqtt] Publishing topic ems-esp/switch_data (#41378, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:29.093 D 60635: [mqtt] Publishing topic ems-esp/thermostat_data (#41379, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:29.194 D 60636: [mqtt] Publishing topic ems-esp/switch_data (#41380, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:30.007 D 60637: [mqtt] Publishing topic ems-esp/boiler_data_ww (#41381, retain=0, retry=1, size=484, pid=1) 2022-11-23 16:33:30.108 D 60638: [mqtt] Publishing topic ems-esp/boiler_data (#41382, retain=0, retry=1, size=794, pid=1) 2022-11-23 16:33:30.209 D 60639: [mqtt] Publishing topic ems-esp/thermostat_data (#41383, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:30.310 D 60640: [mqtt] Publishing topic ems-esp/mixer_data (#41384, retain=0, retry=1, size=117, pid=1) 2022-11-23 16:33:30.411 D 60641: [mqtt] Publishing topic ems-esp/switch_data (#41385, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:31.017 D 60642: [mqtt] Publishing topic ems-esp/thermostat_data (#41386, retain=0, retry=1, size=1871, pid=1) 2022-11-23 16:33:31.118 D 60643: [mqtt] Publishing topic ems-esp/switch_data (#41387, retain=0, retry=1, size=30, pid=1) 2022-11-23 16:33:31.185 D 60644: [command] Calling command 'thermostat/mode' (mode) with value night 2022-11-23 16:33:31.185 E 60645: [emsesp] Write command failed callback function failed (Error)

  • Boiler does not respond to custom value EMS-ESP gateway

    Boiler does not respond to custom value EMS-ESP gateway

    Hello,

    I have a Nefit Trendline HRC30 CW5 boiler, with an EMS-ESP gateway with firmware v3.4.4. It is possible to adjust the "pump delay" and the "burner min period" through the EMS-ESP gateway. However, it is suspected that nothing will happen with the adjusted values.

    For example, I set the "pump delay" to 10 minutes and the "burner min period" to 12 minutes. However, the pump switches off after a few minutes after the boiler has stopped heating for a short time.

    When applying other values, nothing actually changes what the boiler actually does.

    Greetings,

    Pomp Verwarmen EMS-ESP

  • Multiple EMS Devices share same id when using HA & MQTT

    Multiple EMS Devices share same id when using HA & MQTT

    Before creating a new issue please check that you have:

    Bug description We operate 2 EMS-ESP-32 systems for 2 houses conntected to the same MQTT broker. The heating systems connected to the ems-esps are the same model. I have configured unique network hostnames and unique client ids for both ems-esps. However when running HA & MQTT, home assistant only detects one of the ems-esps and it seems like all entities are overwritten by each other meaning if I add the detected entites to the overview, the displayed values keep switching between the first and seconds ems system (overwriting each others values).

    Steps to reproduce Connect two EMS-ESP-32 to the same heating system model, set different hostnames and clientids and run Home Assistant and enable auto discovery.

    Expected behavior The detected devices and entities have unique ids.

    Screenshots EMS-ESP #1 image image

    EMS-ESP #2 image image

    HA logs: image

    HA MQTT detected devices: image

    Device information Device #1

    {
      "System Status": {
        "version": "3.5.0b4",
        "uptime": "000+00:19:32.997",
        "freemem": 117,
        "free_app": 115,
        "reset reason": "Software reset CPU / Software reset CPU"
      },
      "Network Status": {
        "connection": "WiFi",
        "hostname": "hausa",
        "RSSI": -72,
        "IPv4 address": "192.168.100.20/255.255.255.0",
        "IPv4 gateway": "192.168.100.1",
        "IPv4 nameserver": "192.168.100.1",
        "static ip config": true,
        "enable IPv6": false,
        "low bandwidth": false,
        "disable sleep": true,
        "AP provision mode": "disconnected",
        "AP security": "wpa2",
        "AP ssid": "ems-esp"
      },
      "NTP Status": {
        "network time": "connected",
        "enabled": true,
        "server": "time.google.com",
        "tz label": "Europe/Amsterdam"
      },
      "OTA Status": {
        "enabled": true,
        "port": 8266
      },
      "MQTT Status": {
        "MQTT status": "connected",
        "MQTT publishes": 756,
        "MQTT publish fails": 0,
        "enabled": true,
        "client_id": "hausa",
        "keep alive": 60,
        "clean session": false,
        "base": "hausa",
        "discovery prefix": "homeassistant",
        "nested format": 2,
        "ha enabled": true,
        "mqtt qos": 0,
        "mqtt retain": false,
        "publish time boiler": 10,
        "publish time thermostat": 10,
        "publish time solar": 10,
        "publish time mixer": 10,
        "publish time other": 10,
        "publish time sensor": 10,
        "publish single": false,
        "publish2command": false,
        "send response": false
      },
      "Syslog Status": {
        "enabled": false
      },
      "Sensor Status": {
        "temperature sensors": 0,
        "temperature sensor reads": 0,
        "temperature sensor fails": 0,
        "analog sensors": 0,
        "analog sensor reads": 0,
        "analog sensor fails": 0
      },
      "API Status": {
        "API calls": 0,
        "API fails": 0
      },
      "Bus Status": {
        "bus status": "connected",
        "bus protocol": "Buderus",
        "bus telegrams received (rx)": 1224,
        "bus reads (tx)": 310,
        "bus writes (tx)": 0,
        "bus incomplete telegrams": 0,
        "bus reads failed": 1,
        "bus writes failed": 0,
        "bus rx line quality": 100,
        "bus tx line quality": 100
      },
      "Settings": {
        "board profile": "CUSTOM",
        "locale": "de",
        "tx mode": 2,
        "ems bus id": 11,
        "shower timer": false,
        "shower alert": false,
        "rx gpio": 16,
        "tx gpio": 17,
        "dallas gpio": 18,
        "pbutton gpio": 0,
        "led gpio": 2,
        "hide led": false,
        "notoken api": false,
        "readonly mode": false,
        "fahrenheit": false,
        "dallas parasite": false,
        "bool format": 1,
        "bool dashboard": 1,
        "enum format": 1,
        "analog enabled": true,
        "telnet enabled": true
      },
      "Devices": [
        {
          "type": "Boiler",
          "name": "GBx72/Trendline/Cerapur/Greenstar Si/27i",
          "device id": "0x08",
          "product id": 123,
          "version": "07.00",
          "entities": 64,
          "handlers received": "0x10 0x11 0x15 0x1C 0x18 0x19 0x34 0x2A",
          "handlers fetched": "0x14 0x16 0x33 0x26",
          "handlers pending": "0xBF 0xC2 0x1A 0x35 0xD1 0xE3 0xE4 0xE5 0xE6 0xE9 0xEA"
        },
        {
          "type": "Thermostat",
          "name": "RC300/RC310/Moduline 3000/1010H/CW400/Sense II",
          "device id": "0x10",
          "product id": 158,
          "version": "74.02",
          "entities": 48,
          "handlers received": "0x06 0xA2 0x02BA 0x02BB 0x02BC 0x02BD 0x02BE 0x02BF 0x02C0 0x031D 0x0267",
          "handlers fetched": "0x02A5 0x02B9 0x02AF 0x029B 0x02F5 0x031B 0x023A 0x0240",
          "handlers pending": "0xA3 0x12 0x13 0x0471 0x02A6 0x02B0 0x029C 0x0472 0x02A7 0x02B1 0x029D 0x0473 0x02A8 0x02B2 0x029E 0x0474 0x02A9 0x02B3 0x029F 0x0475 0x02AA 0x02B4 0x02A0 0x0476 0x02AB 0x02B5 0x02A1 0x0477 0x02AC 0x02B6 0x02A2 0x0478 0x02CC 0x02CE 0x02D0 0x02D2 0x031E",
          "handlers ignored": "0x35 0x23 0x1A 0xBF"
        },
        {
          "type": "Controller",
          "name": "BC25",
          "device id": "0x09",
          "product id": 125,
          "version": "03.05",
          "entities": 0
        }
      ]
    }
    

    Device #2:

    {
      "System Status": {
        "version": "3.5.0b4",
        "uptime": "000+00:20:08.494",
        "freemem": 117,
        "free_app": 115,
        "reset reason": "Software reset CPU / Software reset CPU"
      },
      "Network Status": {
        "connection": "WiFi",
        "hostname": "hausb",
        "RSSI": -71,
        "IPv4 address": "192.168.100.21/255.255.255.0",
        "IPv4 gateway": "192.168.100.1",
        "IPv4 nameserver": "192.168.100.1",
        "static ip config": true,
        "enable IPv6": false,
        "low bandwidth": false,
        "disable sleep": true,
        "AP provision mode": "disconnected",
        "AP security": "wpa2",
        "AP ssid": "ems-esp"
      },
      "NTP Status": {
        "network time": "connected",
        "enabled": true,
        "server": "time.google.com",
        "tz label": "Europe/Amsterdam"
      },
      "OTA Status": {
        "enabled": true,
        "port": 8266
      },
      "MQTT Status": {
        "MQTT status": "connected",
        "MQTT publishes": 736,
        "MQTT publish fails": 0,
        "enabled": true,
        "client_id": "hausb",
        "keep alive": 60,
        "clean session": false,
        "base": "hausb",
        "discovery prefix": "homeassistant",
        "nested format": 2,
        "ha enabled": true,
        "mqtt qos": 0,
        "mqtt retain": false,
        "publish time boiler": 10,
        "publish time thermostat": 10,
        "publish time solar": 10,
        "publish time mixer": 10,
        "publish time other": 10,
        "publish time sensor": 10,
        "publish single": false,
        "publish2command": false,
        "send response": false
      },
      "Syslog Status": {
        "enabled": false
      },
      "Sensor Status": {
        "temperature sensors": 0,
        "temperature sensor reads": 0,
        "temperature sensor fails": 0,
        "analog sensors": 0,
        "analog sensor reads": 0,
        "analog sensor fails": 0
      },
      "API Status": {
        "API calls": 0,
        "API fails": 0
      },
      "Bus Status": {
        "bus status": "connected",
        "bus protocol": "Buderus",
        "bus telegrams received (rx)": 1278,
        "bus reads (tx)": 322,
        "bus writes (tx)": 0,
        "bus incomplete telegrams": 0,
        "bus reads failed": 2,
        "bus writes failed": 0,
        "bus rx line quality": 100,
        "bus tx line quality": 100
      },
      "Settings": {
        "board profile": "CUSTOM",
        "locale": "de",
        "tx mode": 2,
        "ems bus id": 11,
        "shower timer": false,
        "shower alert": false,
        "rx gpio": 16,
        "tx gpio": 17,
        "dallas gpio": 18,
        "pbutton gpio": 0,
        "led gpio": 2,
        "hide led": false,
        "notoken api": false,
        "readonly mode": false,
        "fahrenheit": false,
        "dallas parasite": false,
        "bool format": 1,
        "bool dashboard": 1,
        "enum format": 1,
        "analog enabled": true,
        "telnet enabled": true
      },
      "Devices": [
        {
          "type": "Boiler",
          "name": "GBx72/Trendline/Cerapur/Greenstar Si/27i",
          "device id": "0x08",
          "product id": 123,
          "version": "07.00",
          "entities": 64,
          "handlers received": "0x10 0x11 0x15 0x1C 0x18 0x19 0x34 0x2A",
          "handlers fetched": "0x14 0x16 0x33 0x26",
          "handlers pending": "0xBF 0xC2 0x1A 0x35 0xD1 0xE3 0xE4 0xE5 0xE6 0xE9 0xEA"
        },
        {
          "type": "Thermostat",
          "name": "RC300/RC310/Moduline 3000/1010H/CW400/Sense II",
          "device id": "0x10",
          "product id": 158,
          "version": "74.03",
          "entities": 48,
          "handlers received": "0x06 0xA2 0x02BA 0x02BB 0x02BC 0x02BD 0x02BE 0x02BF 0x02C0 0x031D 0x0267",
          "handlers fetched": "0x02A5 0x02B9 0x02AF 0x029B 0x02F5 0x031B 0x023A 0x0240",
          "handlers pending": "0xA3 0x12 0x13 0x0471 0x02A6 0x02B0 0x029C 0x0472 0x02A7 0x02B1 0x029D 0x0473 0x02A8 0x02B2 0x029E 0x0474 0x02A9 0x02B3 0x029F 0x0475 0x02AA 0x02B4 0x02A0 0x0476 0x02AB 0x02B5 0x02A1 0x0477 0x02AC 0x02B6 0x02A2 0x0478 0x02CC 0x02CE 0x02D0 0x02D2 0x031E",
          "handlers ignored": "0x35 0x1A 0x23 0xBF"
        },
        {
          "type": "Controller",
          "name": "BC25",
          "device id": "0x09",
          "product id": 125,
          "version": "03.05",
          "entities": 0
        }
      ]
    }
    

    I would appreciate any suggestions or ideas to resolve this issue

  • Entity id for sensors within HA changes when updating name in web-ui

    Entity id for sensors within HA changes when updating name in web-ui

    I recognized that while changing names for sensors (analog & dallas) within web-ui the entity id changes as well for HA. I think only full name should change. Entity id should be kept.

  • Scheduled reboot facility

    Scheduled reboot facility

    Would it be possible to add an automatic scheduled reboot to EMS-ESP?

    My smart home controller reboots once each week overnight, restarting the MQTT broker with it. My EMS-ESP sometimes fails to re-establish the broker connection after this and sits there doing nothing until I wake up and see the alerts from the controller than EMS hasn't reported in for a few hours. There are also (rarely) problems with it reconnecting EMS, which a reboot soon fixes.

    A scheduled reboot option would mean that any temporary problems with EMS-ESP would have a good chance of being resolved without intervention.

  • Default webUI langauge to local of browser

    Default webUI langauge to local of browser

    @HansRemmerswaal in https://github.com/emsesp/EMS-ESP32/issues/748#issuecomment-1316413110_ mentioned:

    "Since I installed the v3.5.0b9 my initial language is each time PL, but ok that is easy to change to EN each time. "

    I think this is because of the base language has to be PL (long story). What we can do is auto detect the language from the browser if there is no cookie set.

Arduino/ESP32 firmware for DIY haptic gloves. Officially compatible with LucidVR gloves.
Arduino/ESP32 firmware for DIY haptic gloves. Officially compatible with LucidVR gloves.

Arduino/ESP32 firmware for DIY haptic gloves. Officially compatible with LucidVR gloves.

Nov 25, 2022
a pc heat verifier using arduino uno and oled screen(ssd1306)
a pc heat verifier using arduino uno and oled screen(ssd1306)

pc-heat-check a pc heat verifier using arduino uno and oled screen(ssd1306) to this application works needs this other application running: https://gi

Oct 5, 2022
A basic system that waters a plant according to the heat index of the environment.

Basic-Plant-Watering-System ?? This is a basic plant watering system created on Arduino Uno using DHT11 Temperature and Humidity sensor. DHT Sensor Li

Apr 11, 2021
ESP32 + GitHub Actions + Husarnet. A boilerplate project for ESP32 allowing in-field firmware update using GitHub Actions workflow.

esp32-internet-ota ESP32 + GitHub Actions + Husarnet. A boilerplate project for ESP32 allowing in-field firmware update using GitHub Actions workflow.

Sep 22, 2022
AnalogWrite for ESP32 and ESP32-S2 with LEDC PWM. Includes PWM Phase Control, DAC and Smart GPIO resource management.
AnalogWrite for ESP32 and ESP32-S2 with LEDC PWM. Includes PWM Phase Control, DAC and Smart GPIO resource management.

analogWrite() ESP32 Installation Instructions This library was tested using using the ESP32 Arduino IDE Boards Manager installation method. Stable rel

Nov 26, 2022
Arduino Interface for cheap 2.4ghz RF enabled Solar Micro Inverters
Arduino Interface for cheap 2.4ghz RF enabled Solar Micro Inverters

NETSGPClient Arduino Interface for cheap 2.4ghz RF enabled Solar Micro Inverters using the so-called NETSGP protocol for communication. Here is a YouT

Nov 19, 2022
Grafana/Prometheus exporter for EPEVER/EPSOLAR Tracer solar charge controllers

epever_exporter epever_exporter is a standalone program written in C that can query Epever/Epsolar Tracer solar charge controllers and output metrics

Nov 23, 2021
CC1312R1 Sub-G Solar power asset tracker
CC1312R1 Sub-G Solar power asset tracker

Sub-G Solar Power Asset Tracker TOP BOTTOM Sub-G Solar Power Asset Tracker 은 AxDen 의 Aggregator Platform 를 이용하여 온도, 가속도, GPS 위치와 같은 Asset tracking 에 필

Nov 8, 2022
ESP32-Skid-Steer - Bruder Catepillar Skid Steer model converted to RC, controlled by an ESP32 with 2 analog joysticks and a receiver that is an ESP32 on the model.
ESP32-Skid-Steer - Bruder Catepillar Skid Steer model converted to RC, controlled by an ESP32 with 2 analog joysticks and a receiver that is an ESP32 on the model.

ESP32-Skid-Steer Bruder Catepillar Skid Steer model converted to RC, controlled by an ESP32 with 2 analog joysticks and a receiver that is an ESP32 on

Oct 27, 2022
Arduino firmware for DIY haptic gloves. Officially compatible with LucidVR gloves.

lucidgloves-firmware This repo contains the arduino firmware as well as the STL files for Prototype 3 of the LucidVR glove prototype. This is a finger

Nov 25, 2022
Flashrom/serprog compatible firmware for the Raspberry Pi Pico

pico-serprog This is a very basic flashrom/serprog compatible SPI flash reader/writer for the Raspberry Pi Pico. It does not require a custom version

Nov 3, 2022
Firmware for ExpressLRS compatible backpacks

What is a "TX Backpack"? Some of the ExpressLRS TX modules include an additional ESP8285 chip, which lets us communicate wirelessly with other ESP8285

Nov 23, 2022
A free and open-source cross-platform application to control your Philips hue compatible lights💡
A free and open-source cross-platform application to control your Philips hue compatible lights💡

?? OpenHue ?? A cross platform application to control your Philips hue compatible lights. licensed under the gpl 3.0 license. Currently in super early

Dec 19, 2021
This software brings you the possibility to Read and Write the internal Flash of the Nordic nRF52 series with an ESP32
This software brings you the possibility to Read and Write the internal Flash of the Nordic nRF52 series with an ESP32

ESP32 nRF52 SWD flasher This software brings you the possibility to Read and Write the internal Flash of the Nordic nRF52 series with an ESP32 using t

Nov 15, 2022
FluidNC - The next generation of motion control firmware
FluidNC - The next generation of motion control firmware

FluidNC (CNC Controller) For ESP32 Introduction FluidNC is the next generation of Grbl_ESP32. It has a lot of improvements over Grbl_ESP32 as listed b

Nov 21, 2022
Dec 19, 2021
Control Heidelberg Wallbox Energy Control over WiFi using ESP8266 and configure your own local load management
Control Heidelberg Wallbox Energy Control over WiFi using ESP8266 and configure your own local load management

< scroll down for English version and additional information > wbec WLAN-Anbindung der Heidelberg WallBox Energy Control über ESP8266 Die Heidelberg W

Nov 16, 2022
ESP32 S2 C++ host library compatible with arduino, esp-idf.

Info I would like to announce USB host library for esp32 S2 compatible with arduino, esp-idf and PIO (when pio will be updated to most recent esp-idf)

Nov 15, 2022
Adafruit GFX compatible arduino library for using cat thermal printers with the ESP32
Adafruit GFX compatible arduino library for using cat thermal printers with the ESP32

CatGFX This library offers a Adafruit GFX "driver" for ESP32 and the cheap cat (or rabbit?) BLE thermal printers like this one: For usage information

Sep 23, 2022