From 7b561f0540451da7abea1c66a1a81f4f88434b74 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 9 Jan 2020 23:04:27 +0100 Subject: [PATCH] updated wiki --- README.md | 22 +- doc/ems gateway/logo-proddy-fw.jpg | Bin 23115 -> 0 bytes doc/ems references/HT3-Bus_Telegramme.html | 7862 ----------------- doc/ems references/wiki_ ems_ telegrams.pdf | Bin 195670 -> 0 bytes docs/.nojekyll | 1 + docs/Building-firmware.md | 60 + docs/Building-your-own-test-circuit.md | 24 + docs/Configure-firmware.md | 35 + docs/Contributing.md | 15 + docs/Deciphering-EMS-Plus.md | 66 + docs/Domoticz.md | 1 + docs/EMS-Telegram-Types.md | 66 + docs/FAQ.md | 16 + docs/Home-Assistant.md | 171 + docs/Home.md | 61 + docs/How-the-Code-Works.md | 21 + docs/How-the-EMS-bus-works.md | 69 + docs/MC110-controller.md | 130 + docs/MQTT.md | 94 + docs/RC3xx-Thermostats.md | 128 + docs/README.md | 69 + docs/Running-and-Monitoring.md | 32 + docs/SM100.md | 180 + docs/Supported-EMS-Devices.md | 51 + docs/Thermostat-Modes-RC35-vs-RC300.md | 15 + docs/Troubleshooting.md | 70 + docs/Uploading-firmware.md | 14 + docs/Web-test.md | 7 + docs/What's-New.md | 1 + docs/_assets/edit-link.js | 28 + docs/_assets/prism-bash.min.js | 1 + docs/_assets/prism-ems-esp.js | 17 + docs/_assets/prism-http.min.js | 1 + docs/_assets/prism-json.min.js | 1 + docs/_assets/prism-yaml.min.js | 1 + docs/_assets/prism.css | 143 + docs/_assets/prism.js | 14 + docs/_assets/theme-custom.css | 78 + docs/_glossary.md | 12 + docs/_media/EMS-ESP_logo.png | Bin 0 -> 4159 bytes docs/_media/boiler.svg | 1 + docs/_media/boiler_128.png | Bin 0 -> 4329 bytes docs/_media/boiler_16.png | Bin 0 -> 594 bytes docs/_media/boiler_16x16.ico | Bin 0 -> 1150 bytes docs/_media/boiler_24.png | Bin 0 -> 856 bytes docs/_media/boiler_256.png | Bin 0 -> 8572 bytes docs/_media/boiler_32.png | Bin 0 -> 1186 bytes docs/_media/boiler_512.png | Bin 0 -> 18042 bytes docs/_media/boiler_64.png | Bin 0 -> 2238 bytes .../_media}/ems gateway/ems-board-white.jpg | Bin .../_media}/ems gateway/ems-kit-2.jpg | Bin .../_media}/ems gateway/on-boiler.jpg | Bin docs/_media/esp8266.png | Bin 0 -> 92063 bytes docs/_media/favicon.ico | Bin 0 -> 16958 bytes {doc => docs/_media}/home assistant/ha.png | Bin .../_media}/home assistant/ha_notify.jpg | Bin docs/_media/logo-proddy-fw.jpg | Bin 0 -> 8478 bytes docs/_media/logo/domoticz.png | Bin 0 -> 27057 bytes docs/_media/logo/home-assistant.png | Bin 0 -> 4257 bytes .../_media}/schematics/Schematic_EMS-ESP.png | Bin .../_media}/schematics/breadboard.png | Bin .../_media}/schematics/breadboard_example.png | Bin {doc => docs/_media}/schematics/circuit.png | Bin {doc => docs/_media}/schematics/ems_full.diy | 0 .../_media}/schematics/wemos_kees.png | Bin {doc => docs/_media}/telnet/telnet_menu.jpg | Bin {doc => docs/_media}/telnet/telnet_stats.PNG | Bin .../_media}/telnet/telnet_verbose.PNG | Bin {doc => docs/_media}/web/ems_dashboard.PNG | Bin {doc => docs/_media}/web/system_status.PNG | Bin docs/_navbar.md | 8 + docs/_sidebar.md | 27 + docs/favicon.ico | Bin 0 -> 16958 bytes docs/getting_started.md | 22 + docs/index.html | 141 + .../homeassistant}/automation.yaml | 0 .../homeassistant}/binary_sensor.yaml | 0 .../integrations/homeassistant}/climate.yaml | 0 .../homeassistant}/customize.yaml | 0 docs/integrations/homeassistant/ha.md | 22 + .../integrations/homeassistant}/notify.yaml | 0 .../integrations/homeassistant}/script.yaml | 0 .../integrations/homeassistant}/sensor.yaml | 0 .../integrations/homeassistant}/switch.yaml | 0 .../homeassistant}/ui-lovelace.yaml | 0 docs/wish-list.md | 11 + 86 files changed, 1933 insertions(+), 7876 deletions(-) delete mode 100644 doc/ems gateway/logo-proddy-fw.jpg delete mode 100644 doc/ems references/HT3-Bus_Telegramme.html delete mode 100644 doc/ems references/wiki_ ems_ telegrams.pdf create mode 100644 docs/.nojekyll create mode 100644 docs/Building-firmware.md create mode 100644 docs/Building-your-own-test-circuit.md create mode 100644 docs/Configure-firmware.md create mode 100644 docs/Contributing.md create mode 100644 docs/Deciphering-EMS-Plus.md create mode 100644 docs/Domoticz.md create mode 100644 docs/EMS-Telegram-Types.md create mode 100644 docs/FAQ.md create mode 100644 docs/Home-Assistant.md create mode 100644 docs/Home.md create mode 100644 docs/How-the-Code-Works.md create mode 100644 docs/How-the-EMS-bus-works.md create mode 100644 docs/MC110-controller.md create mode 100644 docs/MQTT.md create mode 100644 docs/RC3xx-Thermostats.md create mode 100644 docs/README.md create mode 100644 docs/Running-and-Monitoring.md create mode 100644 docs/SM100.md create mode 100644 docs/Supported-EMS-Devices.md create mode 100644 docs/Thermostat-Modes-RC35-vs-RC300.md create mode 100644 docs/Troubleshooting.md create mode 100644 docs/Uploading-firmware.md create mode 100644 docs/Web-test.md create mode 100644 docs/What's-New.md create mode 100644 docs/_assets/edit-link.js create mode 100644 docs/_assets/prism-bash.min.js create mode 100644 docs/_assets/prism-ems-esp.js create mode 100644 docs/_assets/prism-http.min.js create mode 100644 docs/_assets/prism-json.min.js create mode 100644 docs/_assets/prism-yaml.min.js create mode 100644 docs/_assets/prism.css create mode 100644 docs/_assets/prism.js create mode 100644 docs/_assets/theme-custom.css create mode 100644 docs/_glossary.md create mode 100644 docs/_media/EMS-ESP_logo.png create mode 100644 docs/_media/boiler.svg create mode 100644 docs/_media/boiler_128.png create mode 100644 docs/_media/boiler_16.png create mode 100644 docs/_media/boiler_16x16.ico create mode 100644 docs/_media/boiler_24.png create mode 100644 docs/_media/boiler_256.png create mode 100644 docs/_media/boiler_32.png create mode 100644 docs/_media/boiler_512.png create mode 100644 docs/_media/boiler_64.png rename {doc => docs/_media}/ems gateway/ems-board-white.jpg (100%) rename {doc => docs/_media}/ems gateway/ems-kit-2.jpg (100%) rename {doc => docs/_media}/ems gateway/on-boiler.jpg (100%) create mode 100644 docs/_media/esp8266.png create mode 100644 docs/_media/favicon.ico rename {doc => docs/_media}/home assistant/ha.png (100%) rename {doc => docs/_media}/home assistant/ha_notify.jpg (100%) create mode 100644 docs/_media/logo-proddy-fw.jpg create mode 100644 docs/_media/logo/domoticz.png create mode 100644 docs/_media/logo/home-assistant.png rename {doc => docs/_media}/schematics/Schematic_EMS-ESP.png (100%) rename {doc => docs/_media}/schematics/breadboard.png (100%) rename {doc => docs/_media}/schematics/breadboard_example.png (100%) rename {doc => docs/_media}/schematics/circuit.png (100%) rename {doc => docs/_media}/schematics/ems_full.diy (100%) rename {doc => docs/_media}/schematics/wemos_kees.png (100%) rename {doc => docs/_media}/telnet/telnet_menu.jpg (100%) rename {doc => docs/_media}/telnet/telnet_stats.PNG (100%) rename {doc => docs/_media}/telnet/telnet_verbose.PNG (100%) rename {doc => docs/_media}/web/ems_dashboard.PNG (100%) rename {doc => docs/_media}/web/system_status.PNG (100%) create mode 100644 docs/_navbar.md create mode 100644 docs/_sidebar.md create mode 100644 docs/favicon.ico create mode 100644 docs/getting_started.md create mode 100644 docs/index.html rename {doc/home assistant => docs/integrations/homeassistant}/automation.yaml (100%) rename {doc/home assistant => docs/integrations/homeassistant}/binary_sensor.yaml (100%) rename {doc/home assistant => docs/integrations/homeassistant}/climate.yaml (100%) rename {doc/home assistant => docs/integrations/homeassistant}/customize.yaml (100%) create mode 100644 docs/integrations/homeassistant/ha.md rename {doc/home assistant => docs/integrations/homeassistant}/notify.yaml (100%) rename {doc/home assistant => docs/integrations/homeassistant}/script.yaml (100%) rename {doc/home assistant => docs/integrations/homeassistant}/sensor.yaml (100%) rename {doc/home assistant => docs/integrations/homeassistant}/switch.yaml (100%) rename {doc/home assistant => docs/integrations/homeassistant}/ui-lovelace.yaml (100%) create mode 100644 docs/wish-list.md 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 3f0d7c36fa4db310a889b899fe105afb64e6d61f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23115 zcmeIZ2UHYI*Dg8)0SN*Ef@A>^$vHElB1t4mkTjB$_nUS19GKl0P z8HSu^fPn#q;m-Sh-~WB*{^#7g&VTP&cdfh5+r4VKy1J&S_fu89pWb`-&F`BP0M!d+ zHDv%E9vv~1`y-Q$Z_XDTmmrf;(kc}%>BLnjlkas{Efih2>gw}-w6Egh=8uEt0zCZ zx{Zw|PWoFP2>xOdv^ds~|AFvd`G(}Azw!iP5&%GQ^1t){W)>u${zUI@X7Rt{9Qs@4 zzY+Kwfxi*>8-c$O_%{Ng!Xh%V!jiJ0BJ9F4vf?7L62gH0Q5gWB3vk8lo&bITJ3t*^ zgWLZkBR8vLEcRYrZn8o`E}nuG)~=Q|f>y51LJ$i#ArV1gA%Hvx;$~sxWaGtdX=CT$ zqVVXbx&0BlgSEmVLkSIG4L3y_dk0m24;wvy%~w|bPF6D3k3c{QQhA6h#M#Z+#>;{o z;{4XdQx>AY@mK4zxcr~RLL5MO4{KXl-RH{xtbsdI;P~gg`1<+^`icp$uoe@umXZ*W7PS?zi-O-ObzM?O%OcTM5~` zwQ;s_@$$r>AtJ;f^pBhVU)3iLqJMSzKZGAABd(6DqKA!zm(6or0{%I;0>Y94q9U*U zW55N)#3kj0{!=}9p+CX+Z*KH|?VbNmp#_w;wvx5_^WI%O{?Wajjr;$*(SGXy{5P5Y zhm5$Qe`Iit<7VFN+qdO~{@Z^4dm#QQ!A(5e|Nb>iasOoh|6u#Olm8OPf5Y`RT>m8m z{!5kro?U;#^h;9)Q6Wt;rAtojv zr6$913{pBuDspNDI>!49bPV)NtdAZru{>m=2>v0~za;xl za#7>t!Y3poASC`%E; z&~ELXSIZRZ_*j$iYzm{*GILJ%DDiamBXso&jO0iIY*sHtb^{Qc?i)@AW*SOk+|4y$ z!Bc0uujR#7cevQPBrsn*ZvX((8^E^yiM95Sr?9G(pS4xz*EH@5M@Ax8es{8ChRwzw z9zng?L{FBVDFOTi%deEtHvnCJfg|UAs#6ntA{DrYQ*s;n^P1W76koWrTJ_A^4bUmG z!Fk6~gk%nlx3lv2$*bh9eI2e`B?c>YuFwH_tHj}E^<|PkQbfV}bjD1ygo5(%;!kx# z`wMc}xDvd}QQ}y2xPYVQXH@J3<(01{wEVe5yef12vwb$OLVNGmwkzpLL13rRykGo= zD}$U^FO)O{Uz3d)g=beZPHJxA5CE(V@tk?j?l`RqL#pYyOc^kTfIg=Hs zm#0&7k+()-+HHfh^wHr~EUDce1~y8$hxRECvtAwFmhO3Voq+3R8eD;v5dE5s0 z;)N)wDjB!Rx0SBrvIBxOmw0%zP#_!9SF^4j=%jQO-w^UawTs{<^=wm+T!eg@ig1hIw_c5$YaJv~v#vLAuV{kJ0KZn= z6W)U?jLtFC;GKCvaaUR3K$*(<2vwHFrkkQXT`s}HsrInuv+eT_EcwO#!#o6g?Qu&o zqk(j;UyRU+T_Ssk#oPCF*2&iQNk#GW{y03_F+J}c^n|y+%dm^8QU6?Xz{~SB^GaY$ z|1~9n^kHk{i#71s=N#SJxJAkK{xnE^@G5`Z`O<|VW;2)*<2uy>%~#1&D(uL2P*r4t zFjNM55w5r?0BG@`XHGMqsy5z&%(~wwKHre5?-%JPy1lAEIYeRCG95Y+P9Nv;Ci%Wg zb^wz{BlY2WNa2x;pU)8N8bmzP5!i@B@_sFm% zE_6hzat|?8U^3+VKNr0|tRLQlHC4 z7NZ#fC2zJn7&`B@WyaUr)2nIsoXU6}t3piUuCV#i!|3`@IfyqSf29_cGhp!Dlh_Ya*v zJdUj5lq%kP5Bdbl0&)e)PX;qX{@C#ki*+ZD-85cg|M3}^6}7Dd2g!5|e7g3TWgd*(BSc?6e(Qf>QBB}-N-G#ag^r>s*){FW1z=0dIe8-9Sm zy6VkokQ&(7;Cyw5$1ju4XR3oaiQ2wT$y2YE>%sA+X%5GW-p}_X7ZC{>CMV=ko^sS7;I){Z(JAY&KA*ApGsIoDY5=zd*CN*8sJc3&!(-g9UNrd^^<@d{iD$Oo-dtmlP}huq(jAo)Vm}7&%R4BV zVn(M7%|1=0+hBSf-7oZy{h-E7K1=dBooxbBu2^QKc#h$Vmyc2$shJ_v?Z#leIWwn@}M^-PYQP8`>+(t-ht_{SlUUScF|ZD z6!icXf#UtmBvQ>@G>}tjEBWaC;_ZV^Ui`8nUUA|Zb)h^0d(I%`OWN|##!Zx+;P=&# zpICb#*P}_*LBiZ@=+qBNX@&XGt??EUT|{}oijXrlQRs?u1EgbGeqE9Gt^4hvu~NNI z3y-Ch)!t49st8^@J*E)AmSgL8M@%4aiW71J5S`ze-wa|Z+=bq1F@t{!bPp;9rkAR4 zENIvTh&-_|eY5uAH@lU?!9=a!d9M~DtS5(U=h8P!prGabBvXLF?T7{+PJX=Y7IM3V znG{9xbeeo&PBpGLI%;M0yKVqj8I~?keyr{8HWfOwcgA3PZU|}A^|H&k?l7tNaH$Zn zE$W|0asp-u9=aTf#LzpH?4*O{3=uu;IyLdZM}d8dA=?4jZBrXSW+Zp%DvJ+`-t)!) zrv@g3#iEff>lBIyao)p&1qqg&yAQ5zSr#NesT8QU7D>s%Vq3Q8)}S@!iTMs}wE5Ux z>fRa2J&8$?H-sNjhKZjk-vRZ80F%*XNRTEvX%*EF>s(g|z&{=Vxwp5pl|VI97iPBF z!!U*=5V3B9%i&n5ba{cFInBK11}q)0M)})oK~jB7_v)v;s%skN zJYQn~|48rMME$jiCDw4<=r@|U-0R zyLh9izkW6*abZR}bGorzR0OyT0jwcHedZi!F#NIY#0RAZ9CD@VpU@u&&b8c8bf?^@ zFf`ekTTP=OwhQT;$^RX=Qmwq}L7JT`7~p+rsE#C99SH?;fYl1kn~a?H=s#2Zdcq&q znm~D12zEkuyp;fCgygJ#D}oh0?_B_00`uN#_9`^)7XBV3Zo-ZMY1<;7PqcUzm(=Dnl z&3}eDFQS6Wa3j@!iXX#U`>UQiz)3-pvc`Pr1;=|}Ph$D22agAo<*LawIkNA?mFoM% z`SOpMhg)4qIi*iO23Et@9DG*pyU zRoyZCG94JFCJ5<=NQuM1I{Mh}Msd&bey#=4_+Vb(w3FY~@4pDGl0u82@TWp0FPGey zv=|zPMH-%7clYEbJL)pDkF%&&t&x~GudiFM{m9Ja)J32T3^HSkKt)DNs5HHwhU6v= zu>%Tz@Gljzj98e-0N#`ID=4|QapH95Y^=Ev>@ZO<6s^!#8vuFfDt6{Abr@{XZ7N#y zD5eAETNdC46B5kM47zot47uuNrEVV+z(|y+TMOo z92O98VQ2;~r`i5-S%Pwf5iB(x5NNj`>tiu|Um}sE#6HbFVDWkzhE&BHm3S?Z;3na&$PAf^7^p(tO|bp{GVy&EjqTG!Cf z*gBRyg`KXyV@AO2ytiZY2Gj4y7_ju56!^s}1J2SFeE!8bn2Y+BE_vyqqCM4n*dy&RIZ`$Ks*0DD*j zX3$%^Q{!=t&+-u_0Z*OZ1{^9scJ@|R!{Esyr0p9s$>F_cG7Py00(n- zJQoD~gkrHm=)7JmZPjRPV;;mg|AZ?|Vs3_zToBvGe2S{rf*(a=@1tirM9`rs?^WeB z#7h|>ggLzrdv)SO*S;`sF|SFiv$Bm37Z!!Aol^&nvw@$YCp8`aFfFK(b!%|^)P($^ zX0Gca*&^_jQZuQb zWdj_8v-ZbRqD!yXC9^7QD$BI{NKK`atYON&^^k6ItH<*3s{PMem3;j{5664%l3b0^ zT3;+o*eJLobq}o-`G954<_Q>sta64jme55nk=%;gddd7gXsdckAfy{w9ik#d*L-QQOJp}n$XAzmk zHd|Ea0{d1tX&g~%QD9u#Ti{1g#v?ky7mnXTu;$x6^r#z4k)kL%^H?kf$xj6(F@rZf=-`jX-rDXYn&b|tUj^Yb=RG8;_E+h#&q8@ zVu3Na^#_rZN*wEIs1-I|Q$BMmej)np=w6M5678$ZzaBfBJT|;PsFX<*cIoABcndB7!(*oZ_%vp;YFQIrXOyh zfu$%gg7Oe* zqg!9Cez;cQM^k2#QXK|wSZhO+H&{hfF(Al;Su(Ay*4oNVwAXDM~N0M5x(dnL=FMz zPZ##iGZ}uw4?e*=hQWWc#Rm$kn%zC`3kFqANQtL2W-ZyJ6q9Q1Fkcg`fnQ=LE_Wud z_d5!DufTfE`WCyLbLI5DLK%w-m6zICbPoO@(1-}E8UV<11JQr zF(99;|`H zo3^xj4OKdiRiZVF3;sx}^YUX==Z4Ii{KRs6m!BIBf?H`Qe(_itZ>Do;qX)X~D23AB zK!!lFhPp{O@=>C(%wgx|vX)M2f#2RGCc<;I$YXfZt zpObNK9(M{(W%#Eh7PVQLSjX$mdGCBoX$w+tTyH0qxB-wZJ6zVk!#taT6+}=uTqaW# zFl>C3MveII0U@WZv=GNFBYPL|%rOf{dvmg>U7$+Ibr4??I&`IxqY|--h&7pY%m_N% z^Zo3Rj9=)3A^&443<*nwJ*}=qaGEUL>cAPmbpXKJ1l0=8Ua2MV3GN8^Rj!P99$}W1oG=xSU=R&yr%Sw0@uKb|>}Nba15S|1hX*nFH? zv^kzRZY0*MC0m+T{+$e$0EUN~j{~XE&ArBFg-!wo*=c8lw=FX~I+Q`PBdn-*C1|nE zCV>s?XFvF=cd<$5aI$en(?UOJp|W!BkKXjV|>$LyoQlzk=# z4Bw;|c=m-7nNWy*V`O%)5TPupy>%Pyf?G`D}>l3g3GGVJJo+@x}2CV2<~6DbTw8 z<<>r;hl=$R&Q)N%g;9fpn4p&18QiUBu_ghui-ozN1D1t=H$_ZMckBsTra?CC_ht{B zxo-eklZM|HEUnN|Y~>y~bZx9%h$Rh9%~;)r#)j5fdU}JS_)3uCd)brbTBTL3*kBRF zX05egph_{+u1_}T+ieDotMV>4GInX41z2j0KK?*HU~NajOnBhz;X9777tN|awi1hT z$&YTCK>LOUSd$Vrp#|Qlv8zTc<)mVZziXWhe_3t}nZLZAiA3y1yjE72!d~OtFBN(V zq�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 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 882a997ab51421c585e316172c527cbb5be922a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195670 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

5^dm_TB_nBbA$dvD?;V0cZ^< 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 I{c7=l0DUF4nE(I) literal 0 HcmV?d00001 diff --git a/docs/_media/logo/domoticz.png b/docs/_media/logo/domoticz.png new file mode 100644 index 0000000000000000000000000000000000000000..4350c23c9a8a2071d39c6da3d1e2f968f2767b07 GIT binary patch literal 27057 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�GwurpD|E2m3XI(olD8WzpmRkJeHdc8~ppxAoe?3M{0D*FmB2Tf9vO$cf-h9 z$qy_4!3D+>9i>?H79tH0h_aFAKZydf;UH+~3{kcQ-u;t3cC^X$GB)5tt81*e?N8dtcc7bRZktQ zK@jxBU~`k3z&TH6B;>2KaQ3bri0vf{1y(gl2(zL`ZYbc*V8_Nyfg-FD*Wu-U20@2F zk;L5jp@6(GUf8#`EO|$jJUOS{^Sjak2lf=le+2{?Dp2|up$Rm*o22a>HfqJ+{iQI5 z$bt!0_~k*7qt)}Ety(Vo*uU4i6awK)8wsWsB>ukdAV(geJjNL%A?!`9L>e%glN;FT zuzP}<-m+xQ6^$NtRHG7ODrkjMNz{`T{+Yw;VB1%=ow-4kmpTo%KW$f)+6O<`4^1*3A#H*v8VZUqt5Li zzUf+;PU5(8hNiHPfR3NRb1!X9xfdBg-3~|j@3Ir!|0*eZV|ID=rjn~dBk2jNfWCL& zoVIVok!CecJf1Qu`hMN-$TLuj-Zg zMCZGOx$yi*EMABit|93pRD*+pMeWT)^IZD7>{n;G%~kZ`WS!)|!org?5|GT#tvWo$ ztnIh&UdXKiSgl^IjBZ_6(|XHqs@$1c=511Vj-1Xs3!4 z3#GK|3h-rr`B? zq78-uruDVDxt`YQ{8C0?x;uy|0XUK}<Q`M3H^>QmqrsC|zU)1{wu(6(NRheqi z4N?VOGZrD$jFwi6Hy6P@g2z4ZrYrL}B^_cXYUpaW2V?oSpPQ>@2-};1yaw{sg`Xrn zz>cy_PM)4jp|ZuAiCakU03rQflnS9bsHB|y~9-bI{&aZ?{Z27FR+j@5p9vJ>z|Zdo)l19A{7 zp~fqZ3LmDuaM3jlX;UG04Dk#%i;(!w6@GUSvqWsW+Z&O5R+8FGTg!X9Di zs5iQ&tyCBy{$I}cZ$4f+J%nXR*D*>_;TfqYiN=64 z11~zfNkW!z^NAV!r0fCKG@Gh-(N`47VCsSDTLdU%=iO?fGD&H4N%;!Ac`AIl`zy5L zdEFJ+?E$2ib`PdH2{1Rc9S^)*BDA`zI&W6iT*&$q^5%hwM&k%W)2aD$3;aV`3g{e` z7io9dHE?$p{FVY02o*6FSgBFGWdu1Vo0R9p&Y6#po*L90o-|?m*ZggrfbD|U3=Rt% zadz!4MPhI}JKg6#yFyki6@8zkzSrInMtCGNJL`o2FK2K$&W4qq?3ZoaRsNfjw=Tb0 z3EIv$vN7Ohn@kPAR=F3;T$N${JINbCJ`Hwm6}v_vpP^_Kt5o=jMD}|DF-MpROx*;N zS+lvhu3+8$Deqp^cg;T&vfh5n1nA+NKnq06_HXYh)>n!Z*` zY4lGs6DEWw0G}wIu|z5e-wXth;XQwL`JgzOKBwOuHYW*Fc(H#h_>^XL^YZnn zG^fo^(;^1Hy(T@Ay}~z-Tr+_@{VTkg;HOZ^*HfQTA-bziZXeVbcMr(3E8V_PV3dgu zrnWSh+euheotByThck-i`d|5qPHHhb!;S5G-f-T)={_9d_lvMiAhO{oW$=kL={a=2 zJ>;zlbnP>4zZdqmKWc^|u;r2f;aQOp#j7EEjV?kVz$x8)pQ`J=!JgxmvJ&|w{*uM@ zcm|*O0#v<}?Z!~S;fr?KSwJZLS)05&b=(a8;>XRe`-~eFa-q)6Izfsug;qK*_`zFO zYK^$teQoX@Ur-82tS@Qm{NZI^xUyq5hX-dA#*CtkJiGq@Q)tdBHG&&egftJ!L_ZJupA+*`A?T|p#wvPpymOGNJ=i2aWgR$-|+R2UTf zbS%jSi=$%Afm4}d89(D{%1fobNCV+RqAdNi?^; zuO};jvgaVQ7w}X~xX}BpOYso0BIaeXRRtZ5S8`GY=J9%yMAo1c^~U`@dn%{M>`Pjf zs!Hy7S!gYn&7mktv4kJjz|70JaIQdx@^|*uTib4E0=bO>c)V83%jH_XeWKLGB|8qW zzc+ku7pw)iWL#zj6K$h3y=~29u@ju(<|q1JOq`sJD&*~70xyyn zjrV@KwUM!5b$9CBG$8NUv*4_W>(PPLma?*lt14~O%_^Sxc@t9gn_moRUL^|sabnSt zHmc#Je?aD9M|*8fxXC*2g1(^PA(G0LQs@opsSh*T@BO6MB|(lBa41UmNOwEkTc;-B zNp|slSFlpV(<#Ngdc73GDA;RJ`Nt<+#?>% zN^FEpCM2e=CYLf$dU64nu@zWMJBIF-b65Mr;UwFY8eoVg%1_3DUSzwIi2V0r;3IP> zDzr{x`_RMKtDJ)?1*VVa39t|ufuH34RtI`-2GB`Y{^T$>I<$8Ff)sB79d&7s0Xk|U zCbaMat0YjtfF8ii4r=1K%8Ash{>aw=7RRA~itTgpeA#0$6c7^NiLrlVH^vdv{ zk$6?kF+;B0ue-^0ZzFn_@!jOl?0!j5zao<%+3oyUCB&W$2l$ao7P8SZw)ZqU8UHVS zx9w+>Hlb!aDbiP4W3eh+-fG@e=ni=MjnUA`UeU=8T&=>4Qii9Sj!rJo?%IDVw`vyT z+>98tKc|~K9TF`lRbPXUZ=yad<<)i_V%wxk{`SrCqKsV$Q^+MO;8N=)cS*P7ccMTR zx)hveFALEQd&OoM?f#168AYc2gQ40VuCCpT!MZ#to7@2zq=-6POm`aE!Qo!(qLk9} z8nzhUvqVy77RUbed#G0zK6O7B8?C{ddc9kjlp)I7Y^iA!K)uvd zcwqsEmAY!KW6h;%m75$w4?aL3UndxGR$)=Jvlo}ygT@dVF5D`r4i_O&CSi#)u(YY4M^m83M_FQdtlXMU&2ybjNqULn!#qLG|QDMJ43AsY;>j8qgJC) zWr~2=Sdh%@D1qF*T^WBI;@~E>cwCph=moyTQ)MZ)=iZ^YkJ*4#&GkSiM*>N(WGHdF zra@!GZg1S>wmDfOnkCA*r(1N?5~vR4X7oA&fk`f?NvNWj%OGBONwU0y zW#p(?;^CQ!wFyR|@U}Mb;5#o-vq-1)Qjd>;Ul24Pi*oA{bC$BRLWb!CAQ&7i7aIJ2}@$el+q*Y<$#o$wBGyM$1KAO7znlJn1_T{&hWP%8Qmp3(hq8x4# z(~!*12BboWycZ4#Qtgg|ZP!WZ(kDsPjY#8&O^UTLaQWxyZuX?2y_N`F03ub#e+>lzZ#+2-o1 ztsU@A$PE7|BFLRGHE>?=8joMx@N8mC+lhl7)>jzkU7*2SX3mh3ot066v>zF7&|d7| zEYjp-COFp!@N?~q5c+!SHFN{@%b{*^Ns+e2alsRSnzb^pn#qHL_UGFKB3uaP^o9xm zP}>aw+9z=Z)`QIP5ekQlt;a`jA-0faxflJ;;{*rcQ$swVy9<@!D0C~KE-@LIsB#Bf zTA(BHdf(2DO$ld6M*p174Owa4)_&Sz9TBI|#~DU|zDVz|Z2O~e3_dk0dxudXxN~Qh z5C4szWkb)_`+xJiEbe0i2x_gM1s9NrS}dbKG18Nhz5W({F_+`ZEDi>K`gnkyXPD@V zMS45{7rn`HO*3{3?a_OfUnF-w1Q!=SOlL?P4^b%-ftje|DKcttKL-0}$zF$Xa&90e zUP5rI$D&KKCi~O!=~Y*Waw_}_jPXhuVpc&s^VKk!Avbf?<2O!ayCdBK+`#sAK_IfF@!wp$5+5f=pl8=xX(T|Qu&o3^987bb##9tEkSm=)={c~^P&^z7S z^Bwy+>W|vL2#3VRACVM9eGt|z|BE;25UrLmA?3PX_Q5-#F1ZW~qe>pbUzoG)?z5R}9`O`iia2v>KX+v3aj$g9UGM^W#NFu!bUbVs z7dW)~S-P1>NezWu13g%jU4vLrdAyBnWGGT`JR@j0FTm0y5EriGdxfou?jKJrLy8g*#I-==}gi_87KC;rUfKPbzX8cDjaDRY3tU{3< zWQHEuIvxX$x9ybOpgNWoa%U3E;l*+AQF?knbsh=Pn?%62Ar5P?M?T+>9-P5?BOYR`3Rjm0Ql4_<}QE;~MN~)EPo|*nDT0c6o zxH<>lvL3~g`0;Cl=M<&CpQod(SNB)8eN#wyuob2umDlS`3^c~&5uo&o_#NzLAmp{B z&K!qEtG}o^+J2_oTwF-borjKTO5;sf~w0VeYw3CfC)QEf@nM0 z^{9xtbbvke>7V-|d_5+wC3|`UVhX)1ioeAqYu=Bebp|8qhF_-$(ERfHPzi_8pB**H zrdyzsU2+&coR3^tfZkVx}8xVE>d1jdAux0^~pxuWe|y__tk*=+=EgkoCv>qy{Iy@7Zd(yUWb;m3zKUsr!$v zqX()ag?7dmKB-S0x2&Lgn)H~3C4AVBHW@$%t1G#W75O?&zMRtS=kK@U|DDuP zfNt|DN^;vji?+J$yk3|S#Oq3L+Fe`Vv;8D|t=g0k$Rk9dkm+`i$-@4;X0fB4YPvn6 zjHOh3JMhw6=}4@0sNmW5^{SkwiT~R-W>`|TG2`66VmCEgDTY0$Q>fM8(wtl*m9`t# zLFK@_yf6Sa@GvM)3}8T$j6V));q1|aPY zjKN2VY+M%{?8Dt&uj#Md^yObES^Qq^ZZ@UX*3&F6B@j&tdkeM8Zl54CsLE!UmM=3I zp#!!91aa8N3vd&*hK2ek;DVx{cF}9YT)-6t+E0jv-tDtz*yLAtNIgIzpS_7SGgZoI zHl-s-cO4okA$%Su$F6DLP_Px&#hiDC0M79XoOt>GMzoQ`0ZrfIT&O80p?OJUG51m% zE%{jgc5^Iq+V@nC8nr2ng;!Y-cg+W>U3sg!D6oo(6*)vl8UtuSJlr(SKOY?{)(kch z_Yx;&E2&>o0zJt^k~|ywK0wmG4|GuK6MfwNcn35KZBc z@$s-Z0xUz&!?#Z}vobyr6enP`RLlos8f-_$|1e@D{GPL9J9|-*c^wNU%|nx7bR5+l zZT*tnF3j=yx?sCRgC&qD0O*fvFv|FJ?gn0#lKoS&c{+Wm zFUbWY>8DQ&aF+JgK@h2DC|pg9{}uGccn2HrHK4wDDddZ)2!8RVIX@gho>-f+;(sWL z(Chlu#KGTFe!+uK(em!-ZUxvoe`*#Y@yRExg6?+@XoXyq zJesl$+Kh}8SJfDPoL^p_JiklMkk7Au)7j_YaPoOT*u|J{Q0}km9j9 z`@xVi`1uGye+kKQAHUJ>?fc0}3dqzp>S9`I`1_2wiTYbwJs^CP5u>33CAdGq-HYR3?y3ZNWI$C9f<)2bDaF`0o>5^g$IwV!sy6ZGKA} zmPA;h+C642|1rf+f28V8f9#=oBO1hZeCkW;)kue%U89*Fm)LCc9= zb?i7{LRr_u^z~xy3VjmteVq5&RR&9&OD$D1c6u#kprzq+%g|hXhFj$gw9{O^Ryf5{ z9$*OPPazX>fbT7L)N-9bm3s~+v>3$=w+(m-w;j&QxUv~1mrE=0Bq%}3y}u2GABx7~ zZfGN8#gOyD4n`Ma!)Oz57XO9h+mb9SbnL~%f`gPR?UfIq>Dx4=eXC>dc#7?hfmfHwQ+CexDhFaMJL&FhckGtmyV)-N3|aAS8+SL% ztTN|gMR4#BXfG6$Gfx&rYfQq{gmEosuu%;__*Ppd`Cs8x4$DD%Ya)cwD}X+zL0VeV zt*zMDq?1)s;E0gn!D8G^R?vvhEgdbXAO7TJ?s`_M0sH#)Ic=$Fu-erx zX=pFa&}pi>Nq`{;()>>vTw%h&Yfhzef+W!Mze7MCd|B?AM2*c7YgeLp0;HzwHOK=5YmP|3&Ja1Y!nM%OP-$%bQy z(8@78Ji!k9Wbc;kD$synld59B+Mdt7)z&Sle|d4oy>*VqDxBss*362&^d}Q2*j7%| z*r>fw^%d(ot3@AGVnrcuUuU%bt6ET?J5y5fn!tt162Hzdy#&yCeDWT2kH_NdZT7Ug^~S~?i|Q@9B#snV<Z$vNj+6sGij2iPx z{@mLcz6y>KAGJnJ-bY*zl^=WTSMp3RnjAtvvmVo=cKP43U+H;DUg2dA8WzQ@2I-2L z#|(rJ4^w-4d)Q@3FmIgGL?)_oiatf|veF|eIUe6JC3P-T&wqx@h{s`c0qT^vPa?066~X0Njq)!|%lpHfyBDsYZVDpn6GP{#7as;U08pCZwitK5-I779|X)z%V z84Xi0yA~}RMC>bwG<`8)gx|a5RxJ%(TLoH$l#KjPi^D^EiK;mO8$rJ%Rrce6ip)!k zTU*(uXO4=^5P*&CZDz7EPEDz49f?N85LMo1%_B=f=KX~sHI=y)0Tdrt=MI6Jslg#W z-s>ve1DAR;HbR6Ws2+n5@m`Y=;h0@<7RD%u7&+HHefDUmmyiA95vO32msVc`=F!tv zAz|H9O>#FmB!RNv7D2!Jm0Vci57BO=Mivda*}X?fu+fA;IbOKG;?Q9o+MH*P!bIRM z(|Bo+58+UR7zE}7N5VRREa_gskbd#&0&!0~S%*x7_i_@;uKq)0fptMXf}6&0z2)|zhDaT9 z54i@%1f3`1Z9lLZhf`rg5VH-g;dD_)8^#c`c|YC1!-S`FVW(omU_n2#1S2o4B2_J6 H9P)nv>pJHd literal 0 HcmV?d00001 diff --git a/docs/_media/logo/home-assistant.png b/docs/_media/logo/home-assistant.png new file mode 100644 index 0000000000000000000000000000000000000000..24fdd1628cdd38ff2088ec8035d23530a0f07242 GIT binary patch literal 4257 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 + +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

Jkd*b~^HV+oVhsw(EEY-7?ZY#2`z9 zxlBI}g4pX#eWO$XGm_x@U1uq@Fd?bRcn41knKa6`#c8N3!)d5+gXpkW6?EH*gzC5k z4Nc~=;1doXAWO{bX$dti^&6V^v*9ZsDs_v zMh}`Hn@&(C!ImqauNPIwl+m_~+5>C6vkei182}Op?rN<;+baRks0YKx(6FNn*6cw!9Ay_Lh!`C;Dc_^ zQfh~F+OQL6jb##Pv5sxNKs&5uP)rIocC`A&){`IfRy=#7au$>UaG=eCcsW31ZOl1> z`-5lA&%6R;qnH%kKC{LqXPaTBCLN0jFpZ}S<(k#u<$~qf5xvHSOGb0g+>uAZ(6UK z2Oy$EVi!yDmy+O#@zMS`@vnj|gyMv9RN|Rybd%8bdt6FIV319xMn4Z@z56!9 z;59d3&La@<6=fF#%mUbo-3CccpYek{eYvAKAp&+1twLzHEa}pKy#xPSmHZ38;9zld ziFRmUo@(~Hupe>@CXY3OL952d;#M!jR3?her$&?K22Q*fvf*Myf}y$QntCw9Dtze3 zD8LRC+UR6uN5X|DCSH5f9c40a$;;|OsV5}1zTukd>S=)1h0;t++<42i=PiKC{{DHX z!CY4_5LN_=GlBL~==ocpJyUPw3aM=v6trGgHDDr<+>k*hyZY#~uSUo`D*1B)vdjx> zX|MyG>~o41N6#^wxrtsVeWq@OP5zK zGis%Ep9GulVyvA8*{yINI%WuZTmxrR;rJ?!q563WFeNBiJ=QdgNbxK0Qs)Gy}bKxJQ4-egsOGu+(f$PPP*(9Z7)r%36A=AGi{;g#~zB+El) zdA^(Q%#HalR7U)mn3N%s6Z3|sl(@&zw~_<=ec+azid9Cydq<7}nOK_9Pwt_uuDJ+S zjZ+8$i`yXV)v}vdye@FZ){;5Y%XMee-6bkgD~dyJm!oxr$mmTRQa^VPB7*uns4UWi>2q!lXQ3X432lQpBRy}nGBmy$XKBh zGbF@$jgVu$CZ$&gwixG(sS3^v)41J(4)7M(g=GA*rA_gxT15<=JX#FZ~<<(bG+}jntk0q^Bg6goyByf3I7TGftq! zu4YyussQ9Fj^tiKd>l(Gq9XJ~nG*S!YAYa?*n?%EI5)6*2h24e_5AbpN`E|YXPzQK zO0H7(lN$BOS{g$PH*y}sJl?zM>>^R3^>RNebL zl!ANKoS>o2(HV~Yh#_$xM&yEhcR%SNGf1llYU!lK@(3ywjSPaKL^=%W5^U~UTL_1` zeU~MxDk_Q@NnFcN8@IvlrM}b4#AvTVDzZOvtkF`1Xt-A0k)*pwSMM>De@0?(s(zE$ ztonK+#yj2ssi`lFrfGy2>%HpfXeO3eng;b?`XJNihbApK;KKwbwWt%E7$zM3$WwaD zhb(b+6BAq0(@2Sz+p|ndT;&LuL3PGEfIQC~mJDWS$=0bneQ^$(Uzg(shA< zdvJ1M@vOs&6Myx!aJ!Snve*csJFANe`e0K9Vj+29viQwuQGS@F-$S6w075BD!Ro0TUw)b&z6Sq50J4!Y@R)0l|a zT2=oFav7BwXdiFInq}YXm4E$`3*W^n`8mmrvp6J3tMQX_{m`7sV{=h85S?a2c}S-8d(p)*4Z_!}y3y%`(vf5rV4VO#K4bBfPjH+6% z?bXH$#C$i>wzgYq^tPclL?AmcM9{PRjBs+fg#&GffVIDUMAW4*nhqDQonp=7ifG2{ zS^-{s)cA08KD3Wf4Heit&z!V45AL2$10Qw7|898zUni|Vtjb72s-0Dj+=tAJ%ZF?- zoK4v?dmAH_X;Ys_Yb+;HYlMXGm!xTOI~g=3Y8S*(XepA@U)j3cY$ z4%cU{8*TUgQCLQ)Mt!pb-25d2%Y0nCqxm~NDUSCGVX<6gQcW?ji_uf%-{-^{^^LsK za+c1)P>vQ)B`ikFC<6jhD4|A{WA%M_oZ~lRyR%!dDwOWK{{F7Wim;HmK_9wwtP97{MpJT zMj{bGa*_Rw2&76Dr7DT(!i>A`3^wPts-3fJx%10Zrs{+AfYYwdudT!P>$Tz7$J^iR z_8o+FL2zxOqDs7Zb8?({yXp8Sw{ihYeMu4wvP1;0@IDy%XBlM)>{3|yX9jKb#IBL zgKEfp42b(^d_||SE77@?24d!Bu_S`v)sN>mX%Dw<@JXsW#0&S$M~Z|!+w@C=gps8J zAF~w+2^Sfd1SyBrJ$a9EmQ-x?aEZmcSJa-MNi#8+p5>ghk>i|PA09Ej=$gRBsG1lM zUJQCZJ_Sg?Q~kCrIdyIFbsXALLw{_BW=T-~u^)3fT_5pJ3`qy^T@;_S#aA1uue>JNEK5n|6%!WsVchRp-@bNB z!rA9iea^oM`?=;f_qsEj6GUz_b<d8xHs*NKxP`bs@pd>$_*$3?Q^3dtOcDSs6$RGwUP;1ve`!m;EBdxl_GL`jTh4C$KJTVUZglB5RyN=-B7+K|mOo~r% z2Q`ni21rKV;q?=`FL6O)DfdttqF)E$`n)%y{y3LC+)o(PG>h>5V46Z&f~Hn(o9pTE z^Y9bK=?8hU5T6ss?&>r1gGET*;=9&o-kSWRW+zOhvcTpf33vfZ!;|gqND{kp0<)=N z*_koS)}+puNAX5!EnVgb4IgeBHoE@Ggu&xD{L_F+10H`mOoK*^(DVc!H~h{1>BDR3 z+l*(hoDT@b|Kjc-+u!dF{{FbSinN|7@Kpa_p8prK0G@D%rdKvGus0@Tgr*lYG%+%^ zf6)Z2%&lzYt#$Q*w*~|a9ZmENbS5Iu zSkGH@yjxz+XSE+*rDU!KQ~3xwJYIdC^9VRJt%suWe9X-DS^OHQe)m{TQ2(%APG29v zcW^xX94;tF@w4BARzB}}#j$#u4^f*BoCFh2_oK^CHcLzzKi^PRVbRLMNP3r_U!x}C z2EbP!I5C-_`eZiXtuc%YC5*+_z)oI;Rgvn3adl{>+Lo0G#dd%%K@1@>{+PwWU*nZ3 zB0A}Cv~j@eQqtQQbkWJSGFaVDf5hde7<+}|1%6Kxj>!I}3jfwVxk_3Ek3@G*_>k~z zL@^C~bVWl`gH*IC6TEq9c(gH_cr-DTn2L_RL!@snlG2O%&Kginh5lL{La+)+zrBySR# zs4JVRzm;U~a{?Q-kQ?>AV0R6|Ux;U2?egQ~moupDZ++IKx7qu=U;K4tZ{DBu!1zS4 zvr3FrPQwfE`j^6fYMItl3l)2a7IYZujw6$CjF<0|u_8eV7iD_WrJ4yUdQGLtGG>f! z+){vLM)*xN6CNI101vB^TPnV{M$=mbJwJSiu=lnJ4{>-Sr`)D0IH{6bD%2*>(8kbl z94Tt2ajv%SLNLdk{f3zIiVzuw-Ocq5a$dbygrTjtX={MOi ztNMuYpb1S^u=cKN$nGsCBAN0JooFS?D{U)Jl)mVE=2q>?Im_$JOV)^2*TarC;qUwL z>Qgd974w#V^ux7tm50S2`;W41ocP`p%F(lh@(VJ^36&ngnML3@N>7W)ApB)TsW($APv1F!V+H{!8_OZ6ShQC4PKm?=#ZP^BAu)jZ%b zTisAL6{Tj})QdM>k;LhyT7^Ykn)FJ7)qg&%Zl$0uB6GLsy7FL&P%2;^vpi7<-Tl<) z+=X-ULsh0OfiAsDTj=MPP{u2OAgxEG68R=RFJ0D*5UrTVg6DchluALUC=}ZDQ$Fdu*U++b zf2rAioW}YBv75(UI=9&+Tp#}Mjt%g{8yLP!&T6ENuRko=* z(n)=w|Ei}#z3Y3^P){l zY=lX3Kd$S2HycRYG5MnTO5C(>DZ4c~+{LSHf*R}8NVUzZ+`v6G%%)Zu**1Q=wKZDB z_W1@RE>*|$b6rc!4TjSVCRw#Ti{LnJ%6>WGTVXSOc2e=!j~i&UUYLcLh2UVJ$U84N z_L0aT5}%BzGDpsxx52>zGUSKZIE`81;M))qRSDM`+=n=O=;rfhy2tCOG2+lq(F|}z zikw^Xg~oD*+4_4@z3(HcvUoU1C*N&s^^(?ptvjv#AfQ$IK}f6a1J0#Eo_)YLOZs~r z10$rVw`n8nXrQudztmT>lLBd#i6+VL7u___hjFv!dkR>j-MF)gyh!0@+gKCH5R_B! z8Lj5i-(n*chYN2Oiiye>iiznLi^EhM=Pn^qSgwL}6Th~5mZHh78`iGRSDT;u+qM;2$*RQ^uOxqn?Wcu&r3e01 zyc+oME3S;g<%)X>P2!L`I0KuK$?(XjH?(Xg`3GVLh?(PyaxDz}C z2*KUu{*m6hyLac_^Ip|^=bkF6ept+*bIdWvT>l#1;==EgL^33L3RYTDCU3zJ%kL7> zV>WX&_F{U^WCjxMPMhmbT8UF;tS7t)e9=4xRW4!IpgLW10}=jh3%}$VzGC_r7^v%P zDZg9%UMO>7QONSyU+zLin%~si{br1;aX>K zP%11>2T@x3tZ0hJI?i}Hr7_Vu`X_aZQk~i9cO*4e?(*ztQ;svMx(RM8mF%}OgLB!Wk)Wb6iL^!!o! z3jF#M{Pigg=)V+pa}rf_0u-;`Nktj)zV}-y0QxU!f0fVQFRL-(eSe?YkIN!}M%M4w zL|E{?zY+yd7K^areXqU0|Hg**qg4LU$Vw}1Y-Fx4VC(j?$(Dtl0gsiP;d|@s_eNGn zJk9Tgqype?K>$ZUHSLH;|GgO(z(&!@!P(GBPT%3jRXQlzpTFX<{P_RBdqe5}qeu4t zJ8%5n?Ejjv0P6v^;nDwaFCP65cjD21f1&|!@rNVv=zn+-kN$@X@#ufJ2an;0&3Fvo zO;x~S_{oLgCl`jFTo`_GVfe{~;RlyLyOrVB@#U{>1sr;Q<5q@0Rro(oBmW(4{eK!w zj6WU4_|s90KOM#R!%=^B2ICK({XNDQe(MazKRtBv-{*|~eT@BU0Wtnsk$;_O#@`$F zA7|$Oj+y?i8uyQ33~1&5O&Bx&UlGRtMdO(MG4(P3);OmB0jcj_VafDkG5&qcvHae+ z@2mDN*a!a?hb7ZLCKT4+8}~mcp)mbpLIK?N`eV)g$hQC9k(vG{B^0KAOepNXH|~Ex zLiwY%`hkU_fcFDM1n}`=0seU#Wd5-+{(VW(|Ebpc+srb55A**iYm)g#Mf4xm{i)>n zyLI2={QoEG{#;iB08#)yfXeQB!TtZX#QayDW&Tkz{)gFrDsKK}_K$-4Kg@RgUXnZi zyuB@HZUm^*e-=|e%56Xm`a=o;TIRdnc#J>P$NRC_D&YOtmH;1rlwE(Mi60F9ohDem z>+yTJfNk%mT&ABgeqCcbUJJK@X^kehT?{s=)i9lY;i2 zl>E~!0M zo8c_%EHumjI2=G00$5>WYw7H2ZfUNoYxwgx^cyPH?=Jq!cmR~p@5ZvR{z)NcV*_Ic zM{`5K7ap3wrt)tF0FGxrcsl?9jjWA-0RjPd|MdIc1~ahJ{{r^;u8zxh*0whP2O35; z_Mad`Kg9eQ@JCnQ%E}ZV(%j~E@|fxAe?b|2m*;E%m=Pxjb7KR??}$Non!m#FZ%Q&V zvj0MH`c4EmAUinx3+V_D*Z)lP9p>pL;L~>^YeRZEJADUzYvb?V^ZbScfO7Q1B!F73 z`VLOcHl~h7fFm`)n12?*1VESi0W|do)n62&{~g&M69f?R3$@8aAAsVd`D+pW&Gx;`&|9f0V-bJ%0dUg^^eE} zL<&I4k6elOHz|J%2HP`IjRBy8NSa80i2i0^A7D z<UcuI3p9wpZsZN$?zW*{IgPjO(g(3e$o9-EqXQppYQAWuO|Q6P5$N| zdPc^dO8s2c-)a5`pnoP{U}64K&d|33M3Aw~pFI1|RE(_bf68h94pRm^&3`6f{hqjg zMfCrX`yUelNax1ZcK?cqf9A|W|I6YZ{2dG#ei{64vLE~H-{X{pndMIj_AkB#WU-%n z^xtWI>h-6M_CHEXL47BED_hg=d%G#%o+iuptsHP)@H=E3;IAJG=1=6`m&C7){^u9( z^mt4xOss(O<^S&cX+Tu7{RJ`Zu)|$TY4H=A&xE$=#tpEEp@|x}i5}n`G=9LJ|r7rl+Me5J{)c6jY9{bWxvr zPh|EkT^~I>`)u%bXHT52I-an9UH6=*=bdB+?SsT8#}r|Ly0q1qf09(I zesm-#@Il5m@ttg{yw;Yj#tdKJ4=A^CWPgA9v~%5d4v(Jts5d9kcB_rRWhYvyt^h)iSBqbNEp%P<7!5y z4)g(5sB_H)i@>Qg2{tWa=aw)=q++Adh z9*v}4sC&>yZmS^Bvk6}_0PQr^J`r9*eR)QNm+-GmK*a1rZ~N?lFy(~Aq$9&2xv3a=M_qiBWk^Dj@24&GzVcA%A znjqJ;K-6A0Okmw3ze((E9rQ^=H=LjgP`+6uH(2ORkW#nU(>~>|`ldyOofI zn9%tzZZ1XK*11hN`m5nTs~QQB_eBjT2H z`sTB2A7KD*2n>*q#VfDAw~*0DJd#`PFm6=f@Ib>L>PO&vAdo;ZVWDI2UBq8HuB|p{ z`&jFVKid<05P$Z4ouw$WD|vg6{n582IpU3*!Er?f;`4*<=yu9;Em58Hwq;WQ{bX?- zBW`RhlGd|e>R>GU8WFMc$0*h;qRV@98kL#Phr}Ehk420HHVp0zqW;Ue|XV=@_=?4qIxoQH*6wm zGf(0XLJj329$JRHd?ddb9(%AF7$eSeY<)1HIh&l+%JXG*48;O10lWP+M$AR;2zX+a zp_-7k9mgo*l(WNs%AYHGQ+uj4HZ|JRnWi0g9O*V|3g$Mh66mpq>ytoD8-7E^o@N$5 z!!dD#SPSm{H*+PyAwL(1g!iOVDju|D@cYm2MfT#wz%MNcj+{V;i7s<-MX3e4#f^$= zg;k1RotzkFrX1y=4MDhB(1gXr+vT92B&UMGH|sm6b^}?Uhb3N(1GlmEzV#)Yi|>+) z&D-Drl?n`k$g9V68NEIbgN^MWowV7kQ(l(;2t#>;XM zs+SL?=VM@$zXD7GRE?*pML1>;bb1Cf3=A9t(R&>dw!7!IhIk&~9nH{Y+J08`Tu;$ERMCz(;jg@3-KXDT_v60%x(aE10{`^JMO?}% z!3_Pb#p9F`zAj`EXtEpjR(hY;Ps7in24kGA+4Cj$5eoR(x+AO8j|M3F1^&2GwT9bP zQD)bAtk2D7oJZhDy65ojYKIr3E5?kF_}#(E^UK1^2GAAkDP9`b=IF|6xtDhwui>NP zUXUSx4(o{b7vy@eCTt^ueJ+j4JlyHdLWR<@Ej~ zc>ai0ZBaqdr$g9c%C)026C)Gj2M33zcO8#<{QB}GY+4GK^5&7-N0_9AEx_I09EE-SPeJ;s-v4?I~ftykxGYurZ{daYMn4?FZ1 zkGVaAgKSq_XP-eK;IMJn9WHk@ZMa!HR*qa(-51wxymr>B*Ii#0yL=w|S#j9z#v!_| zrkZhiu7>lYxqUni$38jAa^20j4o>nujnz+bzw`y3blrA_({?^S;dY$w!|8fHMY7U9 zK|bA*+IBuo_mo;*LEd!Fdt0nx(zvHp$EjsDH}G3V-r9q&HRfzR?&#Y5gh@G&B`Uzo08 zhxQt4%k>XUOf?)1*CrDCmX2Nw4yhLhdG>ie^Eg`{R`)IWLK)JwvRo@?UHJ|$GBS1x znTfF0W9OQq2>5c+Uk#P=NwO1z{CpY?2kUj) z4oAxSxcy-W;r{d#Vjr%aSL%Uo=i@ykC$ACj?I(zh=gs4r6Q7rNH_-%_&w_p0gEtWC zC-2L96891}6EANpHp<;;&vkA)^KRasfUS>uP2Oc)aj$vao}bY8dfdg2;%Yw+?6}f& z+utRQ(&{`P?-V1ndF`HmNbYuNJ#$#wSsqPI?o8%R);@%Oe;NTzzq0%4@dnp|xG`z@ zTDI}vMcFsEF%W1ztt0J)_v#5Z%iu0qIyx`jjF*FNE%I2TTL5CZa*ymD(*xZb$XYat=_QZ{Oy~QqXdF>WIXFyV%4xW1ic8Q- z3J;{tARSTL9N8(0OGBsE25YlsZ|-5%g4RWN`E7F>_gMFu&0bZC9>~$|3t~-)IDuFT zfR^A|i)c>aEr&Jb9_=lfL9_uM3AIn*G+@;{zF`WuexI-&!Xq5NXFg^Cd!ZIEp!WVb zsHg^cwB{}46jNHSL`9zkN(f%z!Xj=qt`v%w|B<;wfa^R+E?J#JDP}ssK z?NPG)%kAG(4LG;pux^U11`JMNaG_0pxUgrm>4mnV)CocRJh0b2r8`YK{mSNpq#b9} z=fW0H*DW@kpmsY}oha2!oDRh5zVb874%F%o2llic;I=*9ZiMRrJOa31d@gbKKrd94uKkF^ANw}DbI=&qvvb)PcSsVg;lmyEd{v6Kl>%EfX$B+CX8~9=Scp~qYWm8` zrs&T$p5tmqO^u=!ZRMZcO$*}KtJuql*m;~p2m%$!Ga~2P?k6{w9jG$o8kvbr$%x`U zlni2O&odjosj^@QpkLOm_u5e#eSe*1QT_p8^epl-J9ia|;jl7u(HLr54tt;FU<$wv+<&MhH^J{eaAI~Dc*iu{I zB28ipnaMx6&#^Ij73sIMafqxJrOx{7-5;ymi$$7eW@-Tv@i32z0sq5QC9Fflz-BIc z7vPyXh=^rn$NEgE{6_5*U@qkJM>;VD(W2CpQwr5LrQdXHago}~v@D}5PQVS+qatz_ zGNbB~2KVk#;p7Y>pN8{Xk_{{R_QR;FW!UotMKxTrEJK#Dp1X*LTty0H^zI`BQn_MB zs(IC&E2Y_x+Tt0}uc*rCF=ESs)r`j04TEDF+6T#8>DenNL_|HpaPZzy~ zlm#Gr+jhuhv-l(NE9el8muE5A*A zH1HGZlfeuF*NVf@wGCR$1=9Po>F7|d#peVH|0Wab5ppx#HTEntY8uvb91A>Eh#DN1%_$SP@++JUHL4AAhuo11txTQo^DY?C z$VSy`3(VezWg)My8S|_dHY@Lw6BC0%8|E{~H3^i;B!wA~%O-7=xZOysKs;sNDB^NO z`ug(>b-RZNJeB!CaYH0i0ENZz?U1BbPBx9RL>x0!r33LL&?8Lo=|MMK+o*9%TiED`n*BF$p?f7H3dQkLkHCZt-1#Ev^bvy)PmPQ zz*YuC*7AS^_}P1TO?N~(_59kPdOk~Rf#I}BHb8?9_<6jQDMg?VRL%}~6R`*4HB4_M zS?JsE{3zy{?@fO=}iY31TxDZ24!U^!PP_8 zL*9G^1kuc3M)v6hq=(oKj%=5TRAjQ392MuBT`4A*gZ!KZYG1DnNZt?C&&E&QkKPX& z2r(C}v``K#fOZ^68;B`@lkuxjQ%t8qq^X_)V+r&om>(-}6_6J=9VlKO<8+3#gC^Oj z&ShuPP1}Z{#`R`+`^K{LQIw|DSyfIYn}_C&b$+vUTV$)#%9wRR_ssilK0%;-AW|T7 zr?*jPKs=y1pU-rAyeMk0nL(X^r+Sp1n{ud~4yo1`>OU@k!&`iFuMa-IQM&Ay5`=Ry zUf}?0V=-FM*{@j&^Ic)55s*)LXYsJ-V&V2scr?dW$jKQ8wptWv61BbD4Mdp9 z-V{@b^uQ_Wq~J3#saVp4TA-VcDtyq(XTz(R4L8svR7);@NgTE=RLdh@A%n~vY9O3f zLjvWPM<=q#cL(hU2UG?02((l%#FRDD6kCBDuf+c4>eFQFf5Q2=n_;7 zm>we^Zx091`6J6`ZBNAN4t)7TDP&H>fd!#jV);wbFy~MM>pZnYvNohZeEB`ZKo)s3 z#6S*tv3z_oU62+?JJ?N_9`qh_zagMwh!#*i+#VahclTbcYBV_BIE(%PQCk+D(L<9? z^PA7}%WtPq9?e*J+ahqa`-;Oe2-?Y{6A0=;qzL@QNM}Nn2m-}O;zEQ7WcowM5Z?Rw zN=dTHOGB5Z4boiZ6ro(#(xSEv)*AKB&@U(l4lzlWn9I+r*}EW}iXNzuwVO+=&P@A& zf6+9Q;}pS0U(l+*@ocdu7tWdS^QqqbZrHz_v=wCYyJZ4JdGV z)CJOJ8+98`~vFlNPo~618cAZ^hSnzN3-~H+ha%&M%xLDu$-6cjI*VW&?I{_Jq0c_F9yobb(R@P_!Nn1RM9pFA zZ(LVjBkana!uH65?gy1zSnj3UO`;14O$ur)25j_ZD|jr6Zukq7U<_=IuT0ZB;a)zZ zogPBNpFE=#n(Tk-JXDQEVVCFl7+5>b4TUabTZ?L`mFxbs*E?EaLc>M!~P%H2Iy&J<2Z~S{9-*O``o`7?A>Ox-&J| zc?OEebGgVlfwFiF@hb&ZxrdT!g&W0&$?Pl8X(oxt;! zit#MGF`j_BZ1ZphjUEtACr+l6Lxx_!&$=*Ah4T(t1+>;cYA+mC!ynG*)`M+(T{j_4 zXKzVw9l50K>5>&F1QHcdloB)qtqWZgS>>A*T@{NCwJ->xt%I@jT&gRIm6(xNd=Nis1$TH#%JO*|BqAE^5mYcxFuRJ4W6ufSika7=mhbYG=Nm*!u8~z%W-eMm>BWnWQ4!j zBVpjA;_n8r(S+Q%z_W(%W5j{T(5-$`1=@0;`++UwGK{DL9Mc4}M-!6%-K!d$fR=82 zqUGqATV#Q{LP&Bbc!ehXf_pGF{QMWrJ-&4GW6|MT>wqz8$U;BRuIh=iOm)&lUkt67UrJA|)*xz_Hh~xm@Sf_+^46i0itI7`Ya1I^(Yd zt}p{IIT6y@L37<@Nprx~TQ^-Hsk5S|;%xEfU~j0NtU);RakNh>Y|t;l8X+q?F!1Xp zjh-$btyAzk<)7cY1o?jG{=9K&d&~NW^_=}m9|BlVA&hBDexg34mk43pFvOOONIwhh z8mq?05ZDKntNB~B5^io76x%M?`5bKHO0Emto~_G$-$owQJ!Ksu+GeV!sZVfp{hb&b z!l(CUS^Xw4aya6#0de?XMJ}3Ap9)W5!xT<7@8+;w1bg6_-?C<~)YxLy^u`=3SoS@? zyER(kZ6!V2sDyoxE-~15Mfq%}1M~()FRGYZM^>M|mvB=YSO&KqrAOMC_7pGCdM-glA)|a{r=?X7X8*Qp_54|9K zpDc62N&?nf0UNfQ1V|B+!R+l2IN{KT)hmuj`Zph1A>;$WFoo8P>#4@ADqe4!UwAI; zQW=h#Dl3lrW2Y z2NZ=FvC@J>j|Mg2!6b@r{2uK*ImP++Hc#eH5m^`u(fhP}=AAlmBH$R&L&ZfTdT#ap zb092ljO_db!3I1>$))vyH&eZ&3BtX+Kja#gK7WkWrKT}oTi9%FWs{!vfw)i&)KQ*x zI}M-kJmxx2mgRv$p>{ibJ;uf4b|>O*xDC+51HRID-3Uii0XfQ}B%X?6TwFG+HNIhw zN5TtH{AkASvfQ}3h zZ0xJ6%{myGs3&@*YE?1Gyhsr#6d@yT7nUeZ_hr~!)UMZgR|dv;MFp6Yz^V#HOyE&F z@bv0gFk=pN`$_~EMI?Nl{31|rDvSAn?)~d`I8kz4(|Z1@MFvTBp7Ob_G&J0w#d6KZ zHcNH&^bEuD(7WZe@n+5J%4Vz-&+bmMIvKM+e^Cof7{-{-H|$7Q*H3;$BtK$5V*Z*k zwnP~OLMkszTu+AIZ@6NZQ$ScvtF|ArB&umYfgQ8L>h*+ufF>mab`lf&2x_3IkKl=6 zeJl!?yyqNdd{sOw2i#~EfuUni|22MR%KRvICkyR$l;H!ryN)fCdM-VFtFFw*2Bt9S z6ndK)W9HjknnmveG3*TS6L2@f7F?VU{CeaWj?grh&ImmUhMpJ8+t5-auT4 zYvwlB;3Ye-qo~<31?-rUcO6|gejOZ&a+9i^d&EBO8b3g_7)y~czupmY?3dse&`sU7 zxsYRGuB&~lVz;z)+PjwSehLph4q1y&Q;l1DxqS~jzw@vQwqWJq@cgW)!n2&Pe7a@3 zzX1Oc#jouiH2s~%lWY+UEA6!px^a7*<-2 zWM5L6f`?cU29M_?J)=~^Y~Rd>$HPyQoa~D7z6Hn|%7H%!l3fdA1Tjf*%6u?}9(PYM zR_-}Pr+uLk&_#$DKRUgIQ0al^aZvk|$^6NC`eP$WbICiK<@@+r)y4()=p%QRS;Ygi zz=(=B?~R=q=0P8y9{Z2z`!ihzhYE~vWrE`%V%yfb3tPNZxQd2;;u@hjW$A=53}@i2D*6q(Ier-$y;aasX9g6RrQ!*LS{G*Pd~( z(5h&&pXzIMhQ(TOx49k`K_F`{V%;XB`7%{>L@0Ez`);@MjguVpes6I8k+QDMrIOMh zCuh>&a&iN;PJ^7sllwuPF`Vaxla8&9iHeTCyrpL_*-~dk@yDIBnR%Cm!vgy-0ba%VX>#~ zV+Yo%+Jbfh&3Vksrmr8&AcZX>CnF=@YQXt^eSZ*l;D~l~KGZ8$Ql*m_ z;V`5 zY;EhOF`Ri}7zRjHDCO;~fpCP|npnu1P#mh_2ha}&NLCXP=(GIo8&#|M92NT5M2+sx&V2JQfS7(?Xp#+D+c`+wgpi|s9*-Vbo}C2LF}qIOU;9QudAyI@5)MOwD;L)p8FSfZqHu2 zYD@I*-!7d6Zm=F=T}9rZ<9^1MEA&CsBXT3|W#}g$8T&k^oXgGwbOnLm}W@4FlMUg(YbBwL@AKZI9FT~k1lxg3&J?ea?1VEc(IAO zaUFICb6Fkjx!9Xc9V1t;^e7Z#w~B_b>1;)BuhHD7ys*`_AS-`H&Q(>%3evr4RHM-X ziPr$gLJ$8|CEN!#BSUQTZi7X6Jre$1vPw&pJGqGCmr zt%X)=+zfzkUBcWjXl7U73Qdal8XP996KWa|$uz+exO;YU4V(m-w25pL6)%n3UWy4T@U}cONQ4#IzBv$aCUr7wgKm@L zIBtPG=y`tU1Adp4k+^NAAP&tUPc0XE8^ZRjdIH?LHDy!n!dQw75?=JRk0c%M=R8Qv zdzT2|Qf6kt$;WdDN!#_9w3YiQP3U7=`7(9yv#E<#6yWL&o&7lzOYK2rY1n<6Q__fp z)$8RY=x#HvxtcF~E>sVn-!;_8*v5qKTyv&B6#4pY9-}c(Bl;8D`aZ=6hjyz$qc4x0 zmw6y+?sfSt#*Z6Ddelnj{lS&%Wp8)veE_HarShOOOzvNg@FJ zJk4&32wm9P2QmW;F?H-7HX!sf+?14-V0Ew^)3l=o{|W+ce`yZlv@p9)dhM;Ot<7XY z`nNHqZYtrzg|8!8)Nxjgg`t%4qm>OqQ%*FZRR$=OACH%HGIALNtw_EMP}x`aR@$X2 zu#R`H>FB1YbHuIRb@3O~kvDqeRm`M4(SE_TZ3a)UNy@XL_Q+(Jir)w{Yj|Z=i*zZ6 zO2L1X6Aog6HsNF~RG!B=hdT)2{q;bn^dWU$b^wt^OHn}I8JnWAy8Hw2C!RtHY#RCU z5tmvNXElgK&a(*)35DPT2?UjUiQBUG`112|X(54|!>VOQmpYomxMh&c!6{SfX-&$T zVfE`B^$Mk(ByvcVxt0?Iow~dg#nA_~&*6To`$yMN9zz|x=MFl&`d+8zPn(hb{{2sq zav^S{o24-QaIYKK3V;qA5uoM=hJ`cI(hRPil3?CYCVy1K4<`zLrec1B#nEbXCP0lT>n zK+RH-keDiLvIG2$AA|JGm-k*(95EYv)s|Lc2;w$Y$l^x|nN_sK^2zbDWLquIk0RPW zK7^!|RhCA?jcpl^WM7(--Nu+Yf!|pp%qQhv&Z&8f(LlYjXcr@5-tFErjlq3*5)%>? zj>|}QB+F!uSb8AjWXg+3PWp!wFXl*1sBf`;1jqCXC@qOI6StDd| zu_mD?or;EL=%~5q2Z4l9JVr+jOn-Ll@>RFf zL9I?OdrP5Hn$w>!Y7=*X*s4{#MF7jCSkfrgNFb3>74vbfBjRJRy;WVtHX)Wtk$RN0 zp#EG4$Mo0fd5H647oX8PP>2tvpZCiU*Y?M(Q(aAY5=M+fmWo{3tZ~-fm9;52W8aG< zcUBf!w^&yk31F35d@%5{(@gI&(^1v0AY(2nma7ok)(v7rV^Z!S5b$@aR#R`3vP=9ddON7YY5nbFA$duVXhgK)>1;vm4f`}- zl}&>=F~EHt!e^zo9n_1Zk0j}Z9D-KJs&S?X8D!6ZH`>w#O13^BY+Gz@#8Bh zaEk4(?A=488!C-AKq9JTu%Astwm;$`5-bsj@&dhR;}Z1eY|~xw)Lo1Wx|CCKe)t$! zP3tI%PG5;c`EmVWuqu0UqoW!mdb4AV*HnI)diwsuimQ*~{nz4s2&`~ycEVuy!x1HG ziHnD)*1M|>A9u8gzK3z5`%#EawqBE55GFWo?8r3hBXfGuiZgM>1D3_K(lMCqX1l7e zeMn4B7a6=!$Du2$``p$aFuYg63o(2x6)(BXtm?rKB`lCP5wjQNe|>_iCBY~T`` zk|l|9&t>S%Op^g}>EjQAWUZO4# z6&A!OaMh{|3aXsVg`62&+4&ezT9;^ z4Q5D-*0eR{WRLO$FnRAIA3Po@n}lp0H=E{`&b1RehlpIk#xc>g-;=q7Y#PnJk(ds~J_} zUJm~%T3F7h0*v43*q+3hHP|hn@>qVd)P_zzqc_gRgXtWesITd!=tedca8e=ETDE$; z`m9BABXe>LYagM0De`t8h5gH|s(fH`d0kxSkjg+(IC`1k+h$?n%Jk(qiFzgZit>a_ zVzJQu)1l4H?H+d=s4v9Ra|WVMZ(YZG2H$AjFWRmLO)V%x3D+uwCVp(%>L|{21)kD) z7xoZdy0z7Guk6Wcy#%$*+w5xR$UW`BjKy-;5XtSJRc}1<@9Lv8%uy z@G|l#M-W;mB1QS<+j$`x;{{*UNs&!EsRE5xS@2b23&}>fPw_L_B@KU^2Pl!c?j`k@*$lO9)bj{8N)^h)g&nGRVTUWJGn+=HrokI$uM); zUi$J3U*X2Y4eV{tRcuYz%H6H+wNa5y>`cetP)l&7xm^_Jl-A>-DF&QspJV>+& zSj8sOF{uuTIa8>I+1zHersP(n^76EK$<%NR6~$wkg*jSMa1Z!;ZQpRpm>$gqEt-gh zK72HwC!Q8>{47wJIzO9{fTSpqc@ZfkBO=dXs~wdML4roVE85+etde3K#Em}WuqZsY za8wGe?6X>ea6u4m=6NB@4b`cmPG?FQIlkZUm1P!Dr*Ez%Ln?V+(RBHA;vEubyLw?l z5jsZTh;29_BjcF)LRgcbBvTIk@ESkI;tG0IR6`SWJ||i!X9Kq-X9;Y=im@C`9d#Zm z_DMx_u7xtQvNxAN3S)CedHrk+hP(2*5A9KA!%zb~Xd`)$LAr3Hjp}U20!v#V2f9vE zRrJvj4FMDhJfbAJ3Wcdr|G5Q|f8Ch$giGP*E~Z1K3q6ghqJD{MO*)#hs{|3jlt=)z z@O*mO@HpaJp2ar{_xeC{ckpa}g3Uqfob)Z#&AR^GfqNsr| zEEVm$rtPl^MH-T#s6M}X^BRp>cats7R+^?&YbYh4(|RdJti{tbzIg)DSPgql0)3M( zwNCjf{n5tRK`*{_7R^D%Sotm)adOqd2%EFYw_L&_{!$&8*^ZR*mDpN3D%Nl63psj) zu&}c^4Gjvh(p1bEptHwZSpyd4O37au7#bE_%D+M6KALpZWzCNmW2moIC*g7irlUZK z49?dvOjV^A+G#A;n^UNaxvREf=&8igdjp_3NoL4C50rJ#Y;Ga(H}g9PRhY6_d(^M? zn+6tbXp|(5kZJU(BTEnta_#mL@k9~O-!PvZbp_i-7nSSuwX$r4L7a4+i1`HDdW&if z%}ht7~M(dazM=Hx_b{drU$Ms_-%h_ zMh(rG&c*Q%vXv*y;7cu<&>nGzkMD-G=e_I6Qo~bFQsoWPWV)TJow>|l}VGx!C#>BfJSrACnsFJ(xDLCP^Bh6)FP7ktb*6aL zgt8K3=eCzQ$KRWwqvTCb{~8vrB}~Xu2ZgDmMgbHho@gAG$bvanGqjO-5n=w2L54se zd%k?|AZk&g>Ms5CG_)Uq&HJK9NnlO3nY&!F069aU>?9& z+BviF_sSN@JQg4CmojBbL^{slBO>oKQTLnJ1l_5WZ9G=oqhqvvCj||a>1Zko(a%NO zWTwzS0{&_fmYfuAR;uk&4obMqh;G^B)+n)gD!9tMZt!jj1Fn>I15vvXPjwLf1(RTX zDM4yhuY;7Nnh325h9Z$h^T)5q;=+QM^p?t{i33!%SREI96Qvqiv#A&p#yx5xsFOks zi&e^$&KBWXw9H>?0F4PtA+FNR3)o^c5r5(!6?v=w6 z89{d0^2Kb3;wJl~goRAP;fHu&86NO_XzuUgiP1so5s?M4$GW^f5c1;WCK4W@B-9CE zD7uifqpw9maFk-*tl8_mNMH8G#vaw;Xj3g9Rh8`7hJRaLHh{}uyUU@`l2@NcJz!^Z zNOxLKT9!iU%*h8kQWxErKGTz|z-O7nW*nMn8oD<~KMChX=cJF8$Y%+c3AtamY9d>q zTh&^bTBtwCaqG>>yn0?zq^D@2oIUD1s`C8i85J4z>Vq);fPAD{S;C%_NszDHh$Z^= zfX+#k=VNYC(mEI%&oJQw_ia{hzS*f6DXtammb@XET|^xYZh5zY>^n{; zE(^69zSeSs#Ukw?*Ua?+oE2wdG-ofgb>=ACkg$!zr;6mdtF3j@Q&$AgttaXlF?by- z9K6?=@7RXvLm^2K1*9jo>hH!2W()4Wf-Tdc(QR#uIY5NMG}ah#KHSiYV`xcYy_)Ye z$|74#7>7DQy%VE`yyoMA#c|_GeSH+bB5NiBFd()ZDjkQ16O3u?GLF9C96d@ic6-t$>$GtZ&bb> zsWq5wt}|86<0o}9Cy^+Zy4PxJOVeXDs#9KyI$;ARiVZMyy)Ax+iX{Y5JYvB(P%vl8 zZvN3$e0n`CEpDHaP+Lh`FUA;W0X1#CZ6!HZ>Oy>e@QS}&r--T;?^4g4Dz=b3f+Kc} zNq2{wnF4xup?>R}yO8BB*MJ^QzeX#O8jbPo%9t3Jy5qvyK3xF^@kidLRl-GdbeXXw zCdAa#Jp8gjE`MdjRB`gpFb?#lQV1L2inERsURzik9%CA%I;04t;;#h!zmQbuGFHSn z=UnYg$}c7juu^v!o{bEAMXhgaEXk^@)E#b^%MD^aDz_VQ$gU!+j8Yqz398zmwsrC_ zfag&tH^_vSyKIJQj&8~}!?iTUTIT#FeC4j**c-MpuMj9T7A8dw6RlF2OMS4b^br7U zC}O~NUV<5g5`yMJt;AO&XM~{?5R$Hvz>H4RD~zzjWp7@bXFQwd>(gPv2Lt!!lS;m+V|QI#nM-6smqH8FUK~68`#V+O&^_ z`Q^Ai8V|7VAW{+1E>aTG0uni?f^0!%O=eBDotP|}Y#R+aZ3;~ats0F6ZBYo-0WAh? zDorY_`g&bgVxMGPiq(jRO};zvXpzQ(X<-zmsC52rw)(C7Xo)kEF_SZs^&E=@u5$=Y zrH|#frX_9V!}PsmXEIC22C0Yf>AW?qt*`NrCgq04Kxc{r{Z-yk-c#O}d0-o(FX3%y zZ)h=fnY_`~AM%uunMI`K9V2&gp8VpmSYXqG#y=$KAJ~1g+qYY;v0maiM0bI0-`?W6 zyB(vRMycw08^0sBR0*Mdy=vtIIXuaof$JqNTVcIT+WRT{X=LXV9gr&uWwiZ*jxch{F1jv6u7I z{ALCt<|t`an|pT*JzVbLRNfY(fgdDFT1l1=`)5v@+F=E3ao>I+J>Zme-I}m}JSfQu z%yHj4hv#N$frhIK<3DQ$+&=rtr{MCMpb`3oq%5qC`Vj0Iaa2qHjI0E$E>^S#^)-KJ zdDS2(uS|wCB=oBhudO+ufgvQJDxNI(ZAmkZg5h!0@!e=R@@uUCsQ4K9L21LRr0bHo z#d`e@`82qC{jQaYF!65-#F_0wE;~}Rj-rI*`lyW2^0f@40%Wyrb8h`MX96o)$XZQn zV9>xm1(4V1hgi>)1YAv#EPQ>Xk5mwcRzQt%9|I}otG$4^-`#-5M2{X?5+>UgUy#$O zP~p$ICmuu-zy5`3cw6G*bar0e>fI9c^mf_&F~hf~3MF&bQsi?O*?B(`e8MJ)ORzTw zfcv3fZmgpcjPnf{NpfnQP=*KX+Rc$>b4n)8Js?rBX(rDE3+TcZGeTwV!bOP1Dr3WR z&Z@y7aJ0|~Z98D$f<-KRx@viG;VfdMKXM8dH{=r4@fy>A zTU1h67e)$-vbMxPVTlwS?RqD1w$}^XtUw@2=r(PtWl22a?o%L`{vCd-Gl|m20ZGuR z&dF}C55yT8UG5%c_n!wM2h<%0ydNCLUAV7K@lRsh4E3;L*on)TPs9@YQ=> z9V299=`K)74l!U8QOs3yuMkqIZ84@V9HlJq|Hclyyg7Qhkf=I8B`qHj+q)_09W?X) z&Jvtml_DsxlOj7y&|jJd@nobkQ(D@2dQ%U8V_g%q)Ge&{QbdCI4Sc@eD8s0^2Lk54 zdc`I$tI-n|TD^80wEup`GVUxh2J!+^aAb-yQsU4R{6XjxTS6=wk3&OeIPR=%8h<2>+S9UB5JmYgir^CM4#s+FZOq-77V)lnVAYe+(HCAxaq%|_3Efsk12}?d z{50tkW5Wt+nzn5l@>VS52`VC`d8JB$YUQ&UiqeR!mFVgApJ|tnOm90v1 zNHPZ9(LE5)FGGdLFGHr-@*K8dWly<33X!m(9h2kh(m<=P1!J=9%610z6k$K|YkOBrT`2w?RAUn29t-i=X=W!nmh?rV~h<~AOd zqiX2!y>@o@pjcIF*B5o!y?uI^*yiih29oMfX|L3bpLg_Tip(2=WRBtTWhV|3Ph1n1 zOZ(p)4rUr{oMmp_ZM6^A?#{0mlWBNwwo0;X?shdC^Kj!&8g$yck-8SY2-g&8a2<;V zH1a+R1;Cb}EzVGy7Zxhc391#SHI;Fzte3*6#{agr;MN&GcoyS zsTNREmq}g>4VIT?kId5zS?4O_2DQ_{&P|mZ|G9MvRjFgw*0R+29+B7=CIWd$M5}CC z&QdR2OOJc7k3Q*l8!^h*uTa-qXRI{SnKX9yHgdokwkHWqJ3ZA(7FDamT{&e|7x#NF z@(t`vi*xT(Kf1@L{rfeAW!J9n4W&X!2_ zi}k)720#e0m!gR{=8w3;R^qAOW*c4fACv*l4>}Io+nFmobh&vTLt_d-M9qkEs7-ek zAW9FYkvT-h2*<3|+$qWMq|v|Z@!M`9N3fYqo+eoNHSv>x2Lk4n~c7S29z5 z%EMT!wYc&`F*L%MSP^O8O!huss0?p(x=6UXuxP&V)}l_64${VyK~70U=6uh#BIcxI zHsT>$C0r$lo2jr?eKehLvnjgSz`2jCOsxo57p(c>fXy$iHt`zU-V3RKTbTdw`7C48 zm_7wPjnBY1rL$z)bPhA4jf_kJqgh=CE&WVla`G0VN@`ogeDXp9EuEIiyw;knbRqVGXLUx0+DKh53sMw#6 z7Vewh$UlNw%hKqM9m43DHyx}~{i>89S)cmSF$#CVtMy0Ne=u5*Zt?Pk3A#N+K@vC|fdr@2%NjVUrl1oE@)hnt-=HjVq#+E6w$X$1 z7L&dtyDKH*=sjTv?d9^?w&3{%x{X+RQ_Q4eI0`En%aO2qmIa_p^!hUA)en7*l&6{+ z6B+gVA`Od<4&$*^GjsFU!alwB0&5L10xoL-&Ola0QOd;gidv6inSTABT&_C5s=8Zj z?}*0+Hq@jLvr-|wmHO&)Y-qv?ZLL3;Bd-TuuOgW%7R*o;dnJMPa?N$bb&ch89r+~Q z_E2t9a=-FYKA&TQ^cpCWfW77j3#X$YK(J|KZxten{R=l$sN% z%`{j;xww?Mu&nRk*XYm4DJVD}_t+@fH6+6>39XVdf4!hxa8h0qPD4#nLu1k0={Z)& z4?C1~pLF9Crr7SOE8K8{-uOrPH_$CxIGDkN(K?ASR@&Hul{CBuE~%tiM8#Y*iIrkL zf;ZX4Q~g^eoUtVn3Ce^+g0Ph*FqNlejAkTpMUcuRE8!aj=J%SgKHVyqowWR_91-fG zHrKFSxDmH8sG^O`_w{zHkl?B~^rCPAGnHYCfq75LFD>~q(UzLcpHwk4V2 z;ftTKfAF4>UOw-MmECIAw)L;gKP#V%R76}BbpYt=C#*n)bL9J?y zA`)B3^H;Yo578vKuk7sGVr+KO{UPh8Y*L7dcG>DgmS14Aj>EiYV6Fz2#>q8kxHtWI zYkQoj6Hj9o3RU5#byI)7aJq}m5A4T-@`xgLGYUQF3ha*FJKZ*wh9Su>^lDq5gOI+T zi4uelInZiea6HIEjlalGQGxR6*1M5FWWW#w3F|$XyZ*cr%H)?dcUuaxQ3TS%F~=I{ zuY~;5q=CANIR&I!Q8QAOwNJTk{Yjn;Ck!e$l=FijAAN&MR-Qw75NohENyRg$ny^Ba zXP6_q$~UlUQnNTa;~72FgSKR5l5vI(_&?4ry)O_B6V;6u4NcltBFwXj{*)_|FjCAf zIUkK^;=Nevc^haZX($*#LzG6ngTBB@IkSdkQGZv0Z&D^L=*<`{w@(|OWyLcgR{w+zdJUWWwEzQ-?)cvRvnq;C>i1Sl=c_ zR2{Ho^fmw~`;d*Nzt&G<=@LfILT&9GXvw_b;?&eUy}~(PoY`TKm$!zmnX}z9naB9y{Ol@*4i90C zo3VQB*IcUfGH#0tZM3V9PD9D+FWL)Ru5wFDu84&PYv8n2jPyCoERC7YV!dWsE{leu zU_tEl@V(nZSQajnjp_v!2MsSb5#Cbf2H{coT|aB>SJRb&zoQCCM*8T=PQi?=eB3MOEPbb*sc%dx)bHW-V1GTzz6IsQ4{`ULaC&b$39-66kK zCmwfLDg_?o%mqFoD~@b&Pxn&bpM$57vm2mZM2rDO2>A~x5-TlOa?8NXP~?TU$;N~$V98K*VKdLbV*peZq7v{;nV1Z0ty*4Yk z<0LV&Y@fYS=>0<$i`4v@XU_bz&{;{r*5n*Qg4TTbhu(VjgI}vF!1bKQbezL+e3Sz! z4|-ai=HtE8FxH56uBW!rpyRDA+mt|!`6;|yRUoSQUIZvf&Y3Pzx+@f%p_-lgYtXCi zdt3H+2EhJ7*CAfnd{W%Le*mo6_NBko|*siGDDIHf`gZ0u8K$~-bBY<9y-I;!;Jy% zrP!221Bnz{2$Z+iZLK|E<%58`**m`*?zvNKz-^sG!Vr4mL?WqR6tbq50j-AaY3D5W z3`YLkiV2ix#~9q?WfVreNwU4kUnvEXtjU2l;f7b9A78TTou@?Nd=PZay zy;kdfrQG*7Umac*l0s`jVI4= z?y+8xzjR5u)<_Urcd4FGBnrfTK}lCu2-(9MS~7d7@WA&;z1KOa;i{>qfkYC(P(j9> zA)0J-+MHAd+lqM`d3^B;Ih zma_@3TH+XrFL>dnrSx+Wc8O5X&FR5up#lVcGE?|g(6uuw(N;bWPO3z>p;gGUdeBJ? zCzDS^{75+Hwyzn@f{}s}o*{0;$hWZexl-&pAGL!Skv`wvHW8E?pfzh73N@N63N7l6 zOQ@Plhi6{l;j0v<7I#iUZ-E|%StGwna%K%F3H3szZ~zxav4dl z@A<$$+kG=TQa3qR9GsDKk$T+1tIxPmSg`@htoP<$_S<|v)Z106R)hny)K&Q8u-(1OMT&a34 zU7kp?Du0J&ee|ztvD|D`-EhmKGZqxiI3&&*y`4En(A1;!zqN=u2vsX_$Og*ZGDH0G zt*k!CNVQD6mq1aVB;|}pp-zCppwvc&Q|)i)-fm3Dh#~8CC~Am5)wbi-4mFvU3H06y zH#jc2EC4*oKZaf=0)CeNk-%Ki-+^|&;dB7$azR@3E!S615v5Y?k{~n*D>12EG{T6> zY|bvX3&oW;A_h1^PMVNbvlfdrdlA`mce89pm~E8no0V~jt46<^S27%d>id!t$u<$a z|E!pU5zFa!wIJ{?x$|?#FOUskl<(aZH;0G&V%pxcpVKzFyB!$Cw8ru~trY%x`;Xd=Rn=|V zh*~I7KF)~O#$emmz-JKWl&{~R7^hsJeMn>Y5Z9>)^$6SLVwksFxeqg0UncBLqT;_= z9(AKq6O>|%+t4o~3KbwjN6*Ih_F5liR-{JC!p`_}2EYzwn>96f@`Zgf5)YWdX z3E?tdy9AsRgoo2J2MK;df4^Oy=-|REIj&A$JMWAY%U%~(;S5lOjRBWTK*z^C3G<_6mE1hD-OmSgzV3m!}UBW(y%t&@7dkC48@!lLRqsCE zYTz6twOC_F%bN?n&MNf-2|^VB>oC*5Jous2K)4)8dgCHd^^^&rvb)fg`?~Y|b;_zN zG1GW*G)V^{{ruzU(|9`@c#cz1iL$^u= zJJt`ANWgM{S_6^~ZEs~eoA?zD5;ZHxr2Cn3SwQErf{2=aA zYQw6Ryvepg>FShaF-SUMlh-85K7SClX1q-nBZZulw`LBH7_uZ8lP>B$*(yKt+?r+k z-67JfL&|Mtp3c2Z{o5Sl_;vAsFzI&HEt6BsIFz%onfq2`$?Q)Zuj>wZU^YdIJ?RYj zp^|YWS~?KS*wQ9aF>*Lz&LZ6=Lz3{p>i46zv0>T{RRN>WY?4D@K0&iS;86)S3ZmO* z{Uh*$l&|gBXHD)oJ0hoPoS#S|y}gh_C!Iw%pvaci>&}B|7V(VX(e(8}zcx2FmoD#A zn4BL<3v|pYLFA=f*B6y9u{uT?Mxz7&C#62e9f?QY;Iy4ydE4=zNlq@4`0x22jZ^)5 zWP^FnU8Vh9dE&O-O*@-vvfsqGu7$$lxj{-1f;g{NRkRAk$YY}H9}W#Pt{T4(KM5%2 z_z6U051YWj5PRhMai-IdNhc*sIx}> z3hUpX5SWzmiM@N?LU%!_=nikohtz?NT=ktvy7Ygp-nU9B6wp#ZzYgAxv2(6xkp4W+EihAVir&5EyGl0xxR$kpWaid!+C#c1L_vd zhKUeg;KwMV)tQuiSo__20#z2&ZV`GMHV$jc0usy&3f)tOK&yVu4SLan7CNG=JTMRc zPt5l4bU8R&A5_V?u)@nR|3*efTlJ!m1ZJejx+W9I@S1-fR6-6iB#HvRC%0KkQned= zIvn#F@h-BE09X8WTL!R7M#^8I2%Xne#7{(9v>~+RMax`Hh+_Jp?DWqdlZOuQ_#G9Y z7ZSI!Q5_i!L}y@#^5i924o8ujNFVnPR#YLSKT+O-?c__YGMn%yQc(zY>M_h47dl^V zQTM4`jM;c{w$Jc=YhyeyjYvOvrY_kH|m6%d@78*g8glD zh>ITA()xL<(K-fZi*$8rbp%w#1IPrmfAW_SW)|r&`LbD33jb=|6cW7v3wbwdZ>+Pk z`~a!m;L4pDe{%}zz`00`+IN8<+;CJ1ZZ8=gg%n+`U>Nq_Z5(X_Mh0nJFBL7^pu{*m0LU`h-AyW*-UpQooAw0^j9SKW?c1FU%T%+#B{{Zf zmbyXU4D9b%MN@*qW?fTBHI?PkGPhV9bNZ9gK(8WyfL;NsO@ca%n%iO|-$7qb8ofX*Xx@F%Hxos78R8~5a~M+}-q4(( zgeEbvwV(2}ha;JGRa3G`>M+ZNI|#Xc6q8zf8CaW`M?pQQs2&?- zXom4CsPri;;%Mq%_>=Y&X$ylg`)01ONs4_fOF$W%#U_qZ0f>IR3GHew94^8;hL+S3 z;arqjro^Iw>j4$w(B24#PAbExOw7T4r(!F!sMxYeZl|zax=S@cp?RVN4 z5~WgCII67X80E#!btQ!RgOqsa+ZLv-zf?Ntrp{*rFp4JAax1gw{zJ-b3|2zTYS(v< zJ6JMlRWw=h4G71j)j?*R=Sl;J)s84al^8NFR_Di+TY`QChfaa%)G!x-5%$&>^AK{x zs?nfS;oo5{Gro6xiIWjpkE$Mge~7b`{n;ISplCEvmFs2+H8!>GO-F2ZWPC9-F^^lA zE$MVOpX8z%`Tm;An(FwIRA)JtByTI)T?&Xj)A@``d+=`NS<T_$7P1b$jg~^J?5<|J~(&pvHF8uB#eqnRoU+l2wx`KE2nwnYRaocwBZo?iurj z#vNGL)@JJBV)7ee?LePshBrNxx}umpJ+%fXU;3TyV}_~5k)tFlr`mh=>Q!S2jcZh=KWtw_ly$}IoyLCLkV8$2iR~ZP;h}#Auw+kQyeY zBF|-79-cF|aAe#o<15zvx7I6&_n$9MChriwfY20OAuf@hxJ0B`%&4Qsa{x$*7XOfp zno=*pl``o7iuE!Y^(7-}t>(?DB_GsLy`Y!~e zt@p|6a$ov2tg8p>&rYC0XyPc#lR<`XW!o) zq(_?O6FCg~@IHCO{jT^;>B`|%z78x97D3`ExU%nN)1`{4+1n{NW!I}w;S{ja+4AGR zB=~m0-CYW6_;~B>CB^NPN{O z$nprKfpEcQaNjfX3AIHHt$!b@o{GFFg3AMo-CnMIM5>_Hx^!l-+J3cjsMGVOW0YeFmpK>Z`}vLHHLE? zS+N(D{Yy3aefg(rNAeH-vcW6XBK@}L>hS3AM5X|{Xce{K@1bsH;GQE9ZD(heJ7r9Z z7ipu5_k9ibGTLx{sfdGtx^S`nIA7KX8*@wr%i5uc5P*0X?)vwj`+gM-(JS7;M8S-~ zqVQvQhVa&r90O-s$oJ6ahmWHSc5o{Dv1)B)yT^e9$T=_D7%7-wsa5C$`k6*Ko^bO| zdjs`BO;8-)YvMPAv$_|yX3O&S?vB_NDlO8LW@4oHp9H*vX2YGmxV@a&is8bhoZ}@G z*$r0jgnH02Y*~x0-be4sT9V%6jk>V4Efji%0HSq5MAr>frmWC?0vw-JB!uVlDIyjgWgJY~=M4%+%_2E8O`3P7?)LNWvuZ zCz5cH)#j?l6bDRLbJ0%0QN+RPwPC$Z(Pf;@L~2YC7Nxw*7ZmS1|AM`V@A&s(nvmhn zi z7dDa)ir%z4OXkOuz3*T~`RfkZpS(fIClNu8u!xdh`Q9OBVa-qW=7z7Gk13L0W^-vT z*n!q}S}fvLFi5l{Pfibu!bgFD?Ki^o4j@S_ZEHX_qTlF3AhEN_17uM)sE_O41wSm= znM04$3-KP?LSs7!1lA0FjMqi(GIgr54IXq+t6u%BiYJAyWNnsHRn2p(eE+NFyVD#fO*e zkbppO))0%WtAUZTDwF%7V_DKCe3_mkNT)?Xz;B^~#5x~}8Kf&S^WSb&wLE+r+;Nf= zgDuZ#aFTVQFPcfLwo)KsHm<)!=|!{TX*2o$6o%K}^L)y*GO=u&g?t+}Zb2ZzV_L6> zGj!QX$%wZ6I`aIkoKLxS6?kJbCyQL^_$6sqI5c?L;UjXP+o+KI zC%FtWdG&hO_OFj0e2!r}r0?O6O!PXu6^%ttuGIWn=fRE?8t6_Ap$&mF8iVpRvl7SL zci?y5`|?&$Q*uh=;E8AS;s{G~V#*=(h^8%%>IB)xS^hxQ>N5_CgW@|9@PfevwR3F& z*^|;HewAtJ{g?>u;L%}HU$Or9D+AJ$iUw z{~7gyE=8=e(&Z>A){C90Yvy??6)hJ*Do>Mgvci2EWF}Vbbxcq#cf}$gD#KAf{hBHU>j(Zy;Lk z>y8(Yo26?6b{)dOpz8xrn1s4B@!Kfzdur0D8P;+ka;u)o-B5!2gB`T>n2>76T_MaST0}2Phr&kVW6++M ziFM&q7P}mabYatd_idVbZ|o?iQCKwsr)G|kULW3RQloDLu}oUYAMIL-${13$v2(ARa|d)e6q$) zgsl3J>fDtmKp~+G;LqBaRzG`)Tp;x{Y7gpz3b%S!dG|_R*a5X}xjuMPw^o(rl`=#o zqpEM1oRckTJ&^}PxJWm|el=BL3Jf9ZXp5=|M9VKW6;SXiBUE~qz_Dk+91Lf$+|7ve zMQlpi9L^!Z4E`ug6!;Yg2)R)LFb~Ue)fn*rCbQgc;3X??Ha5;_c* zboR2LNI^KPvG*Rd`@tI?88VwFNy&&^du}@(%h@B5{$2D3wH4C^=}<7NNbDH-vk|ya+=wm}ecSz4RWF#n>=^%f`x!1y0eM89(JQvLlA2?w{S}!2 zmC!d?92wy|LKka_!8Z35uD_sl6yhvRl!OSKXk=a~~N@Pf6gY?25Hl#2W<;zC}HRodRm)P&CtBY>Sh3ZzU1^WAGB2@G#y2P{F z`kGw|^sX9kak{zZWu+aZlcjysE6};}%|@F_i>~x;>C&j!>;W-=#Kh$j$=9Qj>69C} ziY?uO;=*aiQlrm()GYJEr1OXdW3@fi8f#mvt`{_mJhGn?teZKF&EmkjzJ_TKjH{Ps zh{oIaETUISD6D6cNUMAseOjv%5xFNfjyjMC;9Ai-3QbB#O6AEqzIz|r_>P(CQeF67 z^HoiW?LD(K{F#kNf;)|ph(_eDcK7!4+sjmaX&jc;C~CTctjL7a;A$e|0V5un#NV|{a-W*RXfW&KJ0ZM5pEUa}+x;LiB}L*P*n+A-#HzSj+x2@8<`%ne5= zRzv5`e@b#Ry+zIaQu>Y?kwei8e7I4HJy`-5IvTc=pP=ekDTs@>_)q8{MY*zwH z+t6HzIQmfrB<8tPGAda!R>=F3Mbk{uWmz+A^U~9%=d3g(#m?5h^UbODPn820MZfoM zqADNt3eiijYA%pBOKC0egEVUY0|AT6c9IHd|TG^#&2dR5D$Te3jb~ttjy*?QK z+B-X+C;$lY<*m3jCV4RgYbdh_j5%UcVGGOzz(SmWd$q@iN@{zEy+>}%bbq(Pgt=-$ zY{kJ2%?YXW%%dVWk;g$p%Wl0$%lYZ&F(;A|^D& zoklw4=X=xHew05!fx&?-P-XH_7gMl*xq6}U8~<^+{(H)ERW(Z3B2izSQ8Xxzh*`pA zbO4Vp$+8?eH9v0RPPJ2mdGyhmaZJ8eWOfN7?limYz%k(NE@MU@))i5mpHAWLC+y`nlR*F5b*`EARTdrQ4d+ z5o`ZdvW5}dJ=W*F`s5Y8bGN4OAM!t%?)Gj+FrTj@UzqS+>+2tZ$fOCg&P>0Cj;?#R zado^brON2_x`3fHn4_w|GV%H_>qHaCPET#01ENgY-|Re{iH|(F%^28pMw~yah%n;^ zn2j`9)=WJndwFfYfNQ77RN(5YeNo$K9eH9na2)5e|FQBkAuDT##(}`GarD}J^TF z^VZ_sN(Uq*s+NQW_w4l4vd6M{HG5`ZlG|(fh`D`JMjBU`32iDwp*kX$uB@DrM5W|% zOH%JL)CD*stVslemNe{K$xoER*~<-33n)ME7pV&LQ<@6)6DR+yI_Rh$*?B7s8E*C%pX_k>u6u~(S`KosSSx<6uNm#77#3sjv`{8Ug`uO*Odh@v(Zm4Az zXLaX75^`Rb;Rx=?O><(@)%c`aMZ?XLZ1qhQ;Tkq|doDeEtPs6-722#WWVEqh@CbcU z{6yl1`;+Bff;PO#u)velXqXRagJ7oa)8=sYZ+W?LZOx}~80Q}l<$+VzPh{5wei8V= zWNGVHNor$uQ}+r26sy>%pPMw4Z@vUp6fjGdVUCzgkfqUt3M*aB&K?QlO3y86|DI_w zO3E0C=i0w+w92XxL!%LkqB&i>xYh)Orhju|ko;We7P2|0FGQwR6NPmqP$eQiDSD&6 z_Rj4UL5qk5A(W)|s<9wKaPrQrt4*OTO%dyeK>GRb7`Ey%j=ZiMQ{yup&{vJ0=$I$SJIA%(9#<&RV0pPD&Rhhv(qSoHyL8x=DiK(IL z@~e8x}jBaJrqQ;CP-7m=B*XDo3&PPEO3I z`aC7y!)9BFg4i4Epe?GhudjiEO8{;)8eZu>UP39TInl6-S&@?!a9#B5D zwuSQDwXfYxttvmPE_FS2`pK)U&f_~u6OgG-qCl~x$5XD#(3RSQXK3g=t(V_t7W!Bw zY<=yqb~Hm-knRS6;%v4~#_5KoQ6Zl}b6f!_Zr(iMvrO4#s~R6G01gI>C%O!amHA!U z{upK0B4v9IlC|weWap6|wXj5@R5E!&r(5A5kf;RI5CxLJ&OTA z)LL1Rh&FbZ&R5UOitFD$H8Ak$)+V%Yl~SwJ54GXH$CMwYJ_nfo(g!Qb@7 zv;x9F5tSJUi!9EQ8wW_>=WnoObBHqc98cBwIAZLQ=|!RP!JAbep4zZ-%Q#dWtLzB2 z!UJz?pU$f8u}|n(b%$l0GuQYC%C!d?0Bmi8N$7Y6*wzvOtWNc_ck_obeqCi!rYizhV|c z-y`MtWof|Z%E)zRXaBkWNuPe?ih{7Zb%7JEDL_FoF8K7^mGL}{JaH_K z{6dO5wlN`RoScAak>7$0R5w7<3*%(_(6#5cj-?G9c#mH=E2Cnwg;jg0=$J5H{I6zW z>2yV|(F+q(a1;!^H*-H<7tTPp@II+$SVIEyg*-h$Yp?<9YbHN-m}*g%Sp+`BD$}~l z=)QUG*M@oE>NvdALK5&iMvoC6Kh;hXeBI{SONZ zzvjHnU#U$^(3bHvOJDX9(#m{iz6wh!{0c==P-reF=cOdY6d3hbpJZb2{!qs(R{ovu zr!8oj{~bnWP*Nc@eoBuy>gE~yShp7%cR_)9Hz=?F49@657rv!=8pRj6 z9p>ed1-}c6&juv@HZv!d2UKHW0jR;Rjlu#0p4Dti^RN)R?8)grvgaJMV~FtQsI+6< zuYx={R~_!MQa8d0AMHtKA%@R^NoYslb)^NQ+Y}^FEEU8_fwZ(0$?t*`t(FAvS{=SK zME;2t!cs!&OTdgI{r08#!UFTWRkVI{T&!@~q5^{tYbd*AkekSQy@hFJ1&bE!qR7Uq zj3m*!;yqMw#}(5$=D?=20CwxHx2Lou(YGg^jQVb`@H5X(c~n*#-R9U-w&=CYR3G&0 zXTp1DDw+Pw9xOmy;&F=faaWSS`Lxt@1VRDo-2l^WNj(?IN!c>~@Zg{pVG~^WN2G`;Fr%J?)n@sS#MIc4S9W zuNw~aqpH2gu~p8~wd*ij!iIJZs0-IjO}%w>ZQVs}U7e-kwGztOnVd>*mJaq41;>gY;g?oZut;wXG$E z$N6pC>xZpnR$Cvzw)AJ1yDxX#t?zVG5;Q$Y$p%fv+cdw2pgs=l_`G_*cpZ?~L$*gt z(spU%GlZOI{5)d1)PUcQ*qWun>%x(y?YdwA_<$q{+|40TK9&#*YEsG0cCWI2u|T+N z*Lr|_PYQUzY0d6$D`_(dZ-_c_)n8});R7!O%cB)YD!1t{V6aXVIO9`v;o6g7{56;~ zMYJx{@4@|bpEHYT_L%Iv5~jsiozEY8SOB2hu_2Pty|e0TEN}gFxtJW=&a2^}1o>gl z=JlN6(HrCbjp7G=kpPpVFaxmP?t=9)Wv(H*n{Cd);+^}oJ@?KU^}!f-eM(&QzO~Np z#S3QQf*a2We^h1UcIzeVzMeCSlL+)<&b{^NNx@C*rWxiXd&bTc`oR>bAzM9 z9Ev6!t{?q^y^^iR2YR9u<|6~rv~FT#*=#mRc6*6E(!fg+8=I;l)N~8({H}r)!p46a z(nce5E{*3d|3S@e{LD_IqH>!X--e~=?k*zeBwSMulA%@B07u>t22e3jyVWy+ZkrzK z-Pl3xMuVNgI7NY|irXhozZt;!@b%#u!=VEM`JDO1Lhru*XBKVG1#C+FWcfhou56{K zfzAz9ec7A9#oAA;M&yi#=_Brb2Gs9jTRc8u-0j%WCK3VR2s5+K@b5YAc~g}}8RI+E zrZ!#Jfsth~usJT#TeoxtCD{f!juL z=}nI1$>)on*Zi!I)q7F1gUFAK#&h~(CHleu%~nC{?pIMFI6l`MxeCbeH4h60<1AlN z`6pz=I0Lt}Kx4#JhsPC2hWxDnP1d5hD9Mipt)&q?BpetHCJd}_jAWM;O#iZB44f6- z#|_XYWJ!b`?b_wj9wxu*7X5KhHxZn2>}e15SGes}hGMGF$B*Pn0nevvD!QuQ3P(N= zd@e^ojd)a9^HtS7VN*Z@eQoHbqX$Az#w%|!TiqthSmV%cL3pRPi_*wO53wQNYzS$FsJ497wxgh?IHcDo3x3lqD7H5okU&2Pq3%`Q9Y8Te3zZ- zm>m>O&86+upwoMY#)9dAs`OmpU_B;#bjRaX7G-;rEC_RV4*t8tSFMa~uA$|N^|?mA z*K%`X14-PlDu6Vr8&T|z{wzZ5Y(e*w?ot=^z2%u7bmu%!=wm9xdPur{WT2Yu=N~Za2>96dnHK#ORM)-b6B_imZ7P zqvU>=yEWcus@hp3D?>axQ<+kLkz+&W^Px{kLyLTS+fN9Yu(XBtv$I%Eyg-3SE|v(P z_YFu#?3~(|z-fUve!fji|2VKXJfchJy#60<6~Wn(DM}DhB%v5dNb&M=Ax0&vbxJ$D z))5U+M)YiSb{>JTj%nO3)I6EJIQp`lFUE%s%Zpwg1uAuyG+t6Z zu4;Z>!rRpA%@sw&V^Mt>yh%GqEcvdDaEhJ73rZQQu+Z;iR$`M9} z#p*a&na_jzIYI}Taw`a$^oG7peGI|_4}0 zAJx9esHD+}!*j^kw5SvboXldU{mv6qoa;qnvH4Rffx*|kmu!!~cF#?J`(=(Pm}BW& zD;x`r)~wlbt3oLycy3i#jRP+G%kIJzR&7#^g&IUhM!%Q~#}ZK? zKPq*SZC98~1Zrv2;YutlOx%2Rp&shx<^9!!IY7OiSUJ~=2}kweGJ_++95ga&4sE=9 z;k4Ecet1f0zw0!>s*#Ah0p&CpZo`;rQo8s zXDIaR{n--_#(UA#`e9~Pv{^GmoWHUa$Bk6Kd+_^|ZgZkd9@ioG8o%iwT64DST5eL+ zhyF!9{vGmcm#wQu5XB7%&PV1aN~PSeHI4Y|_Q#h1X!Z*jV;i8OlY_B=^hi1(tODEUulu91Veos+G@ClB|tE&E9_C!iPmi)e0Z1EdwSwE}*=@i+1Mlb9>u zXk={TM8MAa30r4iWoGyry8E|@k(G&#ft`tk1BPDdlP9c7z{*a?{z=(o`5Yx=U?*;D zZu&`$pu@G=@u+jlInAli8QOAGz{K@e(W+Y(!n|=L1;NQQ{*8hjz ze~tLBYJ$JR@<|UCG;lQjYqI}Cyppq_le^t#P=q9e|LUOp*B_XVAD<&Z zF9G}vi@B5g-)1HEPtLiugpG+U0XH|jqOqy@=R&v>PzZc3gE1uxy_^Hk*unghVoveT zuur3svz?vQC*l6n0l=pQdNl$q0D%@83*b`(fPnGym67!mivCHgXVCeK1;Hm#o{5E- z4gmNx5HK(kXtA=g(y{#A`cFp!rcX{aGY2bxx&Mj8rx^BsRQw&M z{{%tjv+F17`xBu3uL!ZQF#cP~zt#UA1}4BiJy@9kaqGXG82_ajK)}NExBUOcn4OvF zuW0_aD+?pwUvd2(8-Rf6U)`AhBcF+Z@l(owhcUDK6VU&LmId&i)%us)I-eOYtoCae+vJ1mj7RQ){M-&yafNQ2yPiVaVt>)1c*Tw?l5#M=#jq5F33jHM%#UO)h_s* z-HW6eu{mv*XXqF!WKwziAE~xM_Tu+*xr`pahKf#%zY$y4DZmH4?~_czYS$5J%NOji zmpvxw7)fkzd0>eiQqA1|qM(pze?12@htk!Tc67o@@Me4|8cU>Wf2doy8(Y>p?2Jf= zt^Nh0nSE4Ibs+=A9J*Mo_(LyxW}0atUu9hHZ%&X zKV?d#iT8_Yexslyz9!Q=Y<$MW98i_gY`&-=!Wm)ybi`opT@IL||dtItFms6k*1%pCzFM2jl@ z;c(;o1zO;!k4VVJ)bKbeEZ)<03U00#p1|OIYo4P}@?;l0QJ}S5vg1>!dnP;k3!ETb zqpAyyZk0< zt`2qo{=YU<|cZ07$`AoWvDDWL7hXD}IuuIQRJsN$F1L_57ZIEY1z7VmT8c>|d z7eZ!dn+wnlDvU94N?}Im7@`p}%Jt^E&6M?+6z;@U51eN-mFMZq1Ze_^1TpX>1-SuT z1~tppnDoKzl*ZWUq==c2mo^j4T&>=sUz&)?WXi|Lj-=5>*{k6(qe(cpG}$G$&9%C| zyktISVh-X7QGV?ahqWH^La7tt!%yJi2&_(Nm?XKc*{W;`jz#Z(6$BvojN=MR(!sEY z9ZRrs!aAOlE%n%f{svB6qFw_$pyzdm(iAvn{vQB%K!?AKCPRG{#pEFB09t6EJ`KMG zGPni#aoVg=-%EJ@YV1f$;>OUorC* zwzCMo3G+M->pw)-Ed#8Zu6cA#bpCWs{}Nzs{|NZ4;h}H9*WZ}iw?LlPH(?nAL?OW}Gg(7KB`IQ&PTgAQn4LqT{8rNR0rt*DF~;NKeFHZsqADiZ*=$N+SP`vNd_ zDfc+a206-OqbLXHJw(jNPH6-@jIa-*2{50@Kra`_#725Ay9~_)-o@$oAPcF`rUt;E z6~Cu4I!Y`0T%iZe0lrSA{1X9yPceXc7;6c@LUul~GFM<8KzBMP+!Mb9{P-9jL|Onn z+l*oWZLnSkm1BT5xW7WoM&sq@057g#09pRN0dx+dAj{eaQ2N6f4*;|PbW(behp`** zI{+Bq5r9(wx3X^`1L#pZm02n`R6ePUQ278k(6QNQHk~_N1C?I{`zI?rokgM3jr8O2n_sSc0G{~(kjbiGu*uHok4Kg#$Y?v?d38&%Oc zQrgIE{{tSK(?4O*ZK_`hJp5-mXQ1InBlxosJe0s713h$2l*Yr;;Mz{@0o6$WH?<2? zH@}G)l)&U3S!a`}Ui>2ldUkNbV5@!xb=01Kp8O-GwndiRf54;k9mUl4Q2nPEXk0RK z?U(f#Wc_~?%XSNF$0+|tWn&bRt*CL7PgEDFK8?(EGRPYXbIYXd)aG(O9X`vi89vJ_ z0~{Sb%e4)^NilwN_x;U>@BZBYQ7LHqW9B!<^zzoIBH`4fI|39pjR_$rgd<=lbM9n%zJ2t+^$aa zVZMu+I@qc|qVeP+l-~gScetiwegW5KQII8I?`{Pj z_2%%Way`8VFs+mAtP18k1!c)HO?fw}+aOoML&IMRzlHT{z>n0y+M}>`0z9O&`U+@8 z=|%4?9e$mTC7QvnHli$`N0@?q&nUe{=t%FEX$8-d{S%DIT^ga40An|RH=mFEViojH zM@Rrnp9TGE#gCvJ4WA$JQ4^WvU^m`F29SBRtYZSu*9<&pK?VxU2GEBu!Dc*x)N&oQ z{RwQ7{l$3jMIcjr3dj=pCb`W7^O%JU6xh7szp-(790M~BmGff(!~EoXhag^{&u*4& zcXz@sQlA6#SO;?YDBQ1xzH|=MZqfOC4tD<~B#p}SKjKjt=fM_HdqnLw&IY@I&;syH z+nDbRe@g8)$h3y~D4@5OkD=>;Z}Y`4tos*e7TCWouz!;Q+5l#P&u9ewyW=15?G%K! z@KWv!Isv##T35T_J6nj{|S({ z!DgUQfc4x$fxLreQ=k#0@EHyQI7czGpBRB2fGp@YSwwg{1&GBYhz+j*tOD6S4G;#{ z3P9r}FVr`W`cB}-8L&0fhm8lA2{4^ohF+0F%0xtJqOm4ONHUT`&e1RxkA|J!{6Qnb za=aialq$7GtCREwqseTs+LDs(DXD1=rz_p<@%sE3nOWI6xp{$LeyE_Zs5o2_88fzY zTv>UvqOz*Grnatr{Dg*ylO{JdO_@4vdh?8#EwNdxv)kI|babM*^X4yDxM=Z`rOTGD zSh=dJd-a;N>(*blVdJLjH*dLNYtOdrH}2T^on1HW-m|y&=6&Do+keY}TMr((?e;tF z{N7!M@4n~Ay+`l6|N9Rdd+-MjJ^aWIAAPL<_=%H`Kk?*K1E)?u{mhS^eeTTjKmN%J zKYj6~pS}Fbt3Ut6YpZ@%^RJMX^t>-W!n@ZtFjh-JTqm7a!tg@!a|5%7>1FO^USrj4BRiX&!|qSpnf52A*_q}{clw+`XMuB!v(#DUtafg7 z-tRo-e8k1Mj4q2S-Q{!Tx!PR^T@R*{bUs~|Zb&z$C#O5oGt;xv>(e{a7r2RAa=W|` zpnBC_$!qf3yeVFfH^*D(E%h$<_IP)AZ}Rqf4|wnOKH@#$J?(wQ`-1mX@9W<8yr1|= zeNkVfufsRbx6rrjD>6JxvnO-}=Kgo`BFz0=nEMWx`#$DA7PDG*3fs>1rS+u!(P?yA zolbe~A!p>;-0%CRxwpFduFYK!b5BZ78<~4Y`h0or&VMuarfYNW^B(a&bZzdhz}(-3 zxsSOv_XWPCU*X~5;g1j+HVt2gP+UUj>mx&d8v5hVmqV9_o*nwp&@)3%5AFTv@JIOx zk-V_;!l8>-FYLVdhl_(3KfU-ULKknkpud=XG3{c?`K9MKUgR#kcj3Vchdw;?;n5HG zBJ|-g`7Y~+-5<_@tKj+Q`GWJF4{ATC`JnWJ$OpwA6nqf;AoGLt59}Y9KEUVxaPG5n zpPu{p+;7gkeeSh$FQ5DIx#!QFM(Et}b3ZtD_}qkZb?0i&WuEh&^PO{Z&&kR&Am?nW z6Y#HpWIkC;*8fxO(tp=qZf&AKrjA@q{_pz!H=`u~+ong*eP{fPMy+=5_RQ^b7PF`V=jMJohYm13iWop)b&W^cMORdJ`>1zek^=-DoLVf|j8b zXgOMmj-XYj8+D=8XboD2)}r<3I`liV0c}DX(e-Ex+6+{_7i~p1fR=7UpP@l?8grP( z0v53XE78|z2&=FfYp@o@(JH((<+VKcU1E4JYzoQ&-_1*f9FpugfY?7&X! z!s*zJJ=lwV*pD-CCeFgyI0xsVzoEBr9uD9j&c`8KfD3UEF2-S8f+Khg9*axSMf4jy z4wvC_9K{v55?A4BT!U+I9j?dY@dVs}`q6Pb5l_OCaU*WRQ}9$g4Nu3-=eS*8t zJLm%XHF_VNL+8=E=tFb@og`l3Lr8==`$h5sH>XO2UN&q5NPVFE=MUD>K9I^LpIrE~g_cHN~EsWV2e#CZj9iWP zN~sV9o?{t;QBIA!w!_))>*!~F?)v&%dhPCniq3CTbo4u+s`lG``kfteH|Mu|Mxp1z zf9M%a^o(BXi6v(#D$UJt*0`Phzo>RQ2k@*ZEl|F>+8uND56b09a+&qX7aF*5x!?|G zjcswYvmbXjYx--~FWytrQ4QlAS1GI9RST54Iq0}j1w|E<`fJ@?$8l{LmJ6h|X3TMd zL=DWUe}cQZrhmMgpKu+{4uD*|Y20-E(sqrnb0XKJJ=cC!OHb7I|*a9oqu% zcv?pnkXXtBcMYxSSnBLoxGUX@_blxIHYD%qM^iVtP9#r=o*KS@Ce%3hOmA_!`pfO^ zSZ8(0aTD4zb>qqLQRnz?x8&v=m-Go59@pwd3Tn+a3k$Bb$tAfvEy1iuiHPZp+~a}y z{myw#m`RJfpLk2?X+a6vGp_`?!7qk^R!e{~9eboPl*F7DT+*IDBVe(6@bhoibdJ>U zUg^(>7O5ay6DDXME%#?<_h)5M84#*~X)v=g`MM}KXMKNzyGwHRHvq{{Qw!V_8xsJM zyIhoidk3OuE?o5YOle76JJDSG2^0-v$NEVJZ8%f784m(GH4H<2=rC-aSn%zRo>+?Y@pZy)j@-EhyQZJ+*FU?VgT3 zodd%?bKOqKz2|sC!=A31j?pCz44>X>@2~BR^-CR#G0?TYAVH9RV^s@dC$U6{*cm7_ zOmjC(nblGv^9>D_dC^Bv&R8ema+Gwp{tQ}FQ3c@eq1I$a$pA@@8W#8*3+DSB;SDfiN!QU@I+P`v37jvPOHT@P zR60s3`;Hzt+JE%S(X&Unj-y>idye)UWskN(`vB%nEKh@xt)F-|t(RN5jVnr_YN@pJLWLT?2Mm4>7>wYI@p~X88d%$V(IV)yly;O9 zl1kDz6;72?!#jk4Km5HN1%AZ!BP}; zJHieozz~MOjpbw&xraPQz91Z`tp$ZO=*4I~c&jxh>O+85B+%jnT9iNw6DT=>tO;aE zAVUJ_6G)vvss!Q_h>cDI{2{;@fM)=H2yh?3QGj~^4guT>Z~)*IfGq$U0J;IX0G0zR z0hkNW3eX~tyEHNU`~>Pqpriz{C6FnBbP1$PATEKJs2lJFfb#(F13U-tEWrH$TkAu5 zgHaL61AdQREna=i>ydQ1nF}_|CxEHVXm|P>NGb@ZOW{E&RvQ74GpMadZi8b z8<_^uFs-t`B)b8)IJG~V-O#USYHc}=@xB<;_LG}r*9%LgRXgqdhAQyG7_Z)Wvz_9; zoj1o~mh6B2*}i#!8=5wr0-0O(q~Q3q;8-X?UBfh}>Z4VCzZUxBDjPmAAI)#*+}n|g z{%Jt`FCOxbU22w0tAuB@92Ze#tZH@wpCl?J%(}zwid9;qt}=NEV_miz?5A0TA4Do} zL~4jxGyt?Iw<5QKHi5#>CM^wTMw)CljCI*h;|E8YB&gN{J<*!%Y_v|E0$MAVzs6b#$<7vhr+sw!{68!*vF#f=qBM zT0j<|Tr`%Lm=xrJQW2VhW};*0Gq0v`y1W}^(GWVV^A5Y zLoJZIZH8>)bzF-7%JiUO6h;%!49Ei)qh9m@P9+ZVB66W@7(IeY;hsv=0a@cJ$mw>V zThR9)b9oK2x^;Lx?jupMhHN7DF+5{pS8+YVDD`018G)%7X1b?&rdLcnWjU&TLziycsQm*CfW)) z=Q5!Eb@)cS6CcEP;-mN^egnTvXO6Gps~~6u{2LFeNQM}09GOTuVI@m|Q#X=5a6Cxf zB_EK#G9JdygqRYhn(1PCm|K~9;pk_cVm<_$VuLjnu$$S_?9bUZ+4Jm|Y@Fk{J=|V6 z;=I7O@~ipH{1N_BAwwt@-DoE|3TyfH?|Wd`P3+eo-H6nn$^3=e{QL_i8vpsy3qEpaW( z?q;+SBziGO{&a zC=KZ7cord7FG6k@*9(39V-U)O@v~qKIfV%20S>~r1i;CT}PCf${Q$#;Gmn&6pJa}b*5LumR@gl1$QG!w>)T}G%C z=GF#lYlrbVVLo$V`~|SaMOuJ&5n9rPKv@x5z8RsFPJ~vKA=GU`X!RcuS_fln0D5gY zi_qr!e*qi*7vX{bm+76SL1{1&(HkNW6c{X(O7nw8##dBWToAIDO#{wU7*`cr zNJ(CH#28`RIAc>zbj;X5*3I$vuxDdZQu&xMftmB-@57ARhu>iT!Zkx=??8Wyen(WP zb&@1-jx>W_&$B71Mw5xb$w?NonP@dig+h>|PCajeM#g07G!qjvs2nNDO8XI!W3fUf ze~)Wcr_D~iGf87RqB9sRTC0^vdXrh;86xol6V&(V$yq&?^jNPq5r#3Fk0c$}du)4d=T7Uv@O#zxp>2IjC^pi`aqdnzo`0e8IvbRVt?8>uI zghMvkS&-x=sCZ%YB5?*TV}T4mu9xKy!A;l z9veT|9Ge+0o*tX==5L$hFW>{s_~mBi34A2pL7^qSv?V?l-%X(fABr!>w}RkI82%AI zg-b$u$kKz5TQ;J%qtjGcZ3hw|tQJ*T5s6}I?$u0l#5~^ouK90f&iso1sy{WHT9^7x z>R(d1)Y_}Q(&EzE(sxR)mU5-9OuU*=SW;MD_}4z?+ok3YpwxJ4qHEQb0Ka+nppONyh1d`g6-4P<#kWlu^o7E$qIBY2TJD$vBe76 zyr3m!QyR7c$sAbl`F(_10YkVrTueGtI#o`kyLCn=bIA;UM46;D&#YX%)skL2HN2#f zOSLDfGRg{WeCms%tIq!Z`bbETqzx7{?!su((^GH4o&)pN)FV9nW?YS*vak#4Ka$3kgiA9r|Z|TNGIu>x}dH}*8!JjbZ2!6U7)QS z<}M9(w~fx9DW;PIeis$yVZYBGh9wy2+i)V#b@_4}=IY$`^gw>`^_A*%rYSW`ZZf+n zn=95A)G6c9G~?K+J>wVrVaJ^x|81szU4F1}WBl@_XJ)UBe{kpe4TZiWpyycpIpgKD zs1Ebdb*aD<3dp7LYy7Gp6K2ASkiXhr?RFt_xXx{=t8*(_bP;S#$wiMjTar;y~qqnot*_Edrtvb7klfwPQn69LacK9(gN$vqEcT@|6>O z&ZDVm{IYokV=y+G=HIFpHAyOURfp59YA@!El9h`XIfWtB!_U@+O(`#zrl(=vq_h7n z*R&!ZIJ_S%U|*o$@uJ34h~VJkEPhx}4&Y!kSHa)Rio3DmW~6eef~pSH1=VF0?^LZ) z-J^O;)vr3EItvwIP}Qd*Dw+1+I4+@pjHo-%7wEwa=-qnPe*Ae0{vxh#iJQm+iGmgX zj%w`m_+5Ahx)~**sZU^}xIbzf!26y&gZS$#7!BabQGK7~sD&U)m!-$jXSrbEECYB$ zRNtk;R6(L6D#BCs0M&?tf}jAkw0g>|5$*8HJfOBQVMDZdI##Qf)PdL4DRoL?M)t(6 zrlaw@96T3VmX%^Qn|W3;8v}axx|VVKTIf6{;to=XpG9U=AI)PqA{ZGYYG>=Y+01P8 zuzt4Eh)hDW_}eB^hpEfdV>)8$H}R6G$wW+n)nIk>)RJA1#gdAofzGbL8n%W*4h(kN z?{f=)0=RIhcJg=T7SyGaGN0QMRAw2Hwgd=1jX8!W8aal+Se2@$Guklx5w1ti0q4Ar zGxsZ$`~XglY7vr<6ER=V&_Sc7at>A$m4gipj~GzuB{o!KXN?(`omDm^r?M;%h*m)N zweioGUhWo%%tBE+!i01($i&buF+t@Sg76LIayJf2!kRX7f-fGtt@K(40yP3k4 zq4JsBEq{waEL1=I8>WY|0loZab+pR9?L7!kIQONZmTVG>(-fD!8Xa58zEvjhhR_xENO3Y?`9N0c?Jfbzzt9K8C)IH|R9| z8iF)IO;mGU!)i3eMRE+*eQ7AtCfg`r++g_-we?;X^?=mgkHa9w#<0IIJmT*YJ|H35 z4Dc5WQNs9`$=mT_to4rZC_!upAs<;pgP<)E$92w9npDXefhc%Kbq=cptk(!?y~S9j znw5^(&vvKXb5t)Xc}*G{nlhWm`l7FQwm2(v9+jZds#t}QN??2Vyevk@ zdj@kzz;DBtZ=WD)F!o%u!Nn=ERDM>g5R!zjP$$e0RtZ~$y97}XQp-@`pB<6@2#G{W zH)^r=K-AOaIpR6vVaq+8o?B_b^Lr`PnHo%urn0F4DkFn!5Me<;Ayb$-g7U%gOP>sa zE=rfc%0~j%A}`d|hF7m%?FE(e3)IlVVJIr}$$~=+yAW{G#{kX|+r5*kX5%RqnM0Gi{ub zBO=cdo(COgv)l{sy@+x5(!Q~|sWXGDpx5NS*!9w$6&F99SigZMgvnWmv62&0C*=Ys z8iy}23qafQ(T!1~-{(ojL4<-T^}8E9*yAw<>8oy*OCG?AXi?fWqekU}yZnBPt+@w8 zvBXvH+Tdbb2QEk$Nw`DmllrBXC02ShYCU5m=OID?D>Br!x_hV%awvTy5P?ut4q%5a zl@C&a0$pjHUXDwQeo7pxOr3Bj4g3G6->f1okjo$Ly%n!5SSws{kpY@v)zrP*DrhnUNTJGKPtXN|vgHf}uD@qBzRnB+63 zdz#<4XU7j}GqTfSGs*&uE9iIP;o(o2V?dKKGy%O3T~u3HTf3_SnMz7fC8{qee^>o( z{w9khHMpt%-Q3(%#HDHsT8S00(w58$w*yhRq!gBkx+)z0N~WAIv6T2qm;n8Jyrfp} z7Bh@cQSRO6684qf=eqBLh()nq!qNbKD5~39{N3U+#Y}neDkw0;-~a~OD3J!`pakee zW%W0Ad&LVJWaEP{2p=3cSQ69CiyxA&P%~q3O1=m4iVczWr%JNoT zhtvH)O4-LH+zHT^9ti_sEF(6MJ$aY`StI7U>JmcAxKM_aO$aZPnKI?i zL#%4u0*$6%QHd|8AS9*XC-rkXGBBQc%P~ie1sl>hn}a{FjWc)PKE*$w-@{^I`axN-UWe=j5~5O~S(c_zl$Q5!lE zO=7aJa(rEFRfSTm-c`|Hs;FqF7+c1u=|?qD^?KcRbhqgkoi43`fG@Y6>C_ev^X5j5T+9O}=qX)|l}QOLp{zhg0{L&eADz zT{=UfJ%hK6;VesMRXo`f>D24goCahND*+fu&!Wljidl(}Y&S@J0gY-WZPJu`Ps+5e2s%5#iCA)4}+WCgwHpQK9! zV@{Jy)LB&mwf6JD#w_E~AmV=h6dE^tIcm4sB8PZP3Y8^;1bP|X`~1|qpCzXJi<#jgll%6 zP#;WvEjTrn*JMpKc4m*8R-Ym=%x&Fc7nN>}+0CLxn>;}!Oiv9a<#`NgM9rCvDV6EP z6Pu4-oIa`WWYY>RO=nQCs(^A@+SHXl?9EuI2b;W_E6oB$zn`cbiwUUr4Y?YtRUpPnOv>u~JV`WbR6F>3!}kJ}V^RqgRGi9y3BwZh zGL3yjL7iuM38JpUn}ThbMx9fV#&)`2YsAGnR(W+^8)jMh-9V{M%ZN$pv~Ycr65`pl zAi1kJJ>=g7VEaFc9x9j0D+wRu^1owb#z^NxevlGegvrj`@>Kwto0c!E@#2&vp9Gb%=-mu}pKX`nm0W0J^6sT)p2F2EwM?084F zhZ15g>jI4(6Al`0?{tT%e)`>epD77@XYEcdp77p-Km0{;BnL~=UB%I5W%GK{y|xxj zNY_-KniC34zG2OQgJf%=Bm1Vh%`ZQ+sk$rIkvHC)wP*U_cYn0Eaa*2ycV7OKMNMl$ zH_aO}$z_R%dTygHHEZp{W#bmyvS!OIRJLb9*3bbSp%~p9U2rfJvq)7yva|Aho7~&- z@>DJMzuAd>+xo&?g`|*^{u)-rAobKB4c2HJ`B_;GFeI#%^|K}H1a<*?3)|10VHE)x zG3=|31Ht@g{=)o2`D|bQk$m!4KF*ho#t?v>dS$R1BPj&6A48WC+eF=Max`rsT9S=N z!*Dq!q!bkR1kpxfKRM?}ke<9c!I|B$`_Q=wqFQP8wrnV0wxoW?xTcax^#w7fR#b{= zl_lc7{>Ag(t6IoD-86aS{`-f~(;Me2G&&__vP1ub|>cJ~CE2Md$adcyiN{8_qN#eTl%$!PJQhv@Dt|B{g?6~YuF?rkH_yQ(JFvehtzAi1L$tAD@Qu(AIuu3#IqWjR0YmOkuh;R`$D=_=xuijt- zU)L~C_u-cs@e6a}YvS}zozMZig#8J#Uw+e&5w$T#5PJj(l0XE){{bp52;_)>1$bWR zP$>e>FK;x`4GVw+Z1AhI6qx-j@!c`>tyQjwrt%2mPL7AA@dQ@a$q-1D2@kn4%b?L! zYMc!CVICm}j#!ddCUb!yM;HuQbld0hD*wlI8nGD{DewU{@YNg4(_h!HOXHEocxeaj zg~z};W5d58-{%|<`iatOI3!u>wSxT z#OI6Rl$7#NK%qe2#W->(7{Z}Yw0tvF1DkAq3IYXs!-!tU;xcqe`a|Lh=H>SJA>a&< z!fU&ba)30Fl+uKo+8pX%6S+7uy8S}C{3QzlO;!igvzOdnFuvyD87Yln$(v>KR!8rh zUDZ%pSCq6ol&NIIb#_mdw=|OP9*4)Mj4ET&{xYqgF)*SbX<_Y#0fXA-@ETLf=2SgB zy>?5vQK1!5Y~qIa*Fn2GnwMKV4rny|B|=;)SB~bR>oAGdv@Czy`n#nJDr!-*R4^0j zuUoLDn{TLGvTXTEZdLiJhVt$dizx*_q1fKA%GA)XYL$6W4An?AO*KqS%`7v+#5xA> z+b3sDjkP=tiR&zsh2M@wa!O+P>9PD7IiksIVSM5$+p3IJ%)lzVYSrANl#G<3l=_sG zlnp80PZ3he=M?TPyr=Nh!uJa~$b~~s^!a`SOc}s6QR}XT+ZsrNB6a$V=?kYb(;w)V zi=A`vT(DITv_>Ek8=@#l-rS+7tPP@9X;8WpxH2eR8KgNx+mJr;jrTVqb>i|~D44Uh zHh=M0910g-JE-3-mv_LeMjF;8cEb}UA%KN+ADBJrzss@gH{^I1lH+ta1{m3HNc8rP zh=9MS5Yr&nM+GFY$xb&8tb%@$)}2&X;SiIo?Uw20v{ZMt%aD2dlxT*YtI*^bSjMR- z*fxKoI!R$sDLA!qNv4@kHrU%T9dDPXXKL7%5{21)lZwf;H7(6In+wx*HXpvYZ1?1` zN==2(s^opq6itdCI7KW7#=yd-W5&`-ER=m%(oS&m+`>ii1?QigsbwWrqfqf2*jW%n z%xN_|7Kp;2Ff@c_eI*dgrD@`Whb4uX=hO-T`f>EjLS7*AdCs5ysNuH;b?aR-{gWIL zSQz_oob8o&ei~3GIv(99Nl~3H`bqdNVG>^FoQY@7Oy*IHA$LY`G{!UT*aH(^ocQ)c zW@0QEGVaTeI7*VPeav!=PS)Iksd(ygWS(JOWWLUP)_mE_JLO=a38Dxt2*Cw0o9AUT zw6(XQ+tPZ2890~`%^-j?s6V@ODX|GI$HS4f0LVgwZY!a{Aow;2BjmUOga~{b6(Z2( zq6BXtz@s{=!-?F6&Bi0l9NA)`8Rj@F1qkpJCjtdo7Dk+)S#V&GC7S%?5xLSTnA3<| zuWVnpf6SJL8rO9Hid(+NYma~Vhl98MEZv>X@%k+;UX8(Y;^vAhye1TW_fC6F!OYg? z@es)|SonNim7_V}YP_rcNej3KMrvc?caRe2kl zKbuhoRz5cTG5b1L(=gf;O-8K9sQ6T;he@;Wd|H}C6)R#au?&S_0P>##lLayooR;c@ zeje7~bVf-N=^}mfZz_%uOupa@X2VPaV^|){yDg6<-FX2yMd@w}1!(pUN}MfwVR=i1 z#(5Ozi>VQ9lH&_4V>THe?xuvLLB_RgB#$X7EF-c}W$#sEt-!0Yp6#7bFzcrF@b=%V z2{fgSpVR78gY4ogqhwq6!rg~Y_0Fi?_x$>4x37AE{n?}`lAR&zZqPec-1bh_+wtFB zhm{I*WN{74+k_vKv0_Gc>!FW#^*r~&cDrFL^);5^FSwUDGsI`p(EF#*wBgGq^+}Ow z1H+%5G$lnMlqyzhQY4nMJLd;EPo|y9c{%6h+V^rq94i2G`D7>(%gDhwP<$dJN-;~? zY2rW@u$=yq+V^UISNpeGR#|&fEvbzqlc*C0iaIS8I2ny_(nt|6Jm93sEaPZ82ywF) zE2H0wlIU`a*XfOVySyv{)Z=~Kd%??j2k@yUr?jG8Loa^{{{~H$u3ow%2YYR8Bj41Q z4^nlJ2FtIsQPbI$4aCnz+2N6$*04X!fXGvW2PQKt?_Q0#HUh4VTr+tbB>7%B?;kOc zp2S{3LMtF8_U6~Q?bL!u)_Iu*VpY_6y}7eHQwsN#ZhU8T-N8xCx8HT7^5O2f6eq{W z7ZZYqCr)1Q3gI`)6V7DSFOPA*@we@ydD+rQKHP@|O>lgt{!+S-re>TZzr{NX=x68m>_ z8yblEXIyNI&AaGa*|f4}W&g@ED=)0Pyi#zk46YBe7e7xzX%>)7Q^#YhSd!v#q^-ZNcu{+t%;gc}G@(vtWIo zEi3De+P1a86?1P;ffWJST!9t3GFT$Nxr+q0$PtL_%Mf*GgO|!L$%uAaO#^l6_~5Sm z;HV2L@>5nN-pq}JA2e09hG-!Shs7#yjPn9jDp{|9Z`_FCGF!&tQQpdiE|l<^pV?{EVlZMHRvTizR1K#Pw5GA; z6Z&`Dnrv;|r=OOV`dRL)Atyun0kwT|S)~E>K zRFI1bk}f$C)lL{+u{RsjpIRRoC$4CEzGqsw(Wp?RvMM53;=jEi{^lmD>G5WrN>UJx z;ngNjZG6L5ICY`M2;NRmi7E~}8q2fb|2R>h9V0BR=Luu%D9@4z=C!tU>PveeZpExZ zZMa>@iGm<`e^S`PDRgYg*aZa)?;2R!y->1X#x;F!rZ~@0JKkksFpEW{lD;_}{+yl0 zY0)}#BX~(6*5z63tXVdv5Bq%G1u<334kGiojgZ(n8d7yHiLIg) z-D3Uvi39kZsDJ8uXJfE2+St*^Ha0HET%VrqbY3Sc?=5Xx(5gL%4n_ss1%do2VnOSr zD+%`}`@e#~;Fd%zOOu^MY;Cw9?dxCtS4y%Un50sM3{iBTKX)#`QX@2ENTaz|aTuBC26-R*T;-6`CT z8l|i9tG>khn@dCT?jDU~Vds@Pq3}_E%c3^BPhhz$ zYlX|C#46r5Zf4z%>t7st%0KqhYy1E9$ouTGx7Q?bx8I&UF8<56u7BYNWtnDGdZd2w z4fEL|CiI>D6=T`QHgq4KM;(j`<6v@mfk?`l!K8wo1Gb{7^G z=?h1q$q@r?rFu2;hRtk}cVoezCtewiDq|6Jqh@;~B%y(jTb(f3vJA)rBt8U6Y=?|0vLC1C*7-y&1a&+wTE+zo9JXoN=XZry5ryi; z0LOA$()k0O@qm&SSS3GKujA4cm94YK?#8UIDBWtr)Du9Wq2{$yO05jXi7Pg=H*O)s zQ58xxf)Qp!`xil*?T!k!EswM6!D}cvjiM&c#I+jSNrr!eYW=@VM&O`(XHNAEkFqURY6VRS~AtI{Ot zSfbEoE7cy=n)t*gu~sxZ-N6e2_a7ZQYrrw#p`M1U@nP-hezxngs@J?6=aWm1Z0J;d4A z*x1w9*Lb9n%O1dQMO~Gxj$Ucv#K}%6C=nfGhC%7O(h=#5#3Pz0HclR)jJ_Zs0dW$v z84L`C0`!|O>V_P0awbzLTEKuT@Mj{@g07y#`?`wA( zb$Mfz9A``RO|&{v!L@*EQu2<}32tyS7H8SmlsvcgfWt#(BN`DCL~g7`xxszDhDW7V*dR*}3o$xx8twr7Y6pGu7X z{^Z*EC%3;fInC_OqFKk7;Xm*uj-ZKXAGSy9&S!j(^+7gsKI?q;`JD5)?CTl7$ofS# z^Lp0n*{|okp3CO?d|Obh3Hdyz*5mVSM?92s5%2Tx%);E-2to@Z0XZQ#87YsArCd-( z#I#uQ46{0Bpr+DHR>zi7GujbbNE&0kwCnDzv7NMQ%5Kqz&_)lhePCwF+LS{nOiId} zT3nlZejFY*fbWbN>9?R=`AmL(-*p={-gt0hYx5+CW1g6MP}hu`1Kn4^M$*8e6xi1- zZ{*0Y9qHT00`v`2dF8)MXVQp&qhG9vc{cft@U;Tnphn#?Q0qpw_QNzYlsy>TmZlOh zsui3dD+3z&+Ho{}0lA>J(ft|_6yn1pcCsi8QIY>!VKp_%*WLhu)l^~QsEW~zgLFAS zO84Vu)F~yqv7tLp!5Q-A8wHKcS2EA0y33|f+t}p=sj;eXJbo7|^0p;-!Gc?FbZRk4 zSLd~bJ$XgVr&@>J=adV^n85hLp)#nmtF>&&zDi&5L|3kgs9iH1 zW{@QTD^>1#gPvDAO}Bd;E9Yo!WSdH#zVJeOv04KGlSZlH6)Fq?kWHsCsf#lM@7*8> zoON#eqmF$#R;z-9j#X;~QLWSxBAMCTf;o3ijzj*eup6@Go}Pj&Pv2c+GOM7QQp+hJ zasf*v0vT9Es;R^nzbQTxAKsKCm<0m1TdBZWEwziP;lHzYK%PbQU)fZND=Wt*dt)xy zFdAc4z)vNUaBMtD_~q2`VtswZdR?WXGEmuAIj54VtZek&7HmbgnR^uhd3Q(tlqDeh z*AW?!Z2~yeYkPYBa8dDyVFb>F90XK9l-NIz)!rnSt!5)*r7o{PcEs{gkPsBF6NE#B zg~=20wMrt;ofj-5yZ2&j%)Y%PnX`>mG)-|~UUgb)l^vThX;bwNtH)GlS~<1R>EeY{ zFm>@g@w8bf4qm4=3#>si4T~p#U-qj)r9mwwsW@tC;a?@ujeI?+cjrj|GqQ( z*v+Cl-Q{q228Q=U?VfdOooJ`DlkB{0b70BZwc9-blgATqY*@FB{>L7Ej{`0pnhl#b zZx=NtQPixRu};)%a4hj~(~|;YW8oS3GYUv5YI2=gg|$2WQn{$qXxY%>43EIYUrw*jXt0_UjL0jz_rHbbVr^BjPOlR=4a6EO z!zmT*L;K=?!^XEIjXrB{NyZVYKp3Lp1ht-UhLp*9!9(%8U$|j{U2QNzVh(PVVZoMY zIla-h?iJVLuiiV&z0SwSkM6p^duE0e;|b)+RoSn99e-oab?Gj`>jX}%;uvaol84{m z&T%~2f>E^Wx65mdcL|6M~*bx+f_Df~OtpH%<3ni(&QuijJ5Bv<1%jkw8(tBr!N zWm>gq+O+E5Ps7uUctK&pS>}0S*;HDkJc8P>FoT?uz!m>uh+jp_xW$yi;* zmfIZL$I|p&QSQIZCd{yHFQBnaFk0SJ-T?vN+42kJyaX47);w1J3#j4BzgRbI`nvYp zW^CVxdYAT|S%=rr?V*VLB37awpj{f&N2E)#xwBrA-SR7!5?1i4{HGOdBVVPW)!iVI zZSo6TqklvKK?Vs(iqT>XgVXcNdvzoE1l{Btahfzf8p#OFM!MlcT^oIuffES|?JJn< zc;qARQ9laqFM!KOoM)lGh)Hy{&UNKkMb!Zg;I@Gv3TM%?qaqn@@+9R;3x!e-i&e{D~~Ts4(!1 zk0T<7Nt#*!+0@qTEc^aVIOW-NgVwG^^4~yx&V9(KQ3@(V--&vj480g4s2B^WVkWsg z6KAe@N5BGeTk5e?lDg(yE4C^EbTc<%GDqAJoD}XPcg+2Oj&(0zue(!6bgyv%b6|Sl zSm5md#|Lm=xdR2!26TwN&Aki{q`Lz}^p*A?{X}uFjc)2DK9y+emP4a9ragb{{reZ*wdCddr$$nJ1*L)26Mu8#&a-R!n zR?zCw3mb2)pIGMJpRw7BA^qSroM>BH%!xd!F{*QBMpoFxAwRmsk*dd0+ zkf6t&Z9ja;oTkwV46mNt*EIP+P7=s)x5-}e^H51VtSmMKlZ0eQn3XyOrw|yDoTN}_ zGZkrO?|QuL@zeTxqst6lfy#W=@K>A*B9f_S5&C)5?uPs$RAdT;ihM;OcgYyW-5iTV z>ij&9OO9%b`0Q4QL_S7;i`kv+Dcmuy;JDkdX#Rj zk0#IwW(MdR7l7I0VMg8%k`S33QKz zSg*bP^)tX{!OxrZyp{gslB+`^-%A&>+TAOVsXHiNOj76vmI zFgUgmgQtvSs@;rEdowg?YhR~r61Pd6+3E1r&6lKU^R;$+Z<;1;KKp(zLnq(nzNYDD zczf@21Z3#D!|!+BKhIc4`)uvA&mPuVd#$zCS{t|w9OIB2pDzg>Jo4A4<|-_r#7P2R zsKzgho*6Z0+b7;QR9j>eSymv)qYnaI&;o#G=h7*Y*JQJaq5(6f6fFwm{lK8DS*UB? zxUP$e=6Uhi?kH>5=kdA@4!4#wGevJ%+opr9V z^MSVlWFX+YO#;$<9d%87u=K^3YLmB zADr$Dz1yx%;~f}!a}_iUcNrSFPw4Tqc_qhvU+G0byX z<5i=hjn~v{YHE72xM{<>&Rf50Ga_xv-v>ku8@*ub*~02nwh zJiKYA?Lg51!Y#Wq?nU_6WFwAd}nr>UflzODFqSXBxSi9V#m-9^!fPzOTU$q1aiJr)B|C(+?lZZ zCt`-H+`w0vRre^&j|J^ztY|h>6f~I;+pW-I3(Uq$jN*KX_duxtr5Zjfmdx?OVp=B{ zZ3e4F4E+|^dLIz=&9YvgTv`*afxI)ER-V@gW|w)x9dlJAPXl0&4Z2O5JNDOn=894% zTkBlGIipAmG!5#&7xlRxkpxa37zjA5 zbW#50&-!-VyuQGtvq2ul1<5(blB`Wjvu;_ilw5xb%=Z9^Gv*$xBw0q2?1UKPTmIk7 z6y$`{!~-d#SGGD5O|s3N@Y)?vB1)H{=`ATt7oq9(m5^+@E1f2*%x&ha<_YtD^Rwpf z!C|}lXdS2%^nT#K&0dChS+o5>Pt|-CDOcTDb*yT+ioUK2RGk5Dr;Kgn-TLjlcVBFK zuZ_&KEw+(u%6_Gc?KnzNxBc;O>!GCNB2}z{_!Og5)-$`csj9`% zlH{r}vz&L#t$ zzzGZwWt8RLEx*oO%W%X-;^EYk6!>&K+0@#4jooFo+g%McH8=QNW}naHt7)~nn1)bw zI+Tu(9UX==Pd4>82u%$=E^xvHTrPt5*?j@uR^JCcrp8zH6(VYlMxv=Gor&HVC8Iw& zUUa|sI>ANGPrC`MJ`4MLUh z;q75%@4y*vu^yTXsFH+%+q5ZPZ)`Z_O}SVI^L9RW z(X7qCFV?w%=bECi7E&0^acLUY3lwO+B5nq(-Mpp9y7cF(qIp_D(jMHf^rQUzodr<1 zeBXc!W&p*?B9QcwG0?SieE&C|w-~;3^=;o`y+CNyyG5E8L@3L0Jg?KrznWZbntw}Rv zFdeH;uj`MIcc!mTf0`UiZ{NPHC*9w_jeM;CQQ>(1g90i~yB|DWH3#PAN)Lb5eKWZE z%f#)+ZYLwRr*2<_i4(WKcRM?Bdj=-X!z6P%vX?7p4s7z&MrxaD`)V__i?zpUPuHHU zJzx7?twg|EQpTFu+fx2;X?^KT>2fK3XDKKxee6-U8x(hd$qs$5yLY&EruRF&=X%** z$Y(u$e)!@rIgBdTSe{OaJ>oHu65jz~1TSmM?-B`nLbaVYq911GPyq}`SX+xh=`Doh zN%@kB?&$ktaJA+OO0J<0T(nd9yY}pvdFatcC)?Uu3)}@hcZaXwp$8v2^vmngP+rmSNFTE8K6$D0HG7+NH3 zRh3m}(Wt6WbuyU7sC#Z<3NQKC`6w$$vAAA6zI&z!m6$MEX^^+5~hBLvj0!Ie;AHG&IX|_4hc1+>ky&38h<`4gA-+Imk_d31+hlyy2=&*mR?uKS(* znYsvbykpbzV0|JcON`EDhEfa1k&r(XIbE(jw~l?x8Pd3m@}BwL(m&6Uz_$yqkD5nM zd~qTGz-?e12gYE5D(dA@{p>8_VO{;D=KlWD z7{}dku)}=tU`I!6wqIY$9psO+UXk8~mdep|dKihOqddSG>nD#~o4x_9ozfA$HJwa1 zl7X}r<>wmH4wOHXOLoLkU)k4su=SzVcU%A1%5bf=){CuFYinMAu%GOo)lUQXfBI!2 z4XCsyol5tm>2&%IV!a-e>IpxTn~(TO|I1b@!-0bwajogv$hE0!Ph5NcTK3xK!2JY) zF%x+wA__jMxY1rl=^=!mmlG?>qD!i#C@b}R2ooXhANJm++Qv-Ozstr)->HM=lXi!TFsL$e0x$) zUX_wP4|nQI91aRLCpa8*w(jJBSMN14&;1^1a8Z& zGaa=JUQQ?GaJ-olU9}~qmeYq`2Ddo{fr7k*L@@#dnL#bbak5F01wpF2CaI)|2H1fXL$3a@OxXEre+v4{9esz~qx%VeF`WpQ~e*G!I^Cnv{U@XmWfU9-8a zuGux-O!YAFbPU0AMM=6G0euCjO|vM2*@J=qDTW+KZ$TM78?k_&()BdAw$*v7%hF{> z%P7byhElGP*s<7`VrOHo#@>su&&EJ3wr_mcGD(P_M+D*-P?>TN#NLhfwz=B2_us1@ z2E=e=cx0Fw9^SWC^$ABFY>M!P_6pJFA?99`zycVwSBxz_Sb=L~_>GnKJa!^2!@Bxe zN?{=@(8e#P7;>+uV-Nr$P+GCFfRF`+i3*!a>ft!6TYs`5GMG6ZSD><+s_xT(tZlIJ z(;F~HoZF5L?048Whg6;Cwa7X~GUtb57TbM#=drI?Y0~80#c4PY{nou~A;szKtk$CW z?2p=PIwvDZtmu52TPD7Go7qlN9Cv*auc3gp@Wu=4LZ*$p3;~BFAx|S|0MJVst(lj- zrHuoH`R|x~=l<-KdBLK!h=A1aEC(fjP=Hw^UU*>Xx3fMd2?V;AzF(coYKD(UP2sUnvY;WvuO80$R@o^`%69wSiCnH8AalDf%iHPa4 zvIyBIf{G!j5*)7tm6hF2-vO5kI1V_Sp#1>R4Z6E`btCr}#dj56-bTQn1bBE0D|Fy3 zoPYTpyhEtiP!6d+d}!;2R-ph>r(_aSDF6Wi@88%0*oIAj^M`F^yeheYbFPYlH6R;F zsH(D_R5)67?Wge0GPXFtJOm~?*lNyS!1%Zo0<@lNHnZ+(un0DAe4)eH{dI2s`BJ;5 z*pY8GP=y|wNsu60T5&~bnXx7Q>+|C#3)omBd^2d%Hs1AvRy(BqH*bx8_wz1}mUJ{p zQ6y8y7w0Z5E&b0g@v&SvKICEH%yr}mzHYD#o|Ck&j3k<+{7|r3OPaSINF_~Fj^xf~ zNQz|{NNt89+P@_7tj73$SzBxtwTS{hqt{7Xu zi<~EI9F)lwBVik7Lc@kgdnJkrl8;SW!oY;KyaH8$*T7BWEt_+pgofQVuifIX}uT2rO2sXQYKh$)hU%Wq%a+iYL%$wXhopYr$k zNBrmfzw@&hKRA!9I8*gmQ=Q9iUB-Kgml6roO)5}T>8nuoPq5w>8B?MJ5?Yyny433yL1>Br84~u9v+H10*OolAZx|CY!dym zAPMMw=En5}6UO72%||N!#nzzL?>u|JXa^x+_RfTNt=B;r`Ky|Oh&lX&RzuFV$$Z`b zXB}yA8<&4cRZ`_dBhd?()GaR-g3nm*v5`N}zG!)I{SSKSQytG*o>@=b-*JEMDI0aa z_I}$v5o*14eaENDsW&^`T>nNF^)u@mwl|yJXs5s5^uvxHu79PA{=Vi1rXO0UH#M)D zer}-%qE6G)-4^!O`^j_u3&;nntZho~a67^dYS=O3_>P0R&T-DM?4a}x;BZveP4H6p z88ScRH%PAWGR`}8BzSL-34EfM2GB=OM)zyUq;E z;kiqQ2ZDfi=|f&zmvGF6*`XmtML2|GBUK_@{w(@8g#Hn8VAiLad0+)P}4d zLO>0Nfw>YcYe$Fo1AJ&o6>|eT*HkHMcl+(Z_Cl+Wsc~1dR@OXn*QAYXYivpSOspZ~ zv>L^kN9y~xq&ONOcT~&j{S`KSiL3C?G?ySvJ)M~*MpuwLRPmchpsz2as%pnmyUYj8ubJO9|Iy5Fa3DEi%0oTN5mn>)l3&U}TP`8H zBk?lB1hs{Q+QyT_-eCK>ZR^ggdwCtbZfr8=K+chzdvng`ypzM`+~hw4Hl@PHf~SLI zPjDod2`&cF&Bfq*L7oW8K~FFeOa-$)2?7xW@t{gIP-M6v`K`;zt06TC6&ki{+s~%n^MLAn(wHUB5WL4I;2W#q)c^3{4fp$RQU#uz` zK(-zL}_I&k`2hO@po|k@8RF@M%a!S|ozfc}3LgW+w@MNk0n9cw`CE3RzuYjT) zkp#N;UT_2V1W$uMK_N_P16#o^w8F~;ZMj=>Cv#uRrE|}ao>XN@?vY32dHGZFJ@R>( z!-jOozAhuv@)HCU5>tE+Prt{56n}_+o2U4{dF2m~Jdd5IvYx@SmuKG}O4K9I12E*n zTUSUCz7p;v>$0POdz^BEuKRXno*Lc%-Ot?CQ5?*#Ncxh#bWQKWnXbdnHf(O(|I=Nw z-`^R@E%5~F{COQyUpRTT649cj<)2gUGR;JcXePd%stzEHB|jxSt0lZd1^hkkr5clt zsk~?NrN)VA|6%`8|9$?~{lD`6$+iocB)^SdPu3Ys zMg{f|DS?AiuSiit^+=CN5Fz9=gQXXRA+%a36SBp%RUlRo2gHb}hSu3&3TW_5Yy8pS z$dPYA+%FpC^yJa8N*XT0qPbaT2k!j4JSIco=Wp!((zbPB*S^BE>&Vs|J)M73@BE2J zuU~&9`P01pZw^*CNm>#$x_r>QW$C)5u6Nr6Ga!u|&#}4e2%~S@b!Mdh3sG;AU@OvI zzN_iSj}L8r;<3*?Q-sF8Yxy0jkctx}L=ExdRJ6qcUeo+k_fso!;w6YdIx<)~MbIha zQtqK6FhS9@BVZ;BvcY4B7*YntfBH74-qR&dObQFa+rsY!S{Nf-vMc54anbL&K+1L0 zb)SoJ{VkcDA7ly&;ZsJzjPRsjC{;N?ME>7GHasY@(d-aVd|qr84q3*clL1vTP<2ly zzG9f;0v4aLb&&OQr|e5J8_OaB0G)SUk!Y@KXF=&LZQic7mdXA3p}b(Sw4r~frlM4z$FcrsK`;oV!^mkEKM&`2l~x)`E~P*3Ps zhzfVwVrh z&{0{53Ym^TF})y=^;MFQV1!)}R{k)Py-Gx|**T)ZAoFLLq#REF)e#afq)Bp_I;u>R zF4DRFZ}~va^*cnGWSntxh!p7_x0Zt}poTN{B}-=7hD%&Qx4&ewWHMK6w^I^pm9$P; zuxS|a3;9dS3BOe<2s~wx0F3-l7=?d8c@YJ{q3(>nu`%9N1-Vy1AmT&~3@j zEi&a(OzY$mDS{%jm*1mKQ&FOw=p&|y<h9_PN;kz0+%|U0&fCUm z$ZZniW8XMZeQ)(c)l_wLs_b0Bg#xnRynj4*@J`6>TyRj`h}$uo5x+0~O#G$zXOW4B zodcdSaJ~#c`T2oVV)KB3+qLcBwx_pI+XhnlB3p2rh(^Soj;WK)&AXYip7S2k;~6|i zBtbHH#rJza52S4uAg6Q&{5)kp*KwhP>^StY4xG~goi2K)hXEHDz=Uy>4P-iUc@`Tw z%wB?GwHkB-i`IsOx=nf+2O}L)!?V4mXqYZ5;UOSe4KYf@4K$If`=83bXnbW}(b{TN zH&9hDVX`}_D)LbfEwd4_SW4YhRkjM0bp_}&4I7K})*FJ_+`GU14^7pc`XWv?8*bFt z^csVld%cd)g$BO3iOn7C^c4;RVSce;-^II5Jl4^3tsSU4x~8{V5aKG;p})=A)m!^XOmyskMH8)Kg!q5om3DbyqvYW7qPZslPB$Vi)mj zs_41(uXtbCKt1ApWW#e_YGitGntZ(#)J`P^qZLz?gHcgGWqcM=`7_HGQ|2!BSO+n+ zb8sv@wPSEh?3gIzl4ro{DXIBn#opt^;6gDdJ_Bk}L1u8bd&^0A@2$P5i9~Lox|swpeTe$^ z8ztlh46*!I@Dk%9B%+=;n+m?*da3FMb(Chx^K-Zeepk?2x-De=4zUpe9uVM>m zU<$i)G@OP;YA0u^$V@ST+RZuI&$@CMi80Y*9?<~h*AV@~{7BsGuBuq_=9wtDv6uuA zD^nC(y0~=CmuHlCj$s8ra}1yUMT!s;c_8e$VK!b8g#9m0#xxy%j$5~ zT_AuPsXgGwqSaRD-EKE|&V9lCJNGiIaIb91SV$C+AY(aeId8dWdC$TT7TFT9P!>yN zg*xc(&mw=_s||@+#EM*+MbTO3F4eCN`JD5kA!w*Up5}S60|eM!e^wC;f|X zh%0l=0bgbR#vC^*psf{3Yifp&ePfMQ<`{wE0&#y^u}+}B;jgSHDt23Af8H|`+R-w< z)lvF+;OmQNjVu8E{4QAr^wK{p-I#y&(f(x0$Mdkm(d8xT$4rvA4g^z?)(v2~r==yc zXWG1H&vZje%ZR_&?DrS9_#2ApD&L;z9%|f|_Ms>r+pBuhTXA5J@$?Xa=>hT38SqBR zus;pb*NTQI^RsrMB3*}7$|+|RYu;11C%UJ358blIPt7(I>nq)r-IY}38StwVTzh(^ zHDkGBMPv12v}+8EodG4OrXySK-SW_uXSbZ+!Ypn%x8=eXYRgRwaY#PoITSgRI@EKB zJ+#-`H+vFtmy2L;h5;!|4&P&FL<&iUxqdM_IR<1EuG)sd|0qfXRw>&O5Ix?)J0lM1UQt4AfCEQ$R5ni~6%R+m&n{;E+!qqKy?wJYGDnsxzj| zvc_f0YRfv4s4gX(KLi-e64ffYM+yL)~ z1Ib(Pg&wWTCuxlulKJBP#tn?#Q|IaIEiWvj1={Z36E#@6w7FGI6Ajwj#-(4&tSC_| zvr`uMbqni5em`xNdNn+mEN<)y=a}*(3{7T}Q8LIZNin3zX<16k!8%1_@%j>%n-l5W{JA=_eXD2`8Ct`MEM&TPmJ>*x zAqB(6>w9wwuRr89i6UzSDEclTE?)*eX3B|D;_;OE9r^>B%%gyo0>l(}mIVgvNAje@ zlXfD|(mKTB;S*s}Z*rRuKEII?IF9E9twtk#1H3_qFehQ!Eu2J>1?k%Dr-;3TU-oDG zC;YUc;>-BY`We|Dfj6i9v_SYl9DdgM{o%4~q%x$Tcpq}hLzmxr|9v%@5xg5BR-Bj6 zB05J5nPPEe#gw`1ykYu^cCWDZh*WJ1(Fz;Q^;V39Awmn9t0Z2~aAP+3jK+zn4xGxG;y|eJ4cmDNX_ZPVJRycNr%S$Xz zZ6l5XOUm#<=?hIS9HgB2opbciOnEwr2dp8zPTZ0nOAm=4eH88MEMA#TU5kFITNHIu z9{rkS%)&jq{>*xEJ!DB{CR|+jmhM}Q-9m+H>ubr{-7Szkxflc<#C~RiAc%MrM|iY; zlpNi?JAe1dZM!da15fvbZZgviy3wz3{_5SfzWpcRQu=A#UZjW^;WPXqe~drDb4Ysk z@DZ5#b^bKZ33?vXqss<9tXP4~&1Uf!n-}4IA}kXk504?N?;EODsIBvoy&hiVKl~Qk zwfSonb%&TT#j+fVn`Cr^1~f3nZG6^tpwvzghsEUZA_c#TFMI0^#c4Sn_X_Rk%BrotxBv?wFr5j_WyjL|T>u5sbU zj;m%{YjSN%r}x2SO3P|^i3bo&83saS!SZFApf(UA#HCd5Ip=d7uQ*@npg-U7i1U#S z>K5lM9iMknuSm}qlOtn`W8~W#KG;CA8-NXQ$FU8z?d>H~;lc8%spw!iF*P*UKb1-k zY}ZbCbP!UF-9`whMquRHCw93Gy6$yRE-r@I=hVrPy~q9Ff*<%1@P(OeyN!36x=s>% z&p~GGKg2_iDm*k4gp!w5x#*!wt6&zElTHX<;Z?pGJ7NqWQE5o=-$fx85V&E|fc>_! z+8`Im11kpN7=}1j5tp+uhyqAuslt&>u}ej!SOo#dbqAt;M}EBnvcYmrM@JwL@KQh{ zC$BAc2YL?_K&oyTky+DCH?-HXTuynORmPsE(dgEu#U!HD3?Hc%%^aBi*#@(N^gw!I z4;8|ttFq3RD;1hOrJW#bZZz_m(uBlsJNWp$Y;#GgNvqWwc~K8YlCrQOWcYZEUFIxh z&qjN$FE6jDiFn_9G$6CQXe1fEnIg3u;+s2`-=&os=UlDX~yd zNccn3g%FizSq4(*7T|e4YclzWr-$XsJU;aJp$(2ME(N26T75C@H zbIIK5WNlrLO|=@QJSGT~HV{8<12(R8Vwd}%`!)Bw?mxO2&JEmLYQQg*EBowmI$ec0 zr?}3F)R#@UebKL%^d(P99Zl(`Gfgiy(M@BM-UHqv-g~|0z3+Ni?@h#BY)m$$tr9R z)YPEgipxSEy9JH}KF*}xtqAW9K#tq>3{Q~)BRV#)dphzpoECufC;IRI=Yv1qJ+NTX zlLjH&)OX$HBg>HVtRey2>icD7N0b zue$2>uU_|q@p7K+satx*XQo+$kVBGyzEY=IdLY#8seJU7uRLFj=B4%W`_yHs6Ut>h z#DgiUzu)vK*9W6}AAWj{5NF9b|L8ZD6%Gp+SlCtsWAe-m&t_kB14Xi4X zvtEW2Tw_+kaw1g<)#W2e94ZHU7|1Lu73!>z{yW&Ex7W4M^ij?LMG855%UJq5d;fZR z(_}}1me<`=FLNbV_8;r4+4RtcCaSaWr%V59lP9OBVd3VhjX|woH$y5eAjPyGLRLj& z7$JudoK^qhbB8%={ouEzzy5FjT*+{GkKOpv^Vbg^99T@>GmI^fFOv^bqeLt5NUFja zE~i>TXNy2lQAj`Kks*$lyUlRG(VkNzlnV8PC^_T_k++3DA0mGd0wHuvy_nC{rW*!Z zlrSDow1{Rn8BY`Say?mp1{_G`RS+oZd%LZ#;v_h%-XJanS zLRMiF9cJfdXIIgo(jJ~w_yb!Ys#t``$}uwv!L}ggK#dx=)^HgP{A%cAWr0W9Pp+62 zYBq~B%jd51n(67n3Wy_s^e1dOZL7DW+MH7$@6hK;xkYXUl3`ljW7csYgTT)OYbUE9 z^Q_b889|!@Tc&e)hIfVBr5&K+YX(-^vd$(8!J3fQm~H_fftHi485kMpVz#geZf!tlk`s-@>cDO zIuaDa?)o!YjajSJX#JW1UDoXcPG?yPA43D{G)I_$GRfu{Fmumn04zZX+5$Q6z@1L8 z6_pGM!~t8}ACJdd<8(ZpkpCh8Q2@fh#o)5C8@L#xh|WTnAKLf(*rh-cGQ#> z6by9kt7th?9_For`G^CZ{6SPN|Ari*egWy#cuG@I9-%4+ks9_C1oga>m1FPp0FNhU zJRlVoW>DDQ2C5I!BBS+WNj#oPm4HmiVhLGNqUe2wW{rq9zJ!2%s4`5{U# z`F*@q>dv0tp!g0K=t)TCDYNP|fgqbxwX?`sGz?ILgY3RlRUEk7G-+a-9pR95ZZ4E|L{6iZrCOi4x)_d5{_-X20%afuiJzoOOXbqkdU<_n zKpsf3FUDVuza9TWoYwCE`W@jN-8(2lU9)U=B${Q7KA}6a{HK)NYD?&H)A{*>X^K5t zalYbW#d{TW#S~n3iBxVv(oHl=b$xo58%l(SZAi-+xELTW1V8{Wik0HYbFc|}kGG#_ zKif`u+B5Bo?Z@y98);9q_q30wS={M%AQ0_fT|3^z#;oEcg-aY#wXL)Dmy+@&V<;5D zDs%*tL+Csl#jZ%9+$+9-tCqw#b`z8^5M99`+w!nU8uk@jV~mhBB*FGGRXAR0{)T+# zE(aWQTVJx{<}gD6&+Y=5r<{)CeT;-69FVlYX?%jV7JO=RzKsD|L-)3ts_Dii$nYbj zDv;{~ddfhOr0MpXx}?+FVznjyvb&>h+sU9rW9c3)G#&R{+;mi?7*@+ld3h33z;9x# zu+m^&SJ$^hXT-$$plnjFHE3hGvev+`1XzB5`KQ!RC@0ZL{A)@y*5ueJ@H8Q90TZ9f_WZGRL9- zO2m(+oR)S1vQH-@N|pdR0xBbYS$b7^8!}X9z^zZGIu|?1PUK)VH=9VP)JU;?Pb7v2 zd;M&3#p3qkeiR`bGJvw$@WCl~muxkJ6IwnL{K}faW&=W1DBEc(>LQk-3XrKG4ss#Q zY_7>MF&UeVWmto8LnQ~Nb-XDNXiOPpD#ycZ;aFgo4roe`dteE-hU+)$J^H+;qtCt#7*9gu=3F@V=IjA&s@?|pf8{TEL~+H|5OPXIcagG&&FLdQapkOzR5 zrNPpcYjZqH_uHNS2p+uB?2$P*v%g;cF|&)Z5VPQ}lz+-NRX$ch{dCK#eXsVvy7kp< zuTQcsPrhz?-TZnvZ8XXwBV#)TO=p(xe^Q^$nom47ed>CcEmpnz~MOo$X>W zT^GAZxeIii0gtAPR~vyTY#gEWj*X5%$2kY>Kzhks!e8${;XjSEMiGC;zX%iO{TKbL zj0Md{Qvqp;pg&8Wq@SQK(hU6)k&!d0OiyMc!w{Kc88VYu%)FPOGT|X5%rQR5VF+@D zmz6lSiEI=c^$Wom_R>NB5wOh~K5EOo<_p1G=!otG9{wR&Xm*HVFx!%~bwPI5fig-_ zO4?B9NJ#x{t3ZiD2E^CEBm_w%24qzw)`sW+N3m+;B;?tEX;D^!fTb;9QR4NjUXpTp zw;r6VuNB>f-6CM^y2Lg9tMsCQl}LR-V}Ych4OfI6!HqekdEPpok&*P9nBIUZP{A@( zd3EGTM;+uw;IfcA;}x9MFx z$4V?BV!#7gR-;C+=8Ms#cdo7Ie7SYBw#4Sq@erT|v=L0QoTO#**Dv)ZuXcJwy6R6& z;ia#3LCSV3=yh`vN0WMvZqbW~#-}v~B0siJ3oTm{&UA zu)m)8dFRi2-k4>poOXL+Q*UN=Zmy@Qx4%E`%*@Q>*ynnBG6}mmk+A2)`};>`a?CKd zCo$7MXOHLbL{fEyZ%it#@QvaXN=Un%Lpa#PvpdC#bde`rh<+?$i8O~tI*HF6(hy>i@?-s|=bd%xkO1uyWvc%lrHm66sSU{7=;wk5uipc6g%c6U43{x*@6 zlm28RxtKhbJdr$`yqFYvl4Hq*D&{ z8J-+IF#M_EdxpO<{KsK|9R|ZM{%JSp**&s5vwLwjE$=?Io7^4FQcL7SuY6%(Pb6lC zuEw6a@K=23!%7gSHSwTUt-IHNxK4fnoAf3*opM4eGVfKlFil8zUIWy)7HfThY^tY0 ztX_$Ks{EX#t~S-P8*f%aXwHgVVW47#byb0*(5lIm(*8;H<5IaY9k~@{-4$;c101oy!vnA{X_0YIWb4b5| zozRryLQ>|Tfq{%&Hp2!dQmK*tTr+I;hgapa;>)5#ryi-U0z)R`Lu#wao@=HDS+kaG zG|igK9Yil-U&SkaRb$gb4tu>kcD4Any!DL>^8lm3{-s*g1EwN#bRz*16|L&Bxi z+7TPKOn!z9&ooXCx79(Z#QK7_Y zcOA%kz1_aeK4m{-KWe|v&f4uIpt0saeLYdqjSa+(m7FhOOG?^~XPp3M6JhlB7`^TW)=6;dTi&90${3t{(xfBz-DcCS0o~2-(O*? zw5o=BC^T4sHx3R)dbHyMc{>D6amW76rTNZcqhOX8I#0~cDI@`7bljR>`b@;s3|F}1 z|5`Se{abKzlac2&oJG)HK3Qj^ET5{I)Xh)37g@-9QwEK*xX`Epg49H(f8zA)RmoHM!Gk#((@tJ2@TT88q zKVPb0GCeIuqlxiS=}^z-ddQw}DiBHW-qBeEJ}EpA#7ZGX$T4D zXjcj|dPwc0sQdj`*{_^IKq>)dlta5#&tL=U`GQs0d!ph)Y}%^5dN!cbs*$>4v5r(wk6*F<>CV(m-C8IN_yRLGJ58JJ?y3&tz`3{CJuZ`Ek}aW{;&e<` z3|F-Io$;-44?12CP{mMX#vmyib@b*vRSEa&4s^yXnSHj||+hv1-1@ zNYONF(U%@-kMFBJHRQ77+44zBYtNTV4gK4uu1=Me=GdX|@2{-feDpe3Jn1QG_AdQj z`G;;gWsu_r$-r3k604(02vIlF9`e)l4>3gfAE)$Zfcx%6;FK|!>#prDdo2*8}e$_j6wq7waz_`es4 zdm%f&6Tb7lR0Uj6A(fU0f@63=ph-y-DL5Knl;F%TlcEJ-RHV!>mjWV7&@@0Iro;(! zA1eTgqgixsCHgXO;X5W$vgi?0aP6ZrA`r3u{t`N<6E+@wCqH&>Gv<1ZpcDIW3SZFq zzXGrcfD=FfyjTlPfm5|hTfvv>mbNc#s{;?wzPhD;aH?*pZ)tlS_{!2i9r!Zp*(I_S ze4FyZo)K$pfi7ha%_W~gXCFoC(W$xJ#22{J)E+`hgixSV~FLYsxT$hWLe=X4m9%#0>FE z_!OWiSdRv5#c2knWv~mUS)6|mr#YN|BTn-;{aKtwfxvG752|TE$aJ}yCJ7yPqnf6O zIJaF*(`(8wgq^!fO|xtAIpTkFkEm&$sNj#NX@PLj1!`KPQ7^h7zZM0m#Y4e)$7Ca_O z+PWs+fuH?1oX)}TQtHfGQ^vg}U5Lvs<8&!XTeT?7uW2*Crhd(ue2v=v=ILG23)5Fl zjC;mM7e+lhXEKN9rgu#(csghH%`6l@9`=k)z)E*b&o4~O!PZUh^X#0MTNs7kyZ6sc&yP>;>z|mLhh;n!Wzoq0$E_l|Ai~VSC3BS6L+m3C!@Du!Fwhbc#BO;1EBIOceKWBD zzxNU2@H$6~Q}o1NyUgVnA-qb zw+DW&);*8!CgAr3{62tNQ}&5(Y{R`7g?*gCeR~Y%P2=ZLs~7NZ@IlU4ck76pPNuevjYB=;nq*7{mwo;37=HTDfwgYeqL?c3~tLD z{N9UUV)dzc+~)mwe#dYh*TY<;%zFI2PkmbHPdO2XA7vgt{QD&QM)NuY+poNJ0k&}h zLlt@tn(KY|eaeh9!Lp<9&EuaquOA-&DLkvn_)n4q!el&7_9}+%k_La7*eHZ#| z8s6{3xP@jtMpUh|suxoq1=^MNpyzhuH+<4Kuf@|b3}ebjOv3Lyp9seXac`#7aq(cB znp=S%)ZWQ8^llp0@L{+?&^QCB0DA8(oLLMi7GVB5A`Jfy;=eL= zELQ6&!&tZ%mO$nA!Z8lR>jEr;#%%)M%@f1w+$&`#)Y?($|N2|j(o!@I*_>fK8sivl zR^QVFSCB2RZ>{jt1ZfdUcf(w?vb5rvK=~~&XEVGaYSjkerUm|W;@mAzxDfH@-(PRm z(%>0fVot@#{|tPr;>5Jd7wlIlt3q`SW6GX=CmNpvYanF5ItFuV+M__w-Zd-FD8{&H zb!|{;AH}Vhz;Las7zoeP>f6xzb3mmHV=J(?y2|~%k(tMDT!6DXifi}4&$QaIIlMAX z<9r0Q3bmM2SLsh0uNk#pGnh`T*0M?`KmNXP6^jstjA4qqc6FM;z4$vbo|WT#aQ>OV5)9u*e%tx(+6_adq{uJX$>7}Gz>!RVlH7S^ms9(4^|TM}_#`!FW%$0LsFpIYgU(yq18ou$3X_^sf;vr^X{sgW&+nb&ETcPp$J~9V$#7AX@Y|ZnS1KW>zEzb%MI00L< zN(cTUv!AU`!AXRx2h`bE#j$LCAD>5Mw3Hq!U>fkrQd4%uMn5vvlmDsKu8#7@->_5V zn8wt*wJlQmgCJ<#N)3IG{(OCPSX58@H{Gyw#{$w_3rpe-65e!hlHdc zNFzuH2n!-9T}ufp-7h}RH=aL!*ZbF*x@SIj%suCtGiPqmo?kDANc3cai*Y;xejZ7L z`$b~iqFb$F_$KvsGriHpQ_~~Le8W&3E+~WNSs#~4ZSoTm+{EBm>7F&o980V3SC_J; zi=i8;eYS&2x%OVaEv-KRdsZ_g2U>Lg{iMKHzp*Sll1IcL>-O3pC3a<^6G?M zp;z}X^tXvo46MNm%cNE>4>W}l~2ijnQcYEF8z181_r5d z4_WlZn&ZPmw){Wy2T6fPM8N@>BiHO>$yJ|AwOmfQjVC^S09UE3-jKC5Wu>bJ!dp`& zqkoEWNWwL^GdViWB5`=IOfJ^jw3jluG)JxH>kGFytVPP7ABSAnbN=$m@_eIp)toZS zXPcla4ycy-EP&~)nuI@S~>4Dzn)V}VG06y0h zp}G3X@wen#TJwl4gJ)7HI3GxS4;HGP=civRiv*K!(ixS#Sf@lKt9WydrN?bqp|v41 zj$@I!+4NrDh!Z!4;qakC9OK95m|^x1Us~H~Sgtmn12S1krl=|QgYCV^ztvwvvyj(qS z{*%|Ra(=8)vhuKUc6E92SmtD9=LrPi@X2^u+qifE#XthQVgevx0UW+Rq<@M8K|;I& zVnQNd96nty8|P<05g}edK|zqnBbA($o3f3AoxK+jBnaje0t<@>;qa+=Svfga%edG% z*#Ppw!0 zQ<48u_eWxakNl{}>$xha$g5kq0r^y3JhJcL<@cXrT|du9=2cv5U4f4R*0Hg3coe@M zkX`0c_%<9ke3~9FY&;xX?11cllRXyddb_zf**O1^BL5?NJ_Dc$KhQ)}Py`5iyi8JrUkLn%H8DX!UQv<%rUgVrc?E?*{9vFUSm3V~|E7cm|E~R)UQj^n zks2r@Ajm5M{3|2E&u<14c9} z9|-yf14!WSQjn0yBkVsIMMe2}!Qej#A5G#9Dzvh zuke3}M1{bA4J0D^H``+W*8bDEsF=XNoj+oF97tFc{8xAX;u7T-`>W%BQHzQFjTHnI z{Y$ccVg2vJ?6JE?E`fsoj0O?|n*6015rMzq3k&?MqepoH|IG>gqc36Mzx)4}O7L-J z{Fmu}Q-3SrpQ?X^Xa*D$0E!6#|D_ju)P}Iw-$MFVaQ|xPf9&C(c7KiVuUQC-{4JP& zf&XJZW{)!uX!4K59&LsH9|1gO1Ro*%1L#lw(Rlua^k_X`k^h>&W1W!bW7|LGCMfjS z>Ywo+^CFM=f8d(|MIPs;i2(m&)5pm!Z}6WP^0zM&{C9#sx&SX5k4JCjWaVWeZ)5HH z!Ul)$sf~-BmpxEOSQr8U{^bXKbIsDf$4BrJ4jw`jk{9I!;-;H{vLDDK_c8Z=qZ$gm ziV}&o2L#=y+dARWz>d_m)}e2)PpT@spp8d;$7Rr1cd=NU2M2{7Kc$_ zyUU#)&=$wcZhjaFr{sdS)9sWcit%+u(?IAtOlgQW>`LN9&T+$N4s5X=Ov7%ac#WidV_F$%O@D=6w&ablM{ol+U8kg|Jk0UeGs@6lF;D~<>HO=rL=~gJ!7?95p zC-5htZbw@7~Hw-Z`-dEl!OJ2{K*Ld@MZT+%zReMHFUt*)U-g$e0X)9U> z|38+Rf3@@PO7q9t{pC~t6h1os|I6EM{bLjVy9fyVi{iiLAn<6lA|fJ>Zv6jeGs65rqN4w6H5){c4(+ym z_nNk5lg1WPZ;!-XWm1oF#}C1ajoo~o7(FN}$R-~Dh<~QnYZOOY`H}FhntF8F5` zWj@)J0^viu_28?TUzjHl*|`{La`^?wf%~plZ+oaLUE8VavY+zk6OTYrnXknQK8G;x z5!OC+FKZU8sf7NwW&%#To)Ig|Ea~VidPB3 zEceByyu=|AF5?^=a8bXI&NKeqV6r>Fx~P0atdWTFtwB5+sdp3Nt7M{ogWf}*hUP8q z0*}to1M%kjxza*gWB&rhqO`K)PD-vA)3C>Ds_Bj*plngg#rJ`fXPF;#pb)@nRge1D z7_ATxCS1YFBNb{!rO>&VFDDpaIbz>)?F#FtiHK%!4Vyz-qwh|6G$C(#IdpU zv$EAY&nFbY<%=dCk}h|uS*w0k1G%SxJ(Lo53|Vsr;}}YQFLLWa&OpXN$;n%?&~P}; z`kgY?n^-)-klsCw+eFYp7J<@>PlI2g zCDS>Ltr6q)OodO80MAEJdS+QLALAW+)!Cn2a?10$mbo z8HE>^ORpSvq_Fb20`RM4_eX;M5EoZyy(W_1cvv~sAzCx@VJy%0+FNj#vU6o`ASf>ZhAJT7(F&iy>Q zBo1z3!a;8xoUeoMmq#cL^)k=)i3X)?1f7QUYSGV-93(U=yptv;KajBd6d{gmXoKqE zgL(ZXMbOa0V1N8w@Y|Q)7>5|{!}u71o@Lup!|808X#{gzchapqVC|j@J(o~V48*g1 zwYe*i#1wmrp)a9$F}WurPRqKuGu1(#DE2(CrV-%k36A6#VJ@Tw4LV(RYTxmkkve{c z=a3QsR~GjzYe-&=42?Fxk9!gg2g!^*L8RbZl5MOEw)xdGzf`$Q>^iD7L*QPp)i?=h^BA%!wp>@v2MrIBT9`r0!xMDgz1)XZeIQ_%SI;;>;`)gtD$^zhm~exClZ z1;AQJ3xe0FdRmU7V0f)5MLoPcX#6JmYF8~yHYBwr-NZPm<3O3D0`*ksZW@00EV5rR z89j>N#f}DjqSV+kKj4-uTCB_ftr#)Otue zbTuc-(^gJFPkJZ2_aW>%0=6|o(Y)4q+rWTXCz&5dFKN(tRTAj=a0ZLf@L-Ho z2mxthRDb)>Jetq<0yMT5g5Wj{1)yy z6uaA1*x<9&wNz0;I};5Dy3NQc<-%$V}~Il=Ra0x#@?{-R*(A(sqP(7YFp7Tp_kJWN}| z%{3s`u*|c}5=LnnAU!)qB8oUt#QrIUbUEEp;Fq=AqJyeA?q@n4+WuYQXT-tzz>ov~T6!qTNpMw*3kt zw_z7aGkBdnQ`{=nlGEiF!gFIUU{}5vssCO`4o^8?~m(VcKNT z9adJK6`w70{~Tq4<321iUpC(UW9Dbnc)8riY0Ww^zI1{^&QX#=S@H4BLv`#MpPHCO(#Sg)P)FLZjO znl#9lx)c-fuJPsbgpnSd1(2BK-o-oTc4_$ijx!!Qh)8M~(1v9nbIl{|PS5fJgO2$$ zAd+Tb)Ai;cjY4Ywp0~N~49%+Lr-8q~*p>q$tY?|;nC;s2n19Jdh|tx_!n1u*G>nCB z9UJCG;&u?JEsaxp=WuaQ6q5Lrl2v-)DSLcfxlLKB0{4XqMfJEdUgs7?MO`D>&)1$MqiFDX z-J%;X(M)BPWU_FXgjXkzupTew-GgTp`(gRgw2=j#|1c%o&uYp*yU6h_%454wEht`a zu_D8C*(WXY;?8M~3TCyrHbr9R7<6P{I;O~TX_b>4Y|}fJuO^<i? z*t9S;snU5X{5^E3z$_F{>{bS-6(L&pe#a`U0m?MKp&p`h2$y`k=kA?*^nTGis0N*G zy4Zt=8o#MYz<2{!+Lg$DlQz<$rP4W+^CFe+Xv*b~qlV%D%S7XC)Txp1z*{13Asr`} zJzFT%0(>YgwG4hFHz$o_>hm8ZFmJ|$7Syw{1)iKR=+(piS zngOWzq<}sTQ>xSI*(vm$AwK;QcFFg7$$vJZTbd2UTOTpFnXvM}^s_}^o+=t))zo)| z4;Ky2=egItxx&}l1l3@!Wik|!>=%IwN6B#}XXJXRdjV)e4Hnex znM-gsqHgu2;IEHFvE9}ZsVZ^4JRz7{05?c6%R{`7moUdhbA<_6vob#X^@6|yXmd{B z0%>DTq(81%2#Mv+oy$2Ank@1Y1lgh|;99%)Edf{yz6Te@LMAul? zwE9gM*2-y1GqSMFqZO9m*=^eMj7NJk0@a`j{;5&OEAEZxO>EO8pIEzlAeZ6q*%`g` zr0MZGQUp|vnBn;hI48`hycTL8K3AHXp1{RV$9M;&g>Rh*>GXK5AopK`kzk4j`O+hP zKKozL_7%dOSh?fF-YUO~3tB5*o`~GIsGIekO`ECIh50QB!6g^9CnxTn3>B8Hi=Zpa zQL7Ms(-5D=;RINoZ6Ke%Eihh{HZHY)twi)KW~W0sUP73deJJD$7;|W_fr7bcJ*m`0 z`ng4h(i97lALqb>;K4J_u$IZGXUWWFwV3TLLT70gVZqpm?_E5|zPf6QzM{BHMvVMO zg~YdUh)xX1Thfj3u?^QW=9_s(I4@(^SvprIuzK*~_|TUt--pUxx@P3_4N^O5>R%~v za+pPYe_$RKZTzjPxBbZqb-8%h30vg3HAiAd%F)xR#7}crCzG*t4Z{g-i*CuF^kiK% z4obwn(k#rIK4Sj`fj6@>veuq7!K514Ee%vDSP%H`e zq<3L@U>{ETxbs2_y*b1TPNiutK9aa8%MQXb#%#OC)_Sd@ z#xnsLBO64Iw{s>OllP{}uE2btdS$NJljL!x1r^$*Egr2VnSO5O%ndRi-|$GDGr*s`WEkNsxIf?zxR z(~{fyb_@Xt^K{O0oyYgsDSIDOXxN!Ikxg;vE___)ltl9Q)=;#sCqWV4PwM4xBak7` zUDUTTF^GA3!DTj_fzg?6_Y~uq$wd_&9Ea!9V;Ou!5~;~ZtLZ*TU}}dt%!>vHDq_%k z|0=$I2lZr{5+3PJauV%M?#a6K_2Yzq-J67_I8RVsv3$NhE5A>Yw!!EE)9`pnW$hcG zS$v+t_3jvNEeq<IGgFg$Oti@A8zKvS%Z|@(OamaF7I?>-%MJ#dSD8?uyO4WBN?8n!6GJ+I74#s4^%|&rOB4~$i5GX&vQlWAKD37iDDa5W`K{MK zGnaPB3(FnF1pDE8c;p_^J4GaWP!FjvQt(-uVK7T^^&W(-))O_<6*_`!Li)zABXVzv zR+WUu=BOM6M5j+>s}}|fmkR^+5pD$Fxk&$!L&k$AHu4O(B~LMeGjb(K-p1WV8VX7# z^#f}8eA8U58NwO9;9kFB?ZJJZ3;MjaJ+p?r`6A`JrtWav=l}$b54P7XyR4k_O4Ks& zd4ucZ(MgZaY~$)|L@L=W-ZgqqK}|8iE%hZ`G6c>pM1CX6e9m~8hH15Ymvl<{CdO4u zNiL9@N|o~^WA<5|ZanZ8z2gSw`6`KNx$rI&6Hqi8^R59oW==Xaa5`7rdwm+saUlE6ot={`T{& z^4sKFiC6&YcbuC``uUsas-X$^gWfFlGIN(v=@tFzFE#_Ji~t-bLl55jWkacj#Pp#^=Y@nwFO@D6=0=^ z$V-3j;%TqpQ7?SP0Vb2N^z(5wFS-NOZ|A~8NRA@TFSYi%4G-e#WbQ%d{fVFY|zT2Rz6BfUw=~H_4dZlzzJ}?K2!NVo2EL^9)|(oW}Q? zWg{k+4=(u>eY44sCZ=I5Bs}Ok!=u5Xf#A1gfs!`uUR+~LJzH)@!DcagG^8FMcI>e- zuMf*kU)hm>|0>ELb7V`t!(J>BAbXBlf5;^lZCZAbA#C4HU$!Q`nGvfh8)8t1dv3s~ z1BFZ8HDKPzl_zD-YlTz_qjOMI2hiW;krfWcd~q>Tm)hXf(=bo`G?U|H;0{lg;(s== zv2{~V(5P!ZOWWWdWMt<{sEN)hMcKTnd@3@0f0IDHBI3h53%c2z~UDxk<{u**cT z_e9^Sk?KE*hOxw3jY12>VVY||wZ`M=SkYo8CtknVz@d$0c8PcDWtn@a-acW1Fe9bs zW^&PLL4|CiJ%Kd?SI2pu3`92NN~KDG5c(!TvM*h#{VfyNL#dGZ01eAzP0L!19$t!Z zG0pm6l&-x%`pNMh*hg+Cpj+&Xvuz$HaeTkQiu^OD@1=AwI&V86gluP z7#^$ycQwx^%Gepus2p?@tG@-q(Cxq>k>A0@h)#h44}d+vX**zkHbH1J(Yv-OGg`;5 z3kRftZCWC51RncF`5+ag@)#jD5y+mA{h6kk|oPVWt->XE;Qr_rEk& zZ2?+r$pnkYbaKHT9AHu_c8u5WaF6@!Z}8^bLJLp}Pb#Z_#5ocnE`Z%wmvh#O44i#? z5e1+XJMzmNrAAYMmF>qEsDYS09GyKuY zcrw{X(5d2hrMyhnl{jy`?A3eel|k3FeM@*|MPbjne|9o^1$%K&;l`@ zqS_)`0}UDzZf^FOXRq=&yjQ@Mp&0wN9k*!0cq@7nhEt%?RFH;9) z*(8+;&>y!7#>1W>bgFs6=IZeSCd7tPR1o+uH|jy3FoIH*c-8fK-ob`Cj+PF>oq(c? ztr7uM9BSr}2m~WL8ysr`Useoy8YyHil>D(3vF0?YI=7K1mXNILvqW`rDxn`K$w1I5 zNPE0$--3FG8E}Lx^1`!1hz2Jg)JIOKc9z$WTBk93=$?^XLAFbfO`vPHW4Fs@^VQ!k zy6GxI?kWN2_?e;H2?yKh%q$W#P~!Rr=^fGS%5^x!gu$1T6?7ZPxDH=9a{>T<7S6U` zKupeeprY-ve!U{+r7tqJc|GK{-Rsc{Zje7rl#MUo^C zD)*Vn=}u~hBGBsziC0o?cC_+EY8J)uAxD`G$trzeUd3C%lxU#y8!v1JA-64!0q_~^ zYWkEKRl+4TH4E7*G?ggEy8fo zPQWl`fEO`>sYq?pfYmbZFmhBQrj3Oi@BAHZn+G`24h$wc{W)D2#jaC{X-uc&up7CwDB z`Ve?3fOW0IyzE(q+#BIQ=#y{rkW$sZ=qS8wcKcx;H4* zXuGJGVMaaV5<&c@5927Iycgh9i{oB%Qst=5;Jhtas8Q7v${nFH`Y(k*%I}#T$g6t9 zH;)f)guSFQizS+-H0+NH@dG;7WgaAzPedEAB|CH9-|H~^^iXkRr(->~`ff8L`!td6Jp0b5<)H*`eX{0tlvzssO@$uH z70ETnLOJW(dJ6S2Iyg(!t|V%^H720~?nVjdj@&P$aQn1(=_>X<^fuPrIikjd{<>dy zR(-ueQyhi|Cbm=4hxwicfb6mSHX0}s-U}Ohz_KUJA{$|p@Lv+9l?~+23@_^KhJv)9 z#NGqC+B-z&7uwY&WEp?}))Za1gG==TfUz+q6yuT#WmGO8oWa!Mi0PX1lBlCFWeJI| zeswQFQkylcoUsBocmrCItQ+ox$v4)Db=e7+)1ZFSs;{0dGSxm{!qnR3L+8&SBb|2<$0eWAz8oEz%# zDRl<-^l?F_j@Q{@HVvJ&q|3(J59|4?BD+kdwvmfxwo2E#CWVarwv-*LV~qbU4o#kV z;-oIL1f_lgOAtRKB?WabmR|8#>Dk-L9*i`;{62Pp>7cai@xo>+yx|G)J+LL^X2|AS zds)F)yLSxIK{@1xs*%uuw*wjNHHhZkE%vap|g)@>9lMa@L(#-RhG;6K%dz&vi z?(x)17se;<3r7uOR^uZCxu`<9GpN?z8C@j`awxICZp5_luql4Zp`pdvmGV5(oOCb# z{j4RtcMP4BrYZ8dZkAF9ADk*)-DIFGWsXPdcc!3}MOK=3h>47Qa%EUOdx0=*sdzKm zIGgMIX4CX*K=bS9YnOQS?3CwH0;F7-!L1mUf% z5)Wa^3F`6hSWTIZnGh+0yfn8lt#~u}%39(wwTms`ZPc$V%)vy*dUb;};)m(yBQ%p= z@5SO8)56BSK)~1%313(pWA7O2k$rJ8%6-2oF+-@2C)VgJKqQ7TDg6?1^-A=8=K=d2 zPX)-yjbZ`UH1PA^goo2uu|9gC$ZLxkrS7v_0w{>=;8-86^xmIC!J@XJKZ&tAN|+~6 zl>=P|6%n9~Zil9*3WK5yq|TdkS-{!)?+=7mP_&2Ji#@ zurFeccUT=G>q>!Z0RoS4EmBYpk)%rJQNk|5xH*@IJ}!St``YOQROx6w8-wZYb(WoB zVdBmnkCU9Zo57ntrB8;0v%fAi4fI&SYZ@@`XhZ@FK089D9$$A49*m$bGe-GR;@~VE zMewA&R`N7p7<4+7IilI$=woLo}kIT*5YhhPBnk6p{z_ZCZQNbyZQHw&A4)(US8`NRk4u*6k` zBIYNb+HvgVWqe!fBvtvfK-}g-J8eTb93A!>V-deyro>T)&$$17fXaZ}qmcVkChOY% zJ1pZYa#W=)q2z#e~fdHj@rh$wEdX ztfyze8p8{;?_rCfb3Oi+nb4Hh^v>6rjG@vr)lvfp`mN>QZ34J+-vhytJdM(w+g7m= z3St|!js|4o2GaV5jK9~8-@^3TT?~zG3YSKv(N+7IA-P<0OLuR9Lv8+f-g zr-m{^y+4v9ER=~bHV=8Hao1hSx6O7mW`OAGlCcYBx#QW4h_-fNn;0c+B|ceuJ<)Q$ z$&hNuRzX%fv75KoNhU+*@VTcuQ!Q-};HZw@yp(4`W@s@es3Xr{X_LYuzc4q@>e)7iq7sG zY^nz8ihi+*b9Oa;WbER}>E-?M&1w^ukjaf3la6S1%)lc)^N2iV0-SDlrqwIUvO%`kp-4abA5t&o%K_ zh7L27)+mo-f&mKABwosWa?AO3mh8Rpv>|%FuDE?n?mHdhagGwkMz+fWnfUFDHL5ap z3SY%}=mUtXY}=D%x-R+81=D>5`&o{T4Y-B5hTAFZeMYoq%Wtmc&8txIschF0 z!TOzf!Q)Xc1~>;`bO4P0M zb$(d%!T}#j7V23TYLC1n>X8UPx;<8I(?}vlFj8?SM$eP>eD)UlSknNvz#(aSmrd&bbfmA+IURwZVFU9u=bcIV zLDQ}!?P#;`UrA9<4Wol3<3XHej8JG0s-w{ABbM@m*!U-<5FzSUr@L{PtEy44dUlzr_^4o?kJ#Lvu0h8>}Crz@LD zjf2pS9(=}F8JV2GPL$298%DMBAD9&ZYEzmTWuBDVp0S!`gC2@XBu(BUFZsYhXxCVq zSupG1aQc!1lj6IL47)NDX_scygR=L7`-JxRUmEK0w6H4hmei19yDzC{HBWD;>aT2W z`;9GwdQ$pn;KopO%B$Mo9OC1)!?KFfWBCHrx@)=Jd)3=16U!S>o$#f^Qb=<874h1` zt}EQTTZSrqfaDIjbGNU2mg~4~DLfRKzwIicQy_T=2e1*<-F*I*C7cg$-_q|EQcoW! zy67ZAh6;Klh^~``2=+dFciCrNy->Nt5ktRvhJ0d5!JgDw5O%8>_V|PKtD>Cqi@Y#b z2{ja_TCM@S~1nJMX3V**GIW!DfC|7kE88>tpeS5iu zXgJ`imONX@bTbE(zLN2*DA+UDE#EJ@7qh#TaMg9)_S)q+?>Z{7Jy;gKe4@5Hp7iki z#uC?`1M{m0igSXb9oOz5g2|$oAPey31tRMEaSb74o_KEoGDTd+cAJ7_!F-n5g=0;8 z1QtCMnfo!5PQ|2o$yBKd{z|E=S>(7_Y--P?cUjy}JBNGj+vHtC8|UpZcdwa#IjWW{ zdR?Nnrpt$IJO?>{v)RHrbcnkx((T#2+=+Dm{ULYL&gNDP>Zx-3{Y*Kz^nPn;%Twd> z1o!e(?Q}1Ds>K57tP-j2usz0c`{S0a7_8^;P^sDq{^QP%YnUl;?D#jk$*;p7Nfd-# z@qrAu?01Depvc5gO_9fwcUD(x4szZ$tElDJWZC{&0nLMl6zU-75L+(GK7v82&K$vZ zy^(PP2OEN)WFGV%W4Mj(Ff1G<>-3$K&9Vw+ZWrm!!EH)Zk5M@P807(7<`!%QOrxTC&9H?LaU?8IYv5?+Uq{xmzl_d09FXDRUFiNeDqhRsOAX_^E*q zf)SOHS9*_FS`!*ayv{~*Jx$qW5?LwWUnw~vgGM2D`-U?#5girS)szqi-`9v-k&sy$ z1eN>o9T6-pSG}IQFrAkcm?Vbh_*A~$q~Ju|Prc4c$)&9Rw3TI%m!v1-VqZ41O=Ts4 z{Se&^v)l=HeY;uUg0uw-iH^bU)*QyE`T|%pUi$?Jz1^!YK|Tq>IlB!m@G#zXbsgHn z7Apyu3tn>36)NmLr4aG(F4B-OVtiLy)Ty1y0-3dPWV9~Q#Cq__GCyK1@K8BR4t?l= z@Ok69CrK|bjZ>-8N08m^potK}fc#%&Jx2Rsus7)!LK#unJjPBzi`5uqkI*;_v;l>WZ$WKXHfna`Vt-y@U~g!ag>T zHgT_naD~c0gnv86SPoaYV`i0UTAs-|B=F_2Ov+9&2*jF)kfL51ScIeBcD+r%#t&p$ z4s$(WFeGX#KPV8GP_n)jy~HM!EJ~6O34cC%p$&2Q_#|)fwt^C>m^#>8fq422UA_u$YREu?P|m{&9W; zg4E%)Owk!`5PW%9d`8CLmkg=bS07G$zU$K#*Dze~2$yRYw7AoY!18L>51`OxeXQjp zo>b#F*U&)G&&o5Y=Trm1RhxV;#2r_{VHz>)6^SXyhk>2`v&ayr{W;E-3b|D^k{ws6 zbrc7eHUW7e@lJuRqq+BoB@R1_jh{;02|#nK&Hm2(0AYpLBOz-KgoeUAD7{gK@|IG)i!vdYfA(WZ zKp>ziSc_;Cy-*N-7IOBD>lTdje#`N zI?cO%|DC(8fF0ee>}SRoz&#zBRf-ITBFQXgTKsqSl4m{|4MEw>VKwvL5i~hUl}Hkl z%^!3zwwRnjV|$^?lRZ*{G^EA33gEaUiY~QQz$U@93s&qNc0mQ~`g`sjM}qFrz0~|1Dn0cC5*Xvv=OeBhe7#viwL*Yx^rFYodC)wm-+EXtDa&@l z?Gvx`?jj9U=2DST0+ri*V-VS?c*-sA8X12r15z)qDZxF`swUZa-lp771ku_>QI6cD zZj_nf2^o#)>^oVdNN4(^KF-s2d5h{Y9%vqUB;QYi-(|(>tGfD^#+g}{U8x!i=X9r< zEEN0YMD+sA+6pZAPLF{&N5X=FiC#s(lopCyeYj0{MiF8D1h3>FvuX>@-IWD~Hc{h~ z{Kt2#sRr>w3=zUd8E_#Hw~!{H9aXfoAh^_?pOpdpMuFW>dWdB;C6iBP@r?2zp&3u! zXoOsO4RtZS@p*MvC}76m_A_gmSufzjrkn^;6WeVA4zy+xJe$qILkFevt*$P8Km2Cz z<)l>Ad#_^dVYd4KqK^xR1#!wi+cbKaE-yKMN&UxwYd27Bv;EiP&owrlQU)YedOyg( z5p!Yr8OVF@1-H7$Ctt48y7bRq23uilZoX!uU|nhREE>N+d#~-tf?CVAW##cbsJHJ_Rr z8HG7I+7SbG!*mW*uTEdMn?Ub4-}M|B=;P7)0ue}oZ}uRiG-^uqmmJZ#a$&v)?RpSB z$XWbUfZDMH7%IYa*f(#aB61~=_+8Qxe{;~VE?q*G71`x7e}pRtkm)sra;|T*gSYjb zZ=POZqP~AY?SlYsW(7SLT6>e=8g2t%O<1*_ zK#i{gl~0b!{d=MgO6?-$dM8HnT?%_Q{wv>?It|mzrE`=q3VNCy1@WIK9Iiw)tUFD9 zVc)^ov)_+ChvI}}-Qsn+UNxB}HUKWEobB%Jd!RQ|cR$V@=TfMRf_b)4nhUg7t@SR+ z&=D#>waRIJl0g(v?-jzRov`(-gep>xgm!0BKH1NADSWsLN-&0iA}!Pw#_fw;CrI_s zAGIhjY_6qR$*Z1*NaL_6W|izc+|vmxVGm5l2ux$ma<{5I5FA!^w-{6j1oMx?#n|&NUWA8c5V? z=_vW>(0L#}K*0k%dh?+>PaAX`ob}nY>{8L>qwcSmkB5)Z1ZoPr0kvVNYFXU*N<5K4 zTuu(4X`k`7axp5$57e0y5R*A@qNX`aK~M40**mv%YF14h{V=(G+AzaCP~j6Tz|y+> z{4VT@dt+9HWlpClDEXzKHTcUsrU*Y&|EsTcrzqLIDP4+Na=d#A=3&}r4Mt90Dm`lJ zm&On?M_un%6tjwDZr?R}Ex5IQTtoCOBk7b|XU(gzDPD{_RSS(O^jMs5K@MDtLy*+) z7o|kd*^ajt)OwB?@$JAB{93&@27TAVVIRTl$(yL*{Gin-fPKR8SSo4q820$=j2KP0 z+X0>407CbM#3sxXC#$$V`1QJf%fHets_FgCkdddy=f@%zhT;JDAfC7`X4ayJrsi4+UcR z_u@M*Xr{R=?_Qxz*9!lXwQ3H1V~y3{I3^qxcNpr-iQkfMgOy>4%1$jPnA2ZeLzjAH zadpH@`uG<4jRNU_7m4N>t%_u)9XtI&YcmxW>tkC<@`bYojRQA=^!4 zLDQ9?u!Dh*6-W9(I&ZMPkbc{3SI^8SVef9`<_8sO&<%|$#fEH$pm%+6Ofina=if3d z(Mc=w>oFC5AG8eoAY)sf!~$@yesi1^zEiyXEv_b~kz8Vb96;3T+KqeCGbl6e8}4a@ zw@qUoN9QHW1Y26%YVMka;Y?<6+ zw>9i!=xJMS(Fk>3xy{g7Gv&&o-A7sUM`zoSXX4cwGjK~6ME!u48SA1_8JZ}qA+3heYx*8V z5Cx2!^hCu|m{_mtX^Ef9EU|heU|D(Q61|PJ?!A>vRf)<`;C#j_a2{gAQ+Ob_^6_j` zQrg3j^QyOHibSA^rJa-Z$IIp+?81VpSDZ?L5_wXA5@v4$C3JI-4luPm23nNY?JGM|=)2POTW!_5CND4TKj7l1moG9QJ7a) z>2euX&PF?_Oa!$K9-(Uxl&OmXjPB}faN@}|WHPbgA9(%@E(3U&4A!&LH-AJ37+=ifAa9~Bekyp8uCen-A!qa&H7wl(yt8H5>n;uCu25@IsC zjxigt*52{~saLR^VA?$Sl!x$8ndM!-~>4r%eiv0sN8Ki zZmA+jfsOWRHtSfgeZm03Oz&AGn$ay~8}2Eao#SwE2Y{xH^K9_SVD4?W4wv6I>&4}8 zeBLEKqVdK4!;9GE4tHL;D?!qoU(udE>>KrfonD_w^i{s03+Y=7to>pS56#lUFZ5Wl z{@Cs*NFaaYmwXR0cV&a5=$(~(`*6eH^k2U=6S8l#?Z9Xiit3xM^i(tw-27*!M;t1W>NMD1R3K-6yENY9OcC4aiYi}j?{MehSSz^_uR>fY8QLCsGdv6t5Y3)%YLI}Tn zfB)ohxqIE~b+6Z5?)`dR?)`ejUXRS*`=0g3y{e*_s+smY;BEDL;4!(B^6Zlk<$iCp{(8)$&RLwtvNl@!GGiW8@W=8mFsWz1)$zKjn88uBZBOTJW zIngmls4^KU;8m5<<@%uU>tID=ZlKkEQ$~G<1XM1K zb_p#ob2V%81^B^G;!9Xn!v~BiE+-®`>vG1mSqz73Ve`tdt=qCO>4r2L|KENr*o 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 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 0000000000000000000000000000000000000000..7c3d2fbe0a821fe232fcb3348738e2059a69efb8 GIT binary patch literal 4159 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 \ 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 0000000000000000000000000000000000000000..3abbdc1fa0e399c908ee58016dbb2e8e2c49b7a5 GIT binary patch literal 4329 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 literal 0 HcmV?d00001 diff --git a/docs/_media/boiler_16x16.ico b/docs/_media/boiler_16x16.ico new file mode 100644 index 0000000000000000000000000000000000000000..a7f3d243237b86c8d93556869149c8eab934ef9a GIT binary patch literal 1150 zcmZQzU<5(|0R|wcz>vYhz#zuJz@P!dKp~(AL>x#lFaYIlFhVexkA+}l1S())kTKNP zKP4+8oe0842KuK!Vo*6Ox*$TT3L*?5LflGL#_|n;p2i>ILrl-b2AiDobv680lwy|k z?tDJq+w=K2^#di?^)w_WcU5}-pWhn+#F1b;rz`CL><*vbUJi;aKs9XW1~4--frNMh ze5|KU?aBSPYkm9wll!Lpzi?zG7=zf`*R=kh*q-*m&)s+`NG&rHSP$4Jb~aWJtu(#A z;PL;@`~LrWx9k7&+pGV-d$a+JL2QuN|M%PePi;?n3{uO^1`JFnU}p#GSMG1meDdnf zn*YykuKa)h(vtrVuPy^)5E~@+;^xx-y$vx>fZCLyc7jb{Wd)n1oER7QWd5wy|MO1gB@g!@|>AnPyYRU^#9NI2UzjHAGiO{nOY0h&%ure zMwtG&vwEKV|MTSk|6h+F`1j-g|3Mhezx#jg^g2BHyW#r(0rkCqeGQC3Y={{|>IbSn zab!I(zEb~BYEJ{R|NjQM>o;-wzkj~-e{yH`|Fc`N{~uThGy}-~@%b*%`hR`B|9^Ua z$^RXT68}$c_5VM$xA_0BZ}$o6pEsxX$^XAk!C`jq)=^Mc|DQXp_Wyk#8yv2G?){%P zqaGvtSXsg8N2ax@?8ckt7ytkL@c^v;->=92L172NzrNo6|MuDG|E&$#H-T|2!v@g< zPCrnBSzS#zG9fN>^{s0M*Kggp;O>-(&3~p%ZvEZYUH7r7BIkB=gzqLz4aF#+dS;l$ VAMy+gANUy<9srZj0iYs&<+3q literal 0 HcmV?d00001 diff --git a/docs/_media/boiler_24.png b/docs/_media/boiler_24.png new file mode 100644 index 0000000000000000000000000000000000000000..8e37e504b5a136b202fb1e65d5277f31f40c1666 GIT binary patch literal 856 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 Z(ow`R*(bj`K{5^~y-|N%C2JA>zW~=ONZSAa literal 0 HcmV?d00001 diff --git a/docs/_media/boiler_32.png b/docs/_media/boiler_32.png new file mode 100644 index 0000000000000000000000000000000000000000..ba7976f874007f3923b084971f014c86b3c1e189 GIT binary patch literal 1186 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 literal 0 HcmV?d00001 diff --git a/docs/_media/boiler_64.png b/docs/_media/boiler_64.png new file mode 100644 index 0000000000000000000000000000000000000000..a2c0aa610692a3a9a09b47068e8a8b2805fb6f40 GIT binary patch literal 2238 zcmV;v2toIWP)5{L~61wv^<5IXWE z0;Uoeq$;*UTSrHwI<$aQM>{$K71YjXZ7Tx`qD~cyRG?7-5s-HX1P~IETrMOexm?cV zlH6S`xBcUiK)5jEj(c%RzB9j>-|g=6?03JnzukRyb_M>yZ-K=?C=dy#gb->er5X@G zGhhMQffm3D)B-v{4^(x%p9Rd`BqqGzBLm0>CILTF@)($Mq;l5{Ca6@rw9@0~qs z&#oQAx($MYf>1|95E>c=LeSpUN?U6y9X8v|>T&?3z$xG;uopPlmF^Kd6<`>!99Rg% zUz_pB)64kNs=xFqY`5EKsJlW~SUBNoHG`DO8#-<_nXp-{T&cNCO|>4qPKUm#3VlTd z=TD!ax}v;y1B5V1DYpPG12yh8#1jFMgb?3IDYb)?N^-`IWBkN?ev&_l@p<`ZVq-mU z*?)X*`kv#bPI2_$L5_aCo8m(Uu(r1&gs75I-ih;b={GzPU<^(TA)%qe`EIjX znUk4}snKASQicPa{q>`8v)*BVDm^nZpp6Gmh^zlza7YL#86%NWhT!Dbe?RWl3!qTA zYvv^Y1YGuH21{3?LHvVs+l zJ;FC%e&Le0_QmI!GGivMy!kdssan5r@|ytX&zxq_%xM@64GbNgN$&iIiO>2mNJ-7P zVvc|OE?*b@mpOS8_^{|J?#RyZ3opM2&}ufbWL^PALj!q>A7kdSmrw*Rs{{zP1S=1gW_b zd!@G+>HvrtqVY97-wP0<(V$JwKv#ASQ;ojYXP_OQ?^3?0T1S29Inpvl5ET>SYkK|} z1PdQrjC43CTKD`-%NDJD4k;yt4=(ltGd~INo25^Yl&Ym<=O^r1y%I;K-KC79)6ULS z%Q;*0Z<4iXEP3+x{-EZcg;2O!&HAm|xPQh}4!-v$rTf1mcfqen$QskN5z*HNRHyd$zv{g&n}$HbBhXG(!V=?go5NKO1|CiYkI!l z6b+AvBw=_uVSViL$E9cq3JP*b4^^w3HiIL4P0#IvlF2|-cHSh`eZJQRblk(Wv%t#> zrgGuP0e}>oC(Qc=cRztP0Bd`jn`S=3HGiL_wYB@TwXdQ#g1Z7V3L$DL&YnSE`kkAm z-bF{JM0WlC)fdiEeW3&)gdT9~RE6sYcyl-$4#(a5w|~kYr4n^?G!b2A0Q?1q1XH^m z-MJDDY<-^%D<8+wY6f@)=RJac!;{nE0(c#GqT5~*pGek(JTgX)Aw6dd!?Q;-WLSa+ zuKR{`IJi=!<6`kiE}kjo(&gp^XQ0anrz9`(O5o+1bMC2$vz%XPge zL={SGawX z^g0?Y>uIdHjJ>1xZ4x1bO-gwf*bRIDT=1k3-ncRY@BpwmW$e!wnx2VKS59M9In8yK zZ`rXTCtpAmPB}r2G!t57vl~~J63ZurrK%@m8H~ImSLzYqfvK>a7`R@ zU)^XNq);3aO2vwGV`5Kwi?lZd0OuXTLYyh0bTH!;E0~;a(0tA{spy3Yz zj#{mjBJ9eTeS7!h3nA)&;y%iq7DCkR+q)+pyE4XNX)nUf$j%e|55;BQ(L&S|`~Uy| M07*qoM6N<$f=`haVgLXD literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0eea496f3d04adcade6b3438d4d8dc8176b7c4e0 GIT binary patch literal 92063 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