diff --git a/README.md b/README.md index 3d58fb72c..1970b4d78 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![logo](https://github.com/proddy/EMS-ESP/raw/master/doc/ems%20gateway/logo-proddy-fw.jpg) +![logo](docs/_media/logo-proddy-fw.jpg) # EMS-ESP [![version](https://img.shields.io/github/release/proddy/EMS-ESP.svg?label=Latest%20Release)](https://github.com/proddy/EMS-ESP/blob/master/CHANGELOG.md) @@ -15,7 +15,7 @@ EMS-ESP is a open-source system to communicate with **EMS** (Energy Management S The code is written for the Espressif **ESP8266** microcontroller and supports a telnet console for real-time monitoring and configuration and customizable MQTT support for publishing the information to a home automation system such as Home Assistant or Domoticz. -#### Please reference the [Wiki](https://github.com/proddy/EMS-ESP/wiki) for further details and instructions on how to build and configure the firmware. +#### Please reference the [Wiki](https://proddy.github.io/EMS-ESP) for further details and instructions on how to build and configure the firmware. --- @@ -23,31 +23,25 @@ The code is written for the Espressif **ESP8266** microcontroller and supports a #### A web interface for easy configuration and real-time monitoring of the EMS bus -| ![web menu](https://github.com/proddy/EMS-ESP/raw/master/doc/web/system_status.PNG) | ![web menu](https://github.com/proddy/EMS-ESP/raw/master/doc/web/ems_dashboard.PNG) | +| ![web menu](docs/_media/web/system_status.PNG) | ![web menu](docs/_media/web/ems_dashboard.PNG) | | -------------------------------------------------------- | ---------------------------------------------------------- | #### MQTT support for Home Assistant and Domoticz -![ha](https://github.com/proddy/EMS-ESP/raw/master/doc/home%20assistant/ha.png) +![ha](docs/_media/home%20assistant/ha.png) #### Telnet for advanced configuration and verbose traffic logging -| ![telnet menu](https://github.com/proddy/EMS-ESP/raw/master/doc/telnet/telnet_menu.jpg) | ![telnet menu](https://github.com/proddy/EMS-ESP/raw/master/doc/telnet/telnet_stats.PNG) | +| ![telnet menu](docs/_media/telnet/telnet_menu.jpg) | ![telnet menu](docs/_media/telnet/telnet_stats.PNG) | | ------------------------------------------------------------ | -------------------------------------------------------- | ## Supported EMS devices -More than **50** EMS devices are currently supported. See the [complete list](https://github.com/proddy/EMS-ESP/wiki/Supported-EMS-Devices) from the [Wiki](https://github.com/proddy/EMS-ESP/wiki). - -## Uploading the firmware - -Latest stable firmware build can be found [here](https://github.com/proddy/EMS-ESP/releases/latest). - -Follow [these instructions](https://github.com/proddy/EMS-ESP/wiki/Building-and-Uploading-the-Firmware) on how to upload to the ESP8266. +More than **50** EMS devices are currently supported. See the [complete list](https://proddy.github.io/EMS-ESP/#/Supported-EMS-Devices). ## Compatible with bbqkees' EMS Gateway -The firmware fully supports BBQKees' [EMS Gateway](https://shop.hotgoodies.nl/ems/) board with integrated Wemos D1 ESP8266. +The firmware fully supports BBQKees' [EMS Gateway](https://bbqkees-electronics.nl/) board with integrated Wemos D1 ESP8266. -| ![on boiler](https://github.com/proddy/EMS-ESP/raw/master/doc/ems%20gateway/on-boiler.jpg) | ![kit](https://github.com/proddy/EMS-ESP/raw/master/doc/ems%20gateway/ems-kit-2.jpg) | ![basic circuit](https://github.com/proddy/EMS-ESP/raw/master/doc/ems%20gateway/ems-board-white.jpg) | +| ![on boiler](docs/_media/ems%20gateway/on-boiler.jpg) | ![kit](docs/_media/ems%20gateway/ems-kit-2.jpg) | ![basic circuit](docs/_media/ems%20gateway/ems-board-white.jpg) | | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | diff --git a/doc/ems gateway/logo-proddy-fw.jpg b/doc/ems gateway/logo-proddy-fw.jpg deleted file mode 100644 index 3f0d7c36f..000000000 Binary files a/doc/ems gateway/logo-proddy-fw.jpg and /dev/null differ diff --git a/doc/ems references/HT3-Bus_Telegramme.html b/doc/ems references/HT3-Bus_Telegramme.html deleted file mode 100644 index 1a019762c..000000000 --- a/doc/ems references/HT3-Bus_Telegramme.html +++ /dev/null @@ -1,7862 +0,0 @@ - - - - - - - - - - - - - - - - - -
-

-

Übersicht

- Telegramm Übersicht
- ID 2
- ID 7
- ID 6
- ID 190
- ID 24
- ID 25
- ID 188
- ID 27
- ID 51
- ID 52
- ID 467...468
- ID 26
- ID 268
- ID 296
- ID 357...366
- ID 367...376
- ID 377...386
- ID 677...684
- ID 259
- ID 260
- ID 866
- ID 868
- ID 873
- ID 874
- ID 910
- ID 913
- ID 357_366_14_Modem
- ID 377_387_4_Modem
- ID 357...366_1x_Modem
- ID 377...386_x_Modem
- -

-
-

Tabelle 1: Telegramm Übersicht

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme







Datum:14.10.2016


Version:0.2.0







Message-IDTelegramm(hex)BeschreibungSource-Werte (hex)Bemerkung



(SO)
2SO TT 02 xySoftware-Version / Busteilnehmer88TT = <Target-/Token-Nr>
7SO 00 07 xySteuerung: EMS Token Status88
6SO 00 06 xyDatum / Zeit90 | 98Mit 14 und 17 Bytes Länge
190TT 00 BE xyErrorCode / DisplayCode von Target
TT = <Target-/Token-Nr>
24SO 00 18 xyHeizgerät: Kesseldaten88Mit 31 und 33 Bytes Länge
25SO 00 19 xyHeizgerät: Heizungsdaten88
188SO 00 BC xyHeizgerät: Hybrid (Wärmepumpe)

27SO 00 1B xySollwert Warmwasser90
51SO 00 33 xyWarmwasser: Daten von Steuerung88
52SO 00 34 xyWarmwasser: Daten von Steuerung | IPM88 | Ax (x:=0...7)Mit 22,23 und 25 Bytes Länge
467...468SO 00 FF xy 00 D3...D4Betriebsart WW-System90
26SO 08 1A xyHeizkreis: Systemwerte90
268SO 00 FF xy 00 0CHeizkreis: von IPM1/IPM2 für MischerAx (x:=0...7)
296SO 00 FF xy 00 28Heizkreis: Fehlermeldungen90
357...366SO 00 FF xy 00 65...6EHeizkreis: Bauart190
367...376SO 00 FF xy 00 6F...78Heizkreis: Temperaturniveau90 | 9x (x:=8...F)
377...386SO 00 FF xy 00 79...82Heizkreis: Bauart290
677...684SO 00 FF xy 01 A5...ACHeizkreis: Systemwerte90 | 98Cxyz-Controller (z.B. CW100)
259SO 00 FF xy 00 03Solar: Solardaten von ISM1B0
260SO 00 FF xy 00 04Solar: Solardaten von ISM2B0Mit 24 und 35 Bytes Länge
866SO 00 FF xy 02 62Solar: Solardaten von MS100B0EMS2-Bus
868SO 00 FF xy 02 64Solar: Solardaten von MS100B0EMS2-Bus
873SO 00 FF xy 02 69Solar: Solardaten von MS100B0EMS2-Bus
874SO 00 FF xy 02 6ASolar: Solardaten von MS100B0EMS2-Bus
910SO 00 FF xy 02 8ESolar: Solardaten von MS100B0EMS2-Bus
913SO 00 FF xy 02 91Solar: Solardaten von MS100B0EMS2-Bus
357_14...366_14SO TA FF 0E 00 65...6EModem-CMD: Betriebsart setzen8D | C8TA = <Target-Nr>
377_4 ...386_4SO TA FF 04 00 79...82Modem-CMD: Betriebsart setzen8D | C8TA = <Target-Nr>
357_17...366_17SO TA FF 11 00 65...6EModem-CMD: Temp-Niveau setzen8D | C8TA = <Target-Nr>
377_7 ...386_7SO TA FF 07 00 79...82Modem-CMD: Temp-Niveau setzen8D | C8TA = <Target-Nr>





1: ( Hi-Byte * 256 + Lo-Byte ) / 10
Calculation-Type: 1
2: ( Byte3 * 65536 + Byte2 * 256 + Byte1 )
Calculation-Type: 2
3: ( Byte4 * 1048576 + Byte3 * 65536 + Byte2 * 256 + Byte1 )
Calculation-Type: 3
4: ( Type 3 ) / 10
Calculation-Type: 4
5: ( Type 3 ) / 1000
Calculation-Type: 5
- -
-

Tabelle 2: ID 2

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme



Message-ID: 2_x_0

ByteWerte (Hex)BemerkungBedeutung / IDBeispiel (Hex)

16Byte




Telegramm: Software-Version / Busteilnehmer

0SO
Source88
1TT<Token-/Target-Nr> (Geräteadr. Ungleich 0)Target18
202
2_x_002
3xy Telegramm-Offset (hier 0...9).
00
4xyErste Erkennung Busteilnehmer2_0_05F


- 00 = Variantenerkennung in Betrieb oder fehlerhaft



…..



- 5F = Heatronic III



- 64 = Schaltmodul IPM1



- 65 = Solarmodul ISM1



- 66 = Schaltmodul IPM2



- 67 = Solarmodul ISM2



- 67 = Solarmodul ISM2



- 69 = Witterungsgeführter Regler FW100



- 6A = Witterungsgeführter Regler FW200



- 6B = Raumtemperaturregler FR100



- 6C = Raumtemperaturregler FR110



- 6D = Fernbedienung FB 10



- 6E = Fernbedienung FB100



- 6F = Raumtemperaturregler FR10



…..



- BD = KM200



- BF = Raumtemperaturregler FR120



- C0 = Witterungsgefuehrter Regler FW120



…..

5xySoftware-Familie2_1_022
6xyVersion der Softwarefamilie2_2_004
7xyZweite Erkennung Busteilnehmern2_3_000
8xyKennzahl f. Grosse Änderung in HW- und SW2_4_000
9xyKennzahl f. Kleine Änderung in HW- und SW2_5_000
10xyDritte Erkennung Busteilnehmern2_6_000
11xyKennzahl f. Kleine Änderung in HW- und SW2_7_000
12xyKennzahl f. Grosse Änderung in HW- und SW2_8_000
13xyMarkenidentifizierung2_9_000


- 00 = keine Markenerkennung



- 01 = Bosch



- 02 = Junkers



- 03 = Buderus



…..

14<CRC>CRC
63
15<Ende>Ende
00
- -
-

Tabelle 3: ID 7

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID: 7_x_y
ByteWerte (Hex)BemerkungBedeutung / ID

21Byte



EMS Token Status
0SO
Source
100
Target
207
7_x_y
3xy Telegramm-Offset (hier 0...14).
4Bit0...Bit7EMS Token Status 8: EMS Master 7_0_0 bis


- EMS Token Status 9 … 157_0_7
5Bit0...Bit7EMS Token Status 16 … 23 7_1_0 bis



7_1_7
6Bit0...Bit7Busadresse 24 vorhanden7_2_0 bis


- EMS Token Status 25 … 31 7_2_7
7Bit0...Bit7Busadresse 32:Mischerstellmotor im HK1 vorhanden7_3_0 bis


- EMS Token Status 33 … 397_3_7
8Bit0...Bit7Busadresse 40:Warmwassersystem im HK1 vorhanden7_4_0 bis


- EMS Token Status 41 … 477_4_7
9Bit0...Bit7Busadresse 48:Solarmodul vorhanden7_5_0 bis


- EMS Token Status 49 … 557_5_7
10Bit0...Bit7Busadresse 56:Fernbedienung f. HK1 vorhanden7_6_0 bis


- EMS Token Status 57 … 637_6_7
11Bit0...Bit7Busadresse 64:Temperaturfühler im HK1 vorhanden7_7_0 bis


- EMS Token Status 65 … 717_7_7
12Bit0...Bit7Status für Busadresse 72...797_8_0 bis



7_8_7
13Bit0...Bit7EMS Token Status 80 … 877_9_0 bis



7_9_7
14Bit0...Bit7EMS Token Status 88 … 957_10_0 bis



7_10_7
15Bit0...Bit7EMS Token Status 96 … 1037_11_0 bis



7_11_7
16Bit0...Bit7EMS Token Status 104 … 1117_12_0 bis



7_12_7
17Bit0...Bit7EMS Token Status 112 … 119 (Cascaded EMS)7_13_0 bis



7_13_7
18Bit0...Bit7EMS Token Status 120 … 127 (Cascaded EMS)7_14_0 bis



7_14_7
19<CRC>CRC
20<Ende>Ende Marker
- -
-

Tabelle 4: ID 6

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme



Message-ID:6_x_y
ByteWerte (Hex)BemerkungBedeutung / ID

14Byte 17Byte




Datum/Zeit – Telegramm
090 | 9890 | 98Source :=90h oder :=98hSource
10000
Target
20606
6_x_y
3xyxy Telegramm-Offset (hier 0...6|10).
4xyxyJahr (Wert + 2000)dez.6_0_0
5xyxyMonat (01 … 12)dez.6_1_0
6xyxyStunden (00 … 23)dez.6_2_0
7xyxyTag (01 … 31)dez.6_3_0
8xyxyMinute (00 … 59)dez.6_4_0
9xyxySekunde (00 … 59)dez.6_5_0
10xyxyWochentag6_6_0



01=Montag; 02=Dienstag;... für Fxyz – Regler



00=Montag; 01=Dienstag;... für Cxyz – Regler
11Bit0...Bit7Bit0...Bit7Uhrstatus

Bit0Bit0- Sommerzeit6_7_0

Bit1Bit1- Funkempfang vorhanden6_7_1

Bit2Bit2- Funksignal vorhanden6_7_2

Bit3...Bit7Bit3...Bit7- Immer 0
12<CRC>xyToken-Adresse des aktuellen RTC-Owner6_8_0
13<Ende>xyAutomatische Sommer/Winter Umschaltung6_9_0
14
xyRTC Benutzer Kalibierungswert6_10_0
15
<CRC>

16
<Ende>

- -
-

Tabelle 5: ID 190

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID: 190_x_0
ByteWerte (Hex)BemerkungBedeutung / ID

11Byte



ErrorCode von Target-/Token
0TTTarget-/Token NummerSource
100- 00 = An AlleTarget
2BE
190_x_0
300Immer 0
4xyBus-Adresse des Fehlercodes190_0_0
5Hi-ByteDisplaycode190_1_0
6Lo-Byte
7Hi-ByteCause Code190_3_0
8Lo-Byte
9<CRC>CRC
10<Ende>Ende Marker
- -
-

Tabelle 6: ID 24

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme



Message-ID:24_x_y
ByteWerte (Hex)BemerkungBedeutung / ID

31Byte 33Byte




Kessel-Telegramm: Heizgerät
08888
Source
10000
Target
21818
24_x_y
3xyxy Telegramm-Offset (hier 0...25).
4xyxyVorlauf Soll-Temperatur24_0_0
5Hi-ByteHi-ByteVorlauf Ist-Temperatur24_1_0
6Lo-ByteLo-Byte
7xyxyKessel maximale Leistung (76/84/100; 100)%24_3_0
80-1000-100Aktuelle Brennerleistung in %24_4_0
9Bit0...Bit7BitfeldBetriebsmode

Bit0Bit1- Heizungs-Mode24_5_0

Bit1Bit2- Warmwasser-Mode24_5_1

Bit2Bit3:=0- Status Servicebetrieb24_5_2

Bit3Bit4- Brennerflamme an24_5_3

Bit4Bit5:=0- Aufheizphase des Wärmeerzeugers24_5_4

Bit5Bit6:=0- Verriegelnder Fehler24_5_5

Bit6Bit7:=0- Blockierender Fehler24_5_6

Bit7Bit8:=0- Status Wartungsanforderung24_5_7
10Bit0...Bit7Bit0...Bit7Status Heizbetrieb

Bit0Bit0- Heizbetrieb im Bussystem24_6_0

Bit1Bit1- Wärmeanforderung (durch Schalter)24_6_1

Bit2Bit2- Wärmeanforderung bei Betriebsart: Frost24_6_2

Bit3Bit3- Wärmeanforderung im WW-Betrieb bei Betriebsart: Frost24_6_3

Bit4Bit4- Interne Wärmeanforderung bei WW24_6_4

Bit5Bit5- Wärmeanforderung f. WW-Erkennung im Bussystem24_6_5

Bit6Bit6- Wärmeanforderung24_6_6

Bit7Bit7- Wärmeanforderung im Testmodus24_6_7
11Bit0...Bit7Bit0...Bit7Betriebs-Status

Bit0Bit0- Brenner an (Relais-Signal erste Brennstufe)24_7_0

Bit1Bit1- Brenner an (Relais-Signal zweite Brennstufe)24_7_1

Bit2Bit2- Lüfter an (Relais-Signal f. Lüfter)24_7_2

Bit3Bit3- Zündung an (Relais-Signal f. Zündung)24_7_3

Bit4Bit4- Ölvorwärmer an (Relais-Signal f. Ölvorwärmer)24_7_4

Bit5Bit5- Heizungspumpe an (Relais-Signal f. HP)24_7_5

Bit6Bit6- 3-Wege-Ventil auf Speicherladung24_7_6

Bit7Bit7- Zirkulationspumpe an (Relais-Signal f. ZP)24_7_7
12Bit0...Bit7Bit0...Bit7Status 1

Bit0Bit0- Meldesignal Abgasklappe f. Freigabe Ölbrenner24_8_0

Bit1Bit1- Signal vom Luftdruckschalter24_8_1

Bit2Bit2- Signal vom Flüssiggasbrenner24_8_2

Bit3Bit3- Signal vom Gasdruckwächter24_8_3

Bit4Bit4- Signal vom externen Ein-/Aus-Schalter24_8_4

Bit5Bit5- Digitales Eingangssignal24_8_5

Bit6Bit6- Signal vom Sicherheitstemperaturbegrenzer (TB)24_8_6

Bit7Bit7- Signal vom Raumthermostat24_8_7
13Hi-ByteHi-ByteWW-Temperatur Speicherfühler124_9_0
14Lo-ByteLo-Byte- (0x8300 := Nicht vorhanden)
15Hi-ByteHi-ByteWW-Temperatur Speicherfühler224_11_0
16Lo-ByteLo-Byte- (0x8000 | 0x7D00 := Nicht vorhanden)
17Hi-ByteHi-ByteTemperatur Kessel-Rücklauf24_13_0
18Lo-ByteLo-Byte- (0x8000 | 0x7D00 := Nicht vorhanden)
19Hi-ByteHi-ByteIonisationsstrom24_15_0
20Lo-ByteLo-Byte
21FFFFAnlagendruck am Wärmeerzeuger24_17_0



- (FF := ungültig)
22Hi-ByteHi-ByteDisplaycode24_18_0
23Lo-ByteLo-Byte
24Hi-ByteHi-ByteCause Code24_20_0
25Lo-ByteLo-Byte
2600FFWarmwasserdurchfluss-Menge24_22_0



- (FF := ungültig)
27Bit0...Bit7Bit0...Bit7Status 2

Bit0Bit0- Status Speicherlade-Pumpe (SP)24_23_0

Bit1Bit1- Flüssiggasventil an24_23_1

Bit2Bit2- Status Gaswärmepumpe24_23_2

Bit3Bit3- Status d. Relais im Schaltmodul UM1024_23_3

Bit4Bit4- Zirkulationspumpe an (Relais-Signal f. ZP)24_23_4

Bit5Bit5- Status Brenner Relais24_23_5

Bit6Bit6- FB reservierte Bit24_23_6

Bit7Bit7- FB reservierte Bit24_23_7
28Bit0...Bit7Bit0...Bit7Status 3

Bit0Bit0- Status der Füllfunktion 24_24_0

Bit1Bit1- Status Schaltmodul UM1024_24_1

Bit2Bit2- UM10 Signal für Brenner-Blockierung24_24_2

Bit3Bit3- Brennerfreigabe durch Schaltmodul24_24_3

Bit4Bit4- Status Brenneranlauf im Schaltmodul24_24_4

Bit5Bit5- Heizbetrieb blockiert bei Heatronic III24_24_5

Bit6Bit6- STB – Test aktiv24_24_6

Bit7Bit7- Tastensperre ein24_24_7
29<CRC>Hi-ByteCRC | Hi-Byte - Ansauglufttemperaturxy | 24_25_0
30<Ende>Lo-ByteEnde | Lo-Byte - Ansauglufttemperatur
31<CRC> -– | CRC
32<Ende> –- | Ende
- -
-

Tabelle 7: ID 25

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:25_x_0
ByteWerte (Hex)BemerkungBedeutung / ID

33Byte



Kessel-Telegramm: Heizgerät
088
Source
100
Target
219
25_x_0
3xy Telegramm-Offset (hier 0...25).
4Hi-ByteAußentemperatur25_0_0
5Lo-Byte
6Hi-ByteMaximale Temperatur25_2_0
7Lo-Byte- 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden


- 0x7FFF = Sensorkurzschluss
8Hi-ByteAbgastemperatur25_4_0
9Lo-Byte- 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden


- 0x7FFF = Sensorkurzschluss
10Hi-ByteGasdruck / Luftdruck25_6_0
11Lo-Byte- 0xFFFF = Sensorunterbrechung / Fühler nicht vorhanden
12xyTaktsperre im Zweipunkt Betrieb25_8_0
13xyModulationsbereich Heizungspumpe (HP)25_9_0
14Byte 3Brennerstarts Total (für Warmwasser und Heizung)25_10_0
15Byte 2 „ ( Calculation-Type: 2 )
16Byte 1
17Byte 3Betriebsminuten Brenner Total (für Warmwasser und Heizung)25_13_0
18Byte 2 „ ( Calculation-Type: 2 )
19Byte 1
20Byte 3Betriebszeit f. Zweite Brennerstufe25_16_0
21Byte 2 „ ( Calculation-Type: 2 )
22Byte 1
23Byte 3Betriebsminuten Brenner (nur Heizung)25_19_0
24Byte 2 „ ( Calculation-Type: 2 )
25Byte 1
26Byte 3Brennerstarts (nur Heizung)25_22_0
27Byte 2 „ ( Calculation-Type: 2 )
28Byte 1
29Hi-ByteTemperatur an hydraulischer Weiche25_25_0
30Lo-Byte- 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden


- 0x7FFF = Sensorkurzschluss
31<CRC>CRC
32<Ende>Ende Marker
- -
-

Tabelle 8: ID 188

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:188_x_y
ByteWerte (Hex)BemerkungBedeutung / ID






Kessel-Telegramm: Heizgerät
088
Source
100
Target
2BC
188_x_y
3xy Telegramm-Offset (hier 0...13).
4Hi-ByteTemperatur Puffer-Speicher oben188_0_0
5Lo-Byte
6Hi-ByteTemperatur Puffer-Speicher unten188_2_0
7Lo-Byte
8Hi-ByteTemperatur Vorlauf Verflüssiger188_4_0
9Lo-Byte
10Hi-ByteTemperatur Rücklauf Verflüssiger188_6_0
11Lo-Byte
12Bit0...Bit7Betriebs-Status1

Bit0- Wärmepumpe188_8_0

Bit1
188_8_1

Bit2
188_8_2

Bit3
188_8_3

Bit4- Status Abtaumöglichkeit an W-Pumpe188_8_4

Bit5
188_8_5

Bit6
188_8_6

Bit7
188_8_7
13Bit0...Bit7Betriebs-Status2

Bit0- Abtaufunktion an W-Pumpe188_9_0

Bit1- Status Verdichter188_9_1

Bit2- Fehlerstatus Wärmepumpe188_9_2

Bit3
188_9_3

Bit4
188_9_4

Bit5
188_9_5

Bit6
188_9_6

Bit7
188_9_7
14<CRC>CRC
15<Ende>Ende
- -
-

Tabelle 9: ID 27

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:27_0_0
ByteWerte (Hex)BemerkungBedeutung / ID

7Byte



Telegramm: Solltemperatur WW-System
090 Source
100
Target
21B
27_x_0
300Immer 00
432Sollwert Warmwasser-Temperatur27_0_0
5<CRC>CRC
6<Ende>Ende Marker
- -
-

Tabelle 10: ID 51

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID: 51_x_y
ByteWerte (Hex)BemerkungBedeutung / ID






Kessel-Telegramm: Warmwasser
088
Source
100
Target
233
51_x_y
3xy Telegramm-Offset (hier 0...12).
4xySoll-Temperatur Warmwasser51_0_0
5xy
51_1_0
6xySoll-Temperatur Warmwasser51_2_0
7xyTemperaturhysterese bei T-Soll51_3_0
8xy
51_4_0
9xy
51_5_0
10xy
51_6_0
11xy
51_7_0
12xy
51_8_0
13xy
51_9_0
14xy
51_10_0
15xy
51_11_0
16xy
51_12_0
17<CRC>

18<Ende>

- -
-

Tabelle 11: ID 52

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme






Message-ID: 52_x_y
ByteWerte (Hex)
BemerkungBedeutung / ID

23Byte 22Byte 25Byte





Kessel-Telegramm: Warmwasser
0888888
Source
1000000
Target
2343434
52_x_y
3xyxyxy Telegramm-Offset (hier 0...17).
4xyxyxySoll-Temperatur Warmwasser52_0_0
5Hi-ByteHi-ByteHi-ByteIst-Temperatur Warmwasser52_1_0
6Lo-ByteLo-ByteLo-Byte- 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden




- 0x7FFF = Sensorkurzschluss
7Hi-ByteHi-ByteHi-ByteIst-Temperatur im Warmwasser - Speicher52_3_0
8Lo-ByteLo-ByteLo-Byte- 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden




- 0x7FFF = Sensorkurzschluss
9Bit0...Bit7Bit0...Bit7Bit0...Bit7Warmwasser-Status

Bit0Bit0Bit0- WW-Bereitung im Normalbetrieb52_5_0

Bit1Bit1Bit1- Einmalige Speicher-Ladung52_5_1

Bit2Bit2Bit2- Thermische Desinfektion52_5_2

Bit3Bit3Bit3- Speicherladung im WW-System52_5_3

Bit4Bit4Bit4- Speicherladung im Nachwärmsystem52_5_4

Bit5Bit5Bit5- Erreichter Sollwert Warmwasser-Temperatur52_5_5

Bit6Bit6Bit6- Warmwasserbetrieb52_5_6

Bit7Bit7Bit7- Status f. Art der Warmwasserbereitung52_5_7




-- 0 = Warmwasserteilvorrang




-- 1 = Warmwasservorrang
10Bit0...Bit7Bit0...Bit7Bit0...Bit7WW-Fehlersignale

Bit0Bit0Bit0- WW-Temperaturfühler 1 defekt52_6_0

Bit1Bit1Bit1- WW-Temperaturfühler 2 defekt52_6_1

Bit2Bit2Bit2- WW-System wird nicht aufgeheizt52_6_2

Bit3Bit3Bit3- Thermische Desinfektion ist nicht in Betrieb52_6_3

Bit4Bit4Bit4- WW ist nicht blockiert52_6_4

Bit5...Bit7Bit5...Bit7Bit5...Bit7- Immer 052_6_5 bis





52_6_7
11Bit0...Bit7Bit0...Bit7Bit0...Bit7Zirkulationspumpen-Status

Bit0Bit0Bit0- Zirkulationspumpe (ZP) im Normalbetrieb52_7_0

Bit1Bit1Bit1- Zirkulationspumpe (ZP) an bei einmaliger Speicherladung52_7_1

Bit2Bit2Bit2- Zirkulationspumpe (ZP) an52_7_2

Bit3Bit3Bit3- Ansteuersignal f. Zirkulationspumpe (ZP)52_7_3

Bit4...Bit7Bit4...Bit7Bit4...Bit7- Immer 0
120...40...40...4Bauart des Warmwassersystems52_8_0




- 0 = ohne Warmwasserbereitung




- 1 = nach Durchlaufprinzip




- 2 = Druckloser Speicher




- 3 = Warmwasser-Speicherprinzip




- 4 = Schichtlade-Speicher
13xyxyxyAktuelle Wasserduchflussmenge52_9_0
14Byte 3Byte 3Byte 3Betriebszeit Warmwasser-Erzeugung (Minuten)52_10_0
15Byte 2Byte 2Byte 2
16Byte 1Byte 1Byte 1
17Byte 3Byte 3Byte 3Anzahl Brennerstarts für Warmwassererzeugung52_13_0
18Byte 2Byte 2Byte 2
19Byte 1Byte 1Byte 1
20xy<CRC>xyModulationsbereich ZP im WW-System 152_16_0
21<CRC><Ende>Hi-ByteHi-Byte Warmwasser Eingangstemperatur52_17_0
22<Ende>--Lo-ByteLo-Byte Warmwasser Eingangstemperatur




- 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden




- 0x7FFF = Sensorkurzschluss
23

<CRC>

24

<Ende>

- -
-

Tabelle 12: ID 467...468

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:467_x_0 bis 468_x_0
ByteWerte (Hex)BemerkungBedeutung / ID

11Byte



Telegramm: Betriebsart WW-System
090 Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
400Immer 00EMS Type(H)
5D3 / D4WW-System


- D3=WW-System1467_0_0


- D4=WW-System2468_0_0
6xyBetriebsart Warmwasser-System


- 0=Automatikbetrieb f. WW-Speicher


- 1=Automatikbetrieb b. Kombigerät aktiv


- 2=Automatikbetrieb b. Kombigerät ausgeschaltet


- 3=Automatikbetrieb i. Urlaubsmodus f. WW-Speicher


- 4=Urlaubsfunktion eingeschaltet a. Kombigerät


- 5=Urlaubsfunktion ausgeschaltet a. Kombigerät


- 6=Fest eingestellte Speichertemperatur im Urlaubsprogramm


- 7=Thermische Desinfektion f. WW-Speicher


- 8=Warmwasser sofort


- 9=Estrichtrocknung in Betrieb oder angehalten
7xyWert f. Temperaturreduzierung bei solarer Unterstuetzung467_1_0 bis 468_1_0
8xyStatus der letzten thermischen Desinfektion467_2_0 bis 468_2_0


- 0=Abgeschlossen


- 1=In Betrieb


- 2=Abgebrochen
9<CRC>CRC
10<Ende>Ende Marker
- -
-

Tabelle 13: ID 26

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme



Message-ID:26_x_0

ByteWerte (Hex)BemerkungBedeutung / IDBeispiel (Hex)

11Byte




Telegramm: Heizkreis Systemwerte

090
Source
108Target = SteuerungTarget
21AImmer 1A26_x_0
3xy Telegramm-Offset (hier 0...4).

426Sollwert f. Vorlauftemperatur im Heizkreis26_0_0
564Maximale Leistung des Wärmeerzeugers26_1_0
664Sollwert f. Drehzahl der Umwälzpumpe26_2_0
70 / FFStatus f. Aufheizen mit hohem Wirkungsgrad26_3_0
83Betriebsart f. Umwälzpumpe im Energiesparmodus26_4_0
9<CRC>CRC

10<Ende>Ende Marker

- -
-

Tabelle 14: ID 268

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:268_x_0
ByteWerte (Hex)BemerkungBedeutung / ID

14Byte



IPM – Telegramm (Schaltmodul)
0A0...A7
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
400Immer 00EMS Type(H)
50CImmer 0CEMS Type(L)
60...2Bauart des Heizkreises (Mischer ja/nein)


- 0=Nicht vorhanden


- 1=Ungemischter Heizkreis268_0_0


- 2=Gemischter Heizkreis268_0_1
70...1Status Heizungspumpe im Heizkreis268_1_0


- 0=Pumpe aus


- 1=Pumpe Ein
8xyMischer Position (Prozentwert)268_2_0
9Hi-ByteVorlauftemperatur 'Ist' für gemischten Heizkreis268_3_0
10Lo-Byte
11xySollwert Vorlauftemperatur (Grad)268_5_0
12<CRC>CRC
13<Ende>Ende Marker
- -
-

Tabelle 15: ID 296

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:296_x_0
ByteWerte (Hex)BemerkungBedeutung / ID

32Byte



Telegramm: Heizkreis Fehlermeldungen
090
Source
100
Target
2FF
EMS Marker
3xyOffset auf nächste FehlermeldungEMS Offset
400Immer 00EMS Type(H)
528FehlerEMS Type(L)
6xy1Fehler1: Display-Code1296_0_0
7xy2Fehler1: Display-Code2296_1_0
8Hi-ByteFehler1: Fehlercode296_2_0
9Lo-Byte

10xyFehler1: Jahr (+2000)296_4_0
11xyFehler1: Monat296_5_0
12xyFehler1: Stunde296_6_0
13xyFehler1: Tag296_7_0
14xyFehler1: Minute296_8_0
15Hi-ByteFehler1: Minute (Reserviert)296_9_0
16Lo-Byte

17xyFehler1: Busadresse296_11_0
18xy1Fehler2: Display-Code1296_12_0
19xy2Fehler2: Display-Code2296_13_0
20Hi-ByteFehler2: Fehlercode296_14_0
21Lo-Byte

22xyFehler2: Jahr (+2000)296_16_0
23xyFehler2: Monat296_17_0
24xyFehler2: Stunde296_18_0
25xyFehler2: Tag296_19_0
26xyFehler2: Minute296_20_0
27Hi-ByteFehler2: Minute (Reserviert)296_21_0
28Lo-Byte

29xyFehler2: Busadresse296_23_0
30<CRC>CRC
31<Ende>Ende Marker
- -
-

Tabelle 16: ID 357...366

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:357_x_0 bis 366_x_0
ByteWerte (Hex)BemerkungBedeutung / ID

29Byte



Telegramm: Heizkreis Steuerung


(Bauart des Heizkreises)
090
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
400Immer 00EMS Type(H)
565...6EHeizkreis xEMS Type(L)

65 65=Heizkreis1357_0_0

66 66=Heizkreis2358_0_0

67 67=Heizkreis3359_0_0

68 68=Heizkreis4360_0_0

69 69=Heizkreis5361_0_0

6A 6A=Heizkreis6362_0_0

6B 6B=Heizkreis7363_0_0

6C 6C=Heizkreis8364_0_0

6D 6D=Heizkreis9365_0_0

6E 6E=Heizkreis10366_0_0
60...3Bauart-Werte357_1_0 bis


- 0=Nicht vorhanden366_1_0


- 1=Ungemischter Heizkreis ohne Schaltmodul IPM


- 2=Ungemischter Heizkreis mit Schaltmodul IPM


- 3=Gemischter Heizkreis
70...2Fernbedienung für Heizkreis x


- 0=Nicht vorhanden


- 1=Fernbedienung FB 10


- 2=Fernbedienung FB100
80...4Bauart des Heizkreis x


- 0=nicht definiert357_2_0 bis


- 1=Fußpunkt/Endpunkt366_2_0


- 2=Radiatoren


- 3=Konvektoren


- 4=Fußbodenheizung
9z.B. 19Fußpunkt für Heizkurve (in Grad)357_3_0 bis



366_3_0
10z.B. 30Endpunkt für Heizkurve (in Grad)357_4_0 bis



366_4_0
11z.B. 50Maximale Vorlauftemperatur (in Grad) für Heizkreis x357_5_0 bis



366_5_0
12
Raumeinfluss-Faktor (%) im Heizkreis x357_6_0 bis



366_6_0
130...2Raumeinfluss im Heizkreis x bei Betriebsart357_7_0 bis


- 0=nicht definiert366_7_0


- 1=Normalbetrieb / Sparbetrieb / Frostschutzbetrieb


- 2=Sparbetrieb / Frostschutzbetrieb
14
Einstellung dauerhafte Raumtemperatur-Korrektur im Heizkreis x357_8_0 bis



366_8_0
150...3Betriebsart Raumtemperaturfühler für Heizkreis x357_9_0 bis


- 0=nicht definiert366_9_0


- 1=Externer Temperaturfühler


- 2=Interner Temperaturfühler


- 3=Temperatur im Sparmodus




160/FFStatus für Temperaturniveau Frost357_10_0 bis


- 0 = Aus366_10_0


- FF = Ein
17z.B. 2BAbschaltung (Außentemperaturgesteuert) von Heizkreis x357_11_0 bis


- (in 0.5 Grad Schritten)366_11_0
18
Frostgrenztemperatur für Heizkreis x357_12_0 bis


- (in 0.5 Grad Schritten)366_12_0
190...6Aktives Heizprogramm im Heizkreis x357_13_0 bis


- 0=nicht definiert366_13_0


- 1-6=Nummer des aktiven Heizprogramms


- (1:A; 2:=B;3:=C; …)
200....4Betriebsart für den Heizkreis x357_14_0 bis


- 0=nicht definiert366_14_0


- 1=Betrieb im Frostschutzmodus


- 2=Betrieb im Sparmodus


- 3=Betrieb im Normalmodus


- 4=Automatikbetrieb
21z.B. 14Temperaturniveau für Betriebsart Frost im Heizkreis x357_15_0 bis


- (in 0.5 Grad Schritten)366_15_0
22z.B. 28Temperaturniveau für Betriebsart Sparen im Heizkreis x357_16_0 bis


- (in 0.5 Grad Schritten)366_16_0
23z.B. 2BTemperaturniveau für Betriebsart Normal im Heizkreis x357_17_0 bis


- (in 0.5 Grad Schritten)366_17_0
240...3Aufheizgeschwindigkeit für Heizkreis x357_18_0 bis


- 0=nicht definiert366_18_0


- 1=Langsam


- 2=Normal


- 3=Schnell
250...4Urlaubsprogramm Betriebsart für Heizkreis x357_19_0 bis


- 0=nicht definiert366_19_0


- 1=Betrieb im Frostschutzmodus


- 2=Betrieb im Sparmodus


- 3=Betrieb im Normalmodus


- 4=Automatikbetrieb
26
Optimierungseinfluss für solare Unterstützung im Heizkreis x357_20_0 bis


- (in 1 Grad Schritten)366_20_0
27<CRC>CRC
28<Ende>Ende Marker
- -
-

Tabelle 17: ID 367...376

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme






Message-ID:367_x_0 bis 376_x_0
ByteWerte (Hex)BemerkungBedeutung / ID

17Byte 14Byte 9Byte





Telegramm: Heizkreis Steuerung




(Temperaturniveau für den Heizkreis)
090 | 9x90 | 9x90 | 9x (wobei: x:= 8...F)Source
1000000
Target
2FFFFFF
EMS Marker
3xyxyxy
EMS Offset
4000000Immer 00EMS Type(H)
56F...786F...786F...78Heizkreis-ZuordnungEMS Type(L)




6F=Heizkreis1367_0_0




70=Heizkreis2368_0_0




71=Heizkreis3369_0_0




72=Heizkreis4370_0_0




73=Heizkreis5371_0_0




74=Heizkreis6372_0_0




75=Heizkreis7373_0_0




76=Heizkreis8374_0_0




77=Heizkreis9375_0_0




78=Heizkreis10376_0_0
60...30...30...3Betriebsart Heizung:367_0_0 bis




- 0=nicht definiert376_0_0




- 1=Frost




- 2=Sparen




- 3=Heizen
70...50...5<CRC>Betriebsart Heizkreis | | CRC367_1_0 bis




- 0=nicht definiert376_1_0



- 1=dauernd



- 2=Automatikbetrieb



- 3=Urlaub



- 4=Estrichtrocknung im StandbyModus



- 5=Estrichtrocknung in Betrieb
8Hi-ByteHi-Byte<Ende>Soll-Temperatur (HK1 bis HK10) | | Ende Marker367_2_0 bis
9Lo-ByteLo-Byte376_2_0
10Hi-ByteHi-ByteIst-Temperatur (HK1 bis HK10 vom Regler)367_4_0 bis
11Lo-ByteLo-Byte376_4_0
12Hi-Byte<CRC>T-Raum FB10x | CRC367_6_0
13Lo-Byte<Ende>T-Raum FB10x | Ende Marker
1400 … 07Temperaturwert für solare Unterstützung der Vorlauftemperatur367_8_0
15<CRC>CRC
16<Ende>Ende Marker
- -
-

Tabelle 18: ID 377...386

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:377_x_0 bis 386_x_0
ByteWerte (Hex)BemerkungBedeutung / ID

19Byte



Telegramm: Heizkreis Steuerung
090 (Bauart des Heizkreises)Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
400Immer 00EMS Type(H)
579...82Heizkreis x KennungEMS Type(L)


79=Heizkreis1377_0_0


7A=Heizkreis2378_0_0


7B=Heizkreis3379_0_0


7C=Heizkreis4380_0_0


7D=Heizkreis5381_0_0


7E=Heizkreis6382_0_0


7F=Heizkreis7383_0_0


80=Heizkreis8384_0_0


81=Heizkreis9385_0_0


82=Heizkreis10386_0_0
60...3Bauart-Werte377_0_0 bis


- 0=Nicht vorhanden386_0_0


- 1=Ungemischter Heizkreis ohne Schaltmodul IPM


- 2=Ungemischter Heizkreis mit Schaltmodul IPM


- 3=Gemischter Heizkreis
7
Anpassungsfaktor im Heizkreis x377_1_0 bis



386_1_0
8
Verstärkungsfaktor im Heizkreis x377_2_0 bis



386_2_0
9
Maximale Vorlauftemperatur im Heizkreis x377_3_0 bis



386_3_0
100...4Betriebsart für Heizkreis x377_4_0 bis


- 0=nicht definiert386_4_0


- 1=Betrieb im Frostschutzmodus


- 2=Betrieb im Sparmodus


- 3=Betrieb im Normalmodus


- 4=Automatikbetrieb
11
Temperaturniveau bei Betriebsart Frost377_5_0 bis


- (in 0.5 Grad Schritten)386_5_0
12
Temperaturniveau bei Betriebsart Sparen377_6_0 bis


- (in 0.5 Grad Schritten)386_6_0
13
Temperaturniveau bei Betriebsart Normal377_7_0 bis


- (in 0.5 Grad Schritten)386_7_0
14
Urlaubsprogramm Betriebsart für Heizkreis x377_8_0 bis


- ( Werte wie bei Byte:10 Betriebsart Heizkreis)386_8_0
150/FFStatus Optimierungsfunktion im Heizkreis x377_9_0 bis


- 0 = Aus386_9_0


- FF = Ein
160...6Aktiviertes Heizprogramm377_10_0 bis


- 0=Nicht definiert386_10_0


- 1-6=Nummer des aktiven Heizprogramms


- (1=A; 2=B; 3=C; …)
17<CRC>CRC
18<Ende>Ende Marker
- -
-

Tabelle 19: ID 677...684

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:677_x_0 bis 684_x_0
Byte
BemerkungBedeutung / ID






Telegramm: Heizkreis Steuerung


(Temperaturniveau für den Heizkreis)
090
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
401Immer 01EMS Type(H)
5A5...ACHeizkreis-ZuordnungEMS Type(L)


A5=Heizkreis1677_0_0


A6=Heizkreis2678_0_0


A7=Heizkreis3679_0_0


A8=Heizkreis4680_0_0


A9=Heizkreis5681_0_0


AA=Heizkreis6682_0_0


AB=Heizkreis7683_0_0


AC=Heizkreis8684_0_0
6Hi-ByteIst-Raumtemperatur (HK1 bis HK8)677_0_0 bis
7Lo-Byte684_0_0
8xyStatus Heizkreis6xy_2_0
9xy
6xy_3_0
10xy
6xy_4_0
11xy
6xy_5_0
12xySoll-Raumtemperatur (HK1 bis HK8)6xy_6_0
13xy
6xy_7_0
14Hi-Byte
6xy_8_0
15Lo-Byte
16xy
6xy_10_0
17xyTemperatur-Niveau6xy_11_0
18xy
6xy_12_0
19Hi-Byte
6xy_13_0
20Lo-Byte
21Hi-Byte
6xy_15_0
22Lo-Byte
23xy
6xy_17_0
24xy
6xy_18_0
25xy
6xy_19_0
26xy
6xy_20_0
27xyBetriebsstatus (HK1 bis HK8) {Auto / Manuell}6xy_21_0
28Hi-Byte
6xy_22_0
29Lo-Byte
30xy
6xy_24_0
31xy
6xy_25_0
32xy
6xy_26_0
33Hi-Byte
6xy_27_0
34Lo-Byte
35xy
6xy_29_0
36xy
6xy_30_0
37<CRC>CRC
38<Ende>Ende Marker
- -
-

Tabelle 20: ID 259

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:259_x_0
ByteWerte (Hex)BemerkungBedeutung / ID

21Byte



ISM Solar-Telegramm
0B0
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
400Immer 00EMS Type(H)
503Immer 03EMS Type(L)
6xyOptimierungsfaktor WW mit solarer Unterstützung259_0_0
7xyOptimierungsfaktor Heiz. mit solarer Unterstützung259_1_0
8Hi-ByteSolarertrag in der letzten Stunde (Wh)259_2_0
9Lo-Byte
10Hi-ByteSolarkollektor1 Temperatur T1259_4_0
11Lo-Byte
12Hi-ByteSolarspeicher Temperatur T2259_6_0
13Lo-Byte
14Bit0...Bit7Betriebsart Solarpumpe (1. Kollektorfeld)

Bit0- Solarpumpe (SP); 0=aus; 1=ein259_8_0

Bit1- Relaysignal Umwälzpumpe(PE) bei thermischer Desinfektion259_8_1

Bit2..Bit7- Immer 0
15Bit0...Bit7Solar Systemstatus

Bit0- Abschaltung 1.Kollektorfeld bei Stagnation259_9_0


-- 0 =Nein


-- 1 =Ja (5 Grad Hysterese)

Bit1- Status Temperatur bei thermischer Desinfektion259_9_1

Bit2- Status Solarspeicher259_9_2


-- 0 =Nicht voll geladen


-- 1 =Voll geladen (2 Grad Hysterese)

Bit3-8 Immer 0
16Byte 3Laufzeit Solarpumpe (Minuten)
17Byte 2 „ ( Calculation-Type: 2 )259_10_0
18Byte 1
19<CRC>CRC
20<Ende>Ende Marker
- -
-

Tabelle 21: ID 260

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme



Message-ID:260_x_y
ByteWerte (Hex)
BemerkungBedeutung / ID

24Byte 35Byte




ISM Solar-Telegramm
0B0B0
Source
10000
Target
2FFFF
EMS Marker
3xyxy
EMS Offset
40000Immer 00EMS Type(H)
50404Immer 04EMS Type(L)
6Hi-Byte T3Hi-Byte T3Temperatur T3 im Pufferspeicher f. Rücklaufanhebung260_0_0
7Lo-Byte T3Lo-Byte T3
8Hi-ByteHi-ByteHeizungsrücklauftemperatur260_2_0
9Lo-ByteLo-Byte
10Hi-Byte T5Hi-Byte T5Temperatur T5 im Pufferspeicher (oben)260_4_0
11Lo-Byte T5Lo-Byte T5
12Hi-Byte T6Hi-Byte T6Temperatur T6 im Bereitschaftsspeicher (unten)260_6_0
13Lo-Byte T6Lo-Byte T6
14Hi-ByteHi-ByteTemperatur 2. Kollektorfeld260_8_0
15Lo-ByteLo-Byte
16Hi-ByteHi-ByteTemperatur TB im Pufferspeicher (oben)260_10_0
17Lo-ByteLo-Byte
18Hi-ByteHi-ByteTemperatur TC im Vorrang-/Nachrangspeicher260_12_0
19Lo-ByteLo-Byte
20Hi-ByteHi-ByteTemperatur am externen Wärmetauscher f. Solarsystem260_14_0
21Lo-ByteLo-Byte
22<CRC>Bit0...Bit7Status 1


Bit0- Betriebsart Ventil (DWU) f. Rücklaufanhebung260_16_0


Bit1- Relaisansteuerung f. Umwälzpumpe Umladesystem260_16_1


Bit2- Umwälzpumpe (PA) im 2. Kollektorfeld260_16_2


Bit3- Relaisansteuerung f. Umwälzpumpe (PB) Umladesystem260_16_3


Bit4- Betriebsart Umwälzpumpe (PC)/Umschaltventil260_16_4


Bit5- Betriebsart Umwälzpumpe (PD) im Sekundärkreis260_16_5


Bit6- Relaissignal bei Option F260_16_6


Bit7- unbenutzt260_16_7
23<Ende>Bit0...Bit7Status 2


Bit0- Ansteuerung Ventil DWU1 f. Rücklaufanhebung260_17_0


Bit1- Status maximale Temperatur im Umladespeicher260_17_1


Bit2- Status Umwälzpumpe (PA) im 2.Kollektorfeld (Stagnation)260_17_2


Bit3- Maximaltemperatur erreicht im WW-Speicher B260_17_3


Bit4- WW-Speicher geladen260_17_4


Bit5- Testmodus (Speicherladung Vorrangspeicher)260_17_5


Bit6- Maximaltemperatur erreicht im WW-Speicher C260_17_6


Bit7- Testmodus260_17_7
24
Byte 3Betriebszeit f. Solarmumpe (PA) im zweiten Kollektorfeld260_18_0
25
Byte 2
26
Byte 1
27
Hi-ByteZeitintervall f. Überprüfung ob Speicher C geladen wird260_21_0
28
Lo-Byte

29
Hi-ByteTemperatur TF 1 in Wärmequelle260_23_0
30
Lo-Byte

31
Hi-ByteTemperatur TF 2 in Wärmesenke260_25_0
32
Lo-Byte

33
<CRC>

34
<Ende>

- -
-

Tabelle 22: ID 866

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:866
Byte
BemerkungBedeutung / ID






MS100 Solar-Telegramm
0B0
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
402Immer 02EMS Type(H)
562Immer 62EMS Type(L)
6Hi-ByteSolarkollektor1 Temperatur866_0_0
7Lo-Byte
8Hi-ByteSolarspeicher Temperatur unten866_2_0
9Lo-Byte
10Hi-ByteSolarspeicher Temperatur mittlerer Sensor866_4_0
11Lo-Byte
12Hi-ByteSolarkollektor2 Temperatur866_6_0
13Lo-Byte
14Hi-ByteSolarspeicher Beipass Temperatur866_8_0
15Lo-Byte
16Hi-ByteSolarspeicher Beipass Return-Temperatur866_10_0
17Lo-Byte
18Hi-Byte
866_12_0
19Lo-Byte
20Hi-Byte
866_14_0
21Lo-Byte
22Hi-Byte
866_16_0
23Lo-Byte
24Hi-Byte
866_18_0
25Lo-Byte
26Hi-Byte
866_20_0
27Lo-Byte
28Hi-Byte
866_22_0
29Lo-Byte
30Hi-Byte
866_24_0
31Lo-Byte
32<CRC>

33<Ende>

- -
-

Tabelle 23: ID 868

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:868_x_y
Byte
BemerkungBedeutung / ID






MS100 Solar-Telegramm
0B0
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
402Immer 02EMS Type(H)
564Immer 64EMS Type(L)
6xy
868_0_0
7xy
868_1_0
8Bit0...Bit7
868_2_x

Bit0
868_2_0

Bit1
868_2_1

Bit2
868_2_2

Bit3
868_2_3

Bit4
868_2_4

Bit5
868_2_5

Bit6
868_2_6

Bit7
868_2_7
9Bit0...Bit7Solar Systemstatus868_3_x

Bit0- Abschaltung 1.Kollektorfeld bei Stagnation868_3_0


-- 0 =Nein


-- 1 =Ja

Bit1-- 1 =Solarspeicher maximale Temperatur erreicht868_3_1

Bit2-- 1 =Solarspeicher minimale Temperatur erreicht868_3_2

Bit3
868_3_3

Bit4
868_3_4

Bit5
868_3_5

Bit6
868_3_6

Bit7
868_3_7
10xy
868_4_0
11xy
868_5_0
12xy
868_6_0
13xy
868_7_0
14xy
868_8_0
15xyAktuelle Solarpumpen – Leistung868_9_0
16xy
868_10_0
17xy868_11_0
18xy
868_12_0
19xy868_13_0
20xy
868_14_0
21xy868_15_0
22<CRC>

23<Ende>

- -
-

Tabelle 24: ID 873

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:873_x_0
Byte
BemerkungBedeutung / ID






MS100 Solar-Telegramm
0B0
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
402Immer 02EMS Type(H)
569Immer 69EMS Type(L)
6Byte 4Solarertrag letzte Stunde873_0_0
7Byte 3
8Byte 2 „ ( Calculation-Type: 4 )
9Byte 1
10Byte 4Solarertrag aktueller Tag873_4_0
11Byte 3
12Byte 2
13Byte 1
14Byte 4Solarertrag Summe873_8_0
15Byte 3
16Byte 2
17Byte 1
18<CRC>

19<Ende>

- -
-

Tabelle 25: ID 874

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:874_x_0
Byte
BemerkungBedeutung / ID






MS100 Solar-Telegramm
0B0
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
402Immer 02EMS Type(H)
56AImmer 6AEMS Type(L)
6xy
874_0_0
7xy
874_1_0
8xy
874_2_0
9xy
874_3_0
10xy
874_4_0
11xy
874_5_0
12xy
874_6_0
13xy
874_7_0
14xy
874_8_0
15xy
874_9_0
16Bit0...Bit7
874_10_x

Bit0
874_10_0

Bit1
874_10_1

Bit2- Solarpumpe (SP); 0=aus; 1=ein874_10_2

Bit3
874_10_3

Bit4
874_10_4

Bit5
874_10_5

Bit6
874_10_6

Bit7
874_10_7
17xy
874_11_0
18xy
874_12_0
19xy874_13_0
20xy
874_14_0
21xy874_15_0
22<CRC>

23<Ende>

- -
-

Tabelle 26: ID 910

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:910_x_0
Byte
BemerkungBedeutung / ID






MS100 Solar-Telegramm
0B0
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
402Immer 02EMS Type(H)
58EImmer 8EEMS Type(L)
6Byte 4Solarertrag letzte Stunde910_0_0
7Byte 3
8Byte 2 „ ( Calculation-Type: 4 )
9Byte 1
10Byte 4Solarertrag aktueller Tag910_4_0
11Byte 3
12Byte 2 „ ( Calculation-Type: 5 )
13Byte 1
14Byte 4Solarertrag Summe910_8_0
15Byte 3
16Byte 2 „ ( Calculation-Type: 4 )
17Byte 1
18<CRC>

19<Ende>

- -
-

Tabelle 27: ID 913

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:913_x_0
Byte
BemerkungBedeutung / ID






MS100 Solar-Telegramm
0B0
Source
100
Target
2FF
EMS Marker
3xy
EMS Offset
402Immer 02EMS Type(H)
591Immer 91EMS Type(L)
6Byte 4Laufzeit Solarpumpe (Minuten)913_0_0
7Byte 3
8Byte 2 „ ( Calculation-Type: 2 )
9Byte 1
10xy
913_4_0
11xy
913_5_0
12xy
913_6_0
13xy
913_7_0
14xy
913_8_0
15xy
913_9_0
16xy
913_10_0
17xy
913_11_0
18<CRC>

19<Ende>

- -
-

Tabelle 28: ID 357_366_14_Modem

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:357_14_0 bis 366_14_0
ByteWerte (Hex)BemerkungBedeutung / ID

9Byte



Modem-CMD:: Betriebsart setzen
08DSource: ModemSource
110TargetTarget
2FFEMS-TypeEMS Marker
30E
EMS Offset
400
EMS Type(H)
565...6EHeizkreis xEMS Type(L)


65=Heizkreis1


66=Heizkreis2


67=Heizkreis3


68=Heizkreis4


69=Heizkreis5


6A=Heizkreis6


6B=Heizkreis7


6C=Heizkreis8


6D=Heizkreis9


6E=Heizkreis10
60...4Heizkreisbetriebsart-Werte357_14_0 bis


- 0=Nicht definiert366_14_0


- 1=Betrieb im Frostschutzmodus


- 2=Betrieb im Sparmodus


- 3=Betrieb im Normalmodus


- 4=Automatikbetrieb
7<CRC>CRC
8<Ende>Ende Marker
- -
-

Tabelle 29: ID 377_387_4_Modem

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme


Message-ID:377_4_0 bis 386_4_0
ByteWerte (Hex)BemerkungBedeutung / ID

9Byte



Modem-CMD: Betriebsart setzen
08DSource: ModemSource
110TargetTarget
2FFEMS-TypeEMS Marker
304
EMS Offset
400
EMS Type(H)
579...82Heizkreis x KennungEMS Type(L)


79=Heizkreis1


7A=Heizkreis2


7B=Heizkreis3


7C=Heizkreis4


7D=Heizkreis5


7E=Heizkreis6


7F=Heizkreis7


80=Heizkreis8


81=Heizkreis9


82=Heizkreis10
60...4Heizkreisbetriebsart-Werte357_4_0 bis


- 0=Nicht definiert366_4_0


- 1=Betrieb im Frostschutzmodus


- 2=Betrieb im Sparmodus


- 3=Betrieb im Normalmodus


- 4=Automatikbetrieb
7<CRC>CRC
8<Ende>Ende Marker
- -
-

Tabelle 30: ID 357...366_1x_Modem

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme




Message-ID:357_1x_0 bis 366_1x_0


ByteWerte (Hex)BemerkungBedeutung / ID


9Byte
Betriebsart



Modem-CMD: Temperatur-Niveau setzen (Betriebsart Normal/Sparen/Frost) NormalSparenFrost
08DSource: ModemSourceSourceSource
110TargetTargetTargetTarget
2FFEMS-TypeEMS MarkerEMS MarkerEMS Marker
311/10/0FEMS-Offset 11 (hex)10 (hex) F (hex)
400
EMS Type(H)EMS Type(H)EMS Type(H)
565...6EHeizkreis xEMS Type(L)EMS Type(L)EMS Type(L)


65=Heizkreis1




66=Heizkreis2




67=Heizkreis3




68=Heizkreis4




69=Heizkreis5




6A=Heizkreis6




6B=Heizkreis7




6C=Heizkreis8




6D=Heizkreis9




6E=Heizkreis10


6
Temperaturniveau für Betriebsart: y im Heizkreis x357_17_0 bis357_16_0 bis357_15_0 bis


- (in 0.5 Grad Schritten)366_17_0366_16_0366_15_0
7<CRC>CRC


8<Ende>Ende Marker


- -
-

Tabelle 31: ID 377...386_x_Modem

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HT Bus-Telegramme




Message-ID:377_x_0 bis 386_x_0


ByteWerte (Hex)BemerkungBedeutung / ID


9Byte





Modem-CMD: Temperatur-Niveau setzen (Betriebsart Normal/Sparen/Frost) NormalSparenFrost
08DSource: ModemSourceSourceSource
110TargetTargetTargetTarget
2FFEMS-TypeEMS MarkerEMS MarkerEMS Marker
307/06/05EMS-Offset 7 (hex) 6 (hex) 5 (hex)
400
EMS Type(H)EMS Type(H)EMS Type(H)
579...82Heizkreis x KennungEMS Type(L)EMS Type(L)EMS Type(L)


79=Heizkreis1




7A=Heizkreis2




7B=Heizkreis3




7C=Heizkreis4




7D=Heizkreis5




7E=Heizkreis6




7F=Heizkreis7




80=Heizkreis8




81=Heizkreis9




82=Heizkreis10


60...4Temperaturniveau für Betriebsart: y im Heizkreis x377_7_0 bis377_6_0 bis377_5_0 bis


- (in 0.5 Grad Schritten)386_7_0386_6_0386_5_0
7<CRC>CRC


8<Ende>Ende Marker


- - - - diff --git a/doc/ems references/wiki_ ems_ telegrams.pdf b/doc/ems references/wiki_ ems_ telegrams.pdf deleted file mode 100644 index 882a997ab..000000000 Binary files a/doc/ems references/wiki_ ems_ telegrams.pdf and /dev/null differ diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/.nojekyll @@ -0,0 +1 @@ + diff --git a/docs/Building-firmware.md b/docs/Building-firmware.md new file mode 100644 index 000000000..54e2f88b0 --- /dev/null +++ b/docs/Building-firmware.md @@ -0,0 +1,60 @@ +### Using the PlatformIO IDE + +- Download [Git](https://git-scm.com/download/win) (install using the default settings) +- Download and install [Visual Studio Code](https://code.visualstudio.com/docs/?dv=win) (VSC) +- Restart the PC (if using Windows) to apply the new PATH settings. It should now detect Git +- Install the VSC extension "PlatformIO IDE" +- Git clone this repo with "git clone" from the command palette and using the URL https://github.com/proddy/EMS-ESP.git +- Install NodeJS from [here](https://nodejs.org/en/download/). +- Test if Node is installed correctly by `node --version` (both v10 and v12 are ok) +- Install the modules in the `tools/webfilesbuilder` folder with: +``` +cd tools/webfilesbuilder +npm ci +``` +- Check you can build the web files by typing `node node_modules/gulp/bin/gulp.js` from the `webfilesbuilder` folder. +- Finally use the build targets in PlatformIO's to build & upload. + +If you seeing fatal errors in the npm install and came from an earlier build then you'll may need to refresh the library, like +1. Remove the local `node_modules` +2. Clean npm cache by `npm cache verify` +3. Update the global npm by `sudo npm ci -g npm` +4. Reinstall the local `node_modules` by `npm ci` + +### Using Linux CLI + +- Install python: +```sh +sudo apt install python-pip +``` +- Install PlatformIO (see https://docs.platformio.org/en/latest/installation.html): +```sh +python -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/develop/scripts/get-platformio.py)" +``` +- Edit `~/.profile` and add: `export PATH=$PATH:~/.platformio/penv/bin` to the end, then `exit`, and start a new shell +- Update platformio and its libraries +```sh +platformio platform update +platformio lib update +``` +- Grab the EMS-ESP source code: +```sh +git clone https://github.com/proddy/EMS-ESP.git +``` + (use `git clone --branch=dev https://github.com/proddy/EMS-ESP.git` for dev builds) +- Install NodeJS. See instructions [here](https://tecadmin.net/install-latest-nodejs-npm-on-ubuntu/). +- Install the EMS-ESP's web builder components +```sh +cd EMS-ESP/tools/webfilesbuilder +npm ci +cd ../.. +``` +- Build the firmware image: +```sh +pio run +``` +- Upload to firmware image. This uses OTA as default. Change `platformio.ini` if using USB +```sh +pio run -t upload +``` + diff --git a/docs/Building-your-own-test-circuit.md b/docs/Building-your-own-test-circuit.md new file mode 100644 index 000000000..d092f90ab --- /dev/null +++ b/docs/Building-your-own-test-circuit.md @@ -0,0 +1,24 @@ +Here is a prototype board you can build yourself on a breadboard for testing. + +The breadboard layout was done using [DIY Layout Creator](https://github.com/bancika/diy-layout-creator) and sources files are included in this repo. + +![Breadboard Circuit](_media/schematics/breadboard.png ':size=500') + +The schematic used: + +![Schematic](_media/schematics/circuit.png ':size=500') + +*Optionally I've also added 2 0.5A/72V polyfuses between the EMS and the two inductors L1 and L2 for extra protection.* + +**Powering The EMS Circuit** + +The EMS circuit will work with both 3.3V and 5V. It's easiest though to power directly from the ESP8266's 3V3 line and run a steady 5V into the microcontroller. Powering the ESP8266 microcontroller can be either: + +- via the USB if your dev board has one +- using an external 5V power supply into the 5V vin on the board +- powering from the 3.5mm service jack (stereo jack) on the boiler. This will give you 8V so you need a buck converter (like a [Pololu D24C22F5](https://www.pololu.com/product/2858)) to step this down to 5V to provide enough power to the ESP8266 (250mA at least) +- powering direct from the EMS line, which is 15V DC and using a buck converter as described above. + +**With Power Circuit** + +![Power circuit](_media/schematics/Schematic_EMS-ESP.png ':size=600') | diff --git a/docs/Configure-firmware.md b/docs/Configure-firmware.md new file mode 100644 index 000000000..2dd841b41 --- /dev/null +++ b/docs/Configure-firmware.md @@ -0,0 +1,35 @@ + +## Hooking up the interface board + +If you have an EMS Gateway board then follow the instructions on [BBQKees' wiki](https://bbqkees-electronics.nl/wiki/). + +Things to check: + +1. Any external Dallas temperature sensors go to D1 +2. An external LED goes to D5 +3. Check the EMS bus lines are connected the right way: + +| EMS board | ESP8266 dev board | +| ----------|------------------ | +| Ground/G/J2| GND/G | +| Rx/J2 | D7/GPIO13 * | +| Tx/J2 | D8/GPIO15 *| +| VC/J2 | 3v3 | + +\* Note the firmware purposely switches the UART0 from the standard GPIOs (Rx 1 and Tx 3) to pins 13 and 15 to prevent Serial traffic (e.g. via a USB connection) interfere with the EMS line. See [the official document](https://arduino-esp8266.readthedocs.io/en/latest/reference.html#serial). + +## Adjusting the config settings + +When the EMS-ESP is running for the first time it's likely to be Access Point mode with a SSID called ems-esp and IP of 192.168.4.1. Use a phone/pc/laptop and connect to AP's SSID. Then either use Telnet (port 23) to IP address 192.168.4.1 or type in this IP address in a web browser. + +When using the web the default password is **admin**. + +The first thing you probably want to do is set the wifi mode to Client and set the SSID and password dor your own network. Then restart the EMS-ESP device. If everything is working the software should detect the devices on the EMS bus and the LED should light up a solid blue. If not, use the Telnet to look any error messages. + +The rest of the settings can be entered either via the Telnet interface (via `set`) or the web interface. The next settings you may want to change are the MQTT, `tx_mode` and `publish_time`. + +## Adding external Temperature sensors + +The code supports auto-detection of Dallas type temperature sensors. The default GPIO pin used on the ESP8266 is D5 but this can be configured in the setting menu (`set dallas_gpio`) or via the web. The Dallas chips DS1822, DS18S20, DS18B20, DS1825 are supported including their parasite varieties and can be daisy-chained on one line. If you're using parasite make sure you set this using 'set dallas_parasite on'. + +The values will be shown in the telnet session (`info`) and if MQTT is enabled sent as a single topic. See [MQTT](https://github.com/proddy/EMS-ESP/wiki/MQTT). diff --git a/docs/Contributing.md b/docs/Contributing.md new file mode 100644 index 000000000..de0fc5428 --- /dev/null +++ b/docs/Contributing.md @@ -0,0 +1,15 @@ +Any contribution helps make EMS-ESP better. + +This project needs: +- guides for integrating into home automation systems like Home Assistant and Domoticz +- testing with various types of EMS devices (boilers, thermostats, solar, heap pumps etc) to build up our supported database +- Expand this wiki with more details, fixing spelling mistakes and other inaccuracies you may find + +## Editing articles +!> Warning: You need a GitHub user account to be able to edit! + +If you spot an error in an article use the *Improve this article* link at the top of the page to correct it. Note you will need a GitHub account. Make the change, click on "Propose file change" and "Create pull request". + + + + diff --git a/docs/Deciphering-EMS-Plus.md b/docs/Deciphering-EMS-Plus.md new file mode 100644 index 000000000..3170336de --- /dev/null +++ b/docs/Deciphering-EMS-Plus.md @@ -0,0 +1,66 @@ +> [!NOTE] +> This page is a collection of findings to figure out how the EMS+ / EMS 2.0 protocol works. + +*** + +``` +sr = source ID +de = destination ID (read commands have the 8th bit set) +e+ = EMS flag (>0xF0) +of = offset +TYPE = Type ID +DATA = data block + +if 3rd byte = FF + +sr de FF of TYPE DATA +-- -- -- -- ---- ---------------------------------------------------------------------------------- + +48 10 FF 0A 01B9 28 (write 1 byte, offset 0A, type 01B9, value 28 = 20.0 deg) +48 10 FF 0A 01B9 29 (write 1 byte, offset 0A, type 01B9, value 29 = 20.5 deg) +48 10 FF 00 01B9 FF (write 1 byte, type 01B9, value FF) + +48 90 FF 25 0101 (read byte 25 from 0101) + +10 48 FF 25 01A8 (no data. an acknowledgment) + +48 90 FF 1B 0201 A8 (why does a read have a value?) +10 48 FF 1B 01A8 (why no data. an acknowledgment?) + +09 B0 FF 00 FF00 01 (type FF00?) + + +broadcast messages (where de = 00): + +sr 00 FF of TYPE DATA +-- -- -- -- ---- ---------------------------------------------------------------------------------- +10 00 FF 00 01B9 FF +10 00 FF 12 01B9 00 +10 00 FF 08 01A5 01 99 +10 00 FF 0A 01A5 01 +10 00 FF 19 01A5 06 04 00 00 00 00 FF 64 37 00 3C 01 FF 01 +10 00 FF 00 01A5 80 00 01 30 28 00 30 28 01 54 03 03 01 01 54 02 A8 00 00 11 01 03 FF FF 00 +10 00 FF 00 01A5 00 D7 21 00 00 00 00 30 01 84 01 01 03 01 84 01 F1 00 00 11 01 00 08 63 00 +30 00 FF 00 0262 01 FB 01 9E 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 2B (SM100) +30 00 FF 00 0264 00 00 00 04 00 00 FF 00 00 1E 0C 20 64 00 00 00 00 E9 (SM100) +90 00 FF 00 006F 01 01 00 46 00 B9 (FR10) +10 00 FF 00 01A5 80 00 01 30 28 00 30 28 01 54 03 03 01 01 54 02 A8 00 00 11 01 03 FF FF 00 (RC310) +10 00 FF 00 01A5 00 D7 21 00 00 00 00 30 01 84 01 01 03 01 84 01 F1 00 00 11 01 00 08 63 00 (RC1010) + +30 09 FF 00 0001 (this doesn't look correct) + +if 3rd byte = F9 or F7 + +sr de F9 00 no FF TYPE ?? DATA +-- -- -- -- -- -- ---- -- ---------------------------------------------------------------------------------- + +10 48 F9 00 FF 016C 08 4F 00 00 00 02 00 00 00 02 00 03 00 03 00 03 00 02 (data, type 016C) +48 90 F9 00 11 FF 016D 08 (read 17 bytes, type 016D) +10 48 F9 00 FF 016D 08 4F 00 00 00 02 00 00 00 02 00 03 00 03 00 03 00 02 + +48 90 F9 00 11 FF 019E 00 (read 17 bytes, type 019E) +10 48 F9 00 FF 019E 00 4B 00 00 00 01 00 00 00 01 00 1B 00 06 00 1B 00 01 +10 00 F7 00 FF 01B9 35 19 (broadcast, type 01B9, value 19) + + +``` \ No newline at end of file diff --git a/docs/Domoticz.md b/docs/Domoticz.md new file mode 100644 index 000000000..32f3d6cf4 --- /dev/null +++ b/docs/Domoticz.md @@ -0,0 +1 @@ +Based on the original version by @Gert05, @bbqkees created more extensive version based on the Domoticz Python plugins (list at https://www.domoticz.com/wiki/Plugins#Python_Plugins_List). You can find it [here](https://github.com/bbqkees/ems-esp-domoticz-plugin) along with the instructions on how to install. diff --git a/docs/EMS-Telegram-Types.md b/docs/EMS-Telegram-Types.md new file mode 100644 index 000000000..46ba91ed4 --- /dev/null +++ b/docs/EMS-Telegram-Types.md @@ -0,0 +1,66 @@ +> [!TIP] +> Another good source of EMS and EMS+ investigation look at https://github.com/Th3M3/buderus_ems-wiki_ + +## A2 + +This message is a EMS 1.0 message + +Display code and Cause + +``` +(00:28:29.966) Thermostat -> all, type 0xA2 telegram: 10 00 A2 00 00 00 00 00 00 (CRC=CA) #data=5 +``` + + +| data position (0..n) in decimal | description | format | notes | +| - | - | - | - | +| 0-2 | Display code | 3 bytes | HEX To Decimal | +| 3-4 | Cause Code | 2 bytes | HEX To Decimal | + +## 3E, 48, 52, 5C + +These are EMS1.0 type broadcasted from an RC35 compatible thermostat (typically with a device ID of 0x10) as a Heating Controller Monitor Message. The data block is 16 bytes. We use this telegram to read the current room temperature, the setpoint temperature for up to 4 Heating Controllers 0x3E (HC1), 0x48 (HC2), 0x52 (HC3) and 0x5C (HC4) + +Examples: +``` +< header > < 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15> (data block) + 10 0B 3E 00 00 00 00 7D 00 00 00 00 00 00 00 00 00 11 05 04 + 10 00 48 00 00 00 00 00 E4 00 00 00 00 00 00 00 00 11 05 04 + 10 0B 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 + 10 0B 5C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 00 +``` +in night mode: +``` + 10 00 3E 00 04 03 00 7D 00 00 00 00 00 00 00 00 00 11 05 00 + 10 00 48 00 00 00 10 00 E9 00 00 00 00 00 00 00 00 11 05 00 +``` +in day mode: +``` + 10 0B 3E 00 04 03 00 7D 00 00 00 00 00 00 00 00 00 11 05 00 + 10 0B 48 00 00 00 10 00 E8 00 00 00 00 00 00 00 00 11 05 00 +``` +in auto day mode: +``` + 10 00 3E 00 04 03 00 7D 00 00 00 00 00 00 00 00 00 11 05 00 + 10 0B 48 00 04 03 00 00 EB 00 00 00 00 00 00 00 00 11 05 00 +``` + +deciphering each data element from 0 to 15 + +| data #n | description | format | notes | +| - | - | - | - | +| 0 | settings1 | 1 byte as a bit mask | bit 2 is automatic mode, bit 7 is manual mode, bit 5 is holiday mode | doesn't seem to make sense? | +| 1 | settings2 | 1 byte as a bit mask | bit 0 if in summer mode, bit 1 if in daytime | needs verifying | +| 2 | setpoint room temperature | 1 byte * 2 | | +| 3 + 4 | current room temperature | 2 bytes * 10 | has value 0x7D00 if switched off | +| 13 | switch state | 1 byte as a bit mask | always 11? | +| 14 | calculate setpoint flow temperature | 1 byte | this looks wrong | +| 15 | settings3 | 1 byte as a bit mask | we see two values 0 and 4 | + +Questions: + +* how to determine if a heating circuit is not active? Check for data #14 if its 0 ? +* when to ignore the setpoint temperature being 0? This depends on the bit masks in data #1 and #2 somehow +* data #0 is sometimes 04 (b0100) always with data#1 being 3 (b0011). This means DWH priority is set and daytime mode, according to https://emswiki.thefischer.net/doku.php?id=wiki:ems:telegramme#wwbetriebsart. Is this correct since one of the examples we're in nightmode? + + diff --git a/docs/FAQ.md b/docs/FAQ.md new file mode 100644 index 000000000..3f813edc0 --- /dev/null +++ b/docs/FAQ.md @@ -0,0 +1,16 @@ +### Which ESP microcontrollers are supported? + + The code and circuit have been tested with a few ESP8266 development boards such as the Wemos D1 Mini, Wemos D1 Mini Pro, Nodemcu0.9 and Nodemcu2 dev boards. It will also work on bare ESP8266 chips such as the ESP-12E but do make sure you disabled the LED support and wire the UART correctly as the code doesn't use the normal Rx and Tx pins. + +### Which EMS devices are currently supported? + + [See here](Supported-EMS-Devices.md) for the list. + +### Getting support + +If you can't find the answer here check out: + +* [Issues](https://github.com/proddy/EMS-ESP/issues?utf8=%E2%9C%93&q=is%3Aissue): this is the most active channel at the moment, you might find an answer to your question by searching open or closed issues. +* [Wiki pages](https://github.com/proddy/EMS-ESP/wiki): I try and keep this up to date +* [Gitter channel](https://gitter.im/EMS-ESP/): get direct contact with some of the key developers behind the project and other users. +* [Post a question](https://github.com/proddy/EMS-ESP/issues/new/choose): as a last resort, you can open new *question* issue on GitHub. diff --git a/docs/Home-Assistant.md b/docs/Home-Assistant.md new file mode 100644 index 000000000..37b31f67c --- /dev/null +++ b/docs/Home-Assistant.md @@ -0,0 +1,171 @@ +The files to read MQTT and parse as sensors and thermostat components into HA can be found [here](integrations/homeassistant/ha) along with a LoveLace dashboard which looks like: + +![Home Assistant panel](_media/home%20assistant/ha.png ':size=500') + +and the alerts on an iOS/Android device using PushBullet, PushOver or any notification service would look like: + +![Home Assistant iPhone notify](_media/home%20assistant/ha_notify.jpg ':size=300') + +## Supporting multiple thermostat heating circuits + +Create a component for each, using the HC number appended to the end of the topics. For example + +```yaml +- platform: mqtt + name: Thermostat HC2 + modes: + - "auto" + - "heat" + - "off" + mode_command_topic: "home/ems-esp/thermostat_cmd_mode2" + temperature_command_topic: "home/ems-esp/thermostat_cmd_temp2" + + mode_state_topic: "home/ems-esp/thermostat_data" + current_temperature_topic: "home/ems-esp/thermostat_data" + temperature_state_topic: "home/ems-esp/thermostat_data" + + mode_state_template: "{% if value_json.hc2.mode == 'manual' %} heat {% else %} {{value_json.hc2.mode}} {% endif %}" + + current_temperature_template: "{{ value_json.hc2.currtemp }}" + temperature_state_template: "{{ value_json.hc2.seltemp }}" + + temp_step: 0.5 + +``` + +## Sending out a heartbeat + +Thanks to @S-Przybylski for these additions. + +`sensors.yaml`: + +```yaml +################################################### +# EMS-ESP Statistics - heartbeat +################################################### +- platform: mqtt + state_topic: 'home/ems-esp/heartbeat' + name: 'ems_esp_wifi' + unit_of_measurement: '%' + value_template: '{{ value_json.rssid }}' + qos: 1 + availability_topic: 'home/ems-esp/status' + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/heartbeat' + name: 'ems_esp_load' + unit_of_measurement: '%' + value_template: '{{ value_json.load }}' + qos: 1 + availability_topic: 'home/ems-esp/status' + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/heartbeat' + name: 'ems_esp_freemem' + unit_of_measurement: '%' + value_template: '{{ value_json.freemem }}' + qos: 1 + availability_topic: 'home/ems-esp/status' + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/heartbeat' + name: 'ems_esp_uptime' + unit_of_measurement: 's' + value_template: '{{ value_json.uptime }}' + qos: 1 + availability_topic: 'home/ems-esp/status' + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/heartbeat' + name: 'ems_esp_version' + value_template: '{{ value_json.version }}' + qos: 1 + availability_topic: 'home/ems-esp/status' + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/heartbeat' + name: 'ems_esp_mqtt_disconnects' + value_template: '{{ value_json.MQTTdisconnects }}' + qos: 1 + availability_topic: 'home/ems-esp/status' + payload_available: "online" + payload_not_available: "offline" +``` + +and in `customize.yaml`: + +```yaml +sensor.ems_esp_wifi: + icon: mdi:wifi + friendly_name: 'Wifi strength' + +sensor.ems_esp_load: + icon: mdi:chart-line + friendly_name: 'System load' + +sensor.ems_esp_freemem: + icon: mdi:memory + friendly_name: 'Free Memory' + +sensor.ems_esp_uptime: + icon: mdi:update + friendly_name: 'Uptime' + +sensor.ems_esp_version: + icon: mdi:mini-sd + friendly_name: 'Firmare Version' + +sensor.ems_esp_mqtt_disconnects: + icon: mdi:chart-line + friendly_name: 'MQTT disconnects' +``` + +## Activating one-time hot water charging DHW once (OneTimeWater) + +switch.yaml +```yaml + one_time_water: + friendly_name: OneTimeWater + value_template: "{{ is_state('sensor.one_time_water', 'on') }}" + turn_on: + service: script.turn_on + entity_id: script.one_time_water_on + turn_off: + service: script.turn_on + entity_id: script.one_time_water_off +``` + +scripts.yaml +```yaml + one_time_water_on: + sequence: + - service: mqtt.publish + data_template: + topic: 'home/ems-esp/boiler_cmd_wwonetime' + payload: '1' + + one_time_water_off: + sequence: + - service: mqtt.publish + data_template: + topic: 'home/ems-esp/boiler_cmd_wwonetime' + payload: '0' +``` + +sensors.yaml +```yaml + - platform: mqtt + state_topic: 'home/ems-esp/boiler_data' + name: 'one_time_water' + value_template: '{{ value_json.wWOnetime }}' +``` diff --git a/docs/Home.md b/docs/Home.md new file mode 100644 index 000000000..19274efc5 --- /dev/null +++ b/docs/Home.md @@ -0,0 +1,61 @@ +EMS-ESP Logo + +[![version](https://img.shields.io/github/release/proddy/EMS-ESP.svg?label=Latest%20Release)](https://github.com/proddy/EMS-ESP/blob/master/CHANGELOG.md) +[![release-date](https://img.shields.io/github/release-date/proddy/EMS-ESP.svg?label=Released)](https://github.com/proddy/EMS-ESP/commits/master) +[![license](https://img.shields.io/github/license/proddy/EMS-ESP.svg)](LICENSE) +[![travis](https://travis-ci.com/proddy/EMS-ESP.svg?branch=master)](https://travis-ci.com/proddy/EMS-ESP) +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/b8880625bdf841d4adb2829732030887)](https://app.codacy.com/app/proddy/EMS-ESP?utm_source=github.com&utm_medium=referral&utm_content=proddy/EMS-ESP&utm_campaign=Badge_Grade_Settings) +[![downloads](https://img.shields.io/github/downloads/proddy/EMS-ESP/total.svg)](https://github.com/proddy/EMS-ESP/releases) + +**EMS-ESP** is a project to build an electronic controller circuit using an Espressif ESP8266 microcontroller to communicate with EMS (Energy Management System) based Boilers and Thermostats from the Bosch range and compatibles such as Buderus, Nefit, Junkers etc. + +Currently [this is the list](Supported-EMS-Devices) of EMS heating devices that have been tested. + +### What's New? + + + +#### **Version 1.9.5 beta** +**January 6 2020** + +Happy new year everyone! 1.9.5 has been in development for a while now but it's almost ready with a few new features and many bug fixes and improvements such as: + +- Changing heating settings on Junkers thermostats +- Supporting multiple thermostat heat controllers +- MM10 Mixer support +- SM200 Solar module support + +Thanks to everyone for providing feedback. + +Also make sure you check out the full [ChangeLog](https://github.com/proddy/EMS-ESP/blob/dev/CHANGELOG.md). + +Paul. + +#### **Version 2.0** +**January 6 2020** + +The next major version is in the works. Here are some of the changes: +- A re-write of the Web interface. Websocket authentication was problematic in many browsers. The new version moves to a cleaner React and TypeScript +- Tighter security in the Web and Telnet, using SSL/TLS and tokens. +- Improved Telnet console with different levels of admin control and multi-client. +- Refactoring the code to make it easier to read, using more C++11 features now in the Arduino core libraries + + + +### Community Support +Go to [Gitter](https://gitter.im/EMS-ESP/community) for quick feedback, questions and troubleshooting. + +### Acknowledgments + +Kudos out to the following people who have open-sourced their work and helped me build this project: + + **susisstrolch** - One of the first working versions of the EMS bridge circuit I found designed for specifically for the ESP8266. I borrowed Juergen's [schematic](https://github.com/susisstrolch/EMS-ESP12) and parts of his code ideas for reading telegrams. + + **bbqkees** - Kees built a small SMD commercial grade circuit board which is available for purchase on his [website](https://bbqkees-electronics.nl/). + + **EMS Wiki** - A comprehensive [reference](https://emswiki.thefischer.net/doku.php?id=wiki:ems:telegramme) (in German) for the EMS bus which is a little outdated, not always 100% accurate and sadly no longer maintained. + + +## DISCLAIMER + +!> This code and libraries were developed from information gathered on the internet and many hours of reverse engineering the communications between the EMS bus and thermostats. It is **not** based on any official documentation or supported libraries from Buderus/Junkers/Nefit (and associated companies) and therefore there are no guarantees whatsoever regarding the safety of your devices and/or their settings, or the accuracy of the information provided. diff --git a/docs/How-the-Code-Works.md b/docs/How-the-Code-Works.md new file mode 100644 index 000000000..786446082 --- /dev/null +++ b/docs/How-the-Code-Works.md @@ -0,0 +1,21 @@ +## The main source files + +`emsuart.cpp` handles the low level UART read and write logic to the bus. You shouldn't need to touch this. All receive commands from the EMS bus are handled asynchronously using a circular buffer via an interrupt. A separate function processes the buffer and extracts the telegrams. + +`ems.cpp` is the logic to read the EMS data packets (telegrams), validates them and process them based on the type. + +`ems-esp.cpp` is the Arduino code for the ESP8266 that kicks it all off. This is where we have specific logic such as the code to monitor and alert on the Shower timer and light up the LEDs. + +`my_config.h` has all the custom settings tailored to your environment. Specific values here are also stored in the ESP's SPIFFs (File system). + +`ems_devices.h` has all the configuration for the known EMS devices currently supported. + +`MyESP.cpp` is my custom library to handle WiFi, MQTT and Telnet. Uses a modified version of [TelnetSpy](https://github.com/yasheena/telnetspy). + +`ds18.*` are the Dallas libraries for any external temperature sensors. + +## How the shower logic works + +Checking whether the shower is running is tricky. We know when the warm water is on and being heated but need to distinguish between the central heating, shower, hot tap and even a bath tap. So this code is a little experimental. + +There is other logic in the code to compensate for water heating up to shower temperature and whether the shower is turned off and back on again quickly within a 10 second window. \ No newline at end of file diff --git a/docs/How-the-EMS-bus-works.md b/docs/How-the-EMS-bus-works.md new file mode 100644 index 000000000..5b7d9b845 --- /dev/null +++ b/docs/How-the-EMS-bus-works.md @@ -0,0 +1,69 @@ +Packages are streamed to the EMS "bus" from any other compatible connected device via serial TTL transmission using protocol 9600 baud, 8N1 (8 bytes, no parity, 1 stop bit). Each package is terminated with a break signal ``, a 11-bit long low signal of zeros. + +A package can be a single byte (see Polling below) or a string of 6 or more bytes making up an actual data telegram. A telegram for the EMS 1.0 is always in the format: + +``[src] [dest] [type] [offset] [data] [crc] `` + +The first 4 bytes is referenced as the *header* in this document. + +### EMS IDs + +Each device has a unique ID. + +In this example a UBA boiler has an ID of 0x08 (such as a MC10) and also referred to as the Bus Master. + +The circuit acts as a service key and thus uses an ID 0x0B. This ID is reserved for special devices intended for service engineers. + +### EMS Polling + +The bus master (boiler) sends out a poll request every second by sending out a sequential list of all possible IDs as a single byte followed by the break signal. The ID always has its high 8th bit (MSB) set so in the code we're looking for 1 byte messages matching the format `[dest|0x80] `. + +Any connected device can respond to a Polling request with an acknowledgement by sending back a single byte with its own ID. In our case we would listen for a `[0x8B] ` (meaning us) and then send back `[0x0B] ` to say we're alive and ready. + +Polling is also the trigger to start transmitting any packages queued for sending. It must be done within 200ms or the bus master will time out. + +### EMS Broadcasting + +When a device is broadcasting to everyone there is no specific destination needed. `[dest]` is always 0x00. + +The tables below shows which types are broadcasted regularly by the boiler (in this case ID 0x08) and thermostat (ID 0x17). The **data length** is excluding the 4 byte header and CRC and the **Name** references those in the German [ems wiki](https://emswiki.thefischer.net/doku.php?id=wiki:ems:telegramme). + +| Source (ID) | Type ID | Name | Description | Data length | Frequency | +| ------------- | ------- | ------------------- | -------------------------------------- | ----------- | ---------- | +| Boiler (0x08) | 0x34 | UBAMonitorWWMessage | warm water temperature | 19 bytes | 10 seconds | +| Boiler (0x08) | 0x18 | UBAMonitorFast | boiler temps, power, gas/pump switches | 25 bytes | 10 seconds | +| Boiler (0x08) | 0x19 | UBAMonitorSlow | boiler temp and timings | 22 bytes | 60 seconds | +| Boiler (0x08) | 0x1C | UBAWartungsmelding | maintenance messages | 27 bytes | 60 seconds | +| Boiler (0x08) | 0x2A | n/a | status, specific to boiler type | 21 bytes | 10 seconds | +| Boiler (0x08) | 0x07 | n/a | ? | 21 bytes | 30 seconds | + +| Source (ID) | Type ID | Name | Description | Frequency | +| ----------------- | ------- | ----------------- | --------------------------------------------------- | ---------- | +| Thermostat (0x17) | 0x06 | RCTime | returns time and date on the thermostat | 60 seconds | +| Thermostat (0x17) | 0x91 | RC30StatusMessage | returns current and set temperatures | 60 seconds | +| Thermostat (0x17) | 0xA3 | RCTempMessage | returns temp values from external (outdoor) sensors | 60 seconds | + +Refer to the code in `ems.cpp` for further explanation on how to parse these message types and also reference the EMS Wiki. + +### EMS Reading and Writing + +Telegrams can only be sent after the Master (boiler) sends a poll to the receiving device. The response can be a read command to request data or a write command to send data. At the end of the transmission a poll response is sent from the client (` `) to say we're all done and free up the bus for other clients. + +When executing a request to read data the `[src]` is our device `(0x0B)` and the `[dest]` must have has it's MSB (8th bit) set. Say we were requesting data from the thermostat we would use `[dest] = 0x97` since RC20 has an ID of 0x17. + +Following a write request, the `[dest]` doesn't have the 8th bit set and after this write request the destination device will send either a single byte 0x01 for success or 0x04 for failure. + +Every telegram sent is echo'd back to Rx, along the same Bus used for all Rx/Tx transmissions. + +### Special EMS Types + +`ems.cpp` defines callback functions that handle all the broadcast types listed above (e.g. 0x34, 0x18, 0x19 etc) plus these extra types: + +| Source (ID) | Type ID | Name | Description | +| ------------- | ------- | ----------------------------- | ---------------------------------------- | +| Boiler (0x08) | 0x33 | UBAParameterWW | reads selected & desired warm water temp | +| Boiler (0x08) | 0x14 | UBATotalUptimeMessage | | +| Boiler (0x08) | 0x15 | UBAMaintenanceSettingsMessage | | +| Boiler (0x08) | 0x16 | UBAParametersMessage | | + +In `ems.cpp` you can add scheduled calls to specific EMS types in the functions `ems_getThermostatValues()` and `ems_getBoilerValues()`. diff --git a/docs/MC110-controller.md b/docs/MC110-controller.md new file mode 100644 index 000000000..bd66258bb --- /dev/null +++ b/docs/MC110-controller.md @@ -0,0 +1,130 @@ +The various types from newer EMS+ controllers like the MC110 found in GB122/125's. + +Byte 1 is the 1st byte of the data block (which is the 5th byte of the telegram for EMS 1.0 for example). + +Bit 0 is the first byte (so value & 0x01) + +This information was compiled with most if it coming from https://github.com/Th3M3/buderus_ems-wiki. Kudos to @Th3M3 for collecting this. + +## 0xD1: UBAOutdoorTemp + +Sent every minute. The first 2 bytes is a short value * 10 + +``` +1 - 2 = outdoor temp, short value * 10 +``` + +## 0x14: UBABetriebszeit + +``` +1 - 2 = total operating time in minutes +``` + +## 0xBF: UBAErrorMessage + +Sent every 10 minutes + +``` +1 = 0x08 +2 = Model ID, 0x85 for MC110/GB125, 0xEA for GB122 +3 = blocking error: always 0x0A (fault class, see service manual) +4 = blocking error: 0x00 or 0x10 = interlocking error, 0x11 = blocking error, 0x12 = system error, 0x13 = reset system error +5 = ASCII | Fault code 0. character (possibly 0x0a = space) +6 = ASCII | Fault code (operation code) 1st character +7 = ASCII | Fault code (operation code) 2nd character +8 - 9 = additional code (status code) +``` + +## 0xE3: UBA?? + +Sent every 10 seconds + +``` +3 = heat request. is 1 if byte 1/bit 1 is set, otherwise 0 +6 = bit 1 for warming water yes/no +12 - 17 = boiler actual temperature * 10 C +14 = Burner capacity-actual in % +15 = Always 0x64 (100%) +16 = Boiler max. temperature in C +19 = %, is 0x64 (100%) if byte 1/bit 1 is set to 1. Otherwise 0. +20 = Cool set temperature for DHW preparation in C +``` + +## 0xE4: UBAMonitorFast + +Sent every 3 seconds + +``` +3 = operation code 1st character +4 = operation code 2nd character +5 - 6 = status code, as numerical value +7 = boiler set temp/heater temp in C +8 - 9 = actual boiler temp * 10 +10 = 0x64 (= 100%) in heating mode, 0x00 in DHW preparation, as % +11 = Burner capacity/power actual as % +12 = bit 0 = flame yes/no, bit 1 = day yes/no, bit 2 = WW prep yes/no +20 - 21 = flame current * 10 in uA +24 - 25 = same as bytes 8-9 +``` + +## 0xE5: UBAMonitorSlow + +Sent every 60 seconds + +``` +3 = + bit 0 = fuel valve 1 open + bit 1 = fuel valve 2 open + bit 2 = blower on + bit 3 = ignition on + bit 4 = oil preheater on + bit 5 = boiler circuit pump on + bit 6 = 3-way valve on WW + bit 7 = circulating pump on +9 = bit 0 = fire control started +11 - 13 = total burner starts +14 - 16 = burner operating hours +17 - 19 = burner level 2 operating hours +20 - 22 = Burner operating hours due to heating demand (excluding DHW preparation) +23 - 25 = Burner starting by heat demand (excluding WW-preparation) +26 = Heating circuit pump modulation % +``` + +## Type 0xE9: DHW status + +Sent every 10 seconds + +``` +1 = DHW setpoint (with setpoint = "off": 0x0A = 10 ° C) +2 - 3 = hot water actual value * 10 +4 - 5 = hot water actual value * 10 +10 = setpoint thermal disinfection +11 = setpoint daily heating temperature +13 = + bit 0 : DHW preparation activated by automatic program + bit 2 : DHW preparation activated by one-time charge + bit 3 : DHW preparation activated by thermal disinfection + bit 4 : DHW preparation active (always 1 if bit 0, 2 or 3 also 1) +14 = + bit 0 : Circulation day mode (or by single charge / th. disinfection activated) + bit 2 : circulating pump on + bit 4 : WW-preparation (when switching to daytime operation sometimes short 0, then again 1) + bit 5 : WW preparation +15 - 17 = Warmwater preparations +18 - 20 = # hours water heating +21 = Warming water (0x64 = 100%) +24 = Set value of time program (if set = "off": 0x00) +26 = same as byte 1, in C +``` + +## 0x07E4: UBA Status + +Sent every 10 seconds + +``` +6 = operation code 1st character +7 = operation code 2nd character +10 = Boiler setpoint temperature during heating operation (0x00 with DHW preparation) +11 = 0x64 (= 100%) in heating mode, 0x00 in DHW preparation or when night +12 = Boiler setpoint temperature during DHW preparation (0x00 during heating operation or when night) +``` diff --git a/docs/MQTT.md b/docs/MQTT.md new file mode 100644 index 000000000..ec91e3842 --- /dev/null +++ b/docs/MQTT.md @@ -0,0 +1,94 @@ +## MQTT configuration options + +#### QOS +The QOS (Quality Of Service) is configurable within telnet (`mqtt_qos`) and WebUI. Valid options are At most once (0) At least once (1) and Exactly once (2). The default is 0. + +#### Keep Alive +Likewise the Keep Alive (`mqtt_keepalive`) can be set. Keep alive ensures that the connection between the broker and client is still open and that the broker and the client are aware of being connected. This value is the number of seconds before giving up on a response and default set to 60 (1 minute). The lower the number the more WiFi traffic but greater the stability. + +#### Retain +`mqtt_retain` sets the MQTT retain flag for all published messages on the broker. It's set to off as default. + +[HiveMQ](https://www.hivemq.com/tags/mqtt-essentials/) has a good explanation of MQTT. + +## MQTT topics + +*all* topics are prefixed with `[base]`/[`host name`]/ where both `base` and `host name` are configurable in the Web UI. The default is `home/ems-esp/`. + +If you want to configure the topic names, these can be changed in the file `src/my_config.h`. + +## Publishing Topics + +All the key information from each of the EMS devices connected (Boilers, Thermostats, Solar Modules etc) are sent periodically on a single MQTT topic. The frequency of these publishes can be adjusted by the `publish_time` parameter which is set to 2 minutes (120 seconds) as default. + +If the data in the payload has not changed since the last publish, it is ignored. Although from version 1.9.4 this can also be configured with the `publish_always` command and WebUI parameter. For example `set publish_always on` will always publish MQTT topics regardless if any of the data parameters have changed. + +The table below shows examples of the topics being published: + +| Topic | Description | Payload Example | +| ------------------- | ------------------- | --------------- | +| `sensors` | temperature readings from any external Dallas sensors attached to the ESP | `{"temp_1":"20.18","temp_2":"40.81"}` | +| `start` | this is the MQTT will and testament messages | `online` or `offline` | +| `heartbeat` | if enabled send out key system stats in JSON | `{"version":"1.9.3b3","IP":"10.10.10.198","rssid":68,"load":100,"uptime":4,"freemem":68,"MQTTdisconnects":0}` | +| `tapwater_active` | individual message if using a boolean sensor to show if hot tap water is running | `0` or `1` | +| `heating_active` | individual message if using a boolean sensor to show if heating is on | `0` or `1` | +| `boiler_data` | all the key data from the Boiler device | `{"wWComfort":"Hot","wWSelTemp":54,....` (see the example in the Monitoring MQTT section below) | +| `thermostat_data` | data from each of the Thermometer's Heating Circuits. Default HC is 1. The data sent depends on the model. | `{ "hc1":{"seltemp":15,"currtemp":20.6,"mode":"auto"}, "hc2":{"seltemp":8,"currtemp":18.2,"mode":"off"} }` | +| `mixing_data` | data from The Mixing Module for each of the Thermometer's Heating Circuits. | `{"hc1":{"flowTemp":55,"pumpMod":"1","valveStatus":"1"}}` | +| `shower_data` | the shower timer and alert toggles plus the duration of the last shower taken | `{"timer":"0","alert":"0","duration":"4 minutes 32 seconds"}` | +| `sm_data` | all data from the Solar Module (if connected) | JSON with `collectortemp` `bottomtemp` `pumpmodulation` `pump` `energylasthour` `energytoday` `energytotal` `pumpWorkMin` | +| `hp_data` | all data from the Heat Pump (if connected) | `{"pumpmodulation":"1", "pumpspeed": 20}` | + +## Receiving Topics + +EMS-ESP subscribes to the following topics used to send commands to the device: + +| Topic | Description | Payload Format | Example | +| ------------------- | ------------------- | -------------- | ------- | +| `start` | this is the MQTT will and testament messages back from the broker | `online` or `offline` | `offline` | +| `restart` | restarts the ESP | | | +| `thermostat_cmd_temp` | sets the thermostat current setpoint temperature to the Heating Circuit `n` (1-4). This is specific for the Home Assistant climate component | temperature value as a float | `20.8` | +| `thermostat_cmd_mode` | sets the thermostat current mode to the Heating Circuit `n` (1-4). This is specific for the Home Assistant climate component | auto, day, night, off, manual | `auto` | +| `thermostat_cmd` | send a generic command to control the thermostat | JSON `{"cmd":,"data":` with `command` being `temp`, `mode`, `nightemp`, `daytemp` or `holidaytemp` with hc being empty or the heat controller (1-4) and `value` being a numeric value | `{ "cmd":"temp2", "data": 20 }` | +| `shower_data` | for setting the shower timer or alert toggle | JSON as `{"timer|alert":"0|1"}` | `{"timer":"1"}` | +| `generic_cmd` | for sending a command to the EMS-ESP, e.g. sending a shot of cold water | `coldshot` | `coldshot` | +| `boiler_cmd` | for sending generic command to control the Boiler | JSON `{"cmd":,"data":` with `command` being `comfort` and `data` = `[hot,comfort,intelligent]` or `flowtemp` with `data` being the desired temperature or `boiler_cmd_wwonetime` | `{"cmd":"flowtemp",data:55}` | +| `boiler_cmd_wwactivated` | for receiving boiler controls from a HA HVAC component | `"1"` or `"0"` | `"1"` | +| `boiler_cmd_wwtemp` | for receiving boiler temperature setting from a HA HVAC component | the temperature value | `60` | + +## Monitoring MQTT + +In Telnet the command `mqttlog` will show you the last messages published as well as which topics are being subscribed to. In the WebUI you also see real-time the last set of published messages in the System Status screen. Below is an example of the telnet command. + +``` +[telnet session] +mqttlog + +MQTT publish log: + Topic:start Payload:start + Topic:heartbeat Payload:version=1.9.2b6, IP=10.10.10.198, rssid=72%, load=1%, uptime=364secs, freemem=52% + Topic:boiler_data Payload:{"wWComfort":"Hot","wWSelTemp":54,"wWDesiredTemp":70,"selFlowTemp":5,"selBurnPow":0,"curBurnPow":0,"pumpMod":0,"wWCircPump":0,"wWCurTmp":36.7,"wWCurFlow":0,"curFlowTemp":43.4,"retTemp":41,"sysPress":1.7,"boilTemp":45.5,"wWActivated":"on","burnGas":"off","flameCurr":0,"heatPmp":"off","fanWork":"off","ignWork":"off","wWCirc":"off","heating_temp":75,"pump_mod_max":90,"pump_mod_min":60,"wWHeat":"on","wWStarts":206017,"wWWorkM":73890,"UBAuptime":3471966,"burnStarts":229866,"burnWorkMin":368989,"heatWorkMin":295099,"ServiceCode":"0H","ServiceCodeNumber":203} + Topic:tapwater_active Payload:0 + Topic:heating_active Payload:0 + Topic:thermostat_data Payload:{"hc1":{"seltemp":15,"currtemp":20.6,"mode":"auto"}} + +MQTT subscriptions: + Topic:home/ems-esp/restart + Topic:home/ems-esp/start + Topic:home/ems-esp/thermostat_cmd_temp1 + Topic:home/ems-esp/thermostat_cmd_mode1 + Topic:home/ems-esp/thermostat_cmd_temp2 + Topic:home/ems-esp/thermostat_cmd_mode2 + Topic:home/ems-esp/thermostat_cmd_temp3 + Topic:home/ems-esp/thermostat_cmd_mode3 + Topic:home/ems-esp/thermostat_cmd_temp4 + Topic:home/ems-esp/thermostat_cmd_mode4 + Topic:home/ems-esp/thermostat_cmd + Topic:home/ems-esp/boiler_cmd + Topic:home/ems-esp/boiler_cmd_wwactivated + Topic:home/ems-esp/boiler_cmd_wwtemp + Topic:home/ems-esp/generic_cmd + Topic:home/ems-esp/shower_data +``` + +If you want more precise monitoring of the MQTT traffic I suggest using [MQTT Explorer](http://mqtt-explorer.com/). diff --git a/docs/RC3xx-Thermostats.md b/docs/RC3xx-Thermostats.md new file mode 100644 index 000000000..41b19eeb3 --- /dev/null +++ b/docs/RC3xx-Thermostats.md @@ -0,0 +1,128 @@ +### How to interpret the tables below + +Take an example telegram: +``` + OO TTTTT +10 00 FF 00 01 A5 00 D7 21 00 00 00 00 30 01 84 01 01 03 01 84 01 F1 00 00 11 01 00 08 63 00 + data block --> 00 01 02 03 04 06 07 08 09 0A... + ^ + | + start of data (n=0) + +OO = offset, 1 byte +TTTTT = type, 2 bytes +``` + +The data starts at the 7th byte straight after the typeID of `x01A5`. Position 0 is the first byte of the data block. + +### Reading from and Writing to an EMS+ Telegram + +``` +Reading 2 bytes of data from 0x1A5 its: send 0B 90 FF 00 02 01 A5 +Meaning: +0B - sender +90 - receiver (RC300) (Read request) +FF - EMS+ extended mode +00 - offset +02 - data length to query +01 A5 - EMS+ Command/Type + +And writing a value of 0x77 to type 0x1B9 its: send 0B 10 FF 08 01 B9 77 + +Meaning: +0B - sender +10 - receiver (RC300) (Write request) +FF - EMS+ extended mode +08 - offset +01 B9 - EMS+ Command/Type +77 - the value to write +``` + +example to retrieve 25 bytes of data from HC1: + +``` +send 0B 90 FF 00 19 01 A5 +Thermostat -> me, type 0x01A5, telegram: 10 0B FF 00 01 A5 00 D3 21 22 00 00 22 27 00 EF 01 01 03 00 EF 01 4B 00 00 11 01 04 08 42 00 (CRC=ED) #data=25 +``` + + + +# Type 01A5 + +0x1A5 is a monitoring telegram from the 1st Heat Controller (HC1). The other HCs use `01A6`, `01A7` and `01A8` respectively and share the same format as below. + +| data position (0..n) in decimal | description | format | notes | +| - | - | - | - | +| 0 + 1 | current room temperature | 2 bytes, *10 | +| 2 | ?? (room night set point temperature) | 1 byte, *2 | **(needs verifying!)** most probably to be processed as bit(s) known values are always in (03, 21 ,23)| +| 3 | current target temperature | 1 byte, *2 | current target value | +| 4 | target flow temperature | 1 byte | target flow temp | +| 6 | current setpoint temperature | 1 byte, *2 | temperature for current mode | +| 7 | next setpoint temperature | 1 byte, *2 | note, only when in auto mode | +| 8 | remaining time until next temp change | 2 bytes | remaining time in minutes.| +| 10 | mode and eco/comfort bits info | 1 byte| bit 1 : 0=manual 1=mode auto, bit 2 : 0=night 1=comfort2 | +| 11 | Current temperature mode | 1 byte | eco : 1, comfort1 : 2, comfort2 : 3, comfort3 : 4 | +| 12 | Next temperature mode | 1 byte | eco : 1, comfort1 : 2, comfort2 : 3, comfort3 : 4 | +| 13 + 14 | remaining time to next setpoint | 2 bytes | time in minutes.| +| 15 + 16 | elapsed time in this setpoint | 2 bytes | time in minutes. | + + +# Type 01B9 + +This telegram type is for managing the Heating mode + +``` +AUTO Mode, setting temporary temp to 21.5(0x2B) +(03:43:45.965) Gateway -> Thermostat, type 0x01B9 telegram: 48 10 FF 08 01 B9 2B (CRC=FA) +(03:43:46.445) Thermostat -> all, type 0x01B9 telegram: 10 00 FF 08 01 B9 2B (CRC=17) + +SET to Manual mode ( manual temp is 20.5 (0x29) ) +(03:49:44.575) Gateway -> Thermostat, type 0x01B9 telegram: 48 10 FF 00 01 B9 00 (CRC=91) +(03:49:45.825) Thermostat -> all, type 0x01A5 telegram: 10 00 FF 0A 01 A5 02 (CRC=16) +(03:49:51.726) Thermostat -> all, type 0x01A5 telegram: 10 00 FF 03 01 A5 29 (CRC=75) +<--- RCPLUSStatusMessage(0x1A5) received + (03:49:51.918) Thermostat -> all, type 0x01A5 telegram: 10 00 FF 06 01 A5 29 (CRC=5D) +<--- RCPLUSStatusMessage(0x1A5) received + +``` + +| data position (0..n) in decimal | description | format | notes | +| - | - | - | - | +| 0 | operation mode | 1 byte | (Auto=xFF, Manual=x00) | +| 1 | comfort3 level | 1 byte, *2 | | +| 2 | comfort2 level | 1 byte, *2 | | +| 3 | comfort1 level | 1 byte, *2 | | +| 4 | eco level | 1 byte, *2 | | +| 5 | | | | +| 6 | | | | +| 7 | | | | +| 8 | temporary setpoint temperature | 1 byte, *2 | when changing of templevel (in auto) value is reset and set to FF | +| 9 | | | | +| 10 | manual setpoint temperature | 1 byte, *2 | | + +# Type 01AF + +Summer - Winter Mode + +change the mode +```send 0B 10 FF 00 AF 07 02``` + +query the mode +```send 0B 90 FF 00 AF 07 01``` + +1 Byte value. + +|Byte value | Meaning | +| - | - | +| 00 | Off | +| 01 | Automatic | +| 02 | Forced | + +Data log example : +``` +Thermostat -> all, type 0x01AF telegram: 10 00 FF 07 01 AF 00 (Off) +Thermostat -> all, type 0x01AF telegram: 10 00 FF 07 01 AF 01 (Automatic) +Thermostat -> all, type 0x01AF telegram: 10 00 FF 07 01 AF 02 (Forced) +``` + + diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..6da98b9a5 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,69 @@ +# EMS-ESP Documentation +This is the documentation for EMS-ESP. Thanks to Tasmota for providing examples. + +## Editing Files + +Use normal markdown syntax with some enhancements, see below. + +### Disable click on zoom for an image +Images support click on zoom function. If you don't want to use it: +``` +![](image.png ":no-zoom") +``` +### Image resizing +Due to click on zoom you can directly link to a big image but make it render smaller on the page: + +``` +![logo](https://docsify.js.org/_media/icon.svg ':size=50x100') +![logo](https://docsify.js.org/_media/icon.svg ':size=100') + + + +![logo](https://docsify.js.org/_media/icon.svg ':size=10%') +``` + +### Rendering Alert Tags + +Blockquotes `>` can now look even fancier: + +?> =`?>` + +!> = `!>` + +> [!TIP] +> `> [!TIP]` + +> [!DANGER] +> `> [!DANGER]` + +> [!NOTE] +> `> [!NOTE]` + +> [!EXAMPLE] +> `> [!EXAMPLE]` + +> [!DANGER|style:flat] +> `> [!DANGER|style:flat]` + +### Creating Tabs + +``` + + +#### ** First Tab Title ** + +Hello! + +#### ** Second Tab Title ** + +Bonjour! + +#### ** Third Tab Title ** + +Ciao! + + +``` + + + diff --git a/docs/Running-and-Monitoring.md b/docs/Running-and-Monitoring.md new file mode 100644 index 000000000..9baa16642 --- /dev/null +++ b/docs/Running-and-Monitoring.md @@ -0,0 +1,32 @@ + +## Using Telnet to monitor EMS traffic + +Use the telnet client to inform you of all activity and errors real-time. This is an example of the telnet output: + +![Telnet](_media/telnet/telnet_menu.jpg) + +Type `log v` and Enter and you'll be seeing verbose logging messages. ANSI colors with white text for info messages, green are for broadcast telegrams, yellow are the ones sent to us and red are for unknown data or telegrams which have failed the CRC check. + +![Telnet](_media/telnet/telnet_verbose.PNG) + +To see the current stats and collected values type 'info'. Note it is normal behavior to see a few CrcErrors as this is usually noise on the line. + +![Telnet](_media/telnet/telnet_stats.PNG) + +**Warning: be careful when sending values to the boiler. If in doubt you can always reset the boiler to its original factory settings by following the instructions in the user guide. For example on my Nefit Trendline that is done by holding down the Home and Menu buttons simultaneously for a few seconds, selecting factory settings from the scroll menu followed by pressing the Reset button.** + +### Recommended puTTY settings + +The Telnet code handles continuous motioning of key strokes, which is useful when monitoring a stream of incoming telegrams and issuing commands at the same time. If you're using puTTY then this will be need to be enabled. I suggest the following settings: + +``` +Terminal->Local line editing->Force off +Terminal->Bell->None +Window->Columns: 180 +Window->Rows: 70 +Window->Lines of scrollback: 5000 +Window->Appearance->Font quality: Antialiased +``` + + + diff --git a/docs/SM100.md b/docs/SM100.md new file mode 100644 index 000000000..4a06400f9 --- /dev/null +++ b/docs/SM100.md @@ -0,0 +1,180 @@ + +### General + +The SM100 (and SM200) is a device to enhance Buderus heatings with the ability to earn solar energy using solar collectors and spend these energy into a water reservoir. + There are different scenarios available to add these module into a heating. + +Protocol: The SM100 device communicates using the EMS+ protocol. That means it sends and interprets EMS and also EMS+ messages. + +External Link to the german product page of SM100: https://www.buderus.de/de/produkte/catalogue/alle-produkte/7607_solarmodul-logamatic-sm100 + + +The following reverse protocol engineering based on a Buderus GB172 heating combined with a water reservoir in one heating circuit. Other combinations, configurations and protocol types are not covered. + +Also refer to https://github.com/proddy/EMS-ESP/issues/267 for the SM200 + + +### Decoded EMS+ Messages + +How to interpret the tables below. Take an example telegram: +``` + EMS+ telegram type + ->| |<- +30 00 FF 00 02 62 01 FB 01 9E 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 2B + data block --> 00 01 02 03 04 06 07 08 09 0A... + ^ + | + start of data +``` + +The data starts at the 7th byte straight after the typeID - here `x0262`. Position 0 is the first byte of the data block. + + +### Telegram overview + +| EMS+ telegram type | description | schedule | number of data bytes in decimal | +| - | - | - | - | +| x0262 | Temperatures | every minute | 26 (max. 24 in one telegram) | +| x0263 | unknown | every minute | 12 | +| x0264 | Solar pump modulation | every minute | 17 | +| x0266 | unknown | every minute | 04 | +| x0268 | unknown | every minute | 02 | +| x026A | Solar pump on/off | every minute | 12 | +| x028E | Solar energy earnings | every hour | 15 | + +### Telegram details + + +| Telegram type | data position (0..n) in decimal | description | format | +| - | - | - | - | +| x0262 | 0+1 | T1 - Temperature of solar collector `[°C]` | 2 bytes | +| x0262 | 2+3 | T2 - Temperature of bottom water reservoir 1 `[°C]` | 2 bytes | +| x0262 | 16+17 | T5 - Temperature of bottom water reservoir 2 `[°C]` | 2 bytes | +| x0264 | 9 | Solar pump modulation `[%]` | 1 byte | +| x026A | 10 | PS1 - Solar pump: on=`04` and off=`03` | 1 byte | +| x026A | 4 | VS2 - Cylinder select value: cyl#2=`04` and cyl#1=`03` | 1 byte | +| x028E | 2+3 | Solar energy earning last hour `/10` `[Wh]` | 2 byte | +| x028E | 6+7 | Solar energy earning today `[Wh]` | 2 byte | +| x028E | 10+11 | Solar energy earning total `/10` `[kWh]` | 2 byte | + + +### Examples + +Solar pump status and changes: + +1.Status solar pump is currently off: see x026A data byte 0A "03" and x0264 data byte 9 "00" +``` + SM -> all, type 0x026A telegram: 30 00 FF 00 02 6A 03 03 03 00 03 03 03 03 03 00 03 03 (CRC=E5), #data=11 + SM -> all, type 0x0264 telegram: 30 00 FF 00 02 64 00 00 00 04 00 00 FF 00 00 00 0C 0A 64 00 00 00 00 (CRC=53), #data=16 +``` + +2.Status pump is currently on: see x026A data byte 0A "04" and x0264 data byte 9 "1E" +``` + SM -> all, type 0x026A telegram: 30 00 FF 00 02 6A 03 03 03 00 03 03 03 03 03 00 04 03 (CRC=EB), #data=11 + SM -> all, type 0x0264 telegram: 30 00 FF 00 02 64 00 00 00 04 00 00 FF 00 00 1E 09 08 64 00 00 00 00 (CRC=CD), #data=16 +``` + +3.Solar pump changes from off --> on: see x0264 data byte 9 set at first to "64" and x026A byte 0A is set to "04" +``` + SM -> all, type 0x0264 telegram: 30 00 FF 09 02 64 64 (CRC=37) + SM -> all, type 0x026A telegram: 30 00 FF 0A 02 6A 04 (CRC=53) + +Less then 10 seconds later the pump is throttled to `30%` 0x1E + + SM -> all, type 0x0264 telegram: 30 00 FF 09 02 64 1E (CRC=4D) +``` + +4.Solar pump changes from on --> off: see x0264 data byte 9 set to "00" and x026a byte 0A is set to "03" +``` + SM -> all, type 0x0264 telegram: 30 00 FF 09 02 64 00 (CRC=53) + SM -> all, type 0x026A telegram: 30 00 FF 0A 02 6A 03 (CRC=54) +``` + +Solar energy earnings: +``` + SM -> all, type 0x028E telegram: 30 00 FF 00 02 8E 00 00 0C F3 00 00 06 02 00 00 76 33 (CRC=8A), #data=11 +``` + +### MQTT message format + +Example of MQTT message: +``` +{"collectortemp":54.8,"bottomtemp":38.8,"pumpmodulation":30,"pump":"on","energylasthour":136.5,"energytoday":447,"energytotal":3029.4} +``` +Please note that not all json elements are available after a restart of the ESP! It takes several minutes (up to 1 h) to collect all necessary values + +### Home Assistant integration + +Example to integrate values into Home Assistant + +##### binary_sensors.yaml: +``` +- platform: mqtt + name: 'Solar Pump' + state_topic: 'home/ems-esp/sm_data' + value_template: '{{ value_json.pump }}' + payload_on: "on" + payload_off: "off" + qos: 1 + payload_available: "online" + payload_not_available: "offline" + +``` + +##### sensors.yaml: +``` +- platform: mqtt + state_topic: 'home/ems-esp/sm_data' + name: 'Collector Temperature' + unit_of_measurement: '°C' + value_template: '{{ value_json.collectortemp }}' + qos: 1 + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/sm_data' + name: 'Bottom Temperature' + unit_of_measurement: '°C' + value_template: '{{ value_json.bottomtemp }}' + qos: 1 + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/sm_data' + name: 'Solar Pump modulation' + unit_of_measurement: '%' + value_template: '{{ value_json.pumpmodulation }}' + qos: 1 + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/sm_data' + name: 'Solar Energy Last Hour' + unit_of_measurement: 'Wh' + value_template: '{{ value_json.energylasthour }}' + qos: 1 + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/sm_data' + name: 'Solar Energy Today' + unit_of_measurement: 'Wh' + value_template: '{{ value_json.energytoday }}' + qos: 1 + payload_available: "online" + payload_not_available: "offline" + +- platform: mqtt + state_topic: 'home/ems-esp/sm_data' + name: 'Solar Energy Total' + unit_of_measurement: 'kWh' + value_template: '{{ value_json.energytotal }}' + qos: 1 + payload_available: "online" + payload_not_available: "offline" + +``` \ No newline at end of file diff --git a/docs/Supported-EMS-Devices.md b/docs/Supported-EMS-Devices.md new file mode 100644 index 000000000..89a5c89c4 --- /dev/null +++ b/docs/Supported-EMS-Devices.md @@ -0,0 +1,51 @@ +Most Bosch branded boilers that support the Logamatic EMS bus protocols work with this design. This includes Nefit, Buderus, Worcester, Junkers and Sieger (all copyrighted). + +!> Please make sure you read the **Disclaimer** on the home page carefully before sending ambiguous messages to your EMS bus as you could cause serious damage to your equipment. + +EMS devices are being constantly added to the database (see file `ems_devices.h`) on each new release. + +### Thermostats: + +* Buderus RC10, RC20, RC20F, RC30, R35, RC300, RC310, RC3000 +* Buderus Logamatic TC100 (read-only) +* Nefit Moduline 100, 300, 400 +* Nefit Moduline 1010, 3000 (read-only) +* Nefit Moduline Easy (read-only) +* Bosch CW100, Easy Control/CT200 (read-only) +* Junkers FR10, FR50, FR100, FR110, FW100, FW120 +* Sieger ES73 + +### Boilers: + +* Buderus GBx72, GB162, GB152, GB125, Logamax U122, Logamax Plus GB062/GB122/GB192, Logano +* Bosch Condens 2500 +* Worcester-Bosch Greenstar 550CDi +* Worcester Bosch Greenstar 24i +* Junkers Cerapur, Junkers Heatronic 3 boilers +* Nefit Proline, Trendline, Topline, Enviline, Smartline +* Sieger BK13 and BK15 Boiler + +### Solar Modules: + +* Buderus SM10, SM50, SM100 Solar Module +* Junkers ISM1 Solar Module + +### Mixing Modules: + +* Buderus MM10, MM50, MM100, MM200 Mixer Module + +### Heat Pump Modules: + +* Buderus HeatPump Module + +### Other devices: + +* Generic Buderus MC10 Module +* Buderus WM10 Switch Module +* Buderus RFM20 Receiver +* Buderus BC10, BC25, BC40 Base Controller +* Buderus Web Gateway KM200 +* Nefit Moduline Easy Connect +* Bosch Easy Connect +* EMS-OT OpenTherm converter +* Junkers Controller diff --git a/docs/Thermostat-Modes-RC35-vs-RC300.md b/docs/Thermostat-Modes-RC35-vs-RC300.md new file mode 100644 index 000000000..3b38233ae --- /dev/null +++ b/docs/Thermostat-Modes-RC35-vs-RC300.md @@ -0,0 +1,15 @@ +(thanks to @moustic999 for explaining this) + +## RC300 + +RC300 has 2 modes : Auto and Manual. + +Auto can switch temperature between 2 levels : eco and comfort + +## RC35 + +RC35 has 3 modes : Auto, Day and Night. + +Auto can switch temperature between 2 levels : day and night + +Changing the temperature for Day or Night (in these modes) will also change the temperature levels used in Auto mode diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md new file mode 100644 index 000000000..fb6ca0d91 --- /dev/null +++ b/docs/Troubleshooting.md @@ -0,0 +1,70 @@ +### Web UI is showing blank pages after logging in + +Due to an issue in how web socket authentication is supported in some browsers, the web interface will currently not work with +* Safari +* Any browser on an iOS or iPadOS device (so iPhones and iPads) + +and the Dashboard will show an empty page. + +A workaround is to use another browser like Chrome or Firefox until the issue has been resolved in the 3rd party library. See [here](https://github.com/me-no-dev/ESPAsyncWebServer/issues/575) and [here](https://bugs.webkit.org/show_bug.cgi?id=80362) for further details on the bug. + +### Web UI is slow or not responding + +Check that you have compiled the firmware with the correct ESP8266 board. In PlatformIO look for `board =` in the `[env]` section. There are noticeable differences between flash chips on certain branded and clone ESP8266 development boards. Best let PlatformIO figure out which one to use (e.g. dio, dout, qio). + +Also certain ESP8266 boards (like from DO-IT) have been problematic. Check that first before logging an issue. + +### Can't connect via WiFi to the EMS-ESP + +The EMS-ESP is probably in Access Point mode. Look for a wifi SSID 'ems-esp', connect to this and open a browser to 'https://192.168.4.1'. If you have configured a WiFi client your router would have appointed an IP address via DHCP. You should be able to connect via https://ems-esp or https://ems-esp.local. + +If you're still unable to connect to the EMS-ESP, hook it up to the USB and open a serial monitor to the COM port to see what is happening. The serial output will always automatically be switched off when there is a connection to the EMS bus. To force it on at bootup, re-compile the code by adding `-DFORCE_SERIAL` to the `general_flags` in `platformio.ini`. Note make sure you re-compile without this flag when putting the EMS-ESP back into production use. + +### EMS Bus shows as disconnected + +The on-board blue LED will flash if there is no connection with the EMS bus. If the LED is disabled re-enable it using the telnet command `set led` or the web interface. The two possible reasons why the bus shows as disabled or disconnected: + +1) The board is running in Serial mode. This will be shown in the telnet session and you can use `set serial off` to disable it or via the web interface. +2) There is no Rx data coming in. The connection to the EMS bus (2-wires or the jack) is faulty or connected to the wrong GPIO pins on the ESP. Rx is D7 and Tx is D8. + +### ESP is unstable and frequently reboots + +Well, that sucks. Sorry! + +Here are some first things to check + +* Check you're using a genuine ESP8266 (like the Wemos D1 or Nodemcuv2). There have been reports of some esp8266 clones (noticeably from DO-IT) which are problematic. See this message from [bbqkees](https://github.com/proddy/EMS-ESP/issues/173#issuecomment-528791079). +* Check that the settings can be saved after a set command. Check with typing `set` into the telnet session. +* Can you reproduce the problem using the official firmware .bin files from the GitHub Release page? +* If you compiled the firmware yourself + 1) Check if you can you reproduce this using the precompiled firmware from the GitHub Releases page + 2) Check that your `platformio.ini` file is up-to-date with the example one provided + 3) Check that your platformio environment up-to-date with the latest libraries +* Did it work before, in an earlier version? Report back which one. + +Then try the following to isolate the root cause of the problem: + +* Use `system` to see how many times it has restarted and what the exception cause was. Note, if the EMS-ESP restarts more than 10 times within a 60-second window of booting it is considered unstable and Serial mode will automatically be enabled to help debug the root cause. This will be shown in the system command too. +* Don't use the web interface, only the Telnet with logging off (`set log n`). Does it still fail? Then try with logging on and see where it fails. Capture the logs and screenshots. +* If compiled with the `debug` target the firmware will capture the stack dump of a crash. Use `crash dump` to output the stack, copy this to a file in scripts/stackdmp.txt (you may need to clean up the formatting) and run the `analyze_stackdmp.py` file to see where in the code the crash occurred. +* Perhaps it's the Tx logic, which can be disabled using `set listen_mode on` (or via the web). See next session below for Tx issues. +* Perhaps the MQTT is failing, which can be disabled with `set publish_time 0` or `set mqtt_enabled false` (or via the web). +* Perhaps the UART low-level code to read the signals from the circuit is causing interference somewhere. Detach the ESP8266 from the circuit (or gateway module) and start it without any of the GPIOs attached to see if it is any more stable. +* As a last resort try wiping the ESP8266 and uploading the firmware again. Use `pio run -t erase` or `esptool.py erase_flash`. + +### Tx is just not working + +First make sure 'listen_mode' is not on as this disables writing to the EMS bus (called Tx). Verify this with the `set` command. + +A quick test is to manually send a command with verbose logging enabled, for example, this will request the version information from the boiler on Device ID 0x08: + +``` +log v +send 0B 88 02 00 20 +``` + +Note for Junkers use `send 8B 88 02 00 20` + +Then try a different Tx setting with `set tx_mode`. 1 is the default, 2 works well for EMS+ and 3 is Junkers specific. With some Bosch devices 2 works better. + +If you see errors pop up in the Telnet session like `** Warning, we missed the bus - Rx non-idle!` and have other components using the +5V power line of the ESP8266 (for example external sensors) then disconnect and try again and this may be causing noise on the line. diff --git a/docs/Uploading-firmware.md b/docs/Uploading-firmware.md new file mode 100644 index 000000000..19559d6f7 --- /dev/null +++ b/docs/Uploading-firmware.md @@ -0,0 +1,14 @@ + +A pre-baked firmware for the common ESP8266 devices are available in the GitHub [releases](https://github.com/proddy/EMS-ESP/releases) which you can upload yourself using the [esptool](https://github.com/espressif/esptool) bootloader. + +### via USB + +- Install ESPTool by running `pip install esptool`. You'll need [Python](https://www.python.org/downloads/) installed. +- Download the firmware from `https://github.com/proddy/EMS-ESP/releases/latest`. You can use `wget` for this. +- `esptool -p COM5 write_flash 0x00000 *.bin` (use COM* for windows, /dev/tty* for Linux/OSX) + +### via OTA (Over The Air) + +- Download espota. Eg. `wget https://raw.githubusercontent.com/esp8266/Arduino/master/tools/espota.py` +- Download the firmware from `https://github.com/proddy/EMS-ESP/releases/latest`. You can use `wget` for this. +- `python espota.py -i ems-esp -f *.bin` diff --git a/docs/Web-test.md b/docs/Web-test.md new file mode 100644 index 000000000..652c36a68 --- /dev/null +++ b/docs/Web-test.md @@ -0,0 +1,7 @@ +If you plan to make changes to the web (css/html/js) you can simulate the front-end by installing the npm modules in the `wsemulator` folder: +```sh +cd tools\wsemulator +npm ci +``` +for the first time and then using the `run` script to start it. e.g. `./run` or `./run.sh` just `run` depending on the OS. +The password for the web admin user is **neo**. \ No newline at end of file diff --git a/docs/What's-New.md b/docs/What's-New.md new file mode 100644 index 000000000..a73825713 --- /dev/null +++ b/docs/What's-New.md @@ -0,0 +1 @@ +[remoteMarkdownUrl](https://raw.githubusercontent.com/proddy/EMS-ESP/dev/CHANGELOG.md) \ No newline at end of file diff --git a/docs/_assets/edit-link.js b/docs/_assets/edit-link.js new file mode 100644 index 000000000..62078ba08 --- /dev/null +++ b/docs/_assets/edit-link.js @@ -0,0 +1,28 @@ +function normalizeGithubUrl(url) { + if (!url) { return null } + + var isAlias = !/\/\//.test(url) // no protocol in the url, we assume it's an alias + url = isAlias + ? 'https://github.com/' + url + '/edit/master/docs/' + : url.replace(/^git\+/, '') + + return url + } + + function install(hook, vm) { + var editLinkConfig = vm.config.editLink || {} + var text = editLinkConfig.text || 'Edit this page' + var cssClass = editLinkConfig.cssClass || 'edit-link' + var repoUrl = normalizeGithubUrl(editLinkConfig.repo || vm.config.repo) + + if (!repoUrl) { throw Error('$docsify.editLink.repo is required. Fix your config.') } + + hook.afterEach(function (html) { + var editLink = '' + + '' + text + '' + + return editLink + html + }); + } + + $docsify.plugins = [].concat(install, $docsify.plugins) \ No newline at end of file diff --git a/docs/_assets/prism-bash.min.js b/docs/_assets/prism-bash.min.js new file mode 100644 index 000000000..5cde45fc3 --- /dev/null +++ b/docs/_assets/prism-bash.min.js @@ -0,0 +1 @@ +!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0},{pattern:/(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,greedy:!0,inside:n}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}};for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=n.variable[1].inside,s=0;s]/, + 'deleted': /[;]\s/, + 'json': { + pattern: /[{].*[}]/, + alias: 'language-json', + inside: Prism.languages.json + }, +}; diff --git a/docs/_assets/prism-http.min.js b/docs/_assets/prism-http.min.js new file mode 100644 index 000000000..0ad46c2fe --- /dev/null +++ b/docs/_assets/prism-http.min.js @@ -0,0 +1 @@ +!function(t){t.languages.http={"request-line":{pattern:/^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\s(?:https?:\/\/|\/)\S+\sHTTP\/[0-9.]+/m,inside:{property:/^(?:POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b/,"attr-name":/:\w+/}},"response-status":{pattern:/^HTTP\/1.[01] \d+.*/m,inside:{property:{pattern:/(^HTTP\/1.[01] )\d+.*/i,lookbehind:!0}}},"header-name":{pattern:/^[\w-]+:(?=.)/m,alias:"keyword"}};var a,e,n,i=t.languages,s={"application/javascript":i.javascript,"application/json":i.json||i.javascript,"application/xml":i.xml,"text/xml":i.xml,"text/html":i.html,"text/css":i.css},p={"application/json":!0,"application/xml":!0};for(var r in s)if(s[r]){a=a||{};var T=p[r]?(void 0,n=(e=r).replace(/^[a-z]+\//,""),"(?:"+e+"|\\w+/(?:[\\w.-]+\\+)+"+n+"(?![+\\w.-]))"):r;a[r]={pattern:RegExp("(content-type:\\s*"+T+"[\\s\\S]*?)(?:\\r?\\n|\\r){2}[\\s\\S]*","i"),lookbehind:!0,inside:{rest:s[r]}}}a&&t.languages.insertBefore("http","header-name",a)}(Prism); \ No newline at end of file diff --git a/docs/_assets/prism-json.min.js b/docs/_assets/prism-json.min.js new file mode 100644 index 000000000..b67c29fe9 --- /dev/null +++ b/docs/_assets/prism-json.min.js @@ -0,0 +1 @@ +Prism.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,number:/-?\d+\.?\d*(e[+-]?\d+)?/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}}; \ No newline at end of file diff --git a/docs/_assets/prism-yaml.min.js b/docs/_assets/prism-yaml.min.js new file mode 100644 index 000000000..1a6fb682f --- /dev/null +++ b/docs/_assets/prism-yaml.min.js @@ -0,0 +1 @@ +Prism.languages.yaml={scalar:{pattern:/([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,alias:"number"},boolean:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},null:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}|\s*#))/m,lookbehind:!0,greedy:!0},number:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},Prism.languages.yml=Prism.languages.yaml; \ No newline at end of file diff --git a/docs/_assets/prism.css b/docs/_assets/prism.css new file mode 100644 index 000000000..c2e13ca78 --- /dev/null +++ b/docs/_assets/prism.css @@ -0,0 +1,143 @@ +/* PrismJS 1.17.1 +https://prismjs.com/download.html#themes=prism-dark&languages=markup+css+clike+javascript+bash+http+json+shell-session+yaml */ +/** + * prism.js Dark theme for JavaScript, CSS and HTML + * Based on the slides of the talk “/Reg(exp){2}lained/” + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #cacaca; + background: none; + text-shadow: 0 -.1em .2em black; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +pre[class*="language-"], +:not(pre) > code[class*="language-"] { + background: hsl(30, 20%, 25%); +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border: .3em solid hsl(30, 20%, 40%); + border-radius: .5em; + box-shadow: 1px 1px .5em black inset; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .15em .2em .05em; + border-radius: .3em; + border: .13em solid hsl(30, 20%, 40%); + box-shadow: 1px 1px .3em -.1em black inset; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: hsl(30, 20%, 50%); +} + +.token.punctuation { + opacity: .7; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.number, +.token.symbol { + color: hsl(350, 40%, 70%); +} + + +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: hsl(75, 70%, 60%); +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: hsl(40, 90%, 60%); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: hsl(350, 40%, 70%); +} + +.token.important { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.deleted { + color: rgb(218, 92, 92); /* the ; in backlogs */ +} +.token.regex { + color: #e90; /* command */ +} + +.token.selector { + color: hsl(187, 78%, 57%); /* rule operators */ +} + +.token.constant { + color: hsl(61, 64%, 47%); /* rule triggers */ +} + +.token.boolean { + color: hsl(290, 38%, 60%); /* backlog */ +} diff --git a/docs/_assets/prism.js b/docs/_assets/prism.js new file mode 100644 index 000000000..09753c2f9 --- /dev/null +++ b/docs/_assets/prism.js @@ -0,0 +1,14 @@ +/* PrismJS 1.17.1 +https://prismjs.com/download.html#themes=prism-dark&languages=markup+css+clike+javascript+bash+http+json+jsonp+json5+shell-session+yaml */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,r=0;var _={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function(e){return e instanceof L?new L(e.type,_.util.encode(e.content),e.alias):Array.isArray(e)?e.map(_.util.encode):e.replace(/&/g,"&").replace(/e.length)return;if(!(k instanceof L)){if(d&&y!=r.length-1){if(c.lastIndex=v,!(O=c.exec(e)))break;for(var b=O.index+(f&&O[1]?O[1].length:0),w=O.index+O[0].length,A=y,P=v,x=r.length;A"+n.content+""},!u.document)return u.addEventListener&&(_.disableWorkerMessageHandler||u.addEventListener("message",function(e){var r=JSON.parse(e.data),n=r.language,t=r.code,a=r.immediateClose;u.postMessage(_.highlight(t,_.languages[n],n)),a&&u.close()},!1)),_;var e=_.util.currentScript();if(e&&(_.filename=e.src,e.hasAttribute("data-manual")&&(_.manual=!0)),!_.manual){function n(){_.manual||_.highlightAll()}var t=document.readyState;"loading"===t||"interactive"===t&&e&&e.defer?document.addEventListener("DOMContentLoaded",n):window.requestAnimationFrame?window.requestAnimationFrame(n):window.setTimeout(n,16)}return _}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:(?!)*\]\s*)?>/i,greedy:!0},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var t={};t[a]={pattern:RegExp("(<__[\\s\\S]*?>)(?:\\s*|[\\s\\S])*?(?=<\\/__>)".replace(/__/g,a),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",t)}}),Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; +!function(s){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/@[\w-]+/}},url:{pattern:RegExp("url\\((?:"+t.source+"|[^\n\r()]*)\\)","i"),inside:{function:/^url/i,punctuation:/^\(|\)$/}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var e=s.languages.markup;e&&(e.tag.addInlined("style","css"),s.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:e.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:s.languages.css}},alias:"language-css"}},e.tag))}(Prism); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&|\|\||[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?[.?]?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=\s*(?:$|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript; +!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)(?:[\s\S])*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0},{pattern:/(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,greedy:!0,inside:n}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}};for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=n.variable[1].inside,s=0;s])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,alias:"number"},boolean:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},null:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}|\s*#))/m,lookbehind:!0,greedy:!0},number:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},Prism.languages.yml=Prism.languages.yaml; diff --git a/docs/_assets/theme-custom.css b/docs/_assets/theme-custom.css new file mode 100644 index 000000000..273884423 --- /dev/null +++ b/docs/_assets/theme-custom.css @@ -0,0 +1,78 @@ +:root { + --mono-hue : 201; + --mono-saturation : 18%; + --mono-shade4 : hsl(var(--mono-hue), var(--mono-saturation), 10%); + --base-line-height : 1.5; + --content-max-width : 70em; + --cover-background-blend-mode : darken ; + --cover-background-color : var(--base-background-color); + --cover-background-mask-opacity : 0.8; + --cover-blockquote-color : #1fa3ec; + --code-theme-text : #e4e4e4 ; + --table-cell-padding : 0.4em 0.75em; + --table-head-background : var(--mono-shade4); + --table-row-even-background : var(--mono-shade2); + --table-row-odd-background : var(--mono-shade3); + /* Sidebar + ============================================================================= */ + --sidebar-background : var(--mono-shade2); + --sidebar-padding : 0 25px; + --sidebar-transition-duration : var(--duration-fast); + --sidebar-width : 18rem; + --sidebar-nav-indent : 0.6em; + --sidebar-nav-margin : 0 0 0; + --sidebar-nav-link-padding : 0 0; + --sidebar-nav-link-before-margin : 0 0 0 0; +} + +.alert.ems-esp { + border: 1px solid var(--mono-shade2); + border-left-width: .25rem; + border-radius: .25rem; + background: var(--mono-shade2); + padding: .25rem 1.25rem !important; + margin-bottom: 0.25rem !important; +} + +.medium-zoom-overlay, .medium-zoom-image--open { + z-index: 0 !important; +} +.alert.ems-esp.warning { + border-left-color: #f0ad4e !important; +} + +.alert.ems-esp.warning .title { + color: #f0ad4e; +} + +.alert.ems-esp.tip { + border-left-color: #28a745 !important; +} + +.alert.ems-esp.tip .title { + color: #28a745; +} + +.alert.ems-esp.info { + border-left-color: #E0FFFF !important; +} + +.alert.ems-esp.info .title { + color: #E0FFFF; +} + +.alert.ems-esp.danger { + border-left-color: #dc3545 !important; +} + +.alert.ems-esp.danger .title { + color: #dc3545; +} + +.alert.ems-esp.example { + border-left-color: #1FA3EC !important; +} + +.alert.ems-esp.example .title { + color: #1FA3EC; +} \ No newline at end of file diff --git a/docs/_glossary.md b/docs/_glossary.md new file mode 100644 index 000000000..c93ff6bab --- /dev/null +++ b/docs/_glossary.md @@ -0,0 +1,12 @@ +##### Device ID + +TBD + +##### Product ID + +TBD + +##### Telegram + +TBD + diff --git a/docs/_media/EMS-ESP_logo.png b/docs/_media/EMS-ESP_logo.png new file mode 100644 index 000000000..7c3d2fbe0 Binary files /dev/null and b/docs/_media/EMS-ESP_logo.png differ diff --git a/docs/_media/boiler.svg b/docs/_media/boiler.svg new file mode 100644 index 000000000..9ea5304f2 --- /dev/null +++ b/docs/_media/boiler.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/_media/boiler_128.png b/docs/_media/boiler_128.png new file mode 100644 index 000000000..3abbdc1fa Binary files /dev/null and b/docs/_media/boiler_128.png differ diff --git a/docs/_media/boiler_16.png b/docs/_media/boiler_16.png new file mode 100644 index 000000000..48fffe743 Binary files /dev/null and b/docs/_media/boiler_16.png differ diff --git a/docs/_media/boiler_16x16.ico b/docs/_media/boiler_16x16.ico new file mode 100644 index 000000000..a7f3d2432 Binary files /dev/null and b/docs/_media/boiler_16x16.ico differ diff --git a/docs/_media/boiler_24.png b/docs/_media/boiler_24.png new file mode 100644 index 000000000..8e37e504b Binary files /dev/null and b/docs/_media/boiler_24.png differ diff --git a/docs/_media/boiler_256.png b/docs/_media/boiler_256.png new file mode 100644 index 000000000..007b8510e Binary files /dev/null and b/docs/_media/boiler_256.png differ diff --git a/docs/_media/boiler_32.png b/docs/_media/boiler_32.png new file mode 100644 index 000000000..ba7976f87 Binary files /dev/null and b/docs/_media/boiler_32.png differ diff --git a/docs/_media/boiler_512.png b/docs/_media/boiler_512.png new file mode 100644 index 000000000..15527b591 Binary files /dev/null and b/docs/_media/boiler_512.png differ diff --git a/docs/_media/boiler_64.png b/docs/_media/boiler_64.png new file mode 100644 index 000000000..a2c0aa610 Binary files /dev/null and b/docs/_media/boiler_64.png differ diff --git a/doc/ems gateway/ems-board-white.jpg b/docs/_media/ems gateway/ems-board-white.jpg similarity index 100% rename from doc/ems gateway/ems-board-white.jpg rename to docs/_media/ems gateway/ems-board-white.jpg diff --git a/doc/ems gateway/ems-kit-2.jpg b/docs/_media/ems gateway/ems-kit-2.jpg similarity index 100% rename from doc/ems gateway/ems-kit-2.jpg rename to docs/_media/ems gateway/ems-kit-2.jpg diff --git a/doc/ems gateway/on-boiler.jpg b/docs/_media/ems gateway/on-boiler.jpg similarity index 100% rename from doc/ems gateway/on-boiler.jpg rename to docs/_media/ems gateway/on-boiler.jpg diff --git a/docs/_media/esp8266.png b/docs/_media/esp8266.png new file mode 100644 index 000000000..0eea496f3 Binary files /dev/null and b/docs/_media/esp8266.png differ diff --git a/docs/_media/favicon.ico b/docs/_media/favicon.ico new file mode 100644 index 000000000..80fa04076 Binary files /dev/null and b/docs/_media/favicon.ico differ diff --git a/doc/home assistant/ha.png b/docs/_media/home assistant/ha.png similarity index 100% rename from doc/home assistant/ha.png rename to docs/_media/home assistant/ha.png diff --git a/doc/home assistant/ha_notify.jpg b/docs/_media/home assistant/ha_notify.jpg similarity index 100% rename from doc/home assistant/ha_notify.jpg rename to docs/_media/home assistant/ha_notify.jpg diff --git a/docs/_media/logo-proddy-fw.jpg b/docs/_media/logo-proddy-fw.jpg new file mode 100644 index 000000000..bdd3d146a Binary files /dev/null and b/docs/_media/logo-proddy-fw.jpg differ diff --git a/docs/_media/logo/domoticz.png b/docs/_media/logo/domoticz.png new file mode 100644 index 000000000..4350c23c9 Binary files /dev/null and b/docs/_media/logo/domoticz.png differ diff --git a/docs/_media/logo/home-assistant.png b/docs/_media/logo/home-assistant.png new file mode 100644 index 000000000..24fdd1628 Binary files /dev/null and b/docs/_media/logo/home-assistant.png differ diff --git a/doc/schematics/Schematic_EMS-ESP.png b/docs/_media/schematics/Schematic_EMS-ESP.png similarity index 100% rename from doc/schematics/Schematic_EMS-ESP.png rename to docs/_media/schematics/Schematic_EMS-ESP.png diff --git a/doc/schematics/breadboard.png b/docs/_media/schematics/breadboard.png similarity index 100% rename from doc/schematics/breadboard.png rename to docs/_media/schematics/breadboard.png diff --git a/doc/schematics/breadboard_example.png b/docs/_media/schematics/breadboard_example.png similarity index 100% rename from doc/schematics/breadboard_example.png rename to docs/_media/schematics/breadboard_example.png diff --git a/doc/schematics/circuit.png b/docs/_media/schematics/circuit.png similarity index 100% rename from doc/schematics/circuit.png rename to docs/_media/schematics/circuit.png diff --git a/doc/schematics/ems_full.diy b/docs/_media/schematics/ems_full.diy similarity index 100% rename from doc/schematics/ems_full.diy rename to docs/_media/schematics/ems_full.diy diff --git a/doc/schematics/wemos_kees.png b/docs/_media/schematics/wemos_kees.png similarity index 100% rename from doc/schematics/wemos_kees.png rename to docs/_media/schematics/wemos_kees.png diff --git a/doc/telnet/telnet_menu.jpg b/docs/_media/telnet/telnet_menu.jpg similarity index 100% rename from doc/telnet/telnet_menu.jpg rename to docs/_media/telnet/telnet_menu.jpg diff --git a/doc/telnet/telnet_stats.PNG b/docs/_media/telnet/telnet_stats.PNG similarity index 100% rename from doc/telnet/telnet_stats.PNG rename to docs/_media/telnet/telnet_stats.PNG diff --git a/doc/telnet/telnet_verbose.PNG b/docs/_media/telnet/telnet_verbose.PNG similarity index 100% rename from doc/telnet/telnet_verbose.PNG rename to docs/_media/telnet/telnet_verbose.PNG diff --git a/doc/web/ems_dashboard.PNG b/docs/_media/web/ems_dashboard.PNG similarity index 100% rename from doc/web/ems_dashboard.PNG rename to docs/_media/web/ems_dashboard.PNG diff --git a/doc/web/system_status.PNG b/docs/_media/web/system_status.PNG similarity index 100% rename from doc/web/system_status.PNG rename to docs/_media/web/system_status.PNG diff --git a/docs/_navbar.md b/docs/_navbar.md new file mode 100644 index 000000000..6029a42a1 --- /dev/null +++ b/docs/_navbar.md @@ -0,0 +1,8 @@ +* Download + * [Download Firmware](https://github.com/proddy/EMS-ESP/releases/latest) + * [Download Source](https://github.com/proddy/EMS-ESP) + * [Download Dev Build](https://github.com/proddy/EMS-ESP/releases/tag/travis-dev-build) +* Help + * [FAQ](FAQ) + * [Troubleshooting](Troubleshooting) + * [Community Help](https://gitter.im/EMS-ESP/community) diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 000000000..c42647d95 --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,27 @@ +* **Installation** +* [Getting Started](getting_started) +* [Building the Firmware](Building-firmware) +* [Uploading the Firmware](Uploading-firmware) +* [Configuring your System](Configure-firmware) +* [Monitoring the EMS bus](Running-and-Monitoring) +* **Home Automation Integration** +* [MQTT](MQTT) +* [Home Assistant](Home-Assistant) +* [Domoticz](Domoticz) +* **EMS Protocol** +* [How the EMS Bus works](How-the-EMS-bus-works) +* [EMS 1.0 Telegram Types](EMS-Telegram-Types) +* [EMS+ / EMS 2.0](Deciphering-EMS-Plus) +* [Thermostat modes](Thermostat-Modes-RC35-vs-RC300) +* [EMS+ Thermostats](RC3xx-Thermostats) +* [SM100/200 Solar Modules](SM100) +* [MC110 Contoller](MC110-controller) +* **For Developers** +* [Building your own Board](Building-your-own-test-circuit) +* [Extending the Functionality](How-the-Code-Works) +* [Testing the Web Interface](Web-test) +* [Feature Wish List](wish-list) +* **Getting Help** +* [FAQ](FAQ) +* [Troubleshooting](Troubleshooting) +* [How to Contribute](Contributing) diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 000000000..80fa04076 Binary files /dev/null and b/docs/favicon.ico differ diff --git a/docs/getting_started.md b/docs/getting_started.md new file mode 100644 index 000000000..2d7e54c50 --- /dev/null +++ b/docs/getting_started.md @@ -0,0 +1,22 @@ +EMS-ESP Logo + +Welcome to EMS-ESP! A small project to read and write to EMS controller heating devices. +
+ +Follow these steps to get EMS-ESP up and running: + +- [Build](Building-your-own-test-circuit) or buy an EMS interface board. I highly recommend purchasing a EMS Gateway from BBQKees ([bbqkees-electronics.nl](https://bbqkees-electronics.nl)) + +- Get an ESP8266 dev board (Wemos D1, Lolin, Nodemcu or equivalent) + +- [Build or download the firmware](Building-firmware) + +- [Upload the firmware](Uploading-firmware) + +- Switch it on + +- [Configure the settings](Configure-firmware) + +- [Monitor what is happening](Running-and-Monitoring) + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 000000000..f123e0093 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,141 @@ + + + + + EMS-ESP Documentation + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/home assistant/automation.yaml b/docs/integrations/homeassistant/automation.yaml similarity index 100% rename from doc/home assistant/automation.yaml rename to docs/integrations/homeassistant/automation.yaml diff --git a/doc/home assistant/binary_sensor.yaml b/docs/integrations/homeassistant/binary_sensor.yaml similarity index 100% rename from doc/home assistant/binary_sensor.yaml rename to docs/integrations/homeassistant/binary_sensor.yaml diff --git a/doc/home assistant/climate.yaml b/docs/integrations/homeassistant/climate.yaml similarity index 100% rename from doc/home assistant/climate.yaml rename to docs/integrations/homeassistant/climate.yaml diff --git a/doc/home assistant/customize.yaml b/docs/integrations/homeassistant/customize.yaml similarity index 100% rename from doc/home assistant/customize.yaml rename to docs/integrations/homeassistant/customize.yaml diff --git a/docs/integrations/homeassistant/ha.md b/docs/integrations/homeassistant/ha.md new file mode 100644 index 000000000..456a602f5 --- /dev/null +++ b/docs/integrations/homeassistant/ha.md @@ -0,0 +1,22 @@ +# Home Assistant Files + +* automation.yaml +* binary_sensor.yaml +* climate.yaml +* customize.yaml +* notify.yaml +* script.yaml +* sensor.yaml +* switch.yaml +* ui-lovelace.yaml + +Make sure you include these YAML files in your `configuration.yaml` file, e.g. +```yaml +script: !include script.yaml +sensor: !include sensor.yaml +switch: !include switch.yaml +notify: !include notify.yaml +climate: !include climate.yaml +automation: !include automation.yaml +binary_sensor: !include binary_sensor.yaml +``` \ No newline at end of file diff --git a/doc/home assistant/notify.yaml b/docs/integrations/homeassistant/notify.yaml similarity index 100% rename from doc/home assistant/notify.yaml rename to docs/integrations/homeassistant/notify.yaml diff --git a/doc/home assistant/script.yaml b/docs/integrations/homeassistant/script.yaml similarity index 100% rename from doc/home assistant/script.yaml rename to docs/integrations/homeassistant/script.yaml diff --git a/doc/home assistant/sensor.yaml b/docs/integrations/homeassistant/sensor.yaml similarity index 100% rename from doc/home assistant/sensor.yaml rename to docs/integrations/homeassistant/sensor.yaml diff --git a/doc/home assistant/switch.yaml b/docs/integrations/homeassistant/switch.yaml similarity index 100% rename from doc/home assistant/switch.yaml rename to docs/integrations/homeassistant/switch.yaml diff --git a/doc/home assistant/ui-lovelace.yaml b/docs/integrations/homeassistant/ui-lovelace.yaml similarity index 100% rename from doc/home assistant/ui-lovelace.yaml rename to docs/integrations/homeassistant/ui-lovelace.yaml diff --git a/docs/wish-list.md b/docs/wish-list.md new file mode 100644 index 000000000..e45ca7899 --- /dev/null +++ b/docs/wish-list.md @@ -0,0 +1,11 @@ +The feature backlog is maintained in the GitHub Projects which you can find [here](https://github.com/proddy/EMS-ESP/projects/1). + +Top of mind, these are the new features when I plan to address: + +- Measure the amount of gas in m3 per day for the hot water vs the central heating, and convert this into cost. +- Support changing temperatures on an Nefit Easy. To do this we must send XMPP messages directly to the thermostat. There is already a TCP stack and a Wifi and Telnet server running in the code, so the building blocks are there to extend with another XMPP client. Here are a number of Python based projects that show how to do this: + - https://github.com/patvdleer/nefit-client-python + - https://github.com/marconfus/ha-nefit + - https://github.com/robertklep/nefit-easy-core +- Improve detection of Heating Off without checking for selFlowTemp (selected flow temperature) +- Split MQTT into smaller chunks. Now the messages can be up to 600 bytes which may cause issues. Preferably make the topic items configurable. \ No newline at end of file