Giter Site home page Giter Site logo

emsesp / ems-esp Goto Github PK

View Code? Open in Web Editor NEW
299.0 34.0 97.0 23.21 MB

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

Home Page: https://emsesp.github.io/docs

License: GNU Lesser General Public License v3.0

C++ 80.06% C 2.82% Python 6.93% HTML 0.02% JavaScript 0.24% Shell 0.02% CSS 0.04% TypeScript 9.54% Makefile 0.23% CMake 0.09%
thermostat esp8266 buderus ems bosch nefit boiler heatronics junkers mqtt

ems-esp's Introduction

logo

Important - PLEASE READ !!
This repo is for the ESP8266 version. It is no longer maintained and superceeded by version 3 which is based on the ESP32 and located at https://github.com/emsesp/EMS-ESP32. To upgrade an interface board from version 2 to version 3 take a look at BBQKees's instructions.

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.


version release-date license 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

Contributors โœจ

EMS-ESP is a project originally created by proddy with the main contributors and owners:


proddy

v2 v3

MichaelDvP

v2 v3

You can also 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

Libraries used

  • esp8266-react by @rjwats for the framework that provides the Web UI
  • uuid-* from @nomis. The console, syslog, telnet and logging is based on these libraries
  • ArduinoJson
  • AsyncMqttClient for MQTT, with modifications from @bertmelis
  • ESPAsyncWebServer and ESPAsyncTCP for the Web and TCP backends, with custom modifications for performance

License

This program is licensed under GPL-3.0

ems-esp's People

Contributors

bonusbartus avatar codacy-badger avatar egrekov avatar geezerrr avatar gert05 avatar gl3nni3 avatar glennarens avatar hpanther avatar hvanoch avatar joanwa avatar klstanie avatar michaeldvp avatar neonox31 avatar peclik avatar proddy avatar proddybot avatar reenx avatar rknall avatar spaceteddy avatar vuego123 avatar xeyame avatar ypaindaveine avatar

Stargazers

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

Watchers

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

ems-esp's Issues

some findings with bosch condens 2500 boiler and Bosch CW100 thermostat

First of all I'd like to thank you for the excellent work done!

I do have Bosch condens 2500 boiler (based on Heatronic 3 PCB) working with Bosch CW100 thermostat (https://www.bosch-thermotechnology.com/tr/en/ocs/null/cw-100-754594-p/).

The boiler is broadcasting EMS telegrams from address 0x08 and the thermostat broadcasts both EMS and EMS+ telegrams from address 0x18. I have added new Boiler TypeID 0x08, Product ID:95 to ems_devices.h and it is recognised by the EMS-ESP during thermostat-boiler version exchange when thermostat is powered on:

(00:00:39) 0x18 -> 0x08, type 0x02 telegram: 98 88 02 00 0A (CRC=77), #data=1
(00:00:39) 0x08 -> 0x18, type 0x02 telegram: 88 18 02 00 5F 2B 0A 00 00 00 00 00 00 00 (CRC=FD), #data=10

I would say that the version telegram from thermostat is too short, does not contain FW version and not parsed by EMS-ESP. I have attached the initial-exchange1.txt output for your reference. It is also interesting that no version exchange is done during normal operation, so in order for boiler to be recognised after EMS-ESP reset thermostat needs to be reloaded.

After that the SW can decode following messages:

  • UBAMonitorFast
  • UBAMonitorSlow
  • UBATotalUptimeMessage
  • UBAParameterWW

That made possible to monitor the system using home assistant which is great!

Nevertheless EMS-ESP can decode boiler broadcasts now, it keep saying that it can't access EMS bus.
I have added polling messages debug and discovered strange thing - the boiler is polling only 0x18 address (telegram = 0x98) and no other destination are polled.

Have you seen such situations before? Any thoughts on that?

better MQTT handling for testament / last will

Describe the solution you'd like
In my home automation (home assistant) i commonly use the mqtt lwl/testament to identify if the device is online or offline. Other ESP-solution like the Tasmota firmware or Node Red support this behaviour per default: Besides the last will statement also "online" statements are set up accordingly. Example of an MQTT binary sensor Home Assistant configuration: ...
availability_topic: "NodeRed/LWT"
payload_available: "online"
payload_not_available: "offline"
From a technical point of view it should (i belive) be easy to implement: when the device establish an mqtt connection, publish a second message with the same LWT-topic (but without the last will flag set) and the body "online" (example) using the retain flag.

Benefit: Direct detection if the device crashed or was gone offline! Then Home Assistant set the states as unavailable.

VSC - PlatformIO building error

Hi Paul,

I am trying to build d1_mini firmware on PlatformIO according to your procedure and platformio.ini-example but unfortunately I am getting an error message below. Do you know what could be the issue ? "class "Ticker" has no member "attach"

Executing task: C:\Users\tomas.platformio\penv\Scripts\platformio.exe run --target upload <

Processing nodemcuv2 (platform: espressif8266; board: nodemcuv2; framework: arduino)

PackageManager: Installing tool-mkspiffs @ ~1.200.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
PackageManager: Installing tool-espotapy @ ~1.1.0
Downloading [####################################] 100%
Unpacking [####################################] 100%
Verbose mode can be enabled via -v, --verbose option
PLATFORM: Espressif 8266 > NodeMCU 1.0 (ESP-12E Module)
SYSTEM: ESP8266 80MHz 80KB RAM (4MB Flash)
Converting boiler.ino
Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 34 compatible libraries
Scanning dependencies...
Dependency Graph
|-- 1.5
|-- 2.6
|-- 5.13.2
|-- 2.0.0
|-- 1.0
|-- 1.0
| |-- 1.0
| |--
| | |-- 1.0
|--
| |-- 1.0
|-- 3.1.4
Compiling .pioenvs\nodemcuv2\src\boiler.ino.cpp.o
Compiling .pioenvs\nodemcuv2\libef2\ESP8266WiFi\ESP8266WiFiGeneric.cpp.o
Compiling .pioenvs\nodemcuv2\libef2\ESP8266WiFi\ESP8266WiFiMulti.cpp.oC:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:65:8: error: no matching function for call to 'Ticker::Ticker()'

^C
ompiling .pioenvs\nodemcuv2\libef2\ESP8266WiFi\ESP8266WiFiSTA.cpp.oC
:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:65:8: note: candidates are:Compiling .pioenvs\nodemcuv2\libef2\ESP8266WiFi\ESP8266WiFiScan.cpp.o

In file included from C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:37:0:
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: Ticker::Ticker(fptr, uint32_t, uint16_t, resolution_t)
Ticker(fptr callback, uint32_t timer, uint16_t repeat = 0, resolution_t resolution = MICROS);
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: candidate expects 4 arguments, 0 provided
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: constexpr Ticker::Ticker(const Ticker&)
class Ticker {
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: candidate expects 1 argument, 0 provided
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:67:8: error: no matching function for call to 'Ticker::Ticker()'
#define HOSTNAME "raspberrypi"
^
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:67:8: note: candidates are:
In file included from C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:37:0:
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: Ticker::Ticker(fptr, uint32_t, uint16_t, resolution_t)
Ticker(fptr callback, uint32_t timer, uint16_t repeat = 0, resolution_t resolution = MICROS);
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: candidate expects 4 arguments, 0 provided
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: constexpr Ticker::Ticker(const Ticker&)
class Ticker {
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: candidate expects 1 argument, 0 provided
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:69:8: error: no matching function for call to 'Ticker::Ticker()'
// app specific - do not change
^
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:69:8: note: candidates are:
In file included from C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:37:0:
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: Ticker::Ticker(fptr, uint32_t, uint16_t, resolution_t)
Ticker(fptr callback, uint32_t timer, uint16_t repeat = 0, resolution_t resolution = MICROS);
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: candidate expects 4 arguments, 0 provided
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: constexpr Ticker::Ticker(const Ticker&)
class Ticker {
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: candidate expects 1 argument, 0 provided
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:71:8: error: no matching function for call to 'Ticker::Ticker()'
#define TOPIC_START MQTT_BOILER MQTT_TOPIC_START
^
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:71:8: note: candidates are:
In file included from C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:37:0:
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: Ticker::Ticker(fptr, uint32_t, uint16_t, resolution_t)
Ticker(fptr callback, uint32_t timer, uint16_t repeat = 0, resolution_t resolution = MICROS);
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: candidate expects 4 arguments, 0 provided
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: constexpr Ticker::Ticker(const Ticker&)
class Ticker {
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: candidate expects 1 argument, 0 provided
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:73:8: error: no matching function for call to 'Ticker::Ticker()'
#define TOPIC_THERMOSTAT_TEMP MQTT_BOILER "thermostat_temp" // for received thermostat temp changes
^
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:73:8: note: candidates are:
In file included from C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:37:0:
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: Ticker::Ticker(fptr, uint32_t, uint16_t, resolution_t)
Ticker(fptr callback, uint32_t timer, uint16_t repeat = 0, resolution_t resolution = MICROS);
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:61:2: note: candidate expects 4 arguments, 0 provided
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: constexpr Ticker::Ticker(const Ticker&)
class Ticker {
^
C:\Users\tomas.platformio\lib\Ticker_ID1586/Ticker.h:49:7: note: candidate expects 1 argument, 0 provided
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:87:5: error: expected unqualified-id before string constant
// default values
^
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino: In function 'void setup()':
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:1345:20: error: 'class Ticker' has no member named 'attach'
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:1353:24: error: 'class Ticker' has no member named 'attach'
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:1355:22: error: 'class Ticker' has no member named 'attach'
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:1357:25: error: 'class Ticker' has no member named 'attach'
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:1391:50: error: no matching function for call to 'ESPHelper::consoleSetHelpProjectsCmds()'
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:1391:50: note: candidate is:
In file included from C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:19:0:
src\ESPHelper.h:80:12: note: void ESPHelper::consoleSetHelpProjectsCmds(String)
void consoleSetHelpProjectsCmds(String help);
^
src\ESPHelper.h:80:12: note: candidate expects 1 argument, 0 provided
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino: In function 'void _showerColdShotStart()':
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:1527:29: error: 'class Ticker' has no member named 'attach'
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino: In function 'void _showerColdShotStop()':
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:1545:33: error: 'class Ticker' has no member named 'detach'
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino: In function 'void loop()':
C:/Users/tomas/EMS-ESP-Boiler/src/boiler.ino:1725:98: error: 'SHOWER_PAUSE_TIME' was not declared in this scope
*** [.pioenvs\nodemcuv2\src\boiler.ino.cpp.o] Error 1
=============================================================================================== [ERROR] Took 7.20 seconds ===============================================================================================

======================================================================================================= [SUMMARY] =======================================================================================================
Environment nodemcuv2 [ERROR]
Environment d1_mini [SKIP]
=============================================================================================== [ERROR] Took 7.21 seconds ===============================================================================================
The terminal process terminated with exit code: 1

Terminal will be reused by tasks, press any key to close it.

syntax error in climate.yaml

There's a leading space missing in the first line. The p from platform: needs to align with the n from name: in the second line.

Change flow, max and min flow temperatures via telnet and MQTT

Hi!
I would like to be able to change the flow temperature.
I understand that it is necessary to implement a function similar to ems_setFlowTemp, but not enough knowledge in the EMS protocol, I could not help in the implementation of this functionality.

Examlpe in telnet
* boiler flowtemp <degrees> set flow temperature

Update needed in ui-lovelace.yaml

I think there's an underscore missing in sensor.warm_water_3way_valve. Changing this to sensor.warm_water_3_way_valve fixed an "Entity not available: " error in my lovelace UI.

Nefit Topline Compact HRC25 HR

Hi, I installed a "bbq Kees" board and am new to this.
When I do autodetect, I get this:
<--- Version(0x02) received
Unrecognized device found. Product ID 115, Version 03.06
<--- Version(0x02) received
Unrecognized device found. Product ID 114, Version 01.03
I have a Nefit Topline Compact HRC25 HR
How can I read my Nefit?Before creating a new issue please check that you have:

Sonoff DEV

Hello,
ist it possible to use a Sonoff SV or a Sonoff DEV board.

3 way valve

Hi Paul,

Nice work here adapting EMS Bus code to ESP.

I have seen that you are looking for a way to control the 3-way valve to switch the domestic hot water on and off. Maybe you can try using UBAFunktionstest datagrams (0X1D) and perform in the ColdShot method a test mode setting the valve to heating circuit (0x00) during some minutes.

In my house I also have "problems" with people taking too long showers...

Regards,

Daniel

Cannot seem to compile a working version for Wemos Mini

Hi,

I received an interface board and Wemos Mini from bbqkees today so I immediately set about building the project and flashing it to the Wemos.

I'm using Visual Studio Code v1.31.1 on Windows 10 and installed the PlatformIO extension v1.60. I cloned the latest version of EMS-ESP (v1.5.2), copied the example platformio file to platformio.ini and changed the upload port in the [env:d1_mini] section to COM3. COM3 is listed in device manager; under the Ports section there's a device called "USB-SERIAL CH340 (COM3)".

The output of the build task is:

Processing d1_mini (platform: espressif8266; board: d1_mini; framework: arduino)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/d1_mini.html
PLATFORM: Espressif 8266 > WeMos D1 R2 and mini
HARDWARE: ESP8266 80MHz 80KB RAM (4MB Flash)
Converting ems-esp.ino
Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 35 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <CRC32> 2.0.0
|-- <CircularBuffer> 1.3.0
|-- <JustWifi> 2.0.2
|   |-- <ESP8266WiFi> 1.0
|-- <AsyncMqttClient> 0.8.2
|   |-- <ESPAsyncTCP> 1.2.0
|   |   |-- <ESP8266WiFi> 1.0
|-- <ArduinoJson> 5.13.4
|-- <OneWire> 2.3.4
|-- <Ticker> 1.0
|-- <myESP>
|   |-- <TelnetSpy>
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <DNSServer> 1.1.1
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ArduinoJson> 5.13.4
|   |-- <JustWifi> 2.0.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <AsyncMqttClient> 0.8.2
|   |   |-- <ESPAsyncTCP> 1.2.0
|   |   |   |-- <ESP8266WiFi> 1.0
|   |-- <ESP8266mDNS> 1.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ESPAsyncTCP> 1.2.0
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ArduinoOTA> 1.0
|   |   |-- <ESP8266WiFi> 1.0
|   |   |-- <ESP8266mDNS> 1.2
|   |   |   |-- <ESP8266WiFi> 1.0
Compiling .pioenvs\d1_mini\src\ds18.cpp.o
Compiling .pioenvs\d1_mini\src\ems-esp.ino.cpp.o
Compiling .pioenvs\d1_mini\src\ems.cpp.o
Compiling .pioenvs\d1_mini\src\emsuart.cpp.o
Generating LD script .pioenvs\d1_mini\ld\local.eagle.app.v6.common.ld
Compiling .pioenvs\d1_mini\lib25d\CRC32_ID1202\CRC32.cpp.o
Archiving .pioenvs\d1_mini\libe35\libCircularBuffer_ID1796.a
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\BearSSLHelpers.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\CertStoreBearSSL.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\ESP8266WiFi.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\ESP8266WiFiAP.cpp.o
Archiving .pioenvs\d1_mini\lib25d\libCRC32_ID1202.a
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\ESP8266WiFiGeneric.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\ESP8266WiFiMulti.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\ESP8266WiFiSTA-WPS.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\ESP8266WiFiSTA.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\ESP8266WiFiScan.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\WiFiClient.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\WiFiClientSecureAxTLS.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\WiFiClientSecureBearSSL.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\WiFiServer.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\WiFiServerSecureAxTLS.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\WiFiServerSecureBearSSL.cpp.o
Compiling .pioenvs\d1_mini\liba6d\ESP8266WiFi\WiFiUdp.cpp.o
Compiling .pioenvs\d1_mini\lib385\JustWifi_ID1282\JustWifi.cpp.o
Compiling .pioenvs\d1_mini\libd3e\ESPAsyncTCP_ID305\AsyncPrinter.cpp.o
Compiling .pioenvs\d1_mini\libd3e\ESPAsyncTCP_ID305\ESPAsyncTCP.cpp.o
Compiling .pioenvs\d1_mini\libd3e\ESPAsyncTCP_ID305\ESPAsyncTCPbuffer.cpp.o
Compiling .pioenvs\d1_mini\libd3e\ESPAsyncTCP_ID305\SyncClient.cpp.o
Compiling .pioenvs\d1_mini\libd3e\ESPAsyncTCP_ID305\tcp_axtls.c.o
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient.cpp.o
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient\Packets\ConnAckPacket.cpp.o
Archiving .pioenvs\d1_mini\liba6d\libESP8266WiFi.a
Archiving .pioenvs\d1_mini\lib385\libJustWifi_ID1282.a
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient\Packets\PingRespPacket.cpp.o
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient\Packets\PubAckPacket.cpp.o
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient\Packets\PubCompPacket.cpp.o
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient\Packets\PubRecPacket.cpp.o
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient\Packets\PubRelPacket.cpp.o
Archiving .pioenvs\d1_mini\libd3e\libESPAsyncTCP_ID305.a
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient\Packets\PublishPacket.cpp.o
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient\Packets\SubAckPacket.cpp.o
Compiling .pioenvs\d1_mini\libec3\AsyncMqttClient_ID346\AsyncMqttClient\Packets\UnsubAckPacket.cpp.o
Archiving .pioenvs\d1_mini\lib0ec\libArduinoJson_ID64.a
Compiling .pioenvs\d1_mini\lib493\OneWire_ID1\OneWire.cpp.o
Compiling .pioenvs\d1_mini\lib49a\Ticker\Ticker.cpp.o
Compiling .pioenvs\d1_mini\lib45d\TelnetSpy\TelnetSpy.cpp.o
Compiling .pioenvs\d1_mini\lib4b9\DNSServer\DNSServer.cpp.o
Compiling .pioenvs\d1_mini\libd5e\ESP8266mDNS\ESP8266mDNS.cpp.o
Compiling .pioenvs\d1_mini\libd5e\ESP8266mDNS\ESP8266mDNS_Legacy.cpp.o
Compiling .pioenvs\d1_mini\libd5e\ESP8266mDNS\LEAmDNS.cpp.o
Archiving .pioenvs\d1_mini\lib49a\libTicker.a
Archiving .pioenvs\d1_mini\libec3\libAsyncMqttClient_ID346.a
Archiving .pioenvs\d1_mini\lib493\libOneWire_ID1.a
Compiling .pioenvs\d1_mini\libd5e\ESP8266mDNS\LEAmDNS_Control.cpp.o
Compiling .pioenvs\d1_mini\libd5e\ESP8266mDNS\LEAmDNS_Helpers.cpp.o
Compiling .pioenvs\d1_mini\libd5e\ESP8266mDNS\LEAmDNS_Structs.cpp.o
Archiving .pioenvs\d1_mini\lib4b9\libDNSServer.a
Archiving .pioenvs\d1_mini\lib45d\libTelnetSpy.a
Compiling .pioenvs\d1_mini\libd5e\ESP8266mDNS\LEAmDNS_Transfer.cpp.o
Compiling .pioenvs\d1_mini\lib112\ArduinoOTA\ArduinoOTA.cpp.o
Compiling .pioenvs\d1_mini\lib65d\myESP\MyESP.cpp.o
Archiving .pioenvs\d1_mini\libFrameworkArduinoVariant.a
Compiling .pioenvs\d1_mini\FrameworkArduino\Esp-frag.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\Esp-version.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\Esp.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\FS.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\FunctionalInterrupt.cpp.o
Archiving .pioenvs\d1_mini\libd5e\libESP8266mDNS.a
Archiving .pioenvs\d1_mini\lib112\libArduinoOTA.a
Compiling .pioenvs\d1_mini\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\IPAddress.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\MD5Builder.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\Print.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\Schedule.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\ScheduledFunctions.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\StackThunk.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\Stream.cpp.o
Archiving .pioenvs\d1_mini\lib65d\libmyESP.a
Compiling .pioenvs\d1_mini\FrameworkArduino\StreamString.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\Tone.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\Updater.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\WMath.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\WString.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\abi.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\base64.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\cbuf.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\cont.S.o
Compiling .pioenvs\d1_mini\FrameworkArduino\cont_util.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_app_entry_noextra4k.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_eboot_command.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_flash_utils.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_i2s.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_main.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_noniso.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_phy.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_postmortem.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_si2c.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_sigma_delta.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_timer.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_waveform.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_wiring.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_wiring_analog.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_wiring_digital.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_wiring_pulse.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_wiring_pwm.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\core_esp8266_wiring_shift.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\debug.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\gdb_hooks.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\heap.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\libb64\cdecode.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\libb64\cencode.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\libc_replacements.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\sntp-lwip2.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\spiffs\spiffs_cache.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\spiffs\spiffs_check.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\spiffs\spiffs_gc.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\spiffs\spiffs_hydrogen.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\spiffs\spiffs_nucleus.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\spiffs_api.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\spiffs_hal.cpp.o
Compiling .pioenvs\d1_mini\FrameworkArduino\sqrt32.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\time.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\uart.c.o
Compiling .pioenvs\d1_mini\FrameworkArduino\umm_malloc\umm_malloc.c.o
Archiving .pioenvs\d1_mini\libFrameworkArduino.a
Linking .pioenvs\d1_mini\firmware.elf
Building .pioenvs\d1_mini\firmware.bin
Retrieving maximum program size .pioenvs\d1_mini\firmware.elf
Checking size .pioenvs\d1_mini\firmware.elf
Memory Usage -> http://bit.ly/pio-memory-usage
DATA:    [======    ]  56.6% (used 46404 bytes from 81920 bytes)
PROGRAM: [=====     ]  45.7% (used 477828 bytes from 1044464 bytes)
========================================================================================================================================================================== [SUCCESS] Took 28.30 seconds ==========================================================================================================================================================================

=================================================================================================================================================================================== [SUMMARY] ===================================================================================================================================================================================
Environment nodemcuv2   [SKIP]
Environment d1_mini     [SUCCESS]
========================================================================================================================================================================== [SUCCESS] Took 28.31 seconds ==========================================================================================================================================================================

The output of the upload task is:

Processing d1_mini (platform: espressif8266; board: d1_mini; framework: arduino)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PackageManager: Installing tool-mkspiffs @ ~1.200.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
PackageManager: Installing tool-espotapy @ ~1.1.0
Downloading  [####################################]  100%
Unpacking  [####################################]  100%
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/d1_mini.html
PLATFORM: Espressif 8266 > WeMos D1 R2 and mini
HARDWARE: ESP8266 80MHz 80KB RAM (4MB Flash)
Converting ems-esp.ino
Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 35 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <CRC32> 2.0.0
|-- <CircularBuffer> 1.3.0
|-- <JustWifi> 2.0.2
|   |-- <ESP8266WiFi> 1.0
|-- <AsyncMqttClient> 0.8.2
|   |-- <ESPAsyncTCP> 1.2.0
|   |   |-- <ESP8266WiFi> 1.0
|-- <ArduinoJson> 5.13.4
|-- <OneWire> 2.3.4
|-- <Ticker> 1.0
|-- <myESP>
|   |-- <TelnetSpy>
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <DNSServer> 1.1.1
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ArduinoJson> 5.13.4
|   |-- <JustWifi> 2.0.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <AsyncMqttClient> 0.8.2
|   |   |-- <ESPAsyncTCP> 1.2.0
|   |   |   |-- <ESP8266WiFi> 1.0
|   |-- <ESP8266mDNS> 1.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ESPAsyncTCP> 1.2.0
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ArduinoOTA> 1.0
|   |   |-- <ESP8266WiFi> 1.0
|   |   |-- <ESP8266mDNS> 1.2
|   |   |   |-- <ESP8266WiFi> 1.0
Compiling .pioenvs\d1_mini\src\ems-esp.ino.cpp.o
Retrieving maximum program size .pioenvs\d1_mini\firmware.elf
Checking size .pioenvs\d1_mini\firmware.elf
Memory Usage -> http://bit.ly/pio-memory-usage
DATA:    [======    ]  56.6% (used 46404 bytes from 81920 bytes)
PROGRAM: [=====     ]  45.7% (used 477828 bytes from 1044464 bytes)
Configuring upload protocol...
Looking for upload port...
Use manually specified: COM3
Uploading .pioenvs\d1_mini\firmware.bin
Uploading 481968 bytes from .pioenvs\d1_mini\firmware.bin to flash at 0x00000000
................................................................................ [ 16% ]
................................................................................ [ 33% ]
................................................................................ [ 50% ]
................................................................................ [ 67% ]
................................................................................ [ 84% ]
.......................................................................          [ 100% ]
========================================================================================================================================================================== [SUCCESS] Took 20.61 seconds ==========================================================================================================================================================================

=================================================================================================================================================================================== [SUMMARY] ===================================================================================================================================================================================
Environment nodemcuv2   [SKIP]
Environment d1_mini     [SUCCESS]
========================================================================================================================================================================== [SUCCESS] Took 20.62 seconds ==========================================================================================================================================================================

At this point the blue LED on the Wemos was not lit up. I pressed the reset button on the side of the Wemos after which the blue LED starts flashing, approximately 4 times a second. However, there is no EMS-ESP AP to be found by a wifi scan. Next, I tried to connect to COM3 via putty. Putty connects but then prints a string of garbage in the putty window.

At this point I'm a bit stuck. I've tried building and flashing on my laptop and my workstation (both Windwos 10), I've tried two different USB cables. I've tried flashing the firmware manually using esptool.py, the flashing process worked but the result was the same, no AP and garbage in the putty window.

The only thing I've not been able to test is using a different Wemos though hopefully two new ones will arrive in the post tomorrow.

Can anyone suggest anything else I can try?

telnet set command uses wrong characters

to setup a new wifi connection via telnet I used the set wifi_ssid command.
Result: the set command ignores uppercases and modifies it to lowercases.
Currently I see no way to change from AP to Client mode. I had to flash back to 1.2.4.

image

kind regards,
chris

cannot write a command to the boiler

Hi,

First of all, great work on this project!

i have you're prebuild firmware working on a nodemcu with a prebuild converter board from bbqkees. Polling/Reading from the boiler is no problem. I have everything integrated in HomeAssistant like you're example. Except when i try to write a command nothing happens. When i try typing v 2 or r in a telnet session i get a "-ERROR unknown command" message.
From the debug window in the webinterface i get "[583061] [WEBSOCKET] Requested action: dbgcmd" but nothing happens. In the boiler config tab i have everything enabled. Any idee?

Pascal Buijs

MQTT receive command topic not working?

dear proddy,

sry to issue a topic again, but since 1.2.x I've got trouble to "sent" MQTT messages to the ESP8266. receiving messages is not an issue at all.
With V. 1.1.x is was working well. As I see in the changelog, you have modified the MQTT client, therefore I would like to kindly as you if I have to do something different in V1.2.x to V1.1.x.

My test setup:
ESP8266 <-> mosquitto (rPi) <-> MQTT.fx (Mac)
User and PW is set on ESP8266 & MQTT.fx

any idea?

many thanks

chris

image

image

EMS msg buffer limitation of 32 bytes.

Hi,
i'm still playing around with different msg types of the thermostat and some of them have a longer return message byte count of 32bytes. For example to read out ID 0x3F (user defined switching settings).
(16:25:14) 10 0B 3F 00 01 1F 00 39 01 57 00 87 21 1F 20 39 21 57 20 87 41 1F 40 39 41 57 40 87 61 1F 60 C5
I already modified the EMS_MAXBUFFERSIZE to 256, but even with 256byte buffer, the system does not recognizes more then 27 data bytes. Side effect is that the system seems to be less stable.
Is there a possibility to increase the received message lenght?

many thanks,
chris

1.5.0 errors

Hi proddy,
I did not update since 1.3.0, becasue for me it worked fine and for weeks.
Now, i updated to 1.5.0 and found the following items:

  • does not compile with hardcoded wifi settings in platformio.ini

`Compiling .pioenvs/nodemcuv2/src/ems-esp.ino.cpp.o
/Users/Christian/Documents/development/Arduino/EMS-ESP-1.5.0/src/ems-esp.ino: In function 'vo
id setup()':
:0:11: error: 'xxxxxxx' was not declared in this scope
/Users/Christian/Documents/development/Arduino/EMS-ESP-1.5.0/src/ems-esp.ino:1089:19: note: i
n expansion of macro 'WIFI_SSID'
myESP.setWIFI(WIFI_SSID, WIFI_PASSWORD, WIFICallback);

:0:15: error: 'xxxxxxxxx' was not declared in this scope
/Users/Christian/Documents/development/Arduino/EMS-ESP-1.5.0/src/ems-esp.ino:1089:30: note: i
n expansion of macro 'WIFI_PASSWORD'
myESP.setWIFI(WIFI_SSID, WIFI_PASSWORD, WIFICallback);
^
*** [.pioenvs/nodemcuv2/src/ems-esp.ino.cpp.o] Error 1
`

  • no MQTT update after flashing 1.5.0

  • in telnet console, unknown command response if command is typed in. doesn't matter which command.
    Unknown command. Use ? for help.

  • since that update I get also errors on my Sieger BK15/ es73. -> EMS connection lost on my es73 / RC30 display. I guess that some items you change for RC10, it is not compatible to my system :(

For me, V1.4.0 was the best Version. Unfortunately I did not backup this version :( may you provide this Version to github?

thanks

CRC errors since b527949

Bug description
I get a log of CRC errors since b527949, with 13603d6 it works without the errors. I don't think it is related to #23, as #23 happens with 13603d6 as well.

EMS Bus Stats: Connected=yes, # Rx telegrams=0, # Tx telegrams=34441, # Crc Errors=34485

and a few log lines

(16:17:45) Sending read of type 0x41 to 0x10: telegram: 0B 90 41 00 63 (CRC=2A, #data=1)
(16:17:45) Corrupt telegram: telegram: 63 (CRC=2A)
(16:17:45) Thermostat -> Boiler, type 0x23 telegram: 10 08 23 00 36 64 64 (CRC=0B, #data=3)
(16:17:45) Sending read of type 0x41 to 0x10: telegram: 0B 90 41 00 63 (CRC=2A, #data=1)
(16:17:45) Corrupt telegram: telegram: 63 (CRC=2A)
(16:17:46) Sending read of type 0x41 to 0x10: telegram: 0B 90 41 00 63 (CRC=2A, #data=1)
(16:17:46) Corrupt telegram: telegram: 63 (CRC=2A)

Device information
Buderus Logamax plus GB192-25 and the integrated thermostat.

Gather EMS Ids & Versions

I am trying to implement my RC35 (Buderus) controller i found out that the current implementation is not able to gather the thermostat information correctly as my RC35 is using HK1 for heating.
So currently for the code is not able to distinguish between RC30 & RC35 as both use the id 0x10

I'd like to gather some more informations about the different setups.

I issued the following commands to get some more infos:

BC10:
r 0b 88 02 00 08 -> Product ID 123. Version 04.05

Original RC35:
r 0b 90 02 00 08 -> Product ID 86. Version 01.15

Maybe we can compile a list of Product IDs & Versions somehow

Nefit heatpump EMS+

Community!

As I have a Nefit heatpump running I'd really like to read this machine. I've been using Proddy's code and it gives a lot of insight. However, dealing with a different thermostat (Nefit Moduline 1010H) and a different heatpump instead of CV machine makes it hard.

@proddy I'm realy sure my thermostat send with the 0x38 type:
0x38 -> 0x10, type 0xFF telegram: 38 10 FF 00 03 2B 00 CE 08 0D 01 (CRC=C5), #data=7
38=sender
10=receiver
FF=EMS+byte
00=Offset
03=high byte
2B=low byte
the actuel room temperature is on the CE (20,6 degrees).

Can you implement this in your code?

EMS stops sending after a couple of hours

Dear Proddy,

First of all, thanks for your work. I've ordered a pre-installed board from 'bbqkees' and managed to get the whole thing working with my Nefit Topline Compact and Moduline 300. I'm using MQTT to publish data to my domoticz install. Everything works fine, except that after a couple of hours the data stops flowing. When I power cycle the ems board everything starts working again for a couple of hours.

Any idea what might be causing this? Could it be due to poor WiFi coverage? Should it reconnect to WiFi automatically when the connection was lost?

Thanks

Ron

Request: please add RC30/RC35 specific Data Types

Dear proddy,
Thanks a lot for your amazing EMS Code for the ESP. This may be exactly the part i need to continue the idea to connect the Buderus / Sieger / Nefit via MQTT to my fhem Home server. Basically to connect it to fhem, it will need some time, but first, I would like to Get and Set as much as possible data from the boiler. Currently I use a Buderus KM50 at my Sieger BK15 to get some UBA messages, but to set Temperature values etc is not possible, because the Sieger es73 is not fully SW compatible to the Buderus RC30 type.

Anyhow, I tried to understand your code and I saw that some RC30/RC35 related data types, i.E. ( HK1Betriebsart (0x3D); HK1MonitorMessage (0x3E);HK1Schaltzeiten (0x3F) ), are not implemented in your code, which are very interesting for RC3x users.

May you show me a way how to implement these or other data types in your code?

thanks a lot and again, congrats to the project.

Chris

WiFi AP Mode runs in parallel with Client mode

Bug description
After some days running the ems esp V. 1.5.2 (and of course a restart of my Fritzbox Wlan) i wonder that i see a running access point in my house named ems-esp. Its interresting, that i can normally access the device using my prefered (private) Wlan (not the ems-esp)!

Steps to reproduce
Not quite sure: Restart of my internal WLAN access point (Fritzbox)

Expected behavior
I assume that only one access way is currently activated

Screenshots
Telnet using my private wlan (not ems-esp): see SSID!
...

  • Connected to: EMS-ESP version 1.5.2
  • ESP8266 is in AP mode with SSID ems-esp
  • Free RAM:17 KB, Load:25%
    ...

Wlan check at the same time with my mobile phone:
wlan

Compile error

Hi,

im trying to compile the sketch using the arduino IDE.

i get the following error:
Archiving built core (caching) in: /var/folders/6r/tdsrvmt14wvfj9ryqjmrtlmm0000gn/T/arduino_cache_136986/core/core_esp8266_esp8266_d1_mini_CpuFrequency_80,UploadSpeed_921600,FlashSize_4M3M_e7d7afb0d813ff49b3b3c7a623d8ce4d.a
sketch/boiler.ino.cpp.o: In function _float_to_char(char*, float, unsigned char)': /Users/user/Documents/Arduino/boiler/boiler.ino:609: undefined reference to strtof'
sketch/boiler.ino.cpp.o: In function MQTTcallback(char*, unsigned char*, unsigned char)': /Users/user/Documents/Arduino/boiler/boiler.ino:609: undefined reference to strtof'
sketch/boiler.ino.cpp.o: In function myDebugCallback()': /Users/user/Documents/Arduino/boiler/boiler.ino:400: undefined reference to strtof'
sketch/emsuart.cpp.o: In function emsuart_recvTask(ETSEventTag*)': emsuart.cpp:(.irom0.text+0x7c): undefined reference to system_os_task(void ()(ETSEventTag), unsigned char, ETSEventTag*, unsigned char)'
emsuart.cpp:(.irom0.text+0x80): undefined reference to system_uart_swap()' sketch/emsuart.cpp.o: In function emsuart_init()':
sketch/emsuart.cpp:116: undefined reference to system_os_task(void (*)(ETSEventTag*), unsigned char, ETSEventTag*, unsigned char)' sketch/emsuart.cpp:121: undefined reference to system_uart_swap()'
sketch/emsuart.cpp.o:(.text._ZL23emsuart_rx_intr_handlerPv+0x1c): undefined reference to system_os_post(unsigned char, unsigned int, unsigned int)' sketch/emsuart.cpp.o: In function emsuart_rx_intr_handler':
sketch/emsuart.cpp:55: undefined reference to `system_os_post(unsigned char, unsigned int, unsigned int)'
Multiple libraries were found for "PubSubClient.h"
collect2: error: ld returned 1 exit status
Used: /Users/user/Documents/Arduino/libraries/PubSubClient
Not used: /Users/user/Documents/Arduino/libraries/ESP8266_Microgear
exit status 1
Error compiling for board WeMos D1 R2 & mini.

what could this be?

Nefit Easy support

Hi, I just installed a "bbq Kees" board and loaded the connected Wemos D1 Mini with your code. Connection with the boiler seems to work but the connection with my Nefit Easy does not:

(00:07:25) EMS-ESP-Boiler system stats:
(00:07:25)   System Logging is set to None
(00:07:25)   # EMS type handlers: 13
(00:07:25)   Thermostat is enabled, Poll is disabled, Shower timer is enabled, Shower alert is disabled
(00:07:25)   EMS Bus Stats: Connected=yes, # Rx telegrams=5, # Tx telegrams=36, # Crc Errors=7, Rx Status=idle, Tx Status=idle, Last Tx Action=none
(00:07:25) 
(00:07:25) Boiler stats:
(00:07:25)   Warm Water activated: on
(00:07:25)   Warm Water circulation pump available: off
(00:07:26)   Warm Water selected temperature: 60 C
(00:07:26)   Warm Water desired temperature: 70 C
(00:07:26)   Warm Water current temperature: 42.5 C
(00:07:26)   Warm Water # starts: 214 times
(00:07:26)   Warm Water active time: 12 days 4 hours 0 minutes
(00:07:26)   Warm Water 3-way valve: off
(00:07:26)   Selected flow temperature: 80 C
(00:07:26)   Current flow temperature: 47.9 C
(00:07:26)   Return temperature: 46.9 C
(00:07:26)   Gas: off
(00:07:26)   Boiler pump: on
(00:07:26)   Fan: off
(00:07:26)   Ignition: off
(00:07:26)   Circulation pump: off
(00:07:26)   Burner selected max power: 16 %
(00:07:26)   Burner current power: 0 %
(00:07:26)   Flame current: 0.0 uA
(00:07:26)   System pressure: 1.9 bar
(00:07:26)   Outside temperature: ? C
(00:07:26)   Boiler temperature: 55.0 C
(00:07:26)   Pump modulation: 30 %
(00:07:26)   Burner # restarts: 157 times
(00:07:26)   Total burner operating time: 12 days 8 hours 50 minutes
(00:07:26)   Total heat operating time: 0 days 4 hours 50 minutes
(00:07:26) 
(00:07:26) Thermostat stats:
(00:07:26)   Thermostat time is 00:00:00 0/0/2000
(00:07:26)   Setpoint room temperature: 0.0 C
(00:07:26)   Current room temperature: 0.0 C
(00:07:26)   Mode is set to <255>
(00:07:26) 
(00:07:26) Shower stats:
(00:07:26)   Hot water is stopped
(00:07:26)   Shower is off
(00:07:26) 
(00:08:57) System Logging is set to Verbose
(00:09:00) Requesting type UBAParameterWW(0x33) from dest 0x08
(00:09:01) Sending read telegram: len=6, telegram: 0b 88 33 00 63 3b 
(00:09:01) Corrupt telegram: len=5, telegram: 88 33 00 63 3b 
(00:09:01) Boiler telegram for us, type 0x33 len=18, telegram: 08 0b 33 00 08 ff 3c fb 00 28 00 00 46 ec ff ff 00 7b 
(00:09:02) <--- UBAParameterWW(0x33) received
(00:09:02) Publishing boiler data via MQTT
(00:09:02) Boiler broadcast, type 0x07 len=18, telegram: 08 00 07 00 0b 00 01 00 00 00 00 00 00 00 00 00 00 5a 
(00:09:03) Boiler broadcast, type 0x07 len=18, telegram: 08 00 07 00 03 00 01 00 00 00 00 00 00 00 00 00 00 76 
(00:09:04) Boiler broadcast, type 0x18 len=30, telegram: 08 00 18 00 50 01 d6 0f 00 01 01 20 40 01 a0 80 00 01 d4 00 00 13 30 45 01 09 00 00 00 8f 
(00:09:04) <--- UBAMonitorFast(0x18) received
(00:09:04) Boiler broadcast, type 0x2a len=26, telegram: 08 00 2a 00 00 00 00 00 00 00 00 00 aa 00 00 80 00 00 80 00 80 00 80 00 00 c5 
(00:09:04) Boiler broadcast, type 0x34 len=24, telegram: 08 00 34 00 00 01 9f 80 00 20 00 00 01 00 00 44 70 00 39 d6 00 80 00 9b 
(00:09:04) <--- UBAMonitorWWMessage(0x34) received
(00:09:13) Boiler broadcast, type 0x18 len=30, telegram: 08 00 18 00 50 01 d5 0f 00 01 01 20 40 01 9f 80 00 01 d3 00 00 13 30 45 01 09 00 00 00 8b 
(00:09:13) <--- UBAMonitorFast(0x18) received
(00:09:14) Boiler broadcast, type 0x18 len=30, telegram: 08 00 18 00 50 01 d5 0f 00 01 01 20 40 01 9f 80 00 01 d3 00 00 13 30 45 01 09 00 00 00 8b 
(00:09:14) <--- UBAMonitorFast(0x18) received
(00:09:14) Boiler broadcast, type 0x2a len=26, telegram: 08 00 2a 00 00 00 00 00 00 00 00 00 aa 00 00 80 00 00 80 00 80 00 80 00 00 c5 
(00:09:14) Boiler broadcast, type 0x34 len=24, telegram: 08 00 34 00 00 01 9f 80 00 20 00 00 01 00 00 44 70 00 39 d6 00 80 00 9b 
(00:09:14) <--- UBAMonitorWWMessage(0x34) received
(00:09:24) Boiler broadcast, type 0x34 len=24, telegram: 08 00 34 00 00 01 9e 80 00 20 00 00 01 00 00 44 70 00 39 d6 00 80 00 c3 
(00:09:24) <--- UBAMonitorWWMessage(0x34) received
(00:09:24) Boiler broadcast, type 0x18 len=30, telegram: 08 00 18 00 50 01 d5 0f 00 01 01 20 40 01 9e 80 00 01 d0 00 00 13 30 45 01 09 00 00 00 31 
(00:09:24) <--- UBAMonitorFast(0x18) received
(00:09:24) Boiler broadcast, type 0x2a len=26, telegram: 08 00 2a 00 00 00 00 00 00 00 00 00 aa 00 00 80 00 00 80 00 80 00 80 00 00 c5 
(00:09:24) <unknown> (not for us), type 0x18 len=6, telegram: 18 88 18 00 18 c5 
(00:09:25) Boiler (not for us), type 0x18 len=29, telegram: 08 18 18 00 50 01 d5 0f 00 01 01 20 40 01 9e 80 00 01 d0 00 00 13 30 45 01 09 00 00 ba 
(00:09:25) <--- UBAMonitorFast(0x18) received
(00:09:30) Requesting type RC20Temperature(0xa8) from dest 0x17
(00:09:30) Sending read telegram: len=6, telegram: 0b 97 a8 00 63 9d 
(00:09:30) Noisy data: len=3, telegram: a8 00 63 
(00:09:33) <unknown> (not for us), type 0x1a len=7, telegram: 18 08 1a 00 50 27 fc 

It seems that my thermostat is not recognized. At the "not for us" mark, I have changed the temperature on my Nefit Easy, that may give some handle.
Is there any way I can help you to get the Easy supported?

Bosch Easy Control Adapter support

I'm trying to connect to my Bosch Easy Control Adapter with the EMS-ESP code.

It seems to work partially (I.e. water temperature seems to have sane values), but other fields or commands don't work. (I.e Gas and pump are always off, even when heating. The thermostat gives a flame symbol when the gas is on, so it should be communicated somehow. And for instance the "thermostat temp" command doesn't seem to work.)

Is there a way I can contribute to make supporting this product easier?

Wrong and random values from Boiler

Bug description
I get unrealistic and seemingly random values from the boiler.

Here a few examples:

(16:08:29)   Return temperature: 67.0 C
...
(16:08:29)   Flame current: 5.8 uA
(16:08:29)   System pressure: 1.1 bar
(16:08:29)   Current System Service Code: =H
(16:08:29)   Outside temperature: 4.4 C
(16:08:29)   Boiler temperature: ? C
(16:08:29)   Pump modulation: 85 %
---
(16:08:46)   Return temperature: 12.8 C
...
(16:08:46)   Flame current: 12.8 uA
(16:08:46)   System pressure: 0.0 bar
(16:08:46)   Current System Service Code:
(16:08:46)   Outside temperature: 4.4 C
(16:08:46)   Boiler temperature: ? C
(16:08:46)   Pump modulation: 85 %
---
(16:10:13)   Return temperature: 1.7 C
...
(16:10:13)   Flame current: -1664.0 uA
(16:10:13)   System pressure: 12.8 bar
(16:10:13)   Current System Service Code:
(16:10:13)   Outside temperature: 4.4 C
(16:10:13)   Boiler temperature: ? C
(16:10:13)   Pump modulation: 85 %

Device information
I use a Buderus Logamax plus GB192-25 and the integrated thermostat. Here are a few 0x19 and 0x18 I got:

Boiler -> all, type 0x18 telegram: 08 00 18 00 54 03 1F 64 00 00 01 64 40 80 00 02 5F 02 DC 00 00 0B 30 41 01 31 00 01 00 00 00 (CRC=7F, #data=27)
Boiler -> all, type 0x18 telegram: 08 00 18 1B 00 00 00 00 00 00 00 00 00 00 00 (CRC=BF, #data=11)
Boiler -> all, type 0x18 telegram: 08 00 18 00 54 03 1F 64 00 00 01 44 40 80 00 02 5F 02 DB 00 00 0B 30 41 01 31 00 01 00 00 00 (CRC=BC, #data=27)
Boiler -> all, type 0x18 telegram: 08 00 18 1B 00 00 00 00 00 00 00 00 00 00 00 (CRC=BF, #data=11)
Boiler -> all, type 0x19 telegram: 08 00 19 00 00 2C 80 00 80 00 00 00 00 00 00 1E 8E 01 14 E1 00 00 00 00 B5 81 00 0C CF 80 00 (CRC=AC, #data=27)
Boiler -> all, type 0x1C telegram: 08 00 1C 00 92 06 0F 05 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (CRC=1B, #data=25)

compile error avr/pgmspace.h

Hi,

I tried to complile but get an error

richard@Wodan:~/ems/EMS-ESP-Boiler-master$ platformio run
/usr/local/lib/python2.7/dist-packages/requests/__init__.py:83: RequestsDependencyWarning: Old version of cryptography ([1, 2, 3]) may cause slowdown.
  warnings.warn(warning, RequestsDependencyWarning)

Processing d1_mini (platform: espressif8266; board: d1_mini; framework: arduino)
----------------------------------------------------------------------------------------------------
LibraryManager: Installing id=44
Downloading...
Unpacking  [####################################]  100%
LibraryManager: Installing id=89
Downloading...
Unpacking  [####################################]  100%
LibraryManager: Installing id=64
Downloading...
Unpacking  [####################################]  100%
LibraryManager: Installing id=1202
Downloading...
Unpacking  [####################################]  100%
/usr/local/lib/python2.7/dist-packages/requests/__init__.py:83: RequestsDependencyWarning: Old version of cryptography ([1, 2, 3]) may cause slowdown.
warnings.warn(warning, RequestsDependencyWarning)
Verbose mode can be enabled via `-v, --verbose` option
PLATFORM: Espressif 8266 > WEMOS D1 mini
SYSTEM: ESP8266 80MHz 80KB RAM (4MB Flash)
Converting boiler.ino
Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 27 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <Time> 1.5
|-- <PubSubClient> 2.7
|-- <ArduinoJson> 5.13.3
|-- <CRC32> 2.0.0
|-- <ArduinoOTA> 1.0
|   |-- <ESP8266WiFi> 1.0
|   |-- <ESP8266mDNS>
|   |   |-- <ESP8266WiFi> 1.0
|-- <ESP8266mDNS>
|   |-- <ESP8266WiFi> 1.0
|-- <ESP8266WiFi> 1.0
|-- <Ticker> 1.0
Compiling .pioenvs/d1_mini/src/ESPHelper.cpp.o
Compiling .pioenvs/d1_mini/src/boiler.ino.cpp.o
/home/richard/ems/EMS-ESP-Boiler-master/src/boiler.ino:20:26: fatal error: avr/pgmspace.h: No such file or directory
#include <avr/pgmspace.h>
^
compilation terminated.
*** [.pioenvs/d1_mini/src/boiler.ino.cpp.o] Error 1
==================================== [ERROR] Took 8.02 seconds ====================================

============================================ [SUMMARY] ============================================
Environment nodemcuv2    [SKIP]
Environment d1_mini      [ERROR]
==================================== [ERROR] Took 8.02 seconds ====================================

MQTT messaging: json variables not correct

Hi,
thanks for the awesome code :-)
Everything works fine excepts the mqtt processing.
I have changed ems_devices.h to fit to my needs (Using MC10/BC10 with RC35@boiler).
img_0622

ems_devices.h:
// various boilers and buderus type devices {EMS_MODEL_UBA, **72**, 0x08, "MC10/UBA3 Boiler"},// MODIFIED {EMS_MODEL_BC10, **68**, 0x09, "BC10 Base Controller"},//MODIFIED
Boiler and thermostats are read now correctly:
Boiler stats: Boiler type: MC10/UBA3 Boiler [TypeID 0x08] Product ID:72 Hot tap water is off Central Heating is off Warm Water activated: on Warm Water circulation pump available: on Warm Water is set to Comfort Warm Water selected temperature: 60 C Warm Water desired temperature: 70 C Warm Water current temperature: 57.5 C Warm Water current tap water flow: 0.0 l/min Warm Water # starts: 52299 times Warm Water active time: 225 days 19 hours 15 minutes Warm Water 3-way valve: off Selected flow temperature: 51 C Current flow temperature: 52.2 C Return temperature: ? C Gas: on Boiler pump: on Fan: on Ignition: off Circulation pump: off Burner selected max power: 100 % Burner current power: 100 % Flame current: 52.4 uA System pressure: 0.0 bar Current System Service Code: -H Outside temperature: 8.1 C Boiler temperature: 47.0 C Pump modulation: 100 % Burner # restarts: 221937 times Total burner operating time: 587 days 16 hours 14 minutes Total heat operating time: 361 days 21 hours 49 minutes Total UBA working time: 3681 days 7 hours 42 minutes

Thermostat stats: Thermostat type: RC35 (or compatible [TypeID 0x10] Product ID:86 Setpoint room temperature: 21.0 C Current room temperature: 3200.0 C Thermostat time is 13:27:12 16/1/2019 Mode is set to auto
The mqtt message payload of the RC35 seems to be ok:
{"thermostat_currtemp":"21.0","thermostat_seltemp":"21.0","thermostat_mode":"auto"}

But the mqtt message payload of tapwater_active/boiler_data seems to be incorrect:
{"wWSelTemp":"100","selFlowTemp":"100","outdoorTemp":"100","wWActivated":"100"wWComfort":"Comfort","wWCurTmp":"100","wWCurFlow":"100","wWHeat":"100","curFlowTemp":"100","retTemp":"100","burnGas":"100","heatPmp":"100","fanWork":"100","ignWork":"100","wWCirc":"100","selBurnPow":"100","curBurnPow":"100","sysPress":"100","boilTemp":"100","pumpMod":"100","ServiceCode":"0Y"}

Has anybody an idea about this issue?
Thanks a lot :-)

findings V 1.2.3

only related to ES73 aka RC35 compatible types:

  • night/day/auto mode -> offset is 7 .... 6 should be Room-offset setting -> verified with my boiler
    #define EMS_OFFSET_RC35Set_mode 7 // position of thermostat mode

  • void _process_RC35StatusMessage(uint8_t * data, uint8_t length) , we have to read the Thermostat current_temp from here (0x3E) as well! Offset is 3.
    #define EMS_TYPE_RC35StatusMessage_curr 3 // current temp
    EMS_Thermostat.curr_roomTemp = _toFloat(EMS_TYPE_RC35StatusMessage_curr, data);

  • MQTT buffers
    please increase the buffers a bit. Sometimes, the thermostat_data messsage is not complete. 524 bytes works for me

Nefit Proline NxT/Trendline Solarsensor

EMS-ESP version 1.3.2 with converter circuit from bbqkees.

All is working. I can see the data from the "info" command in the menu. (really, really, nice)

Question:
There is a Nefit Solarsensor (sensor to read water temperature from solar boiler system) connected to my Nefit, Is it possible to read this data from the EMS bus too.

Fulfilling this template will help developers and contributors help you. Try to be as specific and extensive as possible. If the information provided is not enough the issue will likely be closed.

You can now remove this line and the above ones. Text in italic is meant to be replaced by your own words. If any of the sections below are not relevant to the issue (for instance, the screenshots) then you can delete them.

Question
A clear and concise description of what the problem/doubt is.

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

Device information
Copy-paste here the information as it is outputted by the device. You can get this information by from the telnet session with the logging set to Verbose mode.

Additional context
Add any other context about the problem here.

Changelog: Removed support for older RC20 thermostat

Question
A clear and concise description of what the problem/doubt is.
Hi Proddy, I noticed in the changelog that you removed "support for older rc20 thermostats"
What does this mean? I just started plating around with your code a week ago. I am using a Moduline 300 0x17 thermostat in combination with a Nefit Topline Compact HRC 30.
Is this an RC20 or RC30 thermostat? Can I update to the latest revision of your code?
Transcript below.

Thanks!

Device information

SSH Session Transcript

Host: boiler
Date: dinsdag 25 december 2018

Trying 192.168.1.109...
Connected to boiler.
Escape character is '^]'.


  • Remote Telnet Command Center & Log Monitor *

  • Device hostname: boiler IP: 192.168.1.109 MAC address: 5C:CF:7F:34:33:F8
  • Connected to WiFi AP: Magnetron
  • Boot time: start
  • Free RAM: 36408 bytes
  • Commands:
  • ?=this help, q=quit telnet, $=show free memory, !=reboot, &=suspend all notifications
  • v [n] set logging (0=none, 1=basic, 2=thermostat only, 3=verbose)
  • s show statistics
  • h list supported EMS telegram type IDs
  • P publish all stat to MQTT
  • p toggle EMS Poll response on/off
  • S toggle Shower timer on/off
  • A toggle shower Alert on/off
  • b [xx] boiler request (xx=telegram type ID)
  • w [nn] set boiler warm water temperature (min 30)
  • a [n] boiler warm water (1=on, 2=off)
  • t [xx] thermostat request (xx=telegram type ID)
  • T [xx] set thermostat temperature
  • m [n] set thermostat mode (1=manual, 2=auto)
  • x [xx] experimental code for debugging.
    v 3
    (00:34:55) System Logging is set to Verbose
    (00:35:00) Publishing boiler data via MQTT
    (00:35:00) Requesting type UBAParameterWW(0x33) from dest 0x08
    (00:35:00) Sending read to 0x08: telegram: 0B 88 33 00 63 3B (len 6)
    (00:35:00) Noisy data: telegram: 00 63 3B (len 3)
    (00:35:00) Boiler -> me, type 0x33 telegram: 08 0B 33 00 08 FF 3C FB 00 14 FF 02 46 D8 FF E7 (len 16)
    (00:35:00) (00:35:00) Boiler -> all, type 0x07 telegram: 08 00 07 00 0B 80 00 00 00 00 00 00 00 00 00 00 00 47 (len 18)
    (00:35:00) Boiler -> all, type 0x07 telegram: 08 00 07 00 03 80 00 00 00 00 00 00 00 00 00 00 00 6B (len 18)
    (00:35:04) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 80 05 00 01 01 00 62 01 62 80 00 01 A6 00 00 0F 30 45 01 09 00 00 00 F7 (len 30)
    (00:35:04) (00:35:04) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 62 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 C0 (len 22)
    (00:35:04) (00:35:14) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 80 05 00 01 01 00 62 01 62 80 00 01 A6 00 00 0F 30 45 01 09 00 00 00 F7 (len 30)
    (00:35:14) (00:35:14) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 62 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 C0 (len 22)
    (00:35:14) (00:35:24) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 80 05 00 01 01 00 62 01 62 80 00 01 A6 00 00 0F 30 45 01 09 00 00 00 F7 (len 30)
    (00:35:24) (00:35:24) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 62 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 C0 (len 22)
    (00:35:24) (00:35:30) Requesting type RC20Temperature(0xA8) from dest 0x17
    (00:35:30) Sending read to 0x17: telegram: 0B 97 A8 00 63 9D (len 6)
    (00:35:30) Noisy data: telegram: 00 63 9D (len 3)
    (00:35:30) Thermostat -> me, type 0xA8 telegram: 17 0B A8 00 01 00 FF F6 01 06 00 01 0D 03 00 FF FF 01 02 02 02 00 00 05 28 05 28 02 1E 00 FF C8 (len 32)
    (00:35:30) (00:35:30) Boiler -> all, type 0x07 telegram: 08 00 07 00 0B 80 00 00 00 00 00 00 00 00 00 00 00 47 (len 18)
    (00:35:31) Boiler -> all, type 0x07 telegram: 08 00 07 00 03 80 00 00 00 00 00 00 00 00 00 00 00 6B (len 18)
    (00:35:34) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 80 05 00 01 01 00 62 01 62 80 00 01 A5 00 00 0F 30 45 01 09 00 00 00 5B (len 30)
    (00:35:34) (00:35:34) Boiler -> all, type 0x19 telegram: 08 00 19 00 80 00 01 B5 80 00 00 00 00 00 02 99 43 0D 88 37 00 00 00 0B 09 1B 00 C9 C0 00 00 23 (len 32)
    (00:35:34) (00:35:34) Publishing boiler data via MQTT
    (00:35:34) Boiler -> all, type 0x1C telegram: 08 00 1C 00 92 0B 01 0A 0D 00 00 00 00 00 00 6C (len 16)
    (00:35:34) (00:35:34) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 62 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 C0 (len 22)
    (00:35:34) (00:35:35) Boiler -> all, type 0x07 telegram: 08 00 07 00 03 80 00 00 00 00 00 00 00 00 00 00 00 6B (len 18)
    (00:35:36) Thermostat -> all, type 0x91 telegram: 17 00 91 00 80 28 00 C9 31 00 00 00 05 5A 04 00 C9 00 C6 (len 19)
    (00:35:36) (00:35:37) Thermostat -> all, type 0x06 telegram: 17 00 06 00 12 0C 16 19 0E 2E 01 00 00 00 00 00 00 A9 (len 18)
    (00:35:37) (00:35:37) UBASetPoint: SetPoint=90, hk_power=5 ww_power=0
    (00:35:37) Thermostat -> Boiler, type 0x1A telegram: 17 08 1A 00 5A 05 00 00 CC (len 9)
    (00:35:37) (00:35:38) Thermostat -> all, type 0xA3 telegram: 17 00 A3 00 00 00 00 77 (len 8)
    (00:35:38) (00:35:44) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7F 05 00 01 01 00 62 01 62 80 00 01 A5 00 00 0F 30 45 01 09 00 00 00 02 (len 30)
    (00:35:44) (00:35:44) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 62 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 C0 (len 22)
    (00:35:44) (00:35:53) Thermostat -> Boiler, type 0x35 telegram: 17 08 35 00 11 00 C1 (len 7)
    (00:35:54) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7F 05 00 01 01 00 62 01 62 80 00 01 A5 00 00 0F 30 45 01 09 00 00 00 02 (len 30)
    (00:35:54) (00:35:54) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 62 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 C0 (len 22)
    (00:35:54) (00:36:00) Requesting type UBAParameterWW(0x33) from dest 0x08
    (00:36:00) Sending read to 0x08: telegram: 0B 88 33 00 63 3B (len 6)
    (00:36:00) Noisy data: telegram: 00 63 3B (len 3)
    (00:36:00) Boiler -> me, type 0x33 telegram: 08 0B 33 00 08 FF 3C FB 00 14 FF 02 46 D8 FF E7 (len 16)
    (00:36:00) (00:36:00) Publishing boiler data via MQTT
    (00:36:00) Boiler -> all, type 0x07 telegram: 08 00 07 00 0B 80 00 00 00 00 00 00 00 00 00 00 00 47 (len 18)
    (00:36:00) Boiler -> all, type 0x07 telegram: 08 00 07 00 03 80 00 00 00 00 00 00 00 00 00 00 00 6B (len 18)
    (00:36:04) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7F 05 00 01 01 00 62 01 61 80 00 01 A5 00 00 0F 30 45 01 09 00 00 00 38 (len 30)
    (00:36:04) (00:36:04) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 61 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 FA (len 22)
    (00:36:04) (00:36:14) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7F 05 00 01 01 00 62 01 61 80 00 01 A4 00 00 0F 30 45 01 09 00 00 00 5C (len 30)
    (00:36:14) (00:36:14) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 61 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 FA (len 22)
    (00:36:14) (00:36:24) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7E 05 00 01 01 00 62 01 61 80 00 01 A5 00 00 0F 30 45 01 09 00 00 00 E7 (len 30)
    (00:36:24) (00:36:24) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 61 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 FA (len 22)
    (00:36:24) (00:36:30) Requesting type RC20Temperature(0xA8) from dest 0x17
    (00:36:30) Sending read to 0x17: telegram: 0B 97 A8 00 63 9D (len 6)
    (00:36:30) Noisy data: telegram: 00 63 9D (len 3)
    (00:36:30) Thermostat -> me, type 0xA8 telegram: 17 0B A8 00 01 00 FF F6 01 06 00 01 0D 03 00 FF FF 01 02 02 02 00 00 05 28 05 28 02 1E 00 FF C8 (len 32)
    (00:36:30) (00:36:30) Boiler -> all, type 0x07 telegram: 08 00 07 00 0B 80 00 00 00 00 00 00 00 00 00 00 00 47 (len 18)
    (00:36:31) Boiler -> all, type 0x07 telegram: 08 00 07 00 03 80 00 00 00 00 00 00 00 00 00 00 00 6B (len 18)
    (00:36:34) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7E 05 00 01 01 00 62 01 61 80 00 01 A4 00 00 0F 30 45 01 09 00 00 00 83 (len 30)
    (00:36:34) (00:36:34) Boiler -> all, type 0x19 telegram: 08 00 19 00 80 00 01 B5 80 00 00 00 00 00 02 99 43 0D 88 37 00 00 00 0B 09 1B 00 C9 C0 00 00 23 (len 32)
    (00:36:34) (00:36:34) Publishing boiler data via MQTT
    (00:36:34) Boiler -> all, type 0x1C telegram: 08 00 1C 00 92 0B 01 0A 0D 00 00 00 00 00 00 6C (len 16)
    (00:36:34) (00:36:34) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 61 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 FA (len 22)
    (00:36:34) (00:36:35) Boiler -> all, type 0x07 telegram: 08 00 07 00 03 80 00 00 00 00 00 00 00 00 00 00 00 6B (len 18)
    (00:36:37) Thermostat -> all, type 0x91 telegram: 17 00 91 00 80 28 00 C9 31 00 00 00 05 5A 04 00 C9 00 C6 (len 19)
    (00:36:37) (00:36:37) Thermostat -> all, type 0x06 telegram: 17 00 06 00 12 0C 16 19 0F 2E 01 00 00 00 00 00 00 B0 (len 18)
    (00:36:37) (00:36:37) UBASetPoint: SetPoint=90, hk_power=5 ww_power=0
    (00:36:37) Thermostat -> Boiler, type 0x1A telegram: 17 08 1A 00 5A 05 00 00 CC (len 9)
    (00:36:37) (00:36:38) Thermostat -> all, type 0xA3 telegram: 17 00 A3 00 00 00 00 77 (len 8)
    (00:36:38) (00:36:44) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7E 05 00 01 01 00 62 01 61 80 00 01 A4 00 00 0F 30 45 01 09 00 00 00 83 (len 30)
    (00:36:44) (00:36:44) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 61 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 FA (len 22)
    (00:36:44) (00:36:44) Thermostat -> all, type 0xA2 telegram: 17 00 A2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 51 (len 18)
    (00:36:53) Thermostat -> Boiler, type 0x35 telegram: 17 08 35 00 11 00 C1 (len 7)
    (00:36:54) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7E 05 00 01 01 00 62 01 61 80 00 01 A4 00 00 0F 30 45 01 09 00 00 00 83 (len 30)
    (00:36:54) (00:36:54) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 61 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 FA (len 22)
    (00:36:54) (00:37:00) Requesting type UBAParameterWW(0x33) from dest 0x08
    (00:37:00) Sending read to 0x08: telegram: 0B 88 33 00 63 3B (len 6)
    (00:37:00) Noisy data: telegram: 00 63 3B (len 3)
    (00:37:00) Boiler -> me, type 0x33 telegram: 08 0B 33 00 08 FF 3C FB 00 14 FF 02 46 D8 FF E7 (len 16)
    (00:37:00) (00:37:00) Boiler -> all, type 0x07 telegram: 08 00 07 00 0B 80 00 00 00 00 00 00 00 00 00 00 00 47 (len 18)
    (00:37:01) Boiler -> all, type 0x07 telegram: 08 00 07 00 03 80 00 00 00 00 00 00 00 00 00 00 00 6B (len 18)
    (00:37:04) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7E 05 00 01 01 00 62 01 61 80 00 01 A3 00 00 0F 30 45 01 09 00 00 00 A6 (len 30)
    (00:37:04) (00:37:04) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 61 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 FA (len 22)
    (00:37:04) (00:37:14) Boiler -> all, type 0x18 telegram: 08 00 18 00 4C 01 7E 05 00 01 01 00 62 01 61 80 00 01 A3 00 00 0F 30 45 01 09 00 00 00 A6 (len 30)
    (00:37:14) (00:37:14) Boiler -> all, type 0x34 telegram: 08 00 34 00 3C 01 61 80 00 21 00 00 03 00 02 7F 1C 01 CF 83 00 FA (len 22)
    (00:37:14)

Domoticz plugin & MQTT receive issues

I'm in the process of writing a Domoticz Python plugin that shows the current room tempeature and allows to change the value of the thermostat. So far, I have succeeded in reading the current room temperature and thermostat setting (through MQTT) and transferring those values to Domoticz. Next step is to modify the thermostat setting. This is where I'm having the problem that EMS-ESP seems not to receive temperature updates through MQTT.

The screenshot has no relevance to the MQTT-problem, but shows what I'm trying to achieve in Domoticz...
image

Standard EMS-ESP v1.5.2. Compiled through PlaftformIO. Runing on a Wemos D1 mini pro (device setting in PlatformIO: d1_mini).

For testing purposes, I'm sending messages through MQTTbox. See settings below.
image

Messages seem not to be received by EMS-ESP. I'm sure I had this working (using the same MQTTbox setup) a couple of versions ago.
Any suggestions? Any specific test setup that is known to work?

Debug for wifi connect

Hi proddy:

I use linux enviroment to build code,when I finished build and upload firmware to ESP8266 board and press reset button on the board.I search IP on my router but I cann't found it connect to my router.I found board return to AP mode.I found in your wiki:
If the WiFi, MQTT, MDNS or something else fails to connect, re-build the firmware using the -DDEBUG_SUPPORT option.
So I use this command "sudo platformio --DDEBUG_SUPPORT run -t upload",but it cann't work.Does this command is right?

findings V 1.2.1

dear Paul,

Following items I've found in 1.2.1:

info:

  • my boiler and Thermostat is automatically recognized. ๐Ÿ‘
  • OTA update is working ๐Ÿ‘
  • no corrupt telegram messages ๐Ÿ‘

minor:

  • copy paste issue for RC35 boiler commands. RC30 defines are used instead RC35 defines
    EMS_MODEL_RC35, EMS_TYPE_RC30Set, "RC35Set", _process_RC35Set}, {EMS_MODEL_RC35, EMS_TYPE_RC30StatusMessage, "RC35StatusMessage", _process_RC35StatusMessage},}

modifications:
ems.cpp

  • activated ES73 thermostat for read/write
    {EMS_MODEL_ES73, EMS_THERMOSTAT_READ_YES, EMS_THERMOSTAT_WRITE_YES}
  • added same ES73 commands like RC35
    // ES73 {EMS_MODEL_ES73, EMS_TYPE_RCOutdoorTempMessage, "RCOutdoorTempMessage", _process_RCOutdoorTempMessage}, {EMS_MODEL_ES73, EMS_TYPE_RCTime, "RCTime", _process_RCTime}, {EMS_MODEL_ES73, EMS_TYPE_RC35Set, "RC35Set", _process_RC35Set}, {EMS_MODEL_ES73, EMS_TYPE_RC35StatusMessage, "RC35StatusMessage", _process_RC35StatusMessage}, {EMS_MODEL_ES73, EMS_TYPE_UBASetPoints, "UBASetPoints", _process_SetPoints},
  • added ES73 ID in ems_getThermostatValues()
    else if (model_id == EMS_MODEL_ES73) { ems_doReadCommand(EMS_TYPE_RC35StatusMessage, type); // to get the setpoint temp ems_doReadCommand(EMS_TYPE_RC35Set, type); // to get the mode }
  • added ES73 ID in ems_setThermostatTemp(float temperature)
    else if (model_id == EMS_MODEL_ES73) { EMS_TxTelegram.type = EMS_TYPE_RC35Set; EMS_TxTelegram.offset = EMS_OFFSET_RC35Set_temp; EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage; // call a different type to refresh temperature value }
  • added ES73 ID in ems_setThermostatMode(uint8_t mode)
    else if (model_id == EMS_MODEL_ES73) { EMS_TxTelegram.type = EMS_TYPE_RC35Set; EMS_TxTelegram.offset = EMS_OFFSET_RC35Set_mode; }

boiler.ino

  • added selFlowTemp, extTemp in mqtt boiler_data
    rootBoiler["selFlowTemp"] = _float_to_char(s, EMS_Boiler.selFlowTemp); rootBoiler["outdoorTemp"] = _float_to_char(s, EMS_Boiler.extTemp);

question:

  • I use the MQTT message for my home server software (fhem). Unfortunately I really don't know how to set the thermostat temperature in type 0x3D if the thermostat is set in "Auto" Mode. In 0x3D you can set the night/day/holiday temperature with offset 0x01/0x02/0x03. Therefore it could be a possibility to read out the "day mode" in 0x3E and send it via mqtt
  • get day mode:
    #define EMS_OFFSET_RC35Get_mode_day 1 // position of thermostat day mode
    add
    uint8_t mode_day; // 0=night, 1=day
    in struct _EMS_Thermostat

void _process_RC35StatusMessage(uint8_t * data, uint8_t length)
uint8_t v = data[EMS_OFFSET_RC35Get_mode_day];
EMS_Thermostat.mode_day = bitRead(v, 1); //get day mode flag
...

... write to setpoint temperature offset in void ems_setThermostatTemp(float temperature)

} else if (model_id == EMS_MODEL_RC35) {
EMS_TxTelegram.type = EMS_TYPE_RC35Set;
EMS_TxTelegram.offset = EMS_Thermostat.mode_day +1; //daymode value +1
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage; // call a different type to refresh temperature value
} else if (model_id == EMS_MODEL_ES73) {
EMS_TxTelegram.type = EMS_TYPE_RC35Set;
EMS_TxTelegram.offset = EMS_Thermostat.mode_day +1; //daymode value +1
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage; // call a different type to refresh temperature value
}
...

๐Ÿ‘

Web interface on the esp

It would be nice if all the parameters can be displayed in a web page hosted on microcontroller and set temp and modes for thermostat .

Thank you.

Pooling is not working

I got problem with receiving messages from pooling boiler.
It is possible to show in log all message - including boiler poll request ?

MQTT Message not complete

Thank you for the great work. It's perfect for me.

I have a smll problem that i can't solve:

When i look on directly on the esp i can read all values (semms correct)
`info
EMS-ESP System setstats:
System logging set to None
LED is off

EMS type handlers: 36

Thermostat is enabled, Boiler is enabled, Poll is disabled, Tx is enabled, Shower Timer is disabled, Shower Alert is disabled
EMS Bus Stats: Connected=yes, # Rx telegrams=43, # Tx telegrams=57, # Crc Errors=0

Boiler stats:
Boiler type: Sieger BK15 Boiler [TypeID 0x08] Product ID:64
Hot tap water is off
Central Heating is active
Warm Water activated: on
Warm Water circulation pump available: off
Warm Water is set to Comfort
Warm Water selected temperature: 60 C
Warm Water desired temperature: 70 C
Warm Water current temperature: 57.5 C
Warm Water current tap water flow: 0.0 l/min
Warm Water # starts: 6194 times
Warm Water active time: 116 days 22 hours 40 minutes
Warm Water 3-way valve: on
Selected flow temperature: 75 C
Current flow temperature: 73.1 C
Return temperature: 70.0 C
Gas: on
Boiler pump: on
Fan: on
Ignition: off
Circulation pump: off
Burner selected max power: 123 %
Burner current power: 25 %
Flame current: 7.5 uA
System pressure: 1.2 bar
Current System Service Code: =H
Outside temperature: 0.4 C
Boiler temperature: 74.8 C
Pump modulation: 100 %
Burner # restarts: 51568 times
Total burner operating time: 990 days 6 hours 44 minutes
Total heat operating time: 873 days 8 hours 4 minutes
Total UBA working time: 2666 days 13 hours 16 minutes

Thermostat stats:
Thermostat type: Sieger ES73 [TypeID 0x10] Product ID:76
Setpoint room temperature: 23.0 C
Current room temperature: 22.8 C
Thermostat time is 06:40:30 25/1/2019
Mode is set to manual
`

but the MQTT message that i recieve is only this:
{"wWSelTemp":"60", "selFlowTemp":"65.0", "outdoorTemp":"0.5", "wWActivated":"on", "wWComfort":"Comfort", "wWCurTmp":"60.5", "wWCurFlow":"0.0", "wWHeat":"off", "curFlowTemp":"57.9", "retTemp":"48.7", "burnGas":"on", "heatPmp":"on", "fanWork":"on", "ignWork":"off", "wWCirc":"off", "selBurnPow":"100", "curBurnPow":"50", "sysPress":"1.2", "boilTemp":"55.0", "pumpMod":"100", "ServiceCode":"-H"}

How can i get the operating times?
It#s not very urgent, but id would be nice.

RC10 Moduline 100 support

Hello,

First of all thanks for this great project. I was wondering if you could help me with my Moduline 100. It is connected to a Nefit Smartline Basic HR.

I see the following devices on the bus:

Scanning EMS bus for devices...
Boiler type device found. Model Sieger BK15 Boiler with TypeID 0x08, Product ID 64, Version 03.05
* Setting Boiler type to Model Sieger BK15 Boiler, TypeID 0x08, Product ID 64, Version 03.05
Boiler type device found. Model RFM20 Receiver with TypeID 0x09, Product ID 68, Version 02.03
Unrecognized device found. Product ID 79, Version 01.02

I'm not sure what the RFM20 receiver is , but I think ID 79 is the RC10 thermostat with bus ID 0x17.

From this topic I found and verified the following commands:

Read thermostat currrent setpoint

(00:40:57) Sending raw telegram: 0B 97 B0 04 01 (CRC=97), #data=1
(00:40:57) 0x17 -> me, type 0xB0 telegram: 17 0B B0 04 2C (CRC=E7), #data=1 

Thermostat current temperature is broadcast:

(00:40:06) 0x17 -> all, type 0xB1 telegram: 17 00 B1 00 04 2C 00 D5 00 00 00 D5 (CRC=F0), #data=8

The thermostat at this moment said it was 21.0 and later jumped to 21.5 so I assume D5 (=213) would be 21.3 degrees.

Setting temperature

And I'm able to write a new setting (0x29 = 41 = 20,5 degrees) with the following command:

(00:35:22) Sending raw telegram: 0B 17 B0 04 29 (CRC=DB), #data=1
(00:35:23) Boiler -> all, type 0x07 telegram: 08 00 07 00 0B 80 00 00 00 00 00 00 00 00 00 00 00 (CRC=47), #data=13
(00:35:23) 0x17 -> Boiler, type 0x1A telegram: 17 08 1A 00 00 00 00 00 (CRC=3A), #data=4

Two questions:
-Do you know why in the telegram 97 sets the new temp? I thought that that position was the target ID and should be 17? Edit: Missed the MSB thing, now I see.
-Are these all the required telegrams for implementation?

Thanks.

BC25 (0x09) detected as MM10

The BC25 Module (0x09) is detected as MM10 (0x21)

(00:00:09) Sending read of type 0x02 to 0x09: telegram: 0B 89 02 00 63 (CRC=F7), #data=1
(00:00:09) 0x09 -> me, type 0x02 telegram: 09 0B 02 00 7D 01 05 (CRC=C1), #data=3
<--- Version(0x02) received
Boiler recognized. Model MM10 Mixer Module with TypeID 0x21, Product ID 125, Version 01.05

boilTemp gives very high value (sometimes)

Hi, boilTemp sometimes gives a very high value, in this case 2073.6 degrees. See two mqtt topics below.

{"wWSelTemp":"60","wWActivated":"on","wWCurTmp":"42.2","wWHeat":"off","curFlowTemp":"44.5","retTemp":"44.0","burnGas":"off","heatPmp":"on","fanWork":"off","ignWork":"off","wWCirc":"off","selBurnPow":"0","curBurnPow":"0","sysPress":"1.6","boilTemp":"45.4","pumpMod":"35"}
{"wWSelTemp":"60","wWActivated":"on","wWCurTmp":"42.2","wWHeat":"off","curFlowTemp":"44.5","retTemp":"44.0","burnGas":"off","heatPmp":"on","fanWork":"off","ignWork":"off","wWCirc":"off","selBurnPow":"0","curBurnPow":"0","sysPress":"1.6","boilTemp":"2073.6","pumpMod":"0"}

Req: Plain EMS Messaging via MQTT

Hi,

your code works quite good on my Buderus (BC10/RC35)

I am trying to implement more functionality (Like Party-Mode etc) into the code. For that, it would be awesome to have a "raw" functionality:

  • Send a raw HEX String (like "0B103F910101") without CRC via a MQTT Topic
    The Code is the adding the CRC32 and send it to the Bus
  • Get raw Telegrams: Publish the raw incoming telegrams as HEX to a specific MQTT Topic

Is it possible to add this functionality?

Cheers, Frederik

ESP8266 crashing continously when compiling from source

I can't get 1.5.2 (or any version) to work on a Wemos D1 Mini V2 if I compile it myself, it only works if I use the precompiled version:

$ git rev-parse HEAD
8d5757c00b2638a54d2927064002685e7876ec42
$ platformio upgrade
You're up-to-date!
PlatformIO 3.6.4 is currently the newest version available.
$ platformio update
Updating tool-scons                      @ 2.20501.7      [Up-to-date]

Platform Manager
================
Platform Atmel AVR
--------
Updating atmelavr                        @ 1.12.5         [Up-to-date]
Updating toolchain-atmelavr              @ 1.50400.0      [Up-to-date]
Updating framework-arduinoavr            @ 2.10623.190209 [Up-to-date]
Updating tool-avrdude                    @ 1.60300.2      [Up-to-date]

Platform Espressif 8266
--------
Updating espressif8266                   @ 2.0.0          [Up-to-date]
Updating tool-mkspiffs                   @ 1.200.0        [Up-to-date]
Updating tool-esptool                    @ 1.413.0        [Up-to-date]
Updating tool-espotapy                   @ 1.1.3          [Up-to-date]
Updating framework-arduinoespressif8266  @ 2.20500.0      [Up-to-date]
Updating toolchain-xtensa                @ 2.40802.190218 [Up-to-date]


Library Manager
===============
$ platformio run

Processing d1_mini (platform: espressif8266; board: d1_mini; framework: arduino)
--------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/d1_mini.html
PLATFORM: Espressif 8266 > WeMos D1 R2 and mini
HARDWARE: ESP8266 80MHz 80KB RAM (4MB Flash)
Converting ems-esp.ino
Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF MODES: FINDER(chain) COMPATIBILITY(soft)
Collected 35 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <CRC32> 2.0.0
|-- <CircularBuffer> 1.3.0
|-- <JustWifi> 2.0.2
|   |-- <ESP8266WiFi> 1.0
|-- <AsyncMqttClient> 0.8.2
|   |-- <ESPAsyncTCP> 1.2.0
|   |   |-- <ESP8266WiFi> 1.0
|-- <ArduinoJson> 5.13.4
|-- <OneWire> 2.3.4
|-- <Ticker> 1.0
|-- <myESP>
|   |-- <AsyncMqttClient> 0.8.2
|   |   |-- <ESPAsyncTCP> 1.2.0
|   |   |   |-- <ESP8266WiFi> 1.0
|   |-- <ESP8266mDNS> 1.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ArduinoOTA> 1.0
|   |   |-- <ESP8266WiFi> 1.0
|   |   |-- <ESP8266mDNS> 1.2
|   |   |   |-- <ESP8266WiFi> 1.0
|   |-- <ArduinoJson> 5.13.4
|   |-- <JustWifi> 2.0.2
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <ESPAsyncTCP> 1.2.0
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <DNSServer> 1.1.1
|   |   |-- <ESP8266WiFi> 1.0
|   |-- <TelnetSpy>
|   |   |-- <ESP8266WiFi> 1.0
Compiling .pioenvs/d1_mini/src/ems-esp.ino.cpp.o
Retrieving maximum program size .pioenvs/d1_mini/firmware.elf
Checking size .pioenvs/d1_mini/firmware.elf
Memory Usage -> http://bit.ly/pio-memory-usage
DATA:    [======    ]  56.6% (used 46400 bytes from 81920 bytes)
PROGRAM: [=====     ]  45.7% (used 477724 bytes from 1044464 bytes)
============================================================= [SUCCESS] Took 2.01 seconds =============================================================

====================================================================== [SUMMARY] ======================================================================
Environment nodemcuv2	[SKIP]
Environment d1_mini  	[SUCCESS]
============================================================= [SUCCESS] Took 2.01 seconds =============================================================

When I read the serial console it's just continuously crashing:

   [000107] [MQTT] disabled

Exception (28):
               epc1=0x4022639c epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000000 depc=0x00000000

                                                                                                  >>>stack>>>

                                                                                                             ctx: cont
                                                                                                                      sp: 3ffffd20 end: 3fffffc0 offset: 01a0
     3ffffec0:  3ffe8ffb 3ffe8ff3 3ffffef0 3fff2950  
                                                     3ffffed0:  3fff4f1c 3ffea8ad 3fff3298 40219594  
                                                                                                     3ffffee0:  3ffea8a5 3fff3298 3ffea8a1 4020d6a9  
                                                                                                                                                     3ffffef0:  00000000 00000000 00000000 00000000  
                                             3fffff00:  00000000 00000000 3fff2950 40221370  
                                                                                             3fffff10:  3ffe8ffb 3ffe8ff3 3fff2950 4020d51c  
                                                                                                                                             3fffff20:  3fff41fc 3ffe8ff3 4020cf4c 4022123c  
                                     3fffff30:  3ffe8ffb 3ffe8ff3 3fff2950 4020fa1f  
                                                                                     3fffff40:  40221250 3fff2950 3fffff70 40208d1a  
                                                                                                                                     3fffff50:  00000001 00000000 3ffe8fe4 3ffeabae  
                             3fffff60:  3fffff70 feefeffe feefeffe feefeffe  
                                                                             3fffff70:  4020779c feefeffe 4022132c 40221310  
                                                                                                                             3fffff80:  402090b8 feefeffe 402212fc 402212e4  
                     3fffff90:  feefeffe feefeffe feefeffe 3fff2d5c  
                                                                     3fffffa0:  3fffdad0 00000000 3fff2d28 402116fc  
                                                                                                                     3fffffb0:  feefeffe feefeffe 3ffe855c 40100951  
             <<<stack<<<

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v951aeffa
~ld

Intergas Kombi Kompakt + Bosch Easy Control Adapter problems.

Dear Proddy,

I'm currently working on a little bit weird setup with the EMS level shifter and the ESP 8266.
I have drawn a schematic scheme to make it clear.

image
Boiler: Intergas Kombi Kompakt HRE 24/18
EzC: Bosch EasyControl adapter
TS: Nefit Easy
EMS: EMS Level Shifter v0.9
ESP: ESP8266
Firmware: 1.5.2

So, in this situation the EzC transforms the OpenTherm Protocol to EMS.
The Nefit Easy works fine.
But the EMS-Bus can't detect the Boiler.

When I do a autodetect I get the following result:

autodetect
Scanning EMS bus for devices.
Unrecognized device found. TypeID 0x02, Product ID 205, Version 02.01
Unrecognized device found. TypeID 0x02, Product ID 205, Version 02.01
* Setting Thermostat type to Model TC100/Nefit Easy, TypeID 0x18, Product ID 202                               , Version 02.18

I also saw the older issue with the Bosch EasyControl adapter and followed the instructions.
After that i did a info command.

EMS-ESP System stats:
  System logging set to None
  LED is on
  # connected Dallas temperature sensors=0
  Thermostat is enabled, Boiler is enabled, Shower Timer is enabled, Shower Alert is disabled

EMS Bus Stats:
  Bus Connected=yes, # Rx telegrams=11, # Tx telegrams=0, # Crc Errors=1

Boiler stats:
  Boiler type: Generic Type [Type ID: 0x08] Product ID:0 Version:not set
  Hot tap water is off
  Central Heating is off
  Warm Water activated: on
  Warm Water circulation pump available: on
  Warm Water is set to Comfort
  Warm Water selected temperature: 60 C
  Warm Water desired temperature: 70 C
  Warm Water current temperature: ? C
  Warm Water current tap water flow: 2.5 l/min
  Warm Water # starts: 0 times
  Warm Water active time: 3 days 20 hours 0 minutes
  Warm Water 3-way valve: off
  Selected flow temperature: 0 C
  Current flow temperature: 58.0 C
  Return temperature: ? C
  Gas: off
  Boiler pump: off
  Fan: off
  Ignition: off
  Circulation pump: off
  Burner selected max power: 0 %
  Burner current power: 0 %
  Flame current: 0.10 uA
  System pressure: 1.90 bar
  Current System Service Code: -H
  Heating temperature setting on the boiler: 90 C
  Boiler circuit pump modulation max. power: 100 %
  Boiler circuit pump modulation min. power: 100 %
  Boiler temperature: 2073.60 C
  Pump modulation: 128 %
  Burner # restarts: 32768 times
  Total burner operating time: 5825 days 14 hours 23 minutes
  Total heat operating time: 3276 days 22 hours 32 minutes
  Total UBA working time: 0 days 0 hours 0 minutes

Thermostat stats:
  Thermostat type: TC100/Nefit Easy [Type ID: 0x18] Product ID:202 Version:02.18
  Setpoint room temperature: 30.20 C
  Current room temperature: 64.33 C

Shower stats:
  Shower Timer is off

There are a lot of random values.
My first thought was that the boiler isn't supported yet.
Can I write custom code for my boiler?
My code experience is very low, but a friend of my is pretty good with C/, C++ etc.
And how far is the Nefit Easy write function?

Thank you in advance!

Daan
(Sorry for the bad english)

some findings after first usage

dear proddy,

thank again for your amazing code. I received bbqkees converter board today and started the work to adjust the Sieger es73 to your code. Basically it seems that this type is a mix of RC30 and RC35. Look and feel like a RC30, but some codes are different.
However, I've made following changes:

  • get / set thermostat temperatures (Set and current temp.)
    ems.h
    #define EMS_TYPE_RC30StatusMessage 0x3E // is an automatic thermostat broadcast giving us temps #define EMS_TYPE_RC30Set 0x3D // for setting values like temp and mode #define EMS_OFFSET_RC30Set_mode 7 // position of thermostat mode #define EMS_OFFSET_RC30Set_temp 2 // position of thermostat setpoint temperature #define EMS_OFFSET_RC30curr_temp 3 // position of thermostat current temperature
    ems.cpp
    void _process_RC30StatusMessage(uint8_t * data, uint8_t length) { EMS_Thermostat.setpoint_roomTemp = ((float)data[EMS_OFFSET_RC30Set_temp]) / (float)EMS_OFFSET_RC30Set_temp; EMS_Thermostat.curr_roomTemp = _toFloat(EMS_OFFSET_RC30curr_temp, data); EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back to Home Assistant via MQTT }

  • get / set thermostat mode (night/day/auto)
    boiler.ino
    {"m [n]", "set thermostat mode (0=night, 1=day, 2=auto)"}, // for night/day/auto mode

myDebug(" Mode is set to "); if (EMS_Thermostat.mode == 0) { myDebug("low\n"); } else if (EMS_Thermostat.mode == 1) { myDebug("manual\n"); } else if (EMS_Thermostat.mode == 2) { myDebug("auto\n"); } else { myDebug("?\n"); // myDebug("? (value is %d)\n", EMS_Thermostat.mode); }

minor issues

  • burnStarts, burnWorkMin, heatWorkMin are 3 bytes long
  • void _renderIntValue(const char * prefix, const char * postfix, uint32_t value) also 3 bytes long
  • char * _int_to_char(char * s, uint32_t value) also 3 bytes long
  • OTA update with macOS and PlatformIO does not work. It stucks at recognising the esp8266. If i start it manually, it starts, but finishes with an error message
    espota.py -i 192.168.0.202 -p 8266 -f .pioenvs/nodemcuv2/firmware.bin
    Sending invitation to 192.168.0.203
    Uploading.....................................................................................................................................................................................................................................................................
    16:30:14 [ERROR]: 576OK
  • I get error messages if I want to send something ... (01:24:00) Corrupt telegram: telegram: 00 63 (CRC=3B). any idea?

hope to get more time to add parsing for full type 0x3D & 0x3E thermostat messages

merci,
Chris

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.