From 81a188a52ab05902519e209ad18641f6db88d470 Mon Sep 17 00:00:00 2001
From: Paul
Date: Sun, 1 Sep 2019 14:38:42 +0200
Subject: [PATCH 01/92] sync with 1.9 changes
---
.gitignore | 17 +-
platformio.ini-example | 7 +-
src/MyESP.cpp | 2 +-
src/TelnetSpy.cpp | 3 +-
src/TimeLib.cpp | 25 +-
tools/webfilesbuilder/package-lock.json | 2715 -----------------------
tools/wsemulator/package-lock.json | 27 -
7 files changed, 21 insertions(+), 2775 deletions(-)
delete mode 100644 tools/webfilesbuilder/package-lock.json
delete mode 100644 tools/wsemulator/package-lock.json
diff --git a/.gitignore b/.gitignore
index 7f4e4b98c..9cd85a451 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,22 +21,13 @@ src/websrc/gzipped
src/websrc/temp
*.gz.h
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# Dependency directories
+# NPM directories
node_modules/
jspm_packages/
-
-# Optional npm cache directory
.npm
+package-lock.json
+tools/webfilesbuilder/package-lock.json
+tools/wsemulator/package-lock.json
# Output of 'npm pack'
*.tgz
diff --git a/platformio.ini-example b/platformio.ini-example
index 66e1a73c9..b3c2b21f8 100644
--- a/platformio.ini-example
+++ b/platformio.ini-example
@@ -8,11 +8,9 @@ default_envs = debug
[common]
; -DMYESP_TIMESTAMP -DTESTS -DCRASH -DFORCE_SERIAL -DNO_GLOBAL_EEPROM -DLOGICANALYZER
-;general_flags = -Wl,-Teagle.flash.4m2m.ld
general_flags =
[env]
-;board = esp12e
board = d1_mini
framework = arduino
platform = espressif8266
@@ -67,10 +65,11 @@ extra_scripts = pre:scripts/clean_fw.py
[env:release]
build_flags = ${common.general_flags}
-extra_scripts = pre:scripts/rename_fw.py
+extra_scripts =
+ pre:scripts/rename_fw.py
+ pre:scripts/buildweb.py
[env:checkcode]
build_type = debug
build_flags = ${common.general_flags} -Wall
extra_scripts = scripts/checkcode.py
-
diff --git a/src/MyESP.cpp b/src/MyESP.cpp
index 961828966..55f47144f 100644
--- a/src/MyESP.cpp
+++ b/src/MyESP.cpp
@@ -2658,7 +2658,7 @@ void MyESP::_addMQTTLog(const char * topic, const char * payload) {
// myDebug("Publish [#%d] %s (%d) %s (%d)", logCount, topic, strlen(topic), payload, strlen(payload)); // for debugging
// find the topic
- while ((_hasValue(MQTT_log[logPointer].topic) && logPointer < MYESP_MQTTLOG_MAX)) {
+ while ((logPointer < MYESP_MQTTLOG_MAX) && (_hasValue(MQTT_log[logPointer].topic))) {
if (strcmp(MQTT_log[logPointer].topic, topic) == 0) {
found = true;
break;
diff --git a/src/TelnetSpy.cpp b/src/TelnetSpy.cpp
index 6a44f83c0..274749d9d 100644
--- a/src/TelnetSpy.cpp
+++ b/src/TelnetSpy.cpp
@@ -573,8 +573,7 @@ void TelnetSpy::handle() {
return;
}
if (!listening) {
-
- if ((WiFi.status() == WL_DISCONNECTED) && (WiFi.getMode() & WIFI_AP)) {
+ if ((WiFi.status() == WL_DISCONNECTED) && (WiFi.getMode() & WIFI_AP)) {
if (usedSer) {
usedSer->println("[TELNET] in AP mode"); // added by Proddy
}
diff --git a/src/TimeLib.cpp b/src/TimeLib.cpp
index e56de4097..62da04d5b 100644
--- a/src/TimeLib.cpp
+++ b/src/TimeLib.cpp
@@ -105,28 +105,28 @@ void refreshCache(time_t t) {
}
int day(time_t t) { // the day for the given time (0-6)
- refreshCache(t);
- return tm.Day;
+ refreshCache(t);
+ return tm.Day;
}
-int month(time_t t) { // the month for the given time
- refreshCache(t);
- return tm.Month;
+int month(time_t t) { // the month for the given time
+ refreshCache(t);
+ return tm.Month;
}
-int second(time_t t) { // the second for the given time
- refreshCache(t);
- return tm.Second;
+int second(time_t t) { // the second for the given time
+ refreshCache(t);
+ return tm.Second;
}
int minute(time_t t) { // the minute for the given time
- refreshCache(t);
- return tm.Minute;
+ refreshCache(t);
+ return tm.Minute;
}
int hour(time_t t) { // the hour for the given time
- refreshCache(t);
- return tm.Hour;
+ refreshCache(t);
+ return tm.Hour;
}
int year(time_t t) { // the year for the given time
@@ -140,4 +140,3 @@ void setTime(time_t t) {
Status = timeSet;
prevMillis = millis(); // restart counting from now (thanks to Korman for this fix)
}
-
diff --git a/tools/webfilesbuilder/package-lock.json b/tools/webfilesbuilder/package-lock.json
deleted file mode 100644
index c70765a1b..000000000
--- a/tools/webfilesbuilder/package-lock.json
+++ /dev/null
@@ -1,2715 +0,0 @@
-{
- "name": "uglifier",
- "version": "0.0.1",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "ansi-colors": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
- "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
- "requires": {
- "ansi-wrap": "^0.1.0"
- }
- },
- "ansi-cyan": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
- "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
- "requires": {
- "ansi-wrap": "0.1.0"
- }
- },
- "ansi-gray": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
- "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
- "requires": {
- "ansi-wrap": "0.1.0"
- }
- },
- "ansi-red": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
- "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
- "requires": {
- "ansi-wrap": "0.1.0"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "ansi-wrap": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
- "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768="
- },
- "any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
- },
- "archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
- "dev": true
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
- },
- "array-differ": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
- "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
- "dev": true
- },
- "array-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
- "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8="
- },
- "array-slice": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
- "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
- "dev": true
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "beeper": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
- "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "bufferstreams": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.1.3.tgz",
- "integrity": "sha512-HaJnVuslRF4g2kSDeyl++AaVizoitCpL9PglzCYwy0uHHyvWerfvEb8jWmYbF1z4kiVFolGomnxSGl+GUQp2jg==",
- "requires": {
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "camel-case": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
- "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
- "requires": {
- "no-case": "^2.2.0",
- "upper-case": "^1.1.1"
- }
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "clean-css": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
- "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
- "requires": {
- "source-map": "~0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- }
- }
- },
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
- "dev": true
- },
- "clone-buffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
- "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg="
- },
- "clone-stats": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
- "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
- "dev": true
- },
- "cloneable-readable": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
- "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
- "requires": {
- "inherits": "^2.0.1",
- "process-nextick-args": "^2.0.0",
- "readable-stream": "^2.3.5"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="
- },
- "commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "concat-with-sourcemaps": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz",
- "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==",
- "requires": {
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- }
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "dateformat": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
- "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
- "dev": true
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
- "dev": true,
- "requires": {
- "clone": "^1.0.2"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "deprecated": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
- "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
- "dev": true
- },
- "detect-file": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
- "dev": true
- },
- "duplexer2": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
- "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
- "dev": true,
- "requires": {
- "readable-stream": "~1.1.9"
- }
- },
- "end-of-stream": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
- "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
- "dev": true,
- "requires": {
- "once": "~1.3.0"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "expand-tilde": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "fancy-log": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
- "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
- "requires": {
- "ansi-gray": "^0.1.1",
- "color-support": "^1.1.3",
- "time-stamp": "^1.0.0"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "find-index": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
- "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
- "dev": true
- },
- "findup-sync": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
- "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
- "dev": true,
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^3.1.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- }
- },
- "fined": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
- "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.2",
- "is-plain-object": "^2.0.3",
- "object.defaults": "^1.1.0",
- "object.pick": "^1.2.0",
- "parse-filepath": "^1.0.1"
- }
- },
- "first-chunk-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
- "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
- "dev": true
- },
- "flagged-respawn": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
- "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
- "dev": true
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "for-own": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
- "dev": true,
- "requires": {
- "for-in": "^1.0.1"
- }
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "gaze": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
- "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
- "dev": true,
- "requires": {
- "globule": "~0.1.0"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
- "glob": {
- "version": "4.5.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
- "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
- "dev": true,
- "requires": {
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^2.0.1",
- "once": "^1.3.0"
- }
- },
- "glob-stream": {
- "version": "3.1.18",
- "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
- "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
- "dev": true,
- "requires": {
- "glob": "^4.3.1",
- "glob2base": "^0.0.12",
- "minimatch": "^2.0.1",
- "ordered-read-streams": "^0.1.0",
- "through2": "^0.6.1",
- "unique-stream": "^1.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "through2": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
- "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
- "dev": true,
- "requires": {
- "readable-stream": ">=1.0.33-1 <1.1.0-0",
- "xtend": ">=4.0.0 <4.1.0-0"
- }
- }
- }
- },
- "glob-watcher": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
- "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
- "dev": true,
- "requires": {
- "gaze": "^0.5.1"
- }
- },
- "glob2base": {
- "version": "0.0.12",
- "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
- "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
- "dev": true,
- "requires": {
- "find-index": "^0.1.1"
- }
- },
- "global-modules": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
- "dev": true,
- "requires": {
- "global-prefix": "^1.0.1",
- "is-windows": "^1.0.1",
- "resolve-dir": "^1.0.0"
- }
- },
- "global-prefix": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.2",
- "homedir-polyfill": "^1.0.1",
- "ini": "^1.3.4",
- "is-windows": "^1.0.1",
- "which": "^1.2.14"
- }
- },
- "globule": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
- "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
- "dev": true,
- "requires": {
- "glob": "~3.1.21",
- "lodash": "~1.0.1",
- "minimatch": "~0.2.11"
- },
- "dependencies": {
- "glob": {
- "version": "3.1.21",
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
- "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
- "dev": true,
- "requires": {
- "graceful-fs": "~1.2.0",
- "inherits": "1",
- "minimatch": "~0.2.11"
- }
- },
- "graceful-fs": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
- "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
- "dev": true
- },
- "inherits": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
- "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
- "dev": true
- },
- "minimatch": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
- "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
- "dev": true,
- "requires": {
- "lru-cache": "2",
- "sigmund": "~1.0.0"
- }
- }
- }
- },
- "glogg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
- "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
- "requires": {
- "sparkles": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
- "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
- "dev": true,
- "requires": {
- "natives": "^1.1.0"
- }
- },
- "gulp": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
- "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
- "dev": true,
- "requires": {
- "archy": "^1.0.0",
- "chalk": "^1.0.0",
- "deprecated": "^0.0.1",
- "gulp-util": "^3.0.0",
- "interpret": "^1.0.0",
- "liftoff": "^2.1.0",
- "minimist": "^1.1.0",
- "orchestrator": "^0.3.0",
- "pretty-hrtime": "^1.0.0",
- "semver": "^4.1.0",
- "tildify": "^1.0.0",
- "v8flags": "^2.0.2",
- "vinyl-fs": "^0.3.0"
- }
- },
- "gulp-concat": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz",
- "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=",
- "requires": {
- "concat-with-sourcemaps": "^1.0.0",
- "through2": "^2.0.0",
- "vinyl": "^2.0.0"
- },
- "dependencies": {
- "clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
- },
- "clone-stats": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
- "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA="
- },
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs="
- },
- "vinyl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
- "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
- "requires": {
- "clone": "^2.1.1",
- "clone-buffer": "^1.0.0",
- "clone-stats": "^1.0.0",
- "cloneable-readable": "^1.0.0",
- "remove-trailing-separator": "^1.0.1",
- "replace-ext": "^1.0.0"
- }
- }
- }
- },
- "gulp-flatmap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/gulp-flatmap/-/gulp-flatmap-1.0.2.tgz",
- "integrity": "sha512-xm+Ax2vPL/xiMBqLFI++wUyPtncm3b55ztGHewmRcoG/sYb0OUTatjSacOud3fee77rnk+jOgnDEHhwBtMHgFA==",
- "requires": {
- "plugin-error": "0.1.2",
- "through2": "2.0.3"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "through2": {
- "version": "2.0.3",
- "resolved": "http://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "gulp-gzip": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/gulp-gzip/-/gulp-gzip-1.4.2.tgz",
- "integrity": "sha512-ZIxfkUwk2XmZPTT9pPHrHUQlZMyp9nPhg2sfoeN27mBGpi7OaHnOD+WCN41NXjfJQ69lV1nQ9LLm1hYxx4h3UQ==",
- "requires": {
- "ansi-colors": "^1.0.1",
- "bytes": "^3.0.0",
- "fancy-log": "^1.3.2",
- "plugin-error": "^1.0.0",
- "stream-to-array": "^2.3.0",
- "through2": "^2.0.3"
- },
- "dependencies": {
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
- "requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
- }
- }
- }
- },
- "gulp-htmlmin": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/gulp-htmlmin/-/gulp-htmlmin-4.0.0.tgz",
- "integrity": "sha512-9FX2d4QbSm+4WuXughjZ6GJn4jx0C4BmyK2e+AS6567NPAetNfB+hv2ZL/88AacdC+8OS+TzeIjfKRXPSAgOYw==",
- "requires": {
- "bufferstreams": "^1.1.0",
- "html-minifier": "^3.0.3",
- "plugin-error": "^0.1.2",
- "readable-stream": "^2.0.2",
- "tryit": "^1.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "gulp-uglify": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz",
- "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==",
- "requires": {
- "array-each": "^1.0.1",
- "extend-shallow": "^3.0.2",
- "gulplog": "^1.0.0",
- "has-gulplog": "^0.1.0",
- "isobject": "^3.0.1",
- "make-error-cause": "^1.1.1",
- "safe-buffer": "^5.1.2",
- "through2": "^2.0.0",
- "uglify-js": "^3.0.5",
- "vinyl-sourcemaps-apply": "^0.2.0"
- }
- },
- "gulp-util": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
- "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
- "dev": true,
- "requires": {
- "array-differ": "^1.0.0",
- "array-uniq": "^1.0.2",
- "beeper": "^1.0.0",
- "chalk": "^1.0.0",
- "dateformat": "^2.0.0",
- "fancy-log": "^1.1.0",
- "gulplog": "^1.0.0",
- "has-gulplog": "^0.1.0",
- "lodash._reescape": "^3.0.0",
- "lodash._reevaluate": "^3.0.0",
- "lodash._reinterpolate": "^3.0.0",
- "lodash.template": "^3.0.0",
- "minimist": "^1.1.0",
- "multipipe": "^0.1.2",
- "object-assign": "^3.0.0",
- "replace-ext": "0.0.1",
- "through2": "^2.0.0",
- "vinyl": "^0.5.0"
- }
- },
- "gulplog": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
- "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
- "requires": {
- "glogg": "^1.0.0"
- }
- },
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "has-gulplog": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
- "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
- "requires": {
- "sparkles": "^1.0.0"
- }
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
- },
- "homedir-polyfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
- "dev": true,
- "requires": {
- "parse-passwd": "^1.0.0"
- }
- },
- "html-minifier": {
- "version": "3.5.21",
- "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
- "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
- "requires": {
- "camel-case": "3.0.x",
- "clean-css": "4.2.x",
- "commander": "2.17.x",
- "he": "1.2.x",
- "param-case": "2.1.x",
- "relateurl": "0.2.x",
- "uglify-js": "3.4.x"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true
- },
- "interpret": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
- "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
- "dev": true
- },
- "is-absolute": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
- "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
- "dev": true,
- "requires": {
- "is-relative": "^1.0.0",
- "is-windows": "^1.0.1"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-relative": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
- "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
- "dev": true,
- "requires": {
- "is-unc-path": "^1.0.0"
- }
- },
- "is-unc-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
- "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
- "dev": true,
- "requires": {
- "unc-path-regex": "^0.1.2"
- }
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- },
- "liftoff": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
- "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
- "dev": true,
- "requires": {
- "extend": "^3.0.0",
- "findup-sync": "^2.0.0",
- "fined": "^1.0.1",
- "flagged-respawn": "^1.0.0",
- "is-plain-object": "^2.0.4",
- "object.map": "^1.0.0",
- "rechoir": "^0.6.2",
- "resolve": "^1.1.7"
- }
- },
- "lodash": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
- "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
- "dev": true
- },
- "lodash._basecopy": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
- "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
- "dev": true
- },
- "lodash._basetostring": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
- "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
- "dev": true
- },
- "lodash._basevalues": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
- "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
- "dev": true
- },
- "lodash._getnative": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
- "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
- "dev": true
- },
- "lodash._isiterateecall": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
- "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
- "dev": true
- },
- "lodash._reescape": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
- "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
- "dev": true
- },
- "lodash._reevaluate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
- "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
- "dev": true
- },
- "lodash._reinterpolate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
- "dev": true
- },
- "lodash._root": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
- "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
- "dev": true
- },
- "lodash.escape": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
- "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
- "dev": true,
- "requires": {
- "lodash._root": "^3.0.0"
- }
- },
- "lodash.isarguments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
- "dev": true
- },
- "lodash.isarray": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
- "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
- "dev": true
- },
- "lodash.keys": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
- "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
- "dev": true,
- "requires": {
- "lodash._getnative": "^3.0.0",
- "lodash.isarguments": "^3.0.0",
- "lodash.isarray": "^3.0.0"
- }
- },
- "lodash.restparam": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
- "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
- "dev": true
- },
- "lodash.template": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
- "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
- "dev": true,
- "requires": {
- "lodash._basecopy": "^3.0.0",
- "lodash._basetostring": "^3.0.0",
- "lodash._basevalues": "^3.0.0",
- "lodash._isiterateecall": "^3.0.0",
- "lodash._reinterpolate": "^3.0.0",
- "lodash.escape": "^3.0.0",
- "lodash.keys": "^3.0.0",
- "lodash.restparam": "^3.0.0",
- "lodash.templatesettings": "^3.0.0"
- }
- },
- "lodash.templatesettings": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
- "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
- "dev": true,
- "requires": {
- "lodash._reinterpolate": "^3.0.0",
- "lodash.escape": "^3.0.0"
- }
- },
- "lower-case": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
- "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
- },
- "lru-cache": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
- "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
- "dev": true
- },
- "make-error": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
- "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g=="
- },
- "make-error-cause": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz",
- "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
- "requires": {
- "make-error": "^1.2.0"
- }
- },
- "make-iterator": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
- "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.2"
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "minimatch": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
- "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.0.0"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "multipipe": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
- "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
- "dev": true,
- "requires": {
- "duplexer2": "0.0.2"
- }
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "natives": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz",
- "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==",
- "dev": true
- },
- "no-case": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
- "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
- "requires": {
- "lower-case": "^1.1.1"
- }
- },
- "object-assign": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
- "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.defaults": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
- "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
- "dev": true,
- "requires": {
- "array-each": "^1.0.1",
- "array-slice": "^1.0.0",
- "for-own": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "object.map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
- "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
- "dev": true,
- "requires": {
- "for-own": "^1.0.0",
- "make-iterator": "^1.0.0"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "once": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
- "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
- "requires": {
- "wrappy": "1"
- }
- },
- "orchestrator": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
- "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
- "dev": true,
- "requires": {
- "end-of-stream": "~0.1.5",
- "sequencify": "~0.0.7",
- "stream-consume": "~0.1.0"
- }
- },
- "ordered-read-streams": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
- "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
- "dev": true
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true
- },
- "param-case": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
- "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
- "requires": {
- "no-case": "^2.2.0"
- }
- },
- "parse-filepath": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
- "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
- "dev": true,
- "requires": {
- "is-absolute": "^1.0.0",
- "map-cache": "^0.2.0",
- "path-root": "^0.1.1"
- }
- },
- "parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "path-root": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
- "dev": true,
- "requires": {
- "path-root-regex": "^0.1.0"
- }
- },
- "path-root-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
- "dev": true
- },
- "plugin-error": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
- "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
- "requires": {
- "ansi-cyan": "^0.1.1",
- "ansi-red": "^0.1.1",
- "arr-diff": "^1.0.1",
- "arr-union": "^2.0.1",
- "extend-shallow": "^1.1.2"
- },
- "dependencies": {
- "arr-diff": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
- "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
- "requires": {
- "arr-flatten": "^1.0.1",
- "array-slice": "^0.2.3"
- }
- },
- "arr-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
- "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0="
- },
- "array-slice": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
- "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU="
- },
- "extend-shallow": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
- "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
- "requires": {
- "kind-of": "^1.1.0"
- }
- },
- "kind-of": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
- "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ="
- }
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- },
- "dependencies": {
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "requires": {
- "once": "^1.4.0"
- },
- "dependencies": {
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- }
- }
- }
- }
- },
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
- "dev": true,
- "requires": {
- "resolve": "^1.1.6"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "relateurl": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
- "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
- },
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "replace-ext": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
- "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
- "dev": true
- },
- "resolve": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
- "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "resolve-dir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.0",
- "global-modules": "^1.0.0"
- }
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "semver": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
- "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
- "dev": true
- },
- "sequencify": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
- "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
- "dev": true
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "sigmund": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
- "dev": true
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
- },
- "source-map-resolve": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
- "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
- "dev": true,
- "requires": {
- "atob": "^2.1.1",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
- "sparkles": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
- "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw=="
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "stream-consume": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
- "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
- "dev": true
- },
- "stream-to-array": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
- "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=",
- "requires": {
- "any-promise": "^1.1.0"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-bom": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
- "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
- "dev": true,
- "requires": {
- "first-chunk-stream": "^1.0.0",
- "is-utf8": "^0.2.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "tildify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
- "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
- "dev": true,
- "requires": {
- "os-homedir": "^1.0.0"
- }
- },
- "time-stamp": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
- "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM="
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "tryit": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
- "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics="
- },
- "uglify-js": {
- "version": "3.4.9",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
- "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
- "requires": {
- "commander": "~2.17.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- }
- }
- },
- "unc-path-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
- "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
- "dev": true
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- }
- },
- "unique-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
- "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
- "dev": true
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- }
- }
- },
- "upper-case": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
- "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "user-home": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
- "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
- "dev": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "v8flags": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
- "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
- "dev": true,
- "requires": {
- "user-home": "^1.1.1"
- }
- },
- "vinyl": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
- "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
- "dev": true,
- "requires": {
- "clone": "^1.0.0",
- "clone-stats": "^0.0.1",
- "replace-ext": "0.0.1"
- }
- },
- "vinyl-fs": {
- "version": "0.3.14",
- "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
- "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
- "dev": true,
- "requires": {
- "defaults": "^1.0.0",
- "glob-stream": "^3.1.5",
- "glob-watcher": "^0.0.6",
- "graceful-fs": "^3.0.0",
- "mkdirp": "^0.5.0",
- "strip-bom": "^1.0.0",
- "through2": "^0.6.1",
- "vinyl": "^0.4.0"
- },
- "dependencies": {
- "clone": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
- "dev": true
- },
- "readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "through2": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
- "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
- "dev": true,
- "requires": {
- "readable-stream": ">=1.0.33-1 <1.1.0-0",
- "xtend": ">=4.0.0 <4.1.0-0"
- }
- },
- "vinyl": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
- "dev": true,
- "requires": {
- "clone": "^0.2.0",
- "clone-stats": "^0.0.1"
- }
- }
- }
- },
- "vinyl-sourcemaps-apply": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
- "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
- "requires": {
- "source-map": "^0.5.1"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
- }
- }
-}
diff --git a/tools/wsemulator/package-lock.json b/tools/wsemulator/package-lock.json
deleted file mode 100644
index 4c07154d3..000000000
--- a/tools/wsemulator/package-lock.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "name": "wsemulator",
- "version": "0.0.1",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "async-limiter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
- "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "ws": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz",
- "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==",
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0"
- }
- }
- }
-}
From 27dae52aae321723553b8fe5581e987c6d527b87 Mon Sep 17 00:00:00 2001
From: Paul
Date: Sun, 1 Sep 2019 14:39:05 +0200
Subject: [PATCH 02/92] bump to 1.9.1b
---
src/version.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/version.h b/src/version.h
index 64e2e8623..c108e9995 100644
--- a/src/version.h
+++ b/src/version.h
@@ -1 +1 @@
-#define APP_VERSION "1.9.0"
+#define APP_VERSION "1.9.1b1"
From 82bdd2f885d94de47026e7a0cbc016586e5f58e0 Mon Sep 17 00:00:00 2001
From: Paul
Date: Sun, 1 Sep 2019 15:17:44 +0200
Subject: [PATCH 03/92] removed
---
doc/HT3-Bus_Telegramme.html | 7862 -----------------------------------
1 file changed, 7862 deletions(-)
delete mode 100644 doc/HT3-Bus_Telegramme.html
diff --git a/doc/HT3-Bus_Telegramme.html b/doc/HT3-Bus_Telegramme.html
deleted file mode 100644
index 1a019762c..000000000
--- a/doc/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-ID |
- Telegramm(hex) |
- Beschreibung |
- Source-Werte (hex) |
- Bemerkung |
-
-
-
|
-
|
-
|
- (SO) |
-
|
-
-
- | 2 |
- SO TT 02 xy |
- Software-Version / Busteilnehmer |
- 88 |
- TT = <Target-/Token-Nr> |
-
-
- | 7 |
- SO 00 07 xy |
- Steuerung: EMS Token Status |
- 88 |
-
|
-
-
- | 6 |
- SO 00 06 xy |
- Datum / Zeit |
- 90 | 98 |
- Mit 14 und 17 Bytes Länge |
-
-
- | 190 |
- TT 00 BE xy |
- ErrorCode / DisplayCode von Target |
-
|
- TT = <Target-/Token-Nr> |
-
-
- | 24 |
- SO 00 18 xy |
- Heizgerät: Kesseldaten |
- 88 |
- Mit 31 und 33 Bytes Länge |
-
-
- | 25 |
- SO 00 19 xy |
- Heizgerät: Heizungsdaten |
- 88 |
-
|
-
-
- | 188 |
- SO 00 BC xy |
- Heizgerät: Hybrid (Wärmepumpe) |
-
|
-
|
-
-
- | 27 |
- SO 00 1B xy |
- Sollwert Warmwasser |
- 90 |
-
|
-
-
- | 51 |
- SO 00 33 xy |
- Warmwasser: Daten von Steuerung |
- 88 |
-
|
-
-
- | 52 |
- SO 00 34 xy |
- Warmwasser: Daten von Steuerung | IPM |
- 88 | Ax (x:=0...7) |
- Mit 22,23 und 25 Bytes Länge |
-
-
- | 467...468 |
- SO 00 FF xy 00 D3...D4 |
- Betriebsart WW-System |
- 90 |
-
|
-
-
- | 26 |
- SO 08 1A xy |
- Heizkreis: Systemwerte |
- 90 |
-
|
-
-
- | 268 |
- SO 00 FF xy 00 0C |
- Heizkreis: von IPM1/IPM2 für Mischer |
- Ax (x:=0...7) |
-
|
-
-
- | 296 |
- SO 00 FF xy 00 28 |
- Heizkreis: Fehlermeldungen |
- 90 |
-
|
-
-
- | 357...366 |
- SO 00 FF xy 00 65...6E |
- Heizkreis: Bauart1 |
- 90 |
-
|
-
-
- | 367...376 |
- SO 00 FF xy 00 6F...78 |
- Heizkreis: Temperaturniveau |
- 90 | 9x (x:=8...F) |
-
|
-
-
- | 377...386 |
- SO 00 FF xy 00 79...82 |
- Heizkreis: Bauart2 |
- 90 |
-
|
-
-
- | 677...684 |
- SO 00 FF xy 01 A5...AC |
- Heizkreis: Systemwerte |
- 90 | 98 |
- Cxyz-Controller (z.B. CW100) |
-
-
- | 259 |
- SO 00 FF xy 00 03 |
- Solar: Solardaten von ISM1 |
- B0 |
-
|
-
-
- | 260 |
- SO 00 FF xy 00 04 |
- Solar: Solardaten von ISM2 |
- B0 |
- Mit 24 und 35 Bytes Länge |
-
-
- | 866 |
- SO 00 FF xy 02 62 |
- Solar: Solardaten von MS100 |
- B0 |
- EMS2-Bus |
-
-
- | 868 |
- SO 00 FF xy 02 64 |
- Solar: Solardaten von MS100 |
- B0 |
- EMS2-Bus |
-
-
- | 873 |
- SO 00 FF xy 02 69 |
- Solar: Solardaten von MS100 |
- B0 |
- EMS2-Bus |
-
-
- | 874 |
- SO 00 FF xy 02 6A |
- Solar: Solardaten von MS100 |
- B0 |
- EMS2-Bus |
-
-
- | 910 |
- SO 00 FF xy 02 8E |
- Solar: Solardaten von MS100 |
- B0 |
- EMS2-Bus |
-
-
- | 913 |
- SO 00 FF xy 02 91 |
- Solar: Solardaten von MS100 |
- B0 |
- EMS2-Bus |
-
-
- | 357_14...366_14 |
- SO TA FF 0E 00 65...6E |
- Modem-CMD: Betriebsart setzen |
- 8D | C8 |
- TA = <Target-Nr> |
-
-
- | 377_4 ...386_4 |
- SO TA FF 04 00 79...82 |
- Modem-CMD: Betriebsart setzen |
- 8D | C8 |
- TA = <Target-Nr> |
-
-
- | 357_17...366_17 |
- SO TA FF 11 00 65...6E |
- Modem-CMD: Temp-Niveau setzen |
- 8D | C8 |
- TA = <Target-Nr> |
-
-
- | 377_7 ...386_7 |
- SO TA FF 07 00 79...82 |
- Modem-CMD: Temp-Niveau setzen |
- 8D | C8 |
- TA = <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 |
-
|
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
- Beispiel (Hex) |
-
-
-
|
- 16Byte |
-
|
-
|
-
|
-
-
-
|
-
|
- Telegramm: Software-Version / Busteilnehmer |
-
|
-
|
-
-
- | 0 |
- SO |
-
|
- Source |
- 88 |
-
-
- | 1 |
- TT |
- <Token-/Target-Nr> (Geräteadr. Ungleich 0) |
- Target |
- 18 |
-
-
- | 2 |
- 02 |
-
|
- 2_x_0 |
- 02 |
-
-
- | 3 |
- xy |
- Telegramm-Offset (hier 0...9). |
-
|
- 00 |
-
-
- | 4 |
- xy |
- Erste Erkennung Busteilnehmer |
- 2_0_0 |
- 5F |
-
-
-
|
-
|
- - 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 |
-
|
-
|
-
-
-
|
-
|
- ….. |
-
|
-
|
-
-
- | 5 |
- xy |
- Software-Familie |
- 2_1_0 |
- 22 |
-
-
- | 6 |
- xy |
- Version der Softwarefamilie |
- 2_2_0 |
- 04 |
-
-
- | 7 |
- xy |
- Zweite Erkennung Busteilnehmern |
- 2_3_0 |
- 00 |
-
-
- | 8 |
- xy |
- Kennzahl f. Grosse Änderung in HW- und SW |
- 2_4_0 |
- 00 |
-
-
- | 9 |
- xy |
- Kennzahl f. Kleine Änderung in HW- und SW |
- 2_5_0 |
- 00 |
-
-
- | 10 |
- xy |
- Dritte Erkennung Busteilnehmern |
- 2_6_0 |
- 00 |
-
-
- | 11 |
- xy |
- Kennzahl f. Kleine Änderung in HW- und SW |
- 2_7_0 |
- 00 |
-
-
- | 12 |
- xy |
- Kennzahl f. Grosse Änderung in HW- und SW |
- 2_8_0 |
- 00 |
-
-
- | 13 |
- xy |
- Markenidentifizierung |
- 2_9_0 |
- 00 |
-
-
-
|
-
|
- - 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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 21Byte |
-
|
-
|
-
-
-
|
-
|
- EMS Token Status |
-
|
-
-
- | 0 |
- SO |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- 07 |
-
|
- 7_x_y |
-
-
- | 3 |
- xy |
- Telegramm-Offset (hier 0...14). |
-
|
-
-
- | 4 |
- Bit0...Bit7 |
- EMS Token Status 8: EMS Master |
- 7_0_0 bis |
-
-
-
|
-
|
- - EMS Token Status 9 … 15 |
- 7_0_7 |
-
-
- | 5 |
- Bit0...Bit7 |
- EMS Token Status 16 … 23 |
- 7_1_0 bis |
-
-
-
|
-
|
-
|
- 7_1_7 |
-
-
- | 6 |
- Bit0...Bit7 |
- Busadresse 24 vorhanden |
- 7_2_0 bis |
-
-
-
|
-
|
- - EMS Token Status 25 … 31 |
- 7_2_7 |
-
-
- | 7 |
- Bit0...Bit7 |
- Busadresse 32:Mischerstellmotor im HK1 vorhanden |
- 7_3_0 bis |
-
-
-
|
-
|
- - EMS Token Status 33 … 39 |
- 7_3_7 |
-
-
- | 8 |
- Bit0...Bit7 |
- Busadresse 40:Warmwassersystem im HK1 vorhanden |
- 7_4_0 bis |
-
-
-
|
-
|
- - EMS Token Status 41 … 47 |
- 7_4_7 |
-
-
- | 9 |
- Bit0...Bit7 |
- Busadresse 48:Solarmodul vorhanden |
- 7_5_0 bis |
-
-
-
|
-
|
- - EMS Token Status 49 … 55 |
- 7_5_7 |
-
-
- | 10 |
- Bit0...Bit7 |
- Busadresse 56:Fernbedienung f. HK1 vorhanden |
- 7_6_0 bis |
-
-
-
|
-
|
- - EMS Token Status 57 … 63 |
- 7_6_7 |
-
-
- | 11 |
- Bit0...Bit7 |
- Busadresse 64:Temperaturfühler im HK1 vorhanden |
- 7_7_0 bis |
-
-
-
|
-
|
- - EMS Token Status 65 … 71 |
- 7_7_7 |
-
-
- | 12 |
- Bit0...Bit7 |
- Status für Busadresse 72...79 |
- 7_8_0 bis |
-
-
-
|
-
|
-
|
- 7_8_7 |
-
-
- | 13 |
- Bit0...Bit7 |
- EMS Token Status 80 … 87 |
- 7_9_0 bis |
-
-
-
|
-
|
-
|
- 7_9_7 |
-
-
- | 14 |
- Bit0...Bit7 |
- EMS Token Status 88 … 95 |
- 7_10_0 bis |
-
-
-
|
-
|
-
|
- 7_10_7 |
-
-
- | 15 |
- Bit0...Bit7 |
- EMS Token Status 96 … 103 |
- 7_11_0 bis |
-
-
-
|
-
|
-
|
- 7_11_7 |
-
-
- | 16 |
- Bit0...Bit7 |
- EMS Token Status 104 … 111 |
- 7_12_0 bis |
-
-
-
|
-
|
-
|
- 7_12_7 |
-
-
- | 17 |
- Bit0...Bit7 |
- EMS Token Status 112 … 119 (Cascaded EMS) |
- 7_13_0 bis |
-
-
-
|
-
|
-
|
- 7_13_7 |
-
-
- | 18 |
- Bit0...Bit7 |
- EMS 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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 14Byte |
- 17Byte |
-
|
-
|
-
-
-
|
-
|
-
|
- Datum/Zeit – Telegramm |
-
|
-
-
- | 0 |
- 90 | 98 |
- 90 | 98 |
- Source :=90h oder :=98h |
- Source |
-
-
- | 1 |
- 00 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- 06 |
- 06 |
-
|
- 6_x_y |
-
-
- | 3 |
- xy |
- xy |
- Telegramm-Offset (hier 0...6|10). |
-
|
-
-
- | 4 |
- xy |
- xy |
- Jahr (Wert + 2000)dez. |
- 6_0_0 |
-
-
- | 5 |
- xy |
- xy |
- Monat (01 … 12)dez. |
- 6_1_0 |
-
-
- | 6 |
- xy |
- xy |
- Stunden (00 … 23)dez. |
- 6_2_0 |
-
-
- | 7 |
- xy |
- xy |
- Tag (01 … 31)dez. |
- 6_3_0 |
-
-
- | 8 |
- xy |
- xy |
- Minute (00 … 59)dez. |
- 6_4_0 |
-
-
- | 9 |
- xy |
- xy |
- Sekunde (00 … 59)dez. |
- 6_5_0 |
-
-
- | 10 |
- xy |
- xy |
- Wochentag |
- 6_6_0 |
-
-
-
|
-
|
-
|
- 01=Montag; 02=Dienstag;... für Fxyz – Regler |
-
|
-
-
-
|
-
|
-
|
- 00=Montag; 01=Dienstag;... für Cxyz – Regler |
-
|
-
-
- | 11 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Uhrstatus |
-
|
-
-
-
|
- Bit0 |
- Bit0 |
- - Sommerzeit |
- 6_7_0 |
-
-
-
|
- Bit1 |
- Bit1 |
- - Funkempfang vorhanden |
- 6_7_1 |
-
-
-
|
- Bit2 |
- Bit2 |
- - Funksignal vorhanden |
- 6_7_2 |
-
-
-
|
- Bit3...Bit7 |
- Bit3...Bit7 |
- - Immer 0 |
-
|
-
-
- | 12 |
- <CRC> |
- xy |
- Token-Adresse des aktuellen RTC-Owner |
- 6_8_0 |
-
-
- | 13 |
- <Ende> |
- xy |
- Automatische Sommer/Winter Umschaltung |
- 6_9_0 |
-
-
- | 14 |
-
|
- xy |
- RTC Benutzer Kalibierungswert |
- 6_10_0 |
-
-
- | 15 |
-
|
- <CRC> |
-
|
-
|
-
-
- | 16 |
-
|
- <Ende> |
-
|
-
|
-
-
-
-
-Tabelle 5: ID 190
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID: 190_x_0 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 11Byte |
-
|
-
|
-
-
-
|
-
|
- ErrorCode von Target-/Token |
-
|
-
-
- | 0 |
- TT |
- Target-/Token Nummer |
- Source |
-
-
- | 1 |
- 00 |
- - 00 = An Alle |
- Target |
-
-
- | 2 |
- BE |
-
|
- 190_x_0 |
-
-
- | 3 |
- 00 |
- Immer 0 |
-
|
-
-
- | 4 |
- xy |
- Bus-Adresse des Fehlercodes |
- 190_0_0 |
-
-
- | 5 |
- Hi-Byte |
- Displaycode |
- 190_1_0 |
-
-
- | 6 |
- Lo-Byte |
-
-
- | 7 |
- Hi-Byte |
- Cause Code |
- 190_3_0 |
-
-
- | 8 |
- Lo-Byte |
-
-
- | 9 |
- <CRC> |
- CRC |
-
|
-
-
- | 10 |
- <Ende> |
- Ende Marker |
-
|
-
-
-
-
-Tabelle 6: ID 24
-
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
-
|
- Message-ID:24_x_y |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 31Byte |
- 33Byte |
-
|
-
|
-
-
-
|
-
|
-
|
- Kessel-Telegramm: Heizgerät |
-
|
-
-
- | 0 |
- 88 |
- 88 |
-
|
- Source |
-
-
- | 1 |
- 00 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- 18 |
- 18 |
-
|
- 24_x_y |
-
-
- | 3 |
- xy |
- xy |
- Telegramm-Offset (hier 0...25). |
-
|
-
-
- | 4 |
- xy |
- xy |
- Vorlauf Soll-Temperatur |
- 24_0_0 |
-
-
- | 5 |
- Hi-Byte |
- Hi-Byte |
- Vorlauf Ist-Temperatur |
- 24_1_0 |
-
-
- | 6 |
- Lo-Byte |
- Lo-Byte |
-
-
- | 7 |
- xy |
- xy |
- Kessel maximale Leistung (76/84/100; 100)% |
- 24_3_0 |
-
-
- | 8 |
- 0-100 |
- 0-100 |
- Aktuelle Brennerleistung in % |
- 24_4_0 |
-
-
- | 9 |
- Bit0...Bit7 |
- Bitfeld |
- Betriebsmode |
-
|
-
-
-
|
- Bit0 |
- Bit1 |
- - Heizungs-Mode |
- 24_5_0 |
-
-
-
|
- Bit1 |
- Bit2 |
- - Warmwasser-Mode |
- 24_5_1 |
-
-
-
|
- Bit2 |
- Bit3:=0 |
- - Status Servicebetrieb |
- 24_5_2 |
-
-
-
|
- Bit3 |
- Bit4 |
- - Brennerflamme an |
- 24_5_3 |
-
-
-
|
- Bit4 |
- Bit5:=0 |
- - Aufheizphase des Wärmeerzeugers |
- 24_5_4 |
-
-
-
|
- Bit5 |
- Bit6:=0 |
- - Verriegelnder Fehler |
- 24_5_5 |
-
-
-
|
- Bit6 |
- Bit7:=0 |
- - Blockierender Fehler |
- 24_5_6 |
-
-
-
|
- Bit7 |
- Bit8:=0 |
- - Status Wartungsanforderung |
- 24_5_7 |
-
-
- | 10 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Status Heizbetrieb |
-
|
-
-
-
|
- Bit0 |
- Bit0 |
- - Heizbetrieb im Bussystem |
- 24_6_0 |
-
-
-
|
- Bit1 |
- Bit1 |
- - Wärmeanforderung (durch Schalter) |
- 24_6_1 |
-
-
-
|
- Bit2 |
- Bit2 |
- - Wärmeanforderung bei Betriebsart: Frost |
- 24_6_2 |
-
-
-
|
- Bit3 |
- Bit3 |
- - Wärmeanforderung im WW-Betrieb bei Betriebsart: Frost |
- 24_6_3 |
-
-
-
|
- Bit4 |
- Bit4 |
- - Interne Wärmeanforderung bei WW |
- 24_6_4 |
-
-
-
|
- Bit5 |
- Bit5 |
- - Wärmeanforderung f. WW-Erkennung im Bussystem |
- 24_6_5 |
-
-
-
|
- Bit6 |
- Bit6 |
- - Wärmeanforderung |
- 24_6_6 |
-
-
-
|
- Bit7 |
- Bit7 |
- - Wärmeanforderung im Testmodus |
- 24_6_7 |
-
-
- | 11 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Betriebs-Status |
-
|
-
-
-
|
- Bit0 |
- Bit0 |
- - Brenner an (Relais-Signal erste Brennstufe) |
- 24_7_0 |
-
-
-
|
- Bit1 |
- Bit1 |
- - Brenner an (Relais-Signal zweite Brennstufe) |
- 24_7_1 |
-
-
-
|
- Bit2 |
- Bit2 |
- - Lüfter an (Relais-Signal f. Lüfter) |
- 24_7_2 |
-
-
-
|
- Bit3 |
- Bit3 |
- - Zündung an (Relais-Signal f. Zündung) |
- 24_7_3 |
-
-
-
|
- Bit4 |
- Bit4 |
- - Ölvorwärmer an (Relais-Signal f. Ölvorwärmer) |
- 24_7_4 |
-
-
-
|
- Bit5 |
- Bit5 |
- - Heizungspumpe an (Relais-Signal f. HP) |
- 24_7_5 |
-
-
-
|
- Bit6 |
- Bit6 |
- - 3-Wege-Ventil auf Speicherladung |
- 24_7_6 |
-
-
-
|
- Bit7 |
- Bit7 |
- - Zirkulationspumpe an (Relais-Signal f. ZP) |
- 24_7_7 |
-
-
- | 12 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Status 1 |
-
|
-
-
-
|
- Bit0 |
- Bit0 |
- - Meldesignal Abgasklappe f. Freigabe Ölbrenner |
- 24_8_0 |
-
-
-
|
- Bit1 |
- Bit1 |
- - Signal vom Luftdruckschalter |
- 24_8_1 |
-
-
-
|
- Bit2 |
- Bit2 |
- - Signal vom Flüssiggasbrenner |
- 24_8_2 |
-
-
-
|
- Bit3 |
- Bit3 |
- - Signal vom Gasdruckwächter |
- 24_8_3 |
-
-
-
|
- Bit4 |
- Bit4 |
- - Signal vom externen Ein-/Aus-Schalter |
- 24_8_4 |
-
-
-
|
- Bit5 |
- Bit5 |
- - Digitales Eingangssignal |
- 24_8_5 |
-
-
-
|
- Bit6 |
- Bit6 |
- - Signal vom Sicherheitstemperaturbegrenzer (TB) |
- 24_8_6 |
-
-
-
|
- Bit7 |
- Bit7 |
- - Signal vom Raumthermostat |
- 24_8_7 |
-
-
- | 13 |
- Hi-Byte |
- Hi-Byte |
- WW-Temperatur Speicherfühler1 |
- 24_9_0 |
-
-
- | 14 |
- Lo-Byte |
- Lo-Byte |
- - (0x8300 := Nicht vorhanden) |
-
-
- | 15 |
- Hi-Byte |
- Hi-Byte |
- WW-Temperatur Speicherfühler2 |
- 24_11_0 |
-
-
- | 16 |
- Lo-Byte |
- Lo-Byte |
- - (0x8000 | 0x7D00 := Nicht vorhanden) |
-
-
- | 17 |
- Hi-Byte |
- Hi-Byte |
- Temperatur Kessel-Rücklauf |
- 24_13_0 |
-
-
- | 18 |
- Lo-Byte |
- Lo-Byte |
- - (0x8000 | 0x7D00 := Nicht vorhanden) |
-
-
- | 19 |
- Hi-Byte |
- Hi-Byte |
- Ionisationsstrom |
- 24_15_0 |
-
-
- | 20 |
- Lo-Byte |
- Lo-Byte |
-
-
- | 21 |
- FF |
- FF |
- Anlagendruck am Wärmeerzeuger |
- 24_17_0 |
-
-
-
|
-
|
-
|
- - (FF := ungültig) |
-
|
-
-
- | 22 |
- Hi-Byte |
- Hi-Byte |
- Displaycode |
- 24_18_0 |
-
-
- | 23 |
- Lo-Byte |
- Lo-Byte |
-
-
- | 24 |
- Hi-Byte |
- Hi-Byte |
- Cause Code |
- 24_20_0 |
-
-
- | 25 |
- Lo-Byte |
- Lo-Byte |
-
-
- | 26 |
- 00 |
- FF |
- Warmwasserdurchfluss-Menge |
- 24_22_0 |
-
-
-
|
-
|
-
|
- - (FF := ungültig) |
-
-
- | 27 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Status 2 |
-
|
-
-
-
|
- Bit0 |
- Bit0 |
- - Status Speicherlade-Pumpe (SP) |
- 24_23_0 |
-
-
-
|
- Bit1 |
- Bit1 |
- - Flüssiggasventil an |
- 24_23_1 |
-
-
-
|
- Bit2 |
- Bit2 |
- - Status Gaswärmepumpe |
- 24_23_2 |
-
-
-
|
- Bit3 |
- Bit3 |
- - Status d. Relais im Schaltmodul UM10 |
- 24_23_3 |
-
-
-
|
- Bit4 |
- Bit4 |
- - Zirkulationspumpe an (Relais-Signal f. ZP) |
- 24_23_4 |
-
-
-
|
- Bit5 |
- Bit5 |
- - Status Brenner Relais |
- 24_23_5 |
-
-
-
|
- Bit6 |
- Bit6 |
- - FB reservierte Bit |
- 24_23_6 |
-
-
-
|
- Bit7 |
- Bit7 |
- - FB reservierte Bit |
- 24_23_7 |
-
-
- | 28 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Status 3 |
-
|
-
-
-
|
- Bit0 |
- Bit0 |
- - Status der Füllfunktion |
- 24_24_0 |
-
-
-
|
- Bit1 |
- Bit1 |
- - Status Schaltmodul UM10 |
- 24_24_1 |
-
-
-
|
- Bit2 |
- Bit2 |
- - UM10 Signal für Brenner-Blockierung |
- 24_24_2 |
-
-
-
|
- Bit3 |
- Bit3 |
- - Brennerfreigabe durch Schaltmodul |
- 24_24_3 |
-
-
-
|
- Bit4 |
- Bit4 |
- - Status Brenneranlauf im Schaltmodul |
- 24_24_4 |
-
-
-
|
- Bit5 |
- Bit5 |
- - Heizbetrieb blockiert bei Heatronic III |
- 24_24_5 |
-
-
-
|
- Bit6 |
- Bit6 |
- - STB – Test aktiv |
- 24_24_6 |
-
-
-
|
- Bit7 |
- Bit7 |
- - Tastensperre ein |
- 24_24_7 |
-
-
- | 29 |
- <CRC> |
- Hi-Byte |
- CRC | Hi-Byte - Ansauglufttemperatur |
- xy | 24_25_0 |
-
-
- | 30 |
- <Ende> |
- Lo-Byte |
- Ende | Lo-Byte - Ansauglufttemperatur |
-
|
-
-
- | 31 |
- – |
- <CRC> |
- -– | CRC |
-
|
-
-
- | 32 |
- – |
- <Ende> |
- –- | Ende |
-
|
-
-
-
-
-Tabelle 7: ID 25
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:25_x_0 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 33Byte |
-
|
-
|
-
-
-
|
-
|
- Kessel-Telegramm: Heizgerät |
-
|
-
-
- | 0 |
- 88 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- 19 |
-
|
- 25_x_0 |
-
-
- | 3 |
- xy |
- Telegramm-Offset (hier 0...25). |
-
|
-
-
- | 4 |
- Hi-Byte |
- Außentemperatur |
- 25_0_0 |
-
-
- | 5 |
- Lo-Byte |
-
-
- | 6 |
- Hi-Byte |
- Maximale Temperatur |
- 25_2_0 |
-
-
- | 7 |
- Lo-Byte |
- - 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden |
-
-
-
|
-
|
- - 0x7FFF = Sensorkurzschluss |
-
|
-
-
- | 8 |
- Hi-Byte |
- Abgastemperatur |
- 25_4_0 |
-
-
- | 9 |
- Lo-Byte |
- - 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden |
-
-
-
|
-
|
- - 0x7FFF = Sensorkurzschluss |
-
|
-
-
- | 10 |
- Hi-Byte |
- Gasdruck / Luftdruck |
- 25_6_0 |
-
-
- | 11 |
- Lo-Byte |
- - 0xFFFF = Sensorunterbrechung / Fühler nicht vorhanden |
-
-
- | 12 |
- xy |
- Taktsperre im Zweipunkt Betrieb |
- 25_8_0 |
-
-
- | 13 |
- xy |
- Modulationsbereich Heizungspumpe (HP) |
- 25_9_0 |
-
-
- | 14 |
- Byte 3 |
- Brennerstarts Total (für Warmwasser und Heizung) |
- 25_10_0 |
-
-
- | 15 |
- Byte 2 |
- „ ( Calculation-Type: 2 ) |
-
-
- | 16 |
- Byte 1 |
- „ |
-
-
- | 17 |
- Byte 3 |
- Betriebsminuten Brenner Total (für Warmwasser und Heizung) |
- 25_13_0 |
-
-
- | 18 |
- Byte 2 |
- „ ( Calculation-Type: 2 ) |
-
-
- | 19 |
- Byte 1 |
- „ |
-
-
- | 20 |
- Byte 3 |
- Betriebszeit f. Zweite Brennerstufe |
- 25_16_0 |
-
-
- | 21 |
- Byte 2 |
- „ ( Calculation-Type: 2 ) |
-
-
- | 22 |
- Byte 1 |
- „ |
-
-
- | 23 |
- Byte 3 |
- Betriebsminuten Brenner (nur Heizung) |
- 25_19_0 |
-
-
- | 24 |
- Byte 2 |
- „ ( Calculation-Type: 2 ) |
-
-
- | 25 |
- Byte 1 |
- „ |
-
-
- | 26 |
- Byte 3 |
- Brennerstarts (nur Heizung) |
- 25_22_0 |
-
-
- | 27 |
- Byte 2 |
- „ ( Calculation-Type: 2 ) |
-
-
- | 28 |
- Byte 1 |
- „ |
-
-
- | 29 |
- Hi-Byte |
- Temperatur an hydraulischer Weiche |
- 25_25_0 |
-
-
- | 30 |
- Lo-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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- Kessel-Telegramm: Heizgerät |
-
|
-
-
- | 0 |
- 88 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- BC |
-
|
- 188_x_y |
-
-
- | 3 |
- xy |
- Telegramm-Offset (hier 0...13). |
-
|
-
-
- | 4 |
- Hi-Byte |
- Temperatur Puffer-Speicher oben |
- 188_0_0 |
-
-
- | 5 |
- Lo-Byte |
-
-
- | 6 |
- Hi-Byte |
- Temperatur Puffer-Speicher unten |
- 188_2_0 |
-
-
- | 7 |
- Lo-Byte |
-
-
- | 8 |
- Hi-Byte |
- Temperatur Vorlauf Verflüssiger |
- 188_4_0 |
-
-
- | 9 |
- Lo-Byte |
-
-
- | 10 |
- Hi-Byte |
- Temperatur Rücklauf Verflüssiger |
- 188_6_0 |
-
-
- | 11 |
- Lo-Byte |
-
-
- | 12 |
- Bit0...Bit7 |
- Betriebs-Status1 |
-
|
-
-
-
|
- Bit0 |
- - Wärmepumpe |
- 188_8_0 |
-
-
-
|
- Bit1 |
-
|
- 188_8_1 |
-
-
-
|
- Bit2 |
-
|
- 188_8_2 |
-
-
-
|
- Bit3 |
-
|
- 188_8_3 |
-
-
-
|
- Bit4 |
- - Status Abtaumöglichkeit an W-Pumpe |
- 188_8_4 |
-
-
-
|
- Bit5 |
-
|
- 188_8_5 |
-
-
-
|
- Bit6 |
-
|
- 188_8_6 |
-
-
-
|
- Bit7 |
-
|
- 188_8_7 |
-
-
- | 13 |
- Bit0...Bit7 |
- Betriebs-Status2 |
-
|
-
-
-
|
- Bit0 |
- - Abtaufunktion an W-Pumpe |
- 188_9_0 |
-
-
-
|
- Bit1 |
- - Status Verdichter |
- 188_9_1 |
-
-
-
|
- Bit2 |
- - Fehlerstatus Wärmepumpe |
- 188_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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 7Byte |
-
|
-
|
-
-
-
|
-
|
- Telegramm: Solltemperatur WW-System |
-
|
-
-
- | 0 |
- 90 |
- |
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- 1B |
-
|
- 27_x_0 |
-
-
- | 3 |
- 00 |
- Immer 00 |
-
|
-
-
- | 4 |
- 32 |
- Sollwert Warmwasser-Temperatur |
- 27_0_0 |
-
-
- | 5 |
- <CRC> |
- CRC |
-
|
-
-
- | 6 |
- <Ende> |
- Ende Marker |
-
|
-
-
-
-
-Tabelle 10: ID 51
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID: 51_x_y |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- Kessel-Telegramm: Warmwasser |
-
|
-
-
- | 0 |
- 88 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- 33 |
-
|
- 51_x_y |
-
-
- | 3 |
- xy |
- Telegramm-Offset (hier 0...12). |
-
|
-
-
- | 4 |
- xy |
- Soll-Temperatur Warmwasser |
- 51_0_0 |
-
-
- | 5 |
- xy |
-
|
- 51_1_0 |
-
-
- | 6 |
- xy |
- Soll-Temperatur Warmwasser |
- 51_2_0 |
-
-
- | 7 |
- xy |
- Temperaturhysterese bei T-Soll |
- 51_3_0 |
-
-
- | 8 |
- xy |
-
|
- 51_4_0 |
-
-
- | 9 |
- xy |
-
|
- 51_5_0 |
-
-
- | 10 |
- xy |
-
|
- 51_6_0 |
-
-
- | 11 |
- xy |
-
|
- 51_7_0 |
-
-
- | 12 |
- xy |
-
|
- 51_8_0 |
-
-
- | 13 |
- xy |
-
|
- 51_9_0 |
-
-
- | 14 |
- xy |
-
|
- 51_10_0 |
-
-
- | 15 |
- xy |
-
|
- 51_11_0 |
-
-
- | 16 |
- xy |
-
|
- 51_12_0 |
-
-
- | 17 |
- <CRC> |
-
|
-
|
-
-
- | 18 |
- <Ende> |
-
|
-
|
-
-
-
-
-Tabelle 11: ID 52
-
-
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
|
-
|
-
-
-
|
-
|
-
|
-
|
- Message-ID: 52_x_y |
-
|
-
-
- | Byte |
- Werte (Hex) |
-
|
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 23Byte |
- 22Byte |
- 25Byte |
-
|
-
|
-
-
-
|
-
|
-
|
-
|
- Kessel-Telegramm: Warmwasser |
-
|
-
-
- | 0 |
- 88 |
- 88 |
- 88 |
-
|
- Source |
-
-
- | 1 |
- 00 |
- 00 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- 34 |
- 34 |
- 34 |
-
|
- 52_x_y |
-
-
- | 3 |
- xy |
- xy |
- xy |
- Telegramm-Offset (hier 0...17). |
-
|
-
-
- | 4 |
- xy |
- xy |
- xy |
- Soll-Temperatur Warmwasser |
- 52_0_0 |
-
-
- | 5 |
- Hi-Byte |
- Hi-Byte |
- Hi-Byte |
- Ist-Temperatur Warmwasser |
- 52_1_0 |
-
-
- | 6 |
- Lo-Byte |
- Lo-Byte |
- Lo-Byte |
- - 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden |
-
-
-
|
-
|
-
|
-
|
- - 0x7FFF = Sensorkurzschluss |
-
|
-
-
- | 7 |
- Hi-Byte |
- Hi-Byte |
- Hi-Byte |
- Ist-Temperatur im Warmwasser - Speicher |
- 52_3_0 |
-
-
- | 8 |
- Lo-Byte |
- Lo-Byte |
- Lo-Byte |
- - 0x8000 = Sensorunterbrechung / Fühler nicht vorhanden |
-
-
-
|
-
|
-
|
-
|
- - 0x7FFF = Sensorkurzschluss |
-
|
-
-
- | 9 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Warmwasser-Status |
-
|
-
-
-
|
- Bit0 |
- Bit0 |
- Bit0 |
- - WW-Bereitung im Normalbetrieb |
- 52_5_0 |
-
-
-
|
- Bit1 |
- Bit1 |
- Bit1 |
- - Einmalige Speicher-Ladung |
- 52_5_1 |
-
-
-
|
- Bit2 |
- Bit2 |
- Bit2 |
- - Thermische Desinfektion |
- 52_5_2 |
-
-
-
|
- Bit3 |
- Bit3 |
- Bit3 |
- - Speicherladung im WW-System |
- 52_5_3 |
-
-
-
|
- Bit4 |
- Bit4 |
- Bit4 |
- - Speicherladung im Nachwärmsystem |
- 52_5_4 |
-
-
-
|
- Bit5 |
- Bit5 |
- Bit5 |
- - Erreichter Sollwert Warmwasser-Temperatur |
- 52_5_5 |
-
-
-
|
- Bit6 |
- Bit6 |
- Bit6 |
- - Warmwasserbetrieb |
- 52_5_6 |
-
-
-
|
- Bit7 |
- Bit7 |
- Bit7 |
- - Status f. Art der Warmwasserbereitung |
- 52_5_7 |
-
-
-
|
-
|
-
|
-
|
- -- 0 = Warmwasserteilvorrang |
-
|
-
-
-
|
-
|
-
|
-
|
- -- 1 = Warmwasservorrang |
-
|
-
-
- | 10 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- WW-Fehlersignale |
-
|
-
-
-
|
- Bit0 |
- Bit0 |
- Bit0 |
- - WW-Temperaturfühler 1 defekt |
- 52_6_0 |
-
-
-
|
- Bit1 |
- Bit1 |
- Bit1 |
- - WW-Temperaturfühler 2 defekt |
- 52_6_1 |
-
-
-
|
- Bit2 |
- Bit2 |
- Bit2 |
- - WW-System wird nicht aufgeheizt |
- 52_6_2 |
-
-
-
|
- Bit3 |
- Bit3 |
- Bit3 |
- - Thermische Desinfektion ist nicht in Betrieb |
- 52_6_3 |
-
-
-
|
- Bit4 |
- Bit4 |
- Bit4 |
- - WW ist nicht blockiert |
- 52_6_4 |
-
-
-
|
- Bit5...Bit7 |
- Bit5...Bit7 |
- Bit5...Bit7 |
- - Immer 0 |
- 52_6_5 bis |
-
-
-
|
-
|
-
|
-
|
-
|
- 52_6_7 |
-
-
- | 11 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Bit0...Bit7 |
- Zirkulationspumpen-Status |
-
|
-
-
-
|
- Bit0 |
- Bit0 |
- Bit0 |
- - Zirkulationspumpe (ZP) im Normalbetrieb |
- 52_7_0 |
-
-
-
|
- Bit1 |
- Bit1 |
- Bit1 |
- - Zirkulationspumpe (ZP) an bei einmaliger Speicherladung |
- 52_7_1 |
-
-
-
|
- Bit2 |
- Bit2 |
- Bit2 |
- - Zirkulationspumpe (ZP) an |
- 52_7_2 |
-
-
-
|
- Bit3 |
- Bit3 |
- Bit3 |
- - Ansteuersignal f. Zirkulationspumpe (ZP) |
- 52_7_3 |
-
-
-
|
- Bit4...Bit7 |
- Bit4...Bit7 |
- Bit4...Bit7 |
- - Immer 0 |
-
|
-
-
- | 12 |
- 0...4 |
- 0...4 |
- 0...4 |
- Bauart des Warmwassersystems |
- 52_8_0 |
-
-
-
|
-
|
-
|
-
|
- - 0 = ohne Warmwasserbereitung |
-
|
-
-
-
|
-
|
-
|
-
|
- - 1 = nach Durchlaufprinzip |
-
|
-
-
-
|
-
|
-
|
-
|
- - 2 = Druckloser Speicher |
-
|
-
-
-
|
-
|
-
|
-
|
- - 3 = Warmwasser-Speicherprinzip |
-
|
-
-
-
|
-
|
-
|
-
|
- - 4 = Schichtlade-Speicher |
-
|
-
-
- | 13 |
- xy |
- xy |
- xy |
- Aktuelle Wasserduchflussmenge |
- 52_9_0 |
-
-
- | 14 |
- Byte 3 |
- Byte 3 |
- Byte 3 |
- Betriebszeit Warmwasser-Erzeugung (Minuten) |
- 52_10_0 |
-
-
- | 15 |
- Byte 2 |
- Byte 2 |
- Byte 2 |
-
-
- | 16 |
- Byte 1 |
- Byte 1 |
- Byte 1 |
-
-
- | 17 |
- Byte 3 |
- Byte 3 |
- Byte 3 |
- Anzahl Brennerstarts für Warmwassererzeugung |
- 52_13_0 |
-
-
- | 18 |
- Byte 2 |
- Byte 2 |
- Byte 2 |
-
-
- | 19 |
- Byte 1 |
- Byte 1 |
- Byte 1 |
-
-
- | 20 |
- xy |
- <CRC> |
- xy |
- Modulationsbereich ZP im WW-System 1 |
- 52_16_0 |
-
-
- | 21 |
- <CRC> |
- <Ende> |
- Hi-Byte |
- Hi-Byte Warmwasser Eingangstemperatur |
- 52_17_0 |
-
-
- | 22 |
- <Ende> |
- -- |
- Lo-Byte |
- Lo-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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 11Byte |
-
|
-
|
-
-
-
|
-
|
- Telegramm: Betriebsart WW-System |
-
|
-
-
- | 0 |
- 90 |
- |
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 00 |
- Immer 00 |
- EMS Type(H) |
-
-
- | 5 |
- D3 / D4 |
- WW-System |
-
|
-
-
-
|
-
|
- - D3=WW-System1 |
- 467_0_0 |
-
-
-
|
-
|
- - D4=WW-System2 |
- 468_0_0 |
-
-
- | 6 |
- xy |
- Betriebsart 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 |
-
|
-
-
- | 7 |
- xy |
- Wert f. Temperaturreduzierung bei solarer Unterstuetzung |
- 467_1_0 bis 468_1_0 |
-
-
- | 8 |
- xy |
- Status der letzten thermischen Desinfektion |
- 467_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 |
-
|
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
- Beispiel (Hex) |
-
-
-
|
- 11Byte |
-
|
-
|
-
|
-
-
-
|
-
|
- Telegramm: Heizkreis Systemwerte |
-
|
-
|
-
-
- | 0 |
- 90 |
-
|
- Source |
-
|
-
-
- | 1 |
- 08 |
- Target = Steuerung |
- Target |
-
|
-
-
- | 2 |
- 1A |
- Immer 1A |
- 26_x_0 |
-
|
-
-
- | 3 |
- xy |
- Telegramm-Offset (hier 0...4). |
-
|
-
|
-
-
- | 4 |
- 26 |
- Sollwert f. Vorlauftemperatur im Heizkreis |
- 26_0_0 |
-
|
-
-
- | 5 |
- 64 |
- Maximale Leistung des Wärmeerzeugers |
- 26_1_0 |
-
|
-
-
- | 6 |
- 64 |
- Sollwert f. Drehzahl der Umwälzpumpe |
- 26_2_0 |
-
|
-
-
- | 7 |
- 0 / FF |
- Status f. Aufheizen mit hohem Wirkungsgrad |
- 26_3_0 |
-
|
-
-
- | 8 |
- 3 |
- Betriebsart f. Umwälzpumpe im Energiesparmodus |
- 26_4_0 |
-
|
-
-
- | 9 |
- <CRC> |
- CRC |
-
|
-
|
-
-
- | 10 |
- <Ende> |
- Ende Marker |
-
|
-
|
-
-
-
-
-Tabelle 14: ID 268
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:268_x_0 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 14Byte |
-
|
-
|
-
-
-
|
-
|
- IPM – Telegramm (Schaltmodul) |
-
|
-
-
- | 0 |
- A0...A7 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 00 |
- Immer 00 |
- EMS Type(H) |
-
-
- | 5 |
- 0C |
- Immer 0C |
- EMS Type(L) |
-
-
- | 6 |
- 0...2 |
- Bauart des Heizkreises (Mischer ja/nein) |
-
|
-
-
-
|
-
|
- - 0=Nicht vorhanden |
-
|
-
-
-
|
-
|
- - 1=Ungemischter Heizkreis |
- 268_0_0 |
-
-
-
|
-
|
- - 2=Gemischter Heizkreis |
- 268_0_1 |
-
-
- | 7 |
- 0...1 |
- Status Heizungspumpe im Heizkreis |
- 268_1_0 |
-
-
-
|
-
|
- - 0=Pumpe aus |
-
|
-
-
-
|
-
|
- - 1=Pumpe Ein |
-
|
-
-
- | 8 |
- xy |
- Mischer Position (Prozentwert) |
- 268_2_0 |
-
-
- | 9 |
- Hi-Byte |
- Vorlauftemperatur 'Ist' für gemischten Heizkreis |
- 268_3_0 |
-
-
- | 10 |
- Lo-Byte |
-
-
- | 11 |
- xy |
- Sollwert Vorlauftemperatur (Grad) |
- 268_5_0 |
-
-
- | 12 |
- <CRC> |
- CRC |
-
|
-
-
- | 13 |
- <Ende> |
- Ende Marker |
-
|
-
-
-
-
-Tabelle 15: ID 296
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:296_x_0 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 32Byte |
-
|
-
|
-
-
-
|
-
|
- Telegramm: Heizkreis Fehlermeldungen |
-
|
-
-
- | 0 |
- 90 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
- Offset auf nächste Fehlermeldung |
- EMS Offset |
-
-
- | 4 |
- 00 |
- Immer 00 |
- EMS Type(H) |
-
-
- | 5 |
- 28 |
- Fehler |
- EMS Type(L) |
-
-
- | 6 |
- xy1 |
- Fehler1: Display-Code1 |
- 296_0_0 |
-
-
- | 7 |
- xy2 |
- Fehler1: Display-Code2 |
- 296_1_0 |
-
-
- | 8 |
- Hi-Byte |
- Fehler1: Fehlercode |
- 296_2_0 |
-
-
- | 9 |
- Lo-Byte |
-
|
-
|
-
-
- | 10 |
- xy |
- Fehler1: Jahr (+2000) |
- 296_4_0 |
-
-
- | 11 |
- xy |
- Fehler1: Monat |
- 296_5_0 |
-
-
- | 12 |
- xy |
- Fehler1: Stunde |
- 296_6_0 |
-
-
- | 13 |
- xy |
- Fehler1: Tag |
- 296_7_0 |
-
-
- | 14 |
- xy |
- Fehler1: Minute |
- 296_8_0 |
-
-
- | 15 |
- Hi-Byte |
- Fehler1: Minute (Reserviert) |
- 296_9_0 |
-
-
- | 16 |
- Lo-Byte |
-
|
-
|
-
-
- | 17 |
- xy |
- Fehler1: Busadresse |
- 296_11_0 |
-
-
- | 18 |
- xy1 |
- Fehler2: Display-Code1 |
- 296_12_0 |
-
-
- | 19 |
- xy2 |
- Fehler2: Display-Code2 |
- 296_13_0 |
-
-
- | 20 |
- Hi-Byte |
- Fehler2: Fehlercode |
- 296_14_0 |
-
-
- | 21 |
- Lo-Byte |
-
|
-
|
-
-
- | 22 |
- xy |
- Fehler2: Jahr (+2000) |
- 296_16_0 |
-
-
- | 23 |
- xy |
- Fehler2: Monat |
- 296_17_0 |
-
-
- | 24 |
- xy |
- Fehler2: Stunde |
- 296_18_0 |
-
-
- | 25 |
- xy |
- Fehler2: Tag |
- 296_19_0 |
-
-
- | 26 |
- xy |
- Fehler2: Minute |
- 296_20_0 |
-
-
- | 27 |
- Hi-Byte |
- Fehler2: Minute (Reserviert) |
- 296_21_0 |
-
-
- | 28 |
- Lo-Byte |
-
|
-
|
-
-
- | 29 |
- xy |
- Fehler2: Busadresse |
- 296_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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 29Byte |
-
|
-
|
-
-
-
|
-
|
- Telegramm: Heizkreis Steuerung |
-
|
-
-
-
|
-
|
- (Bauart des Heizkreises) |
-
|
-
-
- | 0 |
- 90 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 00 |
- Immer 00 |
- EMS Type(H) |
-
-
- | 5 |
- 65...6E |
- Heizkreis x |
- EMS Type(L) |
-
-
-
|
- 65 |
- 65=Heizkreis1 |
- 357_0_0 |
-
-
-
|
- 66 |
- 66=Heizkreis2 |
- 358_0_0 |
-
-
-
|
- 67 |
- 67=Heizkreis3 |
- 359_0_0 |
-
-
-
|
- 68 |
- 68=Heizkreis4 |
- 360_0_0 |
-
-
-
|
- 69 |
- 69=Heizkreis5 |
- 361_0_0 |
-
-
-
|
- 6A |
- 6A=Heizkreis6 |
- 362_0_0 |
-
-
-
|
- 6B |
- 6B=Heizkreis7 |
- 363_0_0 |
-
-
-
|
- 6C |
- 6C=Heizkreis8 |
- 364_0_0 |
-
-
-
|
- 6D |
- 6D=Heizkreis9 |
- 365_0_0 |
-
-
-
|
- 6E |
- 6E=Heizkreis10 |
- 366_0_0 |
-
-
- | 6 |
- 0...3 |
- Bauart-Werte |
- 357_1_0 bis |
-
-
-
|
-
|
- - 0=Nicht vorhanden |
- 366_1_0 |
-
-
-
|
-
|
- - 1=Ungemischter Heizkreis ohne Schaltmodul IPM |
-
|
-
-
-
|
-
|
- - 2=Ungemischter Heizkreis mit Schaltmodul IPM |
-
|
-
-
-
|
-
|
- - 3=Gemischter Heizkreis |
-
|
-
-
- | 7 |
- 0...2 |
- Fernbedienung für Heizkreis x |
-
|
-
-
-
|
-
|
- - 0=Nicht vorhanden |
-
|
-
-
-
|
-
|
- - 1=Fernbedienung FB 10 |
-
|
-
-
-
|
-
|
- - 2=Fernbedienung FB100 |
-
|
-
-
- | 8 |
- 0...4 |
- Bauart des Heizkreis x |
-
|
-
-
-
|
-
|
- - 0=nicht definiert |
- 357_2_0 bis |
-
-
-
|
-
|
- - 1=Fußpunkt/Endpunkt |
- 366_2_0 |
-
-
-
|
-
|
- - 2=Radiatoren |
-
|
-
-
-
|
-
|
- - 3=Konvektoren |
-
|
-
-
-
|
-
|
- - 4=Fußbodenheizung |
-
|
-
-
- | 9 |
- z.B. 19 |
- Fußpunkt für Heizkurve (in Grad) |
- 357_3_0 bis |
-
-
-
|
-
|
-
|
- 366_3_0 |
-
-
- | 10 |
- z.B. 30 |
- Endpunkt für Heizkurve (in Grad) |
- 357_4_0 bis |
-
-
-
|
-
|
-
|
- 366_4_0 |
-
-
- | 11 |
- z.B. 50 |
- Maximale Vorlauftemperatur (in Grad) für Heizkreis x |
- 357_5_0 bis |
-
-
-
|
-
|
-
|
- 366_5_0 |
-
-
- | 12 |
-
|
- Raumeinfluss-Faktor (%) im Heizkreis x |
- 357_6_0 bis |
-
-
-
|
-
|
-
|
- 366_6_0 |
-
-
- | 13 |
- 0...2 |
- Raumeinfluss im Heizkreis x bei Betriebsart |
- 357_7_0 bis |
-
-
-
|
-
|
- - 0=nicht definiert |
- 366_7_0 |
-
-
-
|
-
|
- - 1=Normalbetrieb / Sparbetrieb / Frostschutzbetrieb |
-
|
-
-
-
|
-
|
- - 2=Sparbetrieb / Frostschutzbetrieb |
-
|
-
-
- | 14 |
-
|
- Einstellung dauerhafte Raumtemperatur-Korrektur im Heizkreis x |
- 357_8_0 bis |
-
-
-
|
-
|
-
|
- 366_8_0 |
-
-
- | 15 |
- 0...3 |
- Betriebsart Raumtemperaturfühler für Heizkreis x |
- 357_9_0 bis |
-
-
-
|
-
|
- - 0=nicht definiert |
- 366_9_0 |
-
-
-
|
-
|
- - 1=Externer Temperaturfühler |
-
|
-
-
-
|
-
|
- - 2=Interner Temperaturfühler |
-
|
-
-
-
|
-
|
- - 3=Temperatur im Sparmodus |
-
|
-
-
-
|
-
|
-
|
-
|
-
-
- | 16 |
- 0/FF |
- Status für Temperaturniveau Frost |
- 357_10_0 bis |
-
-
-
|
-
|
- - 0 = Aus |
- 366_10_0 |
-
-
-
|
-
|
- - FF = Ein |
-
|
-
-
- | 17 |
- z.B. 2B |
- Abschaltung (Außentemperaturgesteuert) von Heizkreis x |
- 357_11_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 366_11_0 |
-
-
- | 18 |
-
|
- Frostgrenztemperatur für Heizkreis x |
- 357_12_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 366_12_0 |
-
-
- | 19 |
- 0...6 |
- Aktives Heizprogramm im Heizkreis x |
- 357_13_0 bis |
-
-
-
|
-
|
- - 0=nicht definiert |
- 366_13_0 |
-
-
-
|
-
|
- - 1-6=Nummer des aktiven Heizprogramms |
-
|
-
-
-
|
-
|
- - (1:A; 2:=B;3:=C; …) |
-
|
-
-
- | 20 |
- 0....4 |
- Betriebsart für den Heizkreis x |
- 357_14_0 bis |
-
-
-
|
-
|
- - 0=nicht definiert |
- 366_14_0 |
-
-
-
|
-
|
- - 1=Betrieb im Frostschutzmodus |
-
|
-
-
-
|
-
|
- - 2=Betrieb im Sparmodus |
-
|
-
-
-
|
-
|
- - 3=Betrieb im Normalmodus |
-
|
-
-
-
|
-
|
- - 4=Automatikbetrieb |
-
|
-
-
- | 21 |
- z.B. 14 |
- Temperaturniveau für Betriebsart Frost im Heizkreis x |
- 357_15_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 366_15_0 |
-
-
- | 22 |
- z.B. 28 |
- Temperaturniveau für Betriebsart Sparen im Heizkreis x |
- 357_16_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 366_16_0 |
-
-
- | 23 |
- z.B. 2B |
- Temperaturniveau für Betriebsart Normal im Heizkreis x |
- 357_17_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 366_17_0 |
-
-
- | 24 |
- 0...3 |
- Aufheizgeschwindigkeit für Heizkreis x |
- 357_18_0 bis |
-
-
-
|
-
|
- - 0=nicht definiert |
- 366_18_0 |
-
-
-
|
-
|
- - 1=Langsam |
-
|
-
-
-
|
-
|
- - 2=Normal |
-
|
-
-
-
|
-
|
- - 3=Schnell |
-
|
-
-
- | 25 |
- 0...4 |
- Urlaubsprogramm Betriebsart für Heizkreis x |
- 357_19_0 bis |
-
-
-
|
-
|
- - 0=nicht definiert |
- 366_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 x |
- 357_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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 17Byte |
- 14Byte |
- 9Byte |
-
|
-
|
-
-
-
|
-
|
-
|
-
|
- Telegramm: Heizkreis Steuerung |
-
|
-
-
-
|
-
|
-
|
-
|
- (Temperaturniveau für den Heizkreis) |
-
|
-
-
- | 0 |
- 90 | 9x |
- 90 | 9x |
- 90 | 9x |
- (wobei: x:= 8...F) |
- Source |
-
-
- | 1 |
- 00 |
- 00 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
- FF |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
- xy |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 00 |
- 00 |
- 00 |
- Immer 00 |
- EMS Type(H) |
-
-
- | 5 |
- 6F...78 |
- 6F...78 |
- 6F...78 |
- Heizkreis-Zuordnung |
- EMS Type(L) |
-
-
-
|
-
|
-
|
-
|
- 6F=Heizkreis1 |
- 367_0_0 |
-
-
-
|
-
|
-
|
-
|
- 70=Heizkreis2 |
- 368_0_0 |
-
-
-
|
-
|
-
|
-
|
- 71=Heizkreis3 |
- 369_0_0 |
-
-
-
|
-
|
-
|
-
|
- 72=Heizkreis4 |
- 370_0_0 |
-
-
-
|
-
|
-
|
-
|
- 73=Heizkreis5 |
- 371_0_0 |
-
-
-
|
-
|
-
|
-
|
- 74=Heizkreis6 |
- 372_0_0 |
-
-
-
|
-
|
-
|
-
|
- 75=Heizkreis7 |
- 373_0_0 |
-
-
-
|
-
|
-
|
-
|
- 76=Heizkreis8 |
- 374_0_0 |
-
-
-
|
-
|
-
|
-
|
- 77=Heizkreis9 |
- 375_0_0 |
-
-
-
|
-
|
-
|
-
|
- 78=Heizkreis10 |
- 376_0_0 |
-
-
- | 6 |
- 0...3 |
- 0...3 |
- 0...3 |
- Betriebsart Heizung: |
- 367_0_0 bis |
-
-
-
|
-
|
-
|
-
|
- - 0=nicht definiert |
- 376_0_0 |
-
-
-
|
-
|
-
|
-
|
- - 1=Frost |
-
|
-
-
-
|
-
|
-
|
-
|
- - 2=Sparen |
-
|
-
-
-
|
-
|
-
|
-
|
- - 3=Heizen |
-
|
-
-
- | 7 |
- 0...5 |
- 0...5 |
- <CRC> |
- Betriebsart Heizkreis | | CRC |
- 367_1_0 bis |
-
-
-
|
-
|
-
|
-
|
- - 0=nicht definiert |
- 376_1_0 |
-
-
-
|
-
|
-
|
- – |
- - 1=dauernd |
-
|
-
-
-
|
-
|
-
|
- – |
- - 2=Automatikbetrieb |
-
|
-
-
-
|
-
|
-
|
- – |
- - 3=Urlaub |
-
|
-
-
-
|
-
|
-
|
- – |
- - 4=Estrichtrocknung im StandbyModus |
-
|
-
-
-
|
-
|
-
|
- – |
- - 5=Estrichtrocknung in Betrieb |
-
|
-
-
- | 8 |
- Hi-Byte |
- Hi-Byte |
- <Ende> |
- Soll-Temperatur (HK1 bis HK10) | | Ende Marker |
- 367_2_0 bis |
-
-
- | 9 |
- Lo-Byte |
- Lo-Byte |
- – |
- 376_2_0 |
-
-
- | 10 |
- Hi-Byte |
- Hi-Byte |
- – |
- Ist-Temperatur (HK1 bis HK10 vom Regler) |
- 367_4_0 bis |
-
-
- | 11 |
- Lo-Byte |
- Lo-Byte |
- – |
- 376_4_0 |
-
-
- | 12 |
- Hi-Byte |
- <CRC> |
- – |
- T-Raum FB10x | CRC |
- 367_6_0 |
-
-
- | 13 |
- Lo-Byte |
- <Ende> |
- – |
- T-Raum FB10x | Ende Marker |
-
|
-
-
- | 14 |
- 00 … 07 |
- – |
- – |
- Temperaturwert für solare Unterstützung der Vorlauftemperatur |
- 367_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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 19Byte |
-
|
-
|
-
-
-
|
-
|
- Telegramm: Heizkreis Steuerung |
-
|
-
-
- | 0 |
- 90 |
- (Bauart des Heizkreises) |
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 00 |
- Immer 00 |
- EMS Type(H) |
-
-
- | 5 |
- 79...82 |
- Heizkreis x Kennung |
- EMS Type(L) |
-
-
-
|
-
|
- 79=Heizkreis1 |
- 377_0_0 |
-
-
-
|
-
|
- 7A=Heizkreis2 |
- 378_0_0 |
-
-
-
|
-
|
- 7B=Heizkreis3 |
- 379_0_0 |
-
-
-
|
-
|
- 7C=Heizkreis4 |
- 380_0_0 |
-
-
-
|
-
|
- 7D=Heizkreis5 |
- 381_0_0 |
-
-
-
|
-
|
- 7E=Heizkreis6 |
- 382_0_0 |
-
-
-
|
-
|
- 7F=Heizkreis7 |
- 383_0_0 |
-
-
-
|
-
|
- 80=Heizkreis8 |
- 384_0_0 |
-
-
-
|
-
|
- 81=Heizkreis9 |
- 385_0_0 |
-
-
-
|
-
|
- 82=Heizkreis10 |
- 386_0_0 |
-
-
- | 6 |
- 0...3 |
- Bauart-Werte |
- 377_0_0 bis |
-
-
-
|
-
|
- - 0=Nicht vorhanden |
- 386_0_0 |
-
-
-
|
-
|
- - 1=Ungemischter Heizkreis ohne Schaltmodul IPM |
-
|
-
-
-
|
-
|
- - 2=Ungemischter Heizkreis mit Schaltmodul IPM |
-
|
-
-
-
|
-
|
- - 3=Gemischter Heizkreis |
-
|
-
-
- | 7 |
-
|
- Anpassungsfaktor im Heizkreis x |
- 377_1_0 bis |
-
-
-
|
-
|
-
|
- 386_1_0 |
-
-
- | 8 |
-
|
- Verstärkungsfaktor im Heizkreis x |
- 377_2_0 bis |
-
-
-
|
-
|
-
|
- 386_2_0 |
-
-
- | 9 |
-
|
- Maximale Vorlauftemperatur im Heizkreis x |
- 377_3_0 bis |
-
-
-
|
-
|
-
|
- 386_3_0 |
-
-
- | 10 |
- 0...4 |
- Betriebsart für Heizkreis x |
- 377_4_0 bis |
-
-
-
|
-
|
- - 0=nicht definiert |
- 386_4_0 |
-
-
-
|
-
|
- - 1=Betrieb im Frostschutzmodus |
-
|
-
-
-
|
-
|
- - 2=Betrieb im Sparmodus |
-
|
-
-
-
|
-
|
- - 3=Betrieb im Normalmodus |
-
|
-
-
-
|
-
|
- - 4=Automatikbetrieb |
-
|
-
-
- | 11 |
-
|
- Temperaturniveau bei Betriebsart Frost |
- 377_5_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 386_5_0 |
-
-
- | 12 |
-
|
- Temperaturniveau bei Betriebsart Sparen |
- 377_6_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 386_6_0 |
-
-
- | 13 |
-
|
- Temperaturniveau bei Betriebsart Normal |
- 377_7_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 386_7_0 |
-
-
- | 14 |
-
|
- Urlaubsprogramm Betriebsart für Heizkreis x |
- 377_8_0 bis |
-
-
-
|
-
|
- - ( Werte wie bei Byte:10 Betriebsart Heizkreis) |
- 386_8_0 |
-
-
- | 15 |
- 0/FF |
- Status Optimierungsfunktion im Heizkreis x |
- 377_9_0 bis |
-
-
-
|
-
|
- - 0 = Aus |
- 386_9_0 |
-
-
-
|
-
|
- - FF = Ein |
-
|
-
-
- | 16 |
- 0...6 |
- Aktiviertes Heizprogramm |
- 377_10_0 bis |
-
-
-
|
-
|
- - 0=Nicht definiert |
- 386_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 |
-
|
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- Telegramm: Heizkreis Steuerung |
-
|
-
-
-
|
-
|
- (Temperaturniveau für den Heizkreis) |
-
|
-
-
- | 0 |
- 90 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 01 |
- Immer 01 |
- EMS Type(H) |
-
-
- | 5 |
- A5...AC |
- Heizkreis-Zuordnung |
- EMS Type(L) |
-
-
-
|
-
|
- A5=Heizkreis1 |
- 677_0_0 |
-
-
-
|
-
|
- A6=Heizkreis2 |
- 678_0_0 |
-
-
-
|
-
|
- A7=Heizkreis3 |
- 679_0_0 |
-
-
-
|
-
|
- A8=Heizkreis4 |
- 680_0_0 |
-
-
-
|
-
|
- A9=Heizkreis5 |
- 681_0_0 |
-
-
-
|
-
|
- AA=Heizkreis6 |
- 682_0_0 |
-
-
-
|
-
|
- AB=Heizkreis7 |
- 683_0_0 |
-
-
-
|
-
|
- AC=Heizkreis8 |
- 684_0_0 |
-
-
- | 6 |
- Hi-Byte |
- Ist-Raumtemperatur (HK1 bis HK8) |
- 677_0_0 bis |
-
-
- | 7 |
- Lo-Byte |
- 684_0_0 |
-
-
- | 8 |
- xy |
- Status Heizkreis |
- 6xy_2_0 |
-
-
- | 9 |
- xy |
-
|
- 6xy_3_0 |
-
-
- | 10 |
- xy |
-
|
- 6xy_4_0 |
-
-
- | 11 |
- xy |
-
|
- 6xy_5_0 |
-
-
- | 12 |
- xy |
- Soll-Raumtemperatur (HK1 bis HK8) |
- 6xy_6_0 |
-
-
- | 13 |
- xy |
-
|
- 6xy_7_0 |
-
-
- | 14 |
- Hi-Byte |
-
|
- 6xy_8_0 |
-
-
- | 15 |
- Lo-Byte |
-
|
-
-
- | 16 |
- xy |
-
|
- 6xy_10_0 |
-
-
- | 17 |
- xy |
- Temperatur-Niveau |
- 6xy_11_0 |
-
-
- | 18 |
- xy |
-
|
- 6xy_12_0 |
-
-
- | 19 |
- Hi-Byte |
-
|
- 6xy_13_0 |
-
-
- | 20 |
- Lo-Byte |
-
|
-
-
- | 21 |
- Hi-Byte |
-
|
- 6xy_15_0 |
-
-
- | 22 |
- Lo-Byte |
-
|
-
-
- | 23 |
- xy |
-
|
- 6xy_17_0 |
-
-
- | 24 |
- xy |
-
|
- 6xy_18_0 |
-
-
- | 25 |
- xy |
-
|
- 6xy_19_0 |
-
-
- | 26 |
- xy |
-
|
- 6xy_20_0 |
-
-
- | 27 |
- xy |
- Betriebsstatus (HK1 bis HK8) {Auto / Manuell} |
- 6xy_21_0 |
-
-
- | 28 |
- Hi-Byte |
-
|
- 6xy_22_0 |
-
-
- | 29 |
- Lo-Byte |
-
|
-
-
- | 30 |
- xy |
-
|
- 6xy_24_0 |
-
-
- | 31 |
- xy |
-
|
- 6xy_25_0 |
-
-
- | 32 |
- xy |
-
|
- 6xy_26_0 |
-
-
- | 33 |
- Hi-Byte |
-
|
- 6xy_27_0 |
-
-
- | 34 |
- Lo-Byte |
-
|
-
-
- | 35 |
- xy |
-
|
- 6xy_29_0 |
-
-
- | 36 |
- xy |
-
|
- 6xy_30_0 |
-
-
- | 37 |
- <CRC> |
- CRC |
-
|
-
-
- | 38 |
- <Ende> |
- Ende Marker |
-
|
-
-
-
-
-Tabelle 20: ID 259
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:259_x_0 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 21Byte |
-
|
-
|
-
-
-
|
-
|
- ISM Solar-Telegramm |
-
|
-
-
- | 0 |
- B0 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 00 |
- Immer 00 |
- EMS Type(H) |
-
-
- | 5 |
- 03 |
- Immer 03 |
- EMS Type(L) |
-
-
- | 6 |
- xy |
- Optimierungsfaktor WW mit solarer Unterstützung |
- 259_0_0 |
-
-
- | 7 |
- xy |
- Optimierungsfaktor Heiz. mit solarer Unterstützung |
- 259_1_0 |
-
-
- | 8 |
- Hi-Byte |
- Solarertrag in der letzten Stunde (Wh) |
- 259_2_0 |
-
-
- | 9 |
- Lo-Byte |
-
-
- | 10 |
- Hi-Byte |
- Solarkollektor1 Temperatur T1 |
- 259_4_0 |
-
-
- | 11 |
- Lo-Byte |
-
-
- | 12 |
- Hi-Byte |
- Solarspeicher Temperatur T2 |
- 259_6_0 |
-
-
- | 13 |
- Lo-Byte |
-
-
- | 14 |
- Bit0...Bit7 |
- Betriebsart Solarpumpe (1. Kollektorfeld) |
-
|
-
-
-
|
- Bit0 |
- - Solarpumpe (SP); 0=aus; 1=ein |
- 259_8_0 |
-
-
-
|
- Bit1 |
- - Relaysignal Umwälzpumpe(PE) bei thermischer Desinfektion |
- 259_8_1 |
-
-
-
|
- Bit2..Bit7 |
- - Immer 0 |
-
|
-
-
- | 15 |
- Bit0...Bit7 |
- Solar Systemstatus |
-
|
-
-
-
|
- Bit0 |
- - Abschaltung 1.Kollektorfeld bei Stagnation |
- 259_9_0 |
-
-
-
|
-
|
- -- 0 =Nein |
-
|
-
-
-
|
-
|
- -- 1 =Ja (5 Grad Hysterese) |
-
|
-
-
-
|
- Bit1 |
- - Status Temperatur bei thermischer Desinfektion |
- 259_9_1 |
-
-
-
|
- Bit2 |
- - Status Solarspeicher |
- 259_9_2 |
-
-
-
|
-
|
- -- 0 =Nicht voll geladen |
-
|
-
-
-
|
-
|
- -- 1 =Voll geladen (2 Grad Hysterese) |
-
|
-
-
-
|
- Bit3-8 |
- Immer 0 |
-
|
-
-
- | 16 |
- Byte 3 |
- Laufzeit Solarpumpe (Minuten) |
-
|
-
-
- | 17 |
- Byte 2 |
- „ ( Calculation-Type: 2 ) |
- 259_10_0 |
-
-
- | 18 |
- Byte 1 |
- „ |
-
|
-
-
- | 19 |
- <CRC> |
- CRC |
-
|
-
-
- | 20 |
- <Ende> |
- Ende Marker |
-
|
-
-
-
-
-Tabelle 21: ID 260
-
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
-
|
- Message-ID:260_x_y |
-
|
-
-
- | Byte |
- Werte (Hex) |
-
|
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 24Byte |
- 35Byte |
-
|
-
|
-
-
-
|
-
|
-
|
- ISM Solar-Telegramm |
-
|
-
-
- | 0 |
- B0 |
- B0 |
-
|
- Source |
-
-
- | 1 |
- 00 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 00 |
- 00 |
- Immer 00 |
- EMS Type(H) |
-
-
- | 5 |
- 04 |
- 04 |
- Immer 04 |
- EMS Type(L) |
-
-
- | 6 |
- Hi-Byte T3 |
- Hi-Byte T3 |
- Temperatur T3 im Pufferspeicher f. Rücklaufanhebung |
- 260_0_0 |
-
-
- | 7 |
- Lo-Byte T3 |
- Lo-Byte T3 |
-
-
- | 8 |
- Hi-Byte |
- Hi-Byte |
- Heizungsrücklauftemperatur |
- 260_2_0 |
-
-
- | 9 |
- Lo-Byte |
- Lo-Byte |
-
-
- | 10 |
- Hi-Byte T5 |
- Hi-Byte T5 |
- Temperatur T5 im Pufferspeicher (oben) |
- 260_4_0 |
-
-
- | 11 |
- Lo-Byte T5 |
- Lo-Byte T5 |
-
-
- | 12 |
- Hi-Byte T6 |
- Hi-Byte T6 |
- Temperatur T6 im Bereitschaftsspeicher (unten) |
- 260_6_0 |
-
-
- | 13 |
- Lo-Byte T6 |
- Lo-Byte T6 |
-
-
- | 14 |
- Hi-Byte |
- Hi-Byte |
- Temperatur 2. Kollektorfeld |
- 260_8_0 |
-
-
- | 15 |
- Lo-Byte |
- Lo-Byte |
-
-
- | 16 |
- Hi-Byte |
- Hi-Byte |
- Temperatur TB im Pufferspeicher (oben) |
- 260_10_0 |
-
-
- | 17 |
- Lo-Byte |
- Lo-Byte |
-
-
- | 18 |
- Hi-Byte |
- Hi-Byte |
- Temperatur TC im Vorrang-/Nachrangspeicher |
- 260_12_0 |
-
-
- | 19 |
- Lo-Byte |
- Lo-Byte |
-
-
- | 20 |
- Hi-Byte |
- Hi-Byte |
- Temperatur am externen Wärmetauscher f. Solarsystem |
- 260_14_0 |
-
-
- | 21 |
- Lo-Byte |
- Lo-Byte |
-
-
- | 22 |
- <CRC> |
- Bit0...Bit7 |
- Status 1 |
-
|
-
-
-
|
-
|
- Bit0 |
- - Betriebsart Ventil (DWU) f. Rücklaufanhebung |
- 260_16_0 |
-
-
-
|
-
|
- Bit1 |
- - Relaisansteuerung f. Umwälzpumpe Umladesystem |
- 260_16_1 |
-
-
-
|
-
|
- Bit2 |
- - Umwälzpumpe (PA) im 2. Kollektorfeld |
- 260_16_2 |
-
-
-
|
-
|
- Bit3 |
- - Relaisansteuerung f. Umwälzpumpe (PB) Umladesystem |
- 260_16_3 |
-
-
-
|
-
|
- Bit4 |
- - Betriebsart Umwälzpumpe (PC)/Umschaltventil |
- 260_16_4 |
-
-
-
|
-
|
- Bit5 |
- - Betriebsart Umwälzpumpe (PD) im Sekundärkreis |
- 260_16_5 |
-
-
-
|
-
|
- Bit6 |
- - Relaissignal bei Option F |
- 260_16_6 |
-
-
-
|
-
|
- Bit7 |
- - unbenutzt |
- 260_16_7 |
-
-
- | 23 |
- <Ende> |
- Bit0...Bit7 |
- Status 2 |
-
|
-
-
-
|
-
|
- Bit0 |
- - Ansteuerung Ventil DWU1 f. Rücklaufanhebung |
- 260_17_0 |
-
-
-
|
-
|
- Bit1 |
- - Status maximale Temperatur im Umladespeicher |
- 260_17_1 |
-
-
-
|
-
|
- Bit2 |
- - Status Umwälzpumpe (PA) im 2.Kollektorfeld (Stagnation) |
- 260_17_2 |
-
-
-
|
-
|
- Bit3 |
- - Maximaltemperatur erreicht im WW-Speicher B |
- 260_17_3 |
-
-
-
|
-
|
- Bit4 |
- - WW-Speicher geladen |
- 260_17_4 |
-
-
-
|
-
|
- Bit5 |
- - Testmodus (Speicherladung Vorrangspeicher) |
- 260_17_5 |
-
-
-
|
-
|
- Bit6 |
- - Maximaltemperatur erreicht im WW-Speicher C |
- 260_17_6 |
-
-
-
|
-
|
- Bit7 |
- - Testmodus |
- 260_17_7 |
-
-
- | 24 |
-
|
- Byte 3 |
- Betriebszeit f. Solarmumpe (PA) im zweiten Kollektorfeld |
- 260_18_0 |
-
-
- | 25 |
-
|
- Byte 2 |
-
-
- | 26 |
-
|
- Byte 1 |
-
-
- | 27 |
-
|
- Hi-Byte |
- Zeitintervall f. Überprüfung ob Speicher C geladen wird |
- 260_21_0 |
-
-
- | 28 |
-
|
- Lo-Byte |
-
|
-
|
-
-
- | 29 |
-
|
- Hi-Byte |
- Temperatur TF 1 in Wärmequelle |
- 260_23_0 |
-
-
- | 30 |
-
|
- Lo-Byte |
-
|
-
|
-
-
- | 31 |
-
|
- Hi-Byte |
- Temperatur TF 2 in Wärmesenke |
- 260_25_0 |
-
-
- | 32 |
-
|
- Lo-Byte |
-
|
-
|
-
-
- | 33 |
-
|
- <CRC> |
-
|
-
|
-
-
- | 34 |
-
|
- <Ende> |
-
|
-
|
-
-
-
-
-Tabelle 22: ID 866
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:866 |
-
|
-
-
- | Byte |
-
|
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- MS100 Solar-Telegramm |
-
|
-
-
- | 0 |
- B0 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 02 |
- Immer 02 |
- EMS Type(H) |
-
-
- | 5 |
- 62 |
- Immer 62 |
- EMS Type(L) |
-
-
- | 6 |
- Hi-Byte |
- Solarkollektor1 Temperatur |
- 866_0_0 |
-
-
- | 7 |
- Lo-Byte |
-
-
- | 8 |
- Hi-Byte |
- Solarspeicher Temperatur unten |
- 866_2_0 |
-
-
- | 9 |
- Lo-Byte |
-
-
- | 10 |
- Hi-Byte |
- Solarspeicher Temperatur mittlerer Sensor |
- 866_4_0 |
-
-
- | 11 |
- Lo-Byte |
-
-
- | 12 |
- Hi-Byte |
- Solarkollektor2 Temperatur |
- 866_6_0 |
-
-
- | 13 |
- Lo-Byte |
-
-
- | 14 |
- Hi-Byte |
- Solarspeicher Beipass Temperatur |
- 866_8_0 |
-
-
- | 15 |
- Lo-Byte |
-
-
- | 16 |
- Hi-Byte |
- Solarspeicher Beipass Return-Temperatur |
- 866_10_0 |
-
-
- | 17 |
- Lo-Byte |
-
-
- | 18 |
- Hi-Byte |
-
|
- 866_12_0 |
-
-
- | 19 |
- Lo-Byte |
-
-
- | 20 |
- Hi-Byte |
-
|
- 866_14_0 |
-
-
- | 21 |
- Lo-Byte |
-
-
- | 22 |
- Hi-Byte |
-
|
- 866_16_0 |
-
-
- | 23 |
- Lo-Byte |
-
|
-
-
- | 24 |
- Hi-Byte |
-
|
- 866_18_0 |
-
-
- | 25 |
- Lo-Byte |
-
|
-
-
- | 26 |
- Hi-Byte |
-
|
- 866_20_0 |
-
-
- | 27 |
- Lo-Byte |
-
|
-
-
- | 28 |
- Hi-Byte |
-
|
- 866_22_0 |
-
-
- | 29 |
- Lo-Byte |
-
|
-
-
- | 30 |
- Hi-Byte |
-
|
- 866_24_0 |
-
-
- | 31 |
- Lo-Byte |
-
|
-
-
- | 32 |
- <CRC> |
-
|
-
|
-
-
- | 33 |
- <Ende> |
-
|
-
|
-
-
-
-
-Tabelle 23: ID 868
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:868_x_y |
-
|
-
-
- | Byte |
-
|
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- MS100 Solar-Telegramm |
-
|
-
-
- | 0 |
- B0 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 02 |
- Immer 02 |
- EMS Type(H) |
-
-
- | 5 |
- 64 |
- Immer 64 |
- EMS Type(L) |
-
-
- | 6 |
- xy |
-
|
- 868_0_0 |
-
-
- | 7 |
- xy |
-
|
- 868_1_0 |
-
-
- | 8 |
- Bit0...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 |
-
-
- | 9 |
- Bit0...Bit7 |
- Solar Systemstatus |
- 868_3_x |
-
-
-
|
- Bit0 |
- - Abschaltung 1.Kollektorfeld bei Stagnation |
- 868_3_0 |
-
-
-
|
-
|
- -- 0 =Nein |
-
|
-
-
-
|
-
|
- -- 1 =Ja |
-
|
-
-
-
|
- Bit1 |
- -- 1 =Solarspeicher maximale Temperatur erreicht |
- 868_3_1 |
-
-
-
|
- Bit2 |
- -- 1 =Solarspeicher minimale Temperatur erreicht |
- 868_3_2 |
-
-
-
|
- Bit3 |
-
|
- 868_3_3 |
-
-
-
|
- Bit4 |
-
|
- 868_3_4 |
-
-
-
|
- Bit5 |
-
|
- 868_3_5 |
-
-
-
|
- Bit6 |
-
|
- 868_3_6 |
-
-
-
|
- Bit7 |
-
|
- 868_3_7 |
-
-
- | 10 |
- xy |
-
|
- 868_4_0 |
-
-
- | 11 |
- xy |
-
|
- 868_5_0 |
-
-
- | 12 |
- xy |
-
|
- 868_6_0 |
-
-
- | 13 |
- xy |
-
|
- 868_7_0 |
-
-
- | 14 |
- xy |
-
|
- 868_8_0 |
-
-
- | 15 |
- xy |
- Aktuelle Solarpumpen – Leistung |
- 868_9_0 |
-
-
- | 16 |
- xy |
-
|
- 868_10_0 |
-
-
- | 17 |
- xy |
- 868_11_0 |
-
-
- | 18 |
- xy |
-
|
- 868_12_0 |
-
-
- | 19 |
- xy |
- 868_13_0 |
-
-
- | 20 |
- xy |
-
|
- 868_14_0 |
-
-
- | 21 |
- xy |
- 868_15_0 |
-
-
- | 22 |
- <CRC> |
-
|
-
|
-
-
- | 23 |
- <Ende> |
-
|
-
|
-
-
-
-
-Tabelle 24: ID 873
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:873_x_0 |
-
|
-
-
- | Byte |
-
|
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- MS100 Solar-Telegramm |
-
|
-
-
- | 0 |
- B0 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 02 |
- Immer 02 |
- EMS Type(H) |
-
-
- | 5 |
- 69 |
- Immer 69 |
- EMS Type(L) |
-
-
- | 6 |
- Byte 4 |
- Solarertrag letzte Stunde |
- 873_0_0 |
-
-
- | 7 |
- Byte 3 |
- „ |
-
-
- | 8 |
- Byte 2 |
- „ ( Calculation-Type: 4 ) |
-
-
- | 9 |
- Byte 1 |
- „ |
-
-
- | 10 |
- Byte 4 |
- Solarertrag aktueller Tag |
- 873_4_0 |
-
-
- | 11 |
- Byte 3 |
- „ |
-
-
- | 12 |
- Byte 2 |
- „ |
-
-
- | 13 |
- Byte 1 |
- „ |
-
-
- | 14 |
- Byte 4 |
- Solarertrag Summe |
- 873_8_0 |
-
-
- | 15 |
- Byte 3 |
- „ |
-
-
- | 16 |
- Byte 2 |
- „ |
-
-
- | 17 |
- Byte 1 |
- „ |
-
-
- | 18 |
- <CRC> |
-
|
-
|
-
-
- | 19 |
- <Ende> |
-
|
-
|
-
-
-
-
-Tabelle 25: ID 874
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:874_x_0 |
-
|
-
-
- | Byte |
-
|
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- MS100 Solar-Telegramm |
-
|
-
-
- | 0 |
- B0 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 02 |
- Immer 02 |
- EMS Type(H) |
-
-
- | 5 |
- 6A |
- Immer 6A |
- EMS Type(L) |
-
-
- | 6 |
- xy |
-
|
- 874_0_0 |
-
-
- | 7 |
- xy |
-
|
- 874_1_0 |
-
-
- | 8 |
- xy |
-
|
- 874_2_0 |
-
-
- | 9 |
- xy |
-
|
- 874_3_0 |
-
-
- | 10 |
- xy |
-
|
- 874_4_0 |
-
-
- | 11 |
- xy |
-
|
- 874_5_0 |
-
-
- | 12 |
- xy |
-
|
- 874_6_0 |
-
-
- | 13 |
- xy |
-
|
- 874_7_0 |
-
-
- | 14 |
- xy |
-
|
- 874_8_0 |
-
-
- | 15 |
- xy |
-
|
- 874_9_0 |
-
-
- | 16 |
- Bit0...Bit7 |
-
|
- 874_10_x |
-
-
-
|
- Bit0 |
-
|
- 874_10_0 |
-
-
-
|
- Bit1 |
-
|
- 874_10_1 |
-
-
-
|
- Bit2 |
- - Solarpumpe (SP); 0=aus; 1=ein |
- 874_10_2 |
-
-
-
|
- Bit3 |
-
|
- 874_10_3 |
-
-
-
|
- Bit4 |
-
|
- 874_10_4 |
-
-
-
|
- Bit5 |
-
|
- 874_10_5 |
-
-
-
|
- Bit6 |
-
|
- 874_10_6 |
-
-
-
|
- Bit7 |
-
|
- 874_10_7 |
-
-
- | 17 |
- xy |
-
|
- 874_11_0 |
-
-
- | 18 |
- xy |
-
|
- 874_12_0 |
-
-
- | 19 |
- xy |
- 874_13_0 |
-
-
- | 20 |
- xy |
-
|
- 874_14_0 |
-
-
- | 21 |
- xy |
- 874_15_0 |
-
-
- | 22 |
- <CRC> |
-
|
-
|
-
-
- | 23 |
- <Ende> |
-
|
-
|
-
-
-
-
-Tabelle 26: ID 910
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:910_x_0 |
-
|
-
-
- | Byte |
-
|
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- MS100 Solar-Telegramm |
-
|
-
-
- | 0 |
- B0 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 02 |
- Immer 02 |
- EMS Type(H) |
-
-
- | 5 |
- 8E |
- Immer 8E |
- EMS Type(L) |
-
-
- | 6 |
- Byte 4 |
- Solarertrag letzte Stunde |
- 910_0_0 |
-
-
- | 7 |
- Byte 3 |
- „ |
-
-
- | 8 |
- Byte 2 |
- „ ( Calculation-Type: 4 ) |
-
-
- | 9 |
- Byte 1 |
- „ |
-
-
- | 10 |
- Byte 4 |
- Solarertrag aktueller Tag |
- 910_4_0 |
-
-
- | 11 |
- Byte 3 |
- „ |
-
-
- | 12 |
- Byte 2 |
- „ ( Calculation-Type: 5 ) |
-
-
- | 13 |
- Byte 1 |
- „ |
-
-
- | 14 |
- Byte 4 |
- Solarertrag Summe |
- 910_8_0 |
-
-
- | 15 |
- Byte 3 |
- „ |
-
-
- | 16 |
- Byte 2 |
- „ ( Calculation-Type: 4 ) |
-
-
- | 17 |
- Byte 1 |
- „ |
-
-
- | 18 |
- <CRC> |
-
|
-
|
-
-
- | 19 |
- <Ende> |
-
|
-
|
-
-
-
-
-Tabelle 27: ID 913
-
-
-
-
-
-
- | HT Bus-Telegramme |
-
|
-
-
-
|
-
|
- Message-ID:913_x_0 |
-
|
-
-
- | Byte |
-
|
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- MS100 Solar-Telegramm |
-
|
-
-
- | 0 |
- B0 |
-
|
- Source |
-
-
- | 1 |
- 00 |
-
|
- Target |
-
-
- | 2 |
- FF |
-
|
- EMS Marker |
-
-
- | 3 |
- xy |
-
|
- EMS Offset |
-
-
- | 4 |
- 02 |
- Immer 02 |
- EMS Type(H) |
-
-
- | 5 |
- 91 |
- Immer 91 |
- EMS Type(L) |
-
-
- | 6 |
- Byte 4 |
- Laufzeit Solarpumpe (Minuten) |
- 913_0_0 |
-
-
- | 7 |
- Byte 3 |
- „ |
-
-
- | 8 |
- Byte 2 |
- „ ( Calculation-Type: 2 ) |
-
-
- | 9 |
- Byte 1 |
- „ |
-
-
- | 10 |
- xy |
-
|
- 913_4_0 |
-
-
- | 11 |
- xy |
-
|
- 913_5_0 |
-
-
- | 12 |
- xy |
-
|
- 913_6_0 |
-
-
- | 13 |
- xy |
-
|
- 913_7_0 |
-
-
- | 14 |
- xy |
-
|
- 913_8_0 |
-
-
- | 15 |
- xy |
-
|
- 913_9_0 |
-
-
- | 16 |
- xy |
-
|
- 913_10_0 |
-
-
- | 17 |
- xy |
-
|
- 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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 9Byte |
-
|
-
|
-
-
-
|
-
|
- Modem-CMD:: Betriebsart setzen |
-
|
-
-
- | 0 |
- 8D |
- Source: Modem |
- Source |
-
-
- | 1 |
- 10 |
- Target |
- Target |
-
-
- | 2 |
- FF |
- EMS-Type |
- EMS Marker |
-
-
- | 3 |
- 0E |
-
|
- EMS Offset |
-
-
- | 4 |
- 00 |
-
|
- EMS Type(H) |
-
-
- | 5 |
- 65...6E |
- Heizkreis x |
- EMS Type(L) |
-
-
-
|
-
|
- 65=Heizkreis1 |
-
|
-
-
-
|
-
|
- 66=Heizkreis2 |
-
|
-
-
-
|
-
|
- 67=Heizkreis3 |
-
|
-
-
-
|
-
|
- 68=Heizkreis4 |
-
|
-
-
-
|
-
|
- 69=Heizkreis5 |
-
|
-
-
-
|
-
|
- 6A=Heizkreis6 |
-
|
-
-
-
|
-
|
- 6B=Heizkreis7 |
-
|
-
-
-
|
-
|
- 6C=Heizkreis8 |
-
|
-
-
-
|
-
|
- 6D=Heizkreis9 |
-
|
-
-
-
|
-
|
- 6E=Heizkreis10 |
-
|
-
-
- | 6 |
- 0...4 |
- Heizkreisbetriebsart-Werte |
- 357_14_0 bis |
-
-
-
|
-
|
- - 0=Nicht definiert |
- 366_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 |
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
-
-
|
- 9Byte |
-
|
-
|
-
-
-
|
-
|
- Modem-CMD: Betriebsart setzen |
-
|
-
-
- | 0 |
- 8D |
- Source: Modem |
- Source |
-
-
- | 1 |
- 10 |
- Target |
- Target |
-
-
- | 2 |
- FF |
- EMS-Type |
- EMS Marker |
-
-
- | 3 |
- 04 |
-
|
- EMS Offset |
-
-
- | 4 |
- 00 |
-
|
- EMS Type(H) |
-
-
- | 5 |
- 79...82 |
- Heizkreis x Kennung |
- EMS Type(L) |
-
-
-
|
-
|
- 79=Heizkreis1 |
-
|
-
-
-
|
-
|
- 7A=Heizkreis2 |
-
|
-
-
-
|
-
|
- 7B=Heizkreis3 |
-
|
-
-
-
|
-
|
- 7C=Heizkreis4 |
-
|
-
-
-
|
-
|
- 7D=Heizkreis5 |
-
|
-
-
-
|
-
|
- 7E=Heizkreis6 |
-
|
-
-
-
|
-
|
- 7F=Heizkreis7 |
-
|
-
-
-
|
-
|
- 80=Heizkreis8 |
-
|
-
-
-
|
-
|
- 81=Heizkreis9 |
-
|
-
-
-
|
-
|
- 82=Heizkreis10 |
-
|
-
-
- | 6 |
- 0...4 |
- Heizkreisbetriebsart-Werte |
- 357_4_0 bis |
-
-
-
|
-
|
- - 0=Nicht definiert |
- 366_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 |
-
|
-
|
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
|
-
|
-
-
-
|
- 9Byte |
-
|
- Betriebsart |
-
|
-
|
-
-
-
|
-
|
- Modem-CMD: Temperatur-Niveau setzen (Betriebsart Normal/Sparen/Frost) |
- Normal |
- Sparen |
- Frost |
-
-
- | 0 |
- 8D |
- Source: Modem |
- Source |
- Source |
- Source |
-
-
- | 1 |
- 10 |
- Target |
- Target |
- Target |
- Target |
-
-
- | 2 |
- FF |
- EMS-Type |
- EMS Marker |
- EMS Marker |
- EMS Marker |
-
-
- | 3 |
- 11/10/0F |
- EMS-Offset |
- 11 (hex) |
- 10 (hex) |
- F (hex) |
-
-
- | 4 |
- 00 |
-
|
- EMS Type(H) |
- EMS Type(H) |
- EMS Type(H) |
-
-
- | 5 |
- 65...6E |
- Heizkreis x |
- EMS 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 x |
- 357_17_0 bis |
- 357_16_0 bis |
- 357_15_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 366_17_0 |
- 366_16_0 |
- 366_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 |
-
|
-
|
-
|
-
-
- | Byte |
- Werte (Hex) |
- Bemerkung |
- Bedeutung / ID |
-
|
-
|
-
-
-
|
- 9Byte |
-
|
-
|
-
|
-
|
-
-
-
|
-
|
- Modem-CMD: Temperatur-Niveau setzen (Betriebsart Normal/Sparen/Frost) |
- Normal |
- Sparen |
- Frost |
-
-
- | 0 |
- 8D |
- Source: Modem |
- Source |
- Source |
- Source |
-
-
- | 1 |
- 10 |
- Target |
- Target |
- Target |
- Target |
-
-
- | 2 |
- FF |
- EMS-Type |
- EMS Marker |
- EMS Marker |
- EMS Marker |
-
-
- | 3 |
- 07/06/05 |
- EMS-Offset |
- 7 (hex) |
- 6 (hex) |
- 5 (hex) |
-
-
- | 4 |
- 00 |
-
|
- EMS Type(H) |
- EMS Type(H) |
- EMS Type(H) |
-
-
- | 5 |
- 79...82 |
- Heizkreis x Kennung |
- EMS 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 |
-
|
-
|
-
|
-
-
- | 6 |
- 0...4 |
- Temperaturniveau für Betriebsart: y im Heizkreis x |
- 377_7_0 bis |
- 377_6_0 bis |
- 377_5_0 bis |
-
-
-
|
-
|
- - (in 0.5 Grad Schritten) |
- 386_7_0 |
- 386_6_0 |
- 386_5_0 |
-
-
- | 7 |
- <CRC> |
- CRC |
-
|
-
|
-
|
-
-
- | 8 |
- <Ende> |
- Ende Marker |
-
|
-
|
-
|
-
-
-
-
-
-
From 41d9407cc914a662b9e6e8042f38aaf295a747bf Mon Sep 17 00:00:00 2001
From: Paul
Date: Wed, 4 Sep 2019 16:26:31 +0200
Subject: [PATCH 04/92] tx_mode defaults to 1 (not 0)
---
src/ems-esp.cpp | 271 ++++++++++++++++++++++++------------------------
1 file changed, 136 insertions(+), 135 deletions(-)
diff --git a/src/ems-esp.cpp b/src/ems-esp.cpp
index 5c46350c7..8abc6186d 100644
--- a/src/ems-esp.cpp
+++ b/src/ems-esp.cpp
@@ -104,7 +104,7 @@ typedef struct {
bool dallas_parasite; // on/off is using parasite
uint8_t heating_circuit; // number of heating circuit, 1 or 2
uint8_t tx_mode; // TX mode 1,2 or 3
-} _EMSESP_Status;
+} _EMSESP_Settings;
typedef struct {
bool showerOn;
@@ -155,8 +155,8 @@ static const command_t project_cmds[] PROGMEM = {
uint8_t _project_cmds_count = ArraySize(project_cmds);
// store for overall system status
-_EMSESP_Status EMSESP_Status;
-_EMSESP_Shower EMSESP_Shower;
+_EMSESP_Settings EMSESP_Settings;
+_EMSESP_Shower EMSESP_Shower;
// logging messages with fixed strings
void myDebugLog(const char * s) {
@@ -444,17 +444,17 @@ void showInfo() {
myDebug_P(PSTR(" System logging set to None"));
}
- myDebug_P(PSTR(" LED is %s, Listen mode is %s"), EMSESP_Status.led ? "on" : "off", EMSESP_Status.listen_mode ? "on" : "off");
- if (EMSESP_Status.dallas_sensors > 0) {
- myDebug_P(PSTR(" %d external temperature sensor%s found"), EMSESP_Status.dallas_sensors, (EMSESP_Status.dallas_sensors == 1) ? "" : "s");
+ myDebug_P(PSTR(" LED is %s, Listen mode is %s"), EMSESP_Settings.led ? "on" : "off", EMSESP_Settings.listen_mode ? "on" : "off");
+ if (EMSESP_Settings.dallas_sensors > 0) {
+ myDebug_P(PSTR(" %d external temperature sensor%s found"), EMSESP_Settings.dallas_sensors, (EMSESP_Settings.dallas_sensors == 1) ? "" : "s");
}
myDebug_P(PSTR(" Boiler is %s, Thermostat is %s, Solar Module is %s, Shower Timer is %s, Shower Alert is %s"),
(ems_getBoilerEnabled() ? "enabled" : "disabled"),
(ems_getThermostatEnabled() ? "enabled" : "disabled"),
(ems_getSolarModuleEnabled() ? "enabled" : "disabled"),
- ((EMSESP_Status.shower_timer) ? "enabled" : "disabled"),
- ((EMSESP_Status.shower_alert) ? "enabled" : "disabled"));
+ ((EMSESP_Settings.shower_timer) ? "enabled" : "disabled"),
+ ((EMSESP_Settings.shower_alert) ? "enabled" : "disabled"));
myDebug_P(PSTR("\n%sEMS Bus stats:%s"), COLOR_BOLD_ON, COLOR_BOLD_OFF);
@@ -619,10 +619,10 @@ void showInfo() {
}
// Render Day/Night/Holiday Temperature
- if ((EMS_Thermostat.holidaytemp > 0) && (EMSESP_Status.heating_circuit == 2)) { // only if we are on a RC35 we show more info
- _renderIntValue("Day temperature", "C", EMS_Thermostat.daytemp, 2); // convert to a single byte * 2
- _renderIntValue("Night temperature", "C", EMS_Thermostat.nighttemp, 2); // convert to a single byte * 2
- _renderIntValue("Vacation temperature", "C", EMS_Thermostat.holidaytemp, 2); // convert to a single byte * 2
+ if ((EMS_Thermostat.holidaytemp > 0) && (EMSESP_Settings.heating_circuit == 2)) { // only if we are on a RC35 we show more info
+ _renderIntValue("Day temperature", "C", EMS_Thermostat.daytemp, 2); // convert to a single byte * 2
+ _renderIntValue("Night temperature", "C", EMS_Thermostat.nighttemp, 2); // convert to a single byte * 2
+ _renderIntValue("Vacation temperature", "C", EMS_Thermostat.holidaytemp, 2); // convert to a single byte * 2
}
// Render Thermostat Date & Time
@@ -654,18 +654,18 @@ void showInfo() {
}
// Dallas
- if (EMSESP_Status.dallas_sensors != 0) {
+ if (EMSESP_Settings.dallas_sensors != 0) {
myDebug_P(PSTR("")); // newline
char buffer[128] = {0};
char valuestr[8] = {0}; // for formatting temp
myDebug_P(PSTR("%sExternal temperature sensors:%s"), COLOR_BOLD_ON, COLOR_BOLD_OFF);
- for (uint8_t i = 0; i < EMSESP_Status.dallas_sensors; i++) {
+ for (uint8_t i = 0; i < EMSESP_Settings.dallas_sensors; i++) {
myDebug_P(PSTR(" Sensor #%d %s: %s C"), i + 1, ds18.getDeviceString(buffer, i), _float_to_char(valuestr, ds18.getValue(i)));
}
}
// show the Shower Info
- if (EMSESP_Status.shower_timer) {
+ if (EMSESP_Settings.shower_timer) {
myDebug_P(PSTR("")); // newline
myDebug_P(PSTR("%sShower stats:%s"), COLOR_BOLD_ON, COLOR_BOLD_OFF);
myDebug_P(PSTR(" Shower is %s"), (EMSESP_Shower.showerOn ? "running" : "off"));
@@ -689,7 +689,7 @@ void publishSensorValues() {
char valuestr[8] = {0}; // for formatting temp
// see if the sensor values have changed, if so send
- for (uint8_t i = 0; i < EMSESP_Status.dallas_sensors; i++) {
+ for (uint8_t i = 0; i < EMSESP_Settings.dallas_sensors; i++) {
double sensorValue = ds18.getValue(i);
if (sensorValue != DS18_DISCONNECTED && sensorValue != DS18_CRC_ERROR) {
sprintf(label, PAYLOAD_EXTERNAL_SENSORS, (i + 1));
@@ -833,7 +833,7 @@ void publishValues(bool force) {
doc.clear();
JsonObject rootThermostat = doc.to();
- rootThermostat[THERMOSTAT_HC] = _int_to_char(s, EMSESP_Status.heating_circuit);
+ rootThermostat[THERMOSTAT_HC] = _int_to_char(s, EMSESP_Settings.heating_circuit);
// different logic depending on thermostat types
if (ems_getThermostatModel() == EMS_MODEL_EASY) {
@@ -983,14 +983,14 @@ void publishValues(bool force) {
// sets the shower timer on/off
void set_showerTimer() {
if (ems_getLogging() != EMS_SYS_LOGGING_NONE) {
- myDebug_P(PSTR("Shower timer has been set to %s"), EMSESP_Status.shower_timer ? "enabled" : "disabled");
+ myDebug_P(PSTR("Shower timer has been set to %s"), EMSESP_Settings.shower_timer ? "enabled" : "disabled");
}
}
// sets the shower alert on/off
void set_showerAlert() {
if (ems_getLogging() != EMS_SYS_LOGGING_NONE) {
- myDebug_P(PSTR("Shower alert has been set to %s"), EMSESP_Status.shower_alert ? "enabled" : "disabled");
+ myDebug_P(PSTR("Shower alert has been set to %s"), EMSESP_Settings.shower_alert ? "enabled" : "disabled");
}
}
@@ -1029,7 +1029,7 @@ char * _readWord() {
// publish external dallas sensor temperature values to MQTT
void do_publishSensorValues() {
- if (EMSESP_Status.dallas_sensors != 0) {
+ if (EMSESP_Settings.dallas_sensors != 0) {
publishSensorValues();
}
}
@@ -1037,7 +1037,7 @@ void do_publishSensorValues() {
// call PublishValues without forcing, so using CRC to see if we really need to publish
void do_publishValues() {
// don't publish if we're not connected to the EMS bus
- if ((ems_getBusConnected()) && myESP.isMQTTConnected() && EMSESP_Status.publish_time != 0) {
+ if ((ems_getBusConnected()) && myESP.isMQTTConnected() && EMSESP_Settings.publish_time != 0) {
publishValues(true); // force publish
}
}
@@ -1045,12 +1045,12 @@ void do_publishValues() {
// callback to light up the LED, called via Ticker every second
// when ESP is booting up, ignore this as the LED is being used for something else
void do_ledcheck() {
- if ((EMSESP_Status.led) && (myESP.getSystemBootStatus() == MYESP_BOOTSTATUS_BOOTED)) {
+ if ((EMSESP_Settings.led) && (myESP.getSystemBootStatus() == MYESP_BOOTSTATUS_BOOTED)) {
if (ems_getBusConnected()) {
- digitalWrite(EMSESP_Status.led_gpio, (EMSESP_Status.led_gpio == LED_BUILTIN) ? LOW : HIGH); // light on. For onboard LED high=off
+ digitalWrite(EMSESP_Settings.led_gpio, (EMSESP_Settings.led_gpio == LED_BUILTIN) ? LOW : HIGH); // light on. For onboard LED high=off
} else {
- int state = digitalRead(EMSESP_Status.led_gpio);
- digitalWrite(EMSESP_Status.led_gpio, !state);
+ int state = digitalRead(EMSESP_Settings.led_gpio);
+ digitalWrite(EMSESP_Settings.led_gpio, !state);
}
}
}
@@ -1084,10 +1084,10 @@ void do_regularUpdates() {
// stop devices scan and restart all other timers
void stopDeviceScan() {
- publishValuesTimer.attach(EMSESP_Status.publish_time, do_publishValues); // post MQTT EMS values
- publishSensorValuesTimer.attach(EMSESP_Status.publish_time, do_publishSensorValues); // post MQTT sensor values
- regularUpdatesTimer.attach(REGULARUPDATES_TIME, do_regularUpdates); // regular reads from the EMS
- systemCheckTimer.attach(SYSTEMCHECK_TIME, do_systemCheck); // check if Boiler is online
+ publishValuesTimer.attach(EMSESP_Settings.publish_time, do_publishValues); // post MQTT EMS values
+ publishSensorValuesTimer.attach(EMSESP_Settings.publish_time, do_publishSensorValues); // post MQTT sensor values
+ regularUpdatesTimer.attach(REGULARUPDATES_TIME, do_regularUpdates); // regular reads from the EMS
+ systemCheckTimer.attach(SYSTEMCHECK_TIME, do_systemCheck); // check if Boiler is online
scanThermostat_count = 0;
scanThermostat.detach();
}
@@ -1145,7 +1145,7 @@ void _showerColdShotStop() {
// turn off hot water to send a shot of cold
void _showerColdShotStart() {
- if (EMSESP_Status.shower_alert) {
+ if (EMSESP_Settings.shower_alert) {
myDebugLog("[Shower] doing a shot of cold water");
ems_setWarmTapWaterActivated(false);
EMSESP_Shower.doingColdShot = true;
@@ -1160,7 +1160,7 @@ void runUnitTest(uint8_t test_num) {
publishValuesTimer.detach();
systemCheckTimer.detach();
regularUpdatesTimer.detach();
- // EMSESP_Status.listen_mode = true; // temporary go into listen mode to disable Tx
+ // EMSESP_Settings.listen_mode = true; // temporary go into listen mode to disable Tx
ems_testTelegram(test_num);
}
@@ -1169,22 +1169,22 @@ bool LoadSaveCallback(MYESP_FSACTION action, JsonObject json) {
if (action == MYESP_FSACTION_LOAD) {
const JsonObject & settings = json["settings"];
- EMSESP_Status.led = settings["led"];
- EMSESP_Status.led_gpio = settings["led_gpio"] | EMSESP_LED_GPIO;
- EMSESP_Status.dallas_gpio = settings["dallas_gpio"] | EMSESP_DALLAS_GPIO;
- EMSESP_Status.dallas_parasite = settings["dallas_parasite"] | EMSESP_DALLAS_PARASITE;
- EMSESP_Status.shower_timer = settings["shower_timer"];
- EMSESP_Status.shower_alert = settings["shower_alert"];
- EMSESP_Status.publish_time = settings["publish_time"] | DEFAULT_PUBLISHTIME;
+ EMSESP_Settings.led = settings["led"];
+ EMSESP_Settings.led_gpio = settings["led_gpio"] | EMSESP_LED_GPIO;
+ EMSESP_Settings.dallas_gpio = settings["dallas_gpio"] | EMSESP_DALLAS_GPIO;
+ EMSESP_Settings.dallas_parasite = settings["dallas_parasite"] | EMSESP_DALLAS_PARASITE;
+ EMSESP_Settings.shower_timer = settings["shower_timer"];
+ EMSESP_Settings.shower_alert = settings["shower_alert"];
+ EMSESP_Settings.publish_time = settings["publish_time"] | DEFAULT_PUBLISHTIME;
- EMSESP_Status.listen_mode = settings["listen_mode"];
- ems_setTxDisabled(EMSESP_Status.listen_mode);
+ EMSESP_Settings.listen_mode = settings["listen_mode"];
+ ems_setTxDisabled(EMSESP_Settings.listen_mode);
- EMSESP_Status.heating_circuit = settings["heating_circuit"] | DEFAULT_HEATINGCIRCUIT;
- ems_setThermostatHC(EMSESP_Status.heating_circuit);
+ EMSESP_Settings.heating_circuit = settings["heating_circuit"] | DEFAULT_HEATINGCIRCUIT;
+ ems_setThermostatHC(EMSESP_Settings.heating_circuit);
- EMSESP_Status.tx_mode = settings["tx_mode"] | 1; // default to 1 (generic)
- ems_setTxMode(EMSESP_Status.tx_mode);
+ EMSESP_Settings.tx_mode = settings["tx_mode"] | 1; // default to 1 (generic)
+ ems_setTxMode(EMSESP_Settings.tx_mode);
return true;
}
@@ -1192,16 +1192,16 @@ bool LoadSaveCallback(MYESP_FSACTION action, JsonObject json) {
if (action == MYESP_FSACTION_SAVE) {
JsonObject settings = json.createNestedObject("settings");
- settings["led"] = EMSESP_Status.led;
- settings["led_gpio"] = EMSESP_Status.led_gpio;
- settings["dallas_gpio"] = EMSESP_Status.dallas_gpio;
- settings["dallas_parasite"] = EMSESP_Status.dallas_parasite;
- settings["listen_mode"] = EMSESP_Status.listen_mode;
- settings["shower_timer"] = EMSESP_Status.shower_timer;
- settings["shower_alert"] = EMSESP_Status.shower_alert;
- settings["publish_time"] = EMSESP_Status.publish_time;
- settings["heating_circuit"] = EMSESP_Status.heating_circuit;
- settings["tx_mode"] = EMSESP_Status.tx_mode;
+ settings["led"] = EMSESP_Settings.led;
+ settings["led_gpio"] = EMSESP_Settings.led_gpio;
+ settings["dallas_gpio"] = EMSESP_Settings.dallas_gpio;
+ settings["dallas_parasite"] = EMSESP_Settings.dallas_parasite;
+ settings["listen_mode"] = EMSESP_Settings.listen_mode;
+ settings["shower_timer"] = EMSESP_Settings.shower_timer;
+ settings["shower_alert"] = EMSESP_Settings.shower_alert;
+ settings["publish_time"] = EMSESP_Settings.publish_time;
+ settings["heating_circuit"] = EMSESP_Settings.heating_circuit;
+ settings["tx_mode"] = EMSESP_Settings.tx_mode;
return true;
}
@@ -1219,13 +1219,13 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
// led
if ((strcmp(setting, "led") == 0) && (wc == 2)) {
if (strcmp(value, "on") == 0) {
- EMSESP_Status.led = true;
- ok = true;
+ EMSESP_Settings.led = true;
+ ok = true;
} else if (strcmp(value, "off") == 0) {
- EMSESP_Status.led = false;
- ok = true;
+ EMSESP_Settings.led = false;
+ ok = true;
// let's make sure LED is really off - For onboard high=off
- digitalWrite(EMSESP_Status.led_gpio, (EMSESP_Status.led_gpio == LED_BUILTIN) ? HIGH : LOW);
+ digitalWrite(EMSESP_Settings.led_gpio, (EMSESP_Settings.led_gpio == LED_BUILTIN) ? HIGH : LOW);
} else {
myDebug_P(PSTR("Error. Usage: set led "));
}
@@ -1234,13 +1234,13 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
// test mode
if ((strcmp(setting, "listen_mode") == 0) && (wc == 2)) {
if (strcmp(value, "on") == 0) {
- EMSESP_Status.listen_mode = true;
- ok = true;
+ EMSESP_Settings.listen_mode = true;
+ ok = true;
myDebug_P(PSTR("* in listen mode. All Tx is disabled."));
ems_setTxDisabled(true);
} else if (strcmp(value, "off") == 0) {
- EMSESP_Status.listen_mode = false;
- ok = true;
+ EMSESP_Settings.listen_mode = false;
+ ok = true;
ems_setTxDisabled(false);
myDebug_P(PSTR("* out of listen mode. Tx is now enabled."));
} else {
@@ -1250,27 +1250,27 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
// led_gpio
if ((strcmp(setting, "led_gpio") == 0) && (wc == 2)) {
- EMSESP_Status.led_gpio = atoi(value);
+ EMSESP_Settings.led_gpio = atoi(value);
// reset pin
- pinMode(EMSESP_Status.led_gpio, OUTPUT);
- digitalWrite(EMSESP_Status.led_gpio, (EMSESP_Status.led_gpio == LED_BUILTIN) ? HIGH : LOW); // light off. For onboard high=off
+ pinMode(EMSESP_Settings.led_gpio, OUTPUT);
+ digitalWrite(EMSESP_Settings.led_gpio, (EMSESP_Settings.led_gpio == LED_BUILTIN) ? HIGH : LOW); // light off. For onboard high=off
ok = true;
}
// dallas_gpio
if ((strcmp(setting, "dallas_gpio") == 0) && (wc == 2)) {
- EMSESP_Status.dallas_gpio = atoi(value);
- ok = true;
+ EMSESP_Settings.dallas_gpio = atoi(value);
+ ok = true;
}
// dallas_parasite
if ((strcmp(setting, "dallas_parasite") == 0) && (wc == 2)) {
if (strcmp(value, "on") == 0) {
- EMSESP_Status.dallas_parasite = true;
- ok = true;
+ EMSESP_Settings.dallas_parasite = true;
+ ok = true;
} else if (strcmp(value, "off") == 0) {
- EMSESP_Status.dallas_parasite = false;
- ok = true;
+ EMSESP_Settings.dallas_parasite = false;
+ ok = true;
} else {
myDebug_P(PSTR("Error. Usage: set dallas_parasite "));
}
@@ -1279,11 +1279,11 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
// shower timer
if ((strcmp(setting, "shower_timer") == 0) && (wc == 2)) {
if (strcmp(value, "on") == 0) {
- EMSESP_Status.shower_timer = true;
- ok = true;
+ EMSESP_Settings.shower_timer = true;
+ ok = true;
} else if (strcmp(value, "off") == 0) {
- EMSESP_Status.shower_timer = false;
- ok = true;
+ EMSESP_Settings.shower_timer = false;
+ ok = true;
} else {
myDebug_P(PSTR("Error. Usage: set shower_timer "));
}
@@ -1292,11 +1292,11 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
// shower alert
if ((strcmp(setting, "shower_alert") == 0) && (wc == 2)) {
if (strcmp(value, "on") == 0) {
- EMSESP_Status.shower_alert = true;
- ok = true;
+ EMSESP_Settings.shower_alert = true;
+ ok = true;
} else if (strcmp(value, "off") == 0) {
- EMSESP_Status.shower_alert = false;
- ok = true;
+ EMSESP_Settings.shower_alert = false;
+ ok = true;
} else {
myDebug_P(PSTR("Error. Usage: set shower_alert "));
}
@@ -1304,15 +1304,15 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
// publish_time
if ((strcmp(setting, "publish_time") == 0) && (wc == 2)) {
- EMSESP_Status.publish_time = atoi(value);
- ok = true;
+ EMSESP_Settings.publish_time = atoi(value);
+ ok = true;
}
// heating_circuit
if ((strcmp(setting, "heating_circuit") == 0) && (wc == 2)) {
uint8_t hc = atoi(value);
if ((hc >= 1) && (hc <= 2)) {
- EMSESP_Status.heating_circuit = hc;
+ EMSESP_Settings.heating_circuit = hc;
ems_setThermostatHC(hc);
ok = true;
} else {
@@ -1324,7 +1324,7 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
if ((strcmp(setting, "tx_mode") == 0) && (wc == 2)) {
uint8_t mode = atoi(value);
if ((mode >= 1) && (mode <= 3)) {
- EMSESP_Status.tx_mode = mode;
+ EMSESP_Settings.tx_mode = mode;
ems_setTxMode(mode);
ok = true;
} else {
@@ -1334,16 +1334,16 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
}
if (action == MYESP_FSACTION_LIST) {
- myDebug_P(PSTR(" led=%s"), EMSESP_Status.led ? "on" : "off");
- myDebug_P(PSTR(" led_gpio=%d"), EMSESP_Status.led_gpio);
- myDebug_P(PSTR(" dallas_gpio=%d"), EMSESP_Status.dallas_gpio);
- myDebug_P(PSTR(" dallas_parasite=%s"), EMSESP_Status.dallas_parasite ? "on" : "off");
- myDebug_P(PSTR(" heating_circuit=%d"), EMSESP_Status.heating_circuit);
- myDebug_P(PSTR(" tx_mode=%d"), EMSESP_Status.tx_mode);
- myDebug_P(PSTR(" listen_mode=%s"), EMSESP_Status.listen_mode ? "on" : "off");
- myDebug_P(PSTR(" shower_timer=%s"), EMSESP_Status.shower_timer ? "on" : "off");
- myDebug_P(PSTR(" shower_alert=%s"), EMSESP_Status.shower_alert ? "on" : "off");
- myDebug_P(PSTR(" publish_time=%d"), EMSESP_Status.publish_time);
+ myDebug_P(PSTR(" led=%s"), EMSESP_Settings.led ? "on" : "off");
+ myDebug_P(PSTR(" led_gpio=%d"), EMSESP_Settings.led_gpio);
+ myDebug_P(PSTR(" dallas_gpio=%d"), EMSESP_Settings.dallas_gpio);
+ myDebug_P(PSTR(" dallas_parasite=%s"), EMSESP_Settings.dallas_parasite ? "on" : "off");
+ myDebug_P(PSTR(" heating_circuit=%d"), EMSESP_Settings.heating_circuit);
+ myDebug_P(PSTR(" tx_mode=%d"), EMSESP_Settings.tx_mode);
+ myDebug_P(PSTR(" listen_mode=%s"), EMSESP_Settings.listen_mode ? "on" : "off");
+ myDebug_P(PSTR(" shower_timer=%s"), EMSESP_Settings.shower_timer ? "on" : "off");
+ myDebug_P(PSTR(" shower_alert=%s"), EMSESP_Settings.shower_alert ? "on" : "off");
+ myDebug_P(PSTR(" publish_time=%d"), EMSESP_Settings.publish_time);
}
return ok;
@@ -1449,12 +1449,12 @@ void TelnetCommandCallback(uint8_t wc, const char * commandLine) {
if ((strcmp(first_cmd, "shower") == 0) && (wc == 2)) {
char * second_cmd = _readWord();
if (strcmp(second_cmd, "timer") == 0) {
- EMSESP_Status.shower_timer = !EMSESP_Status.shower_timer;
- myESP.mqttPublish(TOPIC_SHOWER_TIMER, EMSESP_Status.shower_timer ? "1" : "0");
+ EMSESP_Settings.shower_timer = !EMSESP_Settings.shower_timer;
+ myESP.mqttPublish(TOPIC_SHOWER_TIMER, EMSESP_Settings.shower_timer ? "1" : "0");
ok = true;
} else if (strcmp(second_cmd, "alert") == 0) {
- EMSESP_Status.shower_alert = !EMSESP_Status.shower_alert;
- myESP.mqttPublish(TOPIC_SHOWER_ALERT, EMSESP_Status.shower_alert ? "1" : "0");
+ EMSESP_Settings.shower_alert = !EMSESP_Settings.shower_alert;
+ myESP.mqttPublish(TOPIC_SHOWER_ALERT, EMSESP_Settings.shower_alert ? "1" : "0");
ok = true;
}
}
@@ -1591,8 +1591,8 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
myESP.mqttSubscribe(TOPIC_SHOWER_COLDSHOT);
// publish the status of the Shower parameters
- myESP.mqttPublish(TOPIC_SHOWER_TIMER, EMSESP_Status.shower_timer ? "1" : "0");
- myESP.mqttPublish(TOPIC_SHOWER_ALERT, EMSESP_Status.shower_alert ? "1" : "0");
+ myESP.mqttPublish(TOPIC_SHOWER_TIMER, EMSESP_Settings.shower_timer ? "1" : "0");
+ myESP.mqttPublish(TOPIC_SHOWER_ALERT, EMSESP_Settings.shower_alert ? "1" : "0");
}
// handle incoming MQTT publish events
@@ -1623,7 +1623,7 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
myDebug_P(PSTR("MQTT topic: thermostat heating circuit value %s"), message);
uint8_t hc = atoi((char *)message);
if ((hc >= 1) && (hc <= 2)) {
- EMSESP_Status.heating_circuit = hc;
+ EMSESP_Settings.heating_circuit = hc;
ems_setThermostatHC(hc);
}
}
@@ -1691,9 +1691,9 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
// shower timer
if (strcmp(topic, TOPIC_SHOWER_TIMER) == 0) {
if (message[0] == '1') {
- EMSESP_Status.shower_timer = true;
+ EMSESP_Settings.shower_timer = true;
} else if (message[0] == '0') {
- EMSESP_Status.shower_timer = false;
+ EMSESP_Settings.shower_timer = false;
}
set_showerTimer();
}
@@ -1701,9 +1701,9 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
// shower alert
if (strcmp(topic, TOPIC_SHOWER_ALERT) == 0) {
if (message[0] == '1') {
- EMSESP_Status.shower_alert = true;
+ EMSESP_Settings.shower_alert = true;
} else if (message[0] == '0') {
- EMSESP_Status.shower_alert = false;
+ EMSESP_Settings.shower_alert = false;
}
set_showerAlert();
}
@@ -1890,16 +1890,17 @@ void WebCallback(JsonObject root) {
// Most of these will be overwritten after the SPIFFS config file is loaded
void initEMSESP() {
// general settings
- EMSESP_Status.shower_timer = false;
- EMSESP_Status.shower_alert = false;
- EMSESP_Status.led = true; // LED is on by default
- EMSESP_Status.listen_mode = false;
- EMSESP_Status.publish_time = DEFAULT_PUBLISHTIME;
- EMSESP_Status.timestamp = millis();
- EMSESP_Status.dallas_sensors = 0;
- EMSESP_Status.led_gpio = EMSESP_LED_GPIO;
- EMSESP_Status.dallas_gpio = EMSESP_DALLAS_GPIO;
- EMSESP_Status.heating_circuit = 1; // default heating circuit to HC1
+ EMSESP_Settings.shower_timer = false;
+ EMSESP_Settings.shower_alert = false;
+ EMSESP_Settings.led = true; // LED is on by default
+ EMSESP_Settings.listen_mode = false;
+ EMSESP_Settings.publish_time = DEFAULT_PUBLISHTIME;
+ EMSESP_Settings.timestamp = millis();
+ EMSESP_Settings.dallas_sensors = 0;
+ EMSESP_Settings.led_gpio = EMSESP_LED_GPIO;
+ EMSESP_Settings.dallas_gpio = EMSESP_DALLAS_GPIO;
+ EMSESP_Settings.heating_circuit = 1; // default heating circuit to HC1
+ EMSESP_Settings.tx_mode = 1; // default tx mode
// shower settings
EMSESP_Shower.timerStart = 0;
@@ -1922,7 +1923,7 @@ void showerCheck() {
// if heater was previously off, start the timer
if (EMSESP_Shower.timerStart == 0) {
// hot water just started...
- EMSESP_Shower.timerStart = EMSESP_Status.timestamp;
+ EMSESP_Shower.timerStart = EMSESP_Settings.timestamp;
EMSESP_Shower.timerPause = 0; // remove any last pauses
EMSESP_Shower.doingColdShot = false;
EMSESP_Shower.duration = 0;
@@ -1930,13 +1931,13 @@ void showerCheck() {
} else {
// hot water has been on for a while
// first check to see if hot water has been on long enough to be recognized as a Shower/Bath
- if (!EMSESP_Shower.showerOn && (EMSESP_Status.timestamp - EMSESP_Shower.timerStart) > SHOWER_MIN_DURATION) {
+ if (!EMSESP_Shower.showerOn && (EMSESP_Settings.timestamp - EMSESP_Shower.timerStart) > SHOWER_MIN_DURATION) {
EMSESP_Shower.showerOn = true;
myDebugLog("[Shower] hot water still running, starting shower timer");
}
// check if the shower has been on too long
- else if ((((EMSESP_Status.timestamp - EMSESP_Shower.timerStart) > SHOWER_MAX_DURATION) && !EMSESP_Shower.doingColdShot)
- && EMSESP_Status.shower_alert) {
+ else if ((((EMSESP_Settings.timestamp - EMSESP_Shower.timerStart) > SHOWER_MAX_DURATION) && !EMSESP_Shower.doingColdShot)
+ && EMSESP_Settings.shower_alert) {
myDebugLog("[Shower] exceeded max shower time");
_showerColdShotStart();
}
@@ -1944,11 +1945,11 @@ void showerCheck() {
} else { // hot water is off
// if it just turned off, record the time as it could be a short pause
if ((EMSESP_Shower.timerStart != 0) && (EMSESP_Shower.timerPause == 0)) {
- EMSESP_Shower.timerPause = EMSESP_Status.timestamp;
+ EMSESP_Shower.timerPause = EMSESP_Settings.timestamp;
}
// if shower has been off for longer than the wait time
- if ((EMSESP_Shower.timerPause != 0) && ((EMSESP_Status.timestamp - EMSESP_Shower.timerPause) > SHOWER_PAUSE_TIME)) {
+ if ((EMSESP_Shower.timerPause != 0) && ((EMSESP_Settings.timestamp - EMSESP_Shower.timerPause) > SHOWER_PAUSE_TIME)) {
// it is over the wait period, so assume that the shower has finished and calculate the total time and publish
// because its unsigned long, can't have negative so check if length is less than OFFSET_TIME
if ((EMSESP_Shower.timerPause - EMSESP_Shower.timerStart) > SHOWER_OFFSET_TIME) {
@@ -2016,28 +2017,28 @@ void setup() {
myESP.setUseSerial(false);
emsuart_init(); // start EMS bus transmissions
myDebug_P(PSTR("[UART] Opened Rx/Tx connection"));
- if (!EMSESP_Status.listen_mode) {
+ if (!EMSESP_Settings.listen_mode) {
// go and find the boiler and thermostat types, if not in listen mode
ems_discoverModels();
}
}
// enable regular checks if not in test mode
- if (!EMSESP_Status.listen_mode) {
- publishValuesTimer.attach(EMSESP_Status.publish_time, do_publishValues); // post MQTT EMS values
- publishSensorValuesTimer.attach(EMSESP_Status.publish_time, do_publishSensorValues); // post MQTT sensor values
- regularUpdatesTimer.attach(REGULARUPDATES_TIME, do_regularUpdates); // regular reads from the EMS
+ if (!EMSESP_Settings.listen_mode) {
+ publishValuesTimer.attach(EMSESP_Settings.publish_time, do_publishValues); // post MQTT EMS values
+ publishSensorValuesTimer.attach(EMSESP_Settings.publish_time, do_publishSensorValues); // post MQTT sensor values
+ regularUpdatesTimer.attach(REGULARUPDATES_TIME, do_regularUpdates); // regular reads from the EMS
}
// set pin for LED
- if (EMSESP_Status.led_gpio != EMS_VALUE_INT_NOTSET) {
- pinMode(EMSESP_Status.led_gpio, OUTPUT);
- digitalWrite(EMSESP_Status.led_gpio, (EMSESP_Status.led_gpio == LED_BUILTIN) ? HIGH : LOW); // light off. For onboard high=off
- ledcheckTimer.attach_ms(LEDCHECK_TIME, do_ledcheck); // blink heartbeat LED
+ if (EMSESP_Settings.led_gpio != EMS_VALUE_INT_NOTSET) {
+ pinMode(EMSESP_Settings.led_gpio, OUTPUT);
+ digitalWrite(EMSESP_Settings.led_gpio, (EMSESP_Settings.led_gpio == LED_BUILTIN) ? HIGH : LOW); // light off. For onboard high=off
+ ledcheckTimer.attach_ms(LEDCHECK_TIME, do_ledcheck); // blink heartbeat LED
}
// check for Dallas sensors
- EMSESP_Status.dallas_sensors = ds18.setup(EMSESP_Status.dallas_gpio, EMSESP_Status.dallas_parasite); // returns #sensors
+ EMSESP_Settings.dallas_sensors = ds18.setup(EMSESP_Settings.dallas_gpio, EMSESP_Settings.dallas_parasite); // returns #sensors
systemCheckTimer.attach(SYSTEMCHECK_TIME, do_systemCheck); // check if EMS is reachable
}
@@ -2046,26 +2047,26 @@ void setup() {
// Main loop
//
void loop() {
- EMSESP_Status.timestamp = millis();
+ EMSESP_Settings.timestamp = millis();
// the main loop
myESP.loop();
// check Dallas sensors, every 2 seconds
// these values are published to MQTT separately via the timer publishSensorValuesTimer
- if (EMSESP_Status.dallas_sensors != 0) {
+ if (EMSESP_Settings.dallas_sensors != 0) {
ds18.loop();
}
// publish the values to MQTT, only if the values have changed
// although we don't want to publish when doing a deep scan of the thermostat
- if (ems_getEmsRefreshed() && (scanThermostat_count == 0) && (!EMSESP_Status.listen_mode)) {
+ if (ems_getEmsRefreshed() && (scanThermostat_count == 0) && (!EMSESP_Settings.listen_mode)) {
publishValues(false);
ems_setEmsRefreshed(false); // reset
}
// do shower logic, if enabled
- if (EMSESP_Status.shower_timer) {
+ if (EMSESP_Settings.shower_timer) {
showerCheck();
}
From 9778f2ca122aa839e229841f8f7eba4f19ff5178 Mon Sep 17 00:00:00 2001
From: Paul
Date: Wed, 4 Sep 2019 20:42:36 +0200
Subject: [PATCH 05/92] clean up code
---
src/websrc/myesp.js | 56 ---------------------------------------------
1 file changed, 56 deletions(-)
diff --git a/src/websrc/myesp.js b/src/websrc/myesp.js
index 6f9c23603..0816d9db9 100644
--- a/src/websrc/myesp.js
+++ b/src/websrc/myesp.js
@@ -790,62 +790,6 @@ $(".noimp").on("click", function () {
$("#noimp").modal("show");
});
-window.FooTable.MyFiltering = window.FooTable.Filtering.extend({
- construct: function (instance) {
- this._super(instance);
- this.acctypes = ["1", "99", "0"];
- this.acctypesstr = ["Always", "Admin", "Disabled"];
- this.def = "Access Type";
- this.$acctype = null;
- },
- $create: function () {
- this._super();
- var self = this,
- $formgrp = $("", {
- "class": "form-group"
- })
- .append($("", {
- "class": "sr-only",
- text: "Status"
- }))
- .prependTo(self.$form);
-
- self.$acctype = $("", {
- "class": "form-control"
- })
- .on("change", {
- self: self
- }, self._onStatusDropdownChanged)
- .append($("", {
- text: self.def
- }))
- .appendTo($formgrp);
-
- $.each(self.acctypes, function (i, acctype) {
- self.$acctype.append($("").text(self.acctypesstr[i]).val(self.acctypes[i]));
- });
- },
- _onStatusDropdownChanged: function (e) {
- var self = e.data.self,
- selected = $(this).val();
- if (selected !== self.def) {
- self.addFilter("acctype", selected, ["acctype"]);
- } else {
- self.removeFilter("acctype");
- }
- self.filter();
- },
- draw: function () {
- this._super();
- var acctype = this.find("acctype");
- if (acctype instanceof window.FooTable.Filter) {
- this.$acctype.val(acctype.query.val());
- } else {
- this.$acctype.val(this.def);
- }
- }
-});
-
var xDown = null;
var yDown = null;
From 9fa10aaf8ffec5ac3b43a4815c5d46347593adea Mon Sep 17 00:00:00 2001
From: Paul
Date: Thu, 5 Sep 2019 21:53:32 +0200
Subject: [PATCH 06/92] removed tx_delay
---
src/ems.cpp | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/src/ems.cpp b/src/ems.cpp
index 2493fb495..b4e96f994 100644
--- a/src/ems.cpp
+++ b/src/ems.cpp
@@ -827,7 +827,6 @@ void ems_parseTelegram(uint8_t * telegram, uint8_t length) {
if (length == 1) {
uint8_t value = telegram[0]; // 1st byte of data package
static uint32_t _last_emsPollFrequency = 0;
- static uint8_t delay_tx = 0; // TODO remove, experimental
// check first for a Poll for us
if ((value ^ 0x80 ^ EMS_Sys_Status.emsIDMask) == EMS_ID_ME) {
@@ -837,9 +836,7 @@ void ems_parseTelegram(uint8_t * telegram, uint8_t length) {
// do we have something to send thats waiting in the Tx queue?
// if so send it if the Queue is not in a wait state
- // TODO: but only do this at defined rate otherwise it'll be too quick, so skip a few polls
- if ((!EMS_TxQueue.isEmpty()) && (EMS_Sys_Status.emsTxStatus == EMS_TX_STATUS_IDLE) && (++delay_tx == 2)) {
- delay_tx = 0;
+ if ((!EMS_TxQueue.isEmpty()) && (EMS_Sys_Status.emsTxStatus == EMS_TX_STATUS_IDLE)) {
_ems_sendTelegram(); // perform the read/write command immediately
} else {
// nothing to send so just send a poll acknowledgement back
@@ -2534,7 +2531,6 @@ void ems_setThermostatTemp(float temperature, uint8_t temptype) {
} else if (EMS_Thermostat.mode == 0) { // manuaL
EMS_TxTelegram.offset = 0x0A; // manual offset
}
- // TODO: commented out because it's too fast
// EMS_TxTelegram.type_validate = EMS_TYPE_RCPLUSStatusMessage; // validate by reading from a different telegram
EMS_TxTelegram.type_validate = EMS_ID_NONE; // validate by reading from a different telegram
@@ -2648,7 +2644,6 @@ void ems_setThermostatMode(uint8_t mode) {
EMS_TxTelegram.type = EMS_TYPE_RCPLUSSet; // for 3000 and 1010, e.g. 48 10 FF 00 01 B9 00 for manual
EMS_TxTelegram.offset = EMS_OFFSET_RCPLUSSet_mode;
- // TODO: commented out because it's too fast
// EMS_TxTelegram.type_validate = EMS_TYPE_RCPLUSStatusMessage; // validate by reading from a different telegram
EMS_TxTelegram.type_validate = EMS_ID_NONE; // don't validate after the write
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RCPLUSStatusMessage; // after write, do a full fetch of all values
From 2beb5cd5f3c23051ab7c3907cea3283ede160973 Mon Sep 17 00:00:00 2001
From: Paul
Date: Sat, 7 Sep 2019 18:59:32 +0200
Subject: [PATCH 07/92] support for multiple HCs -
https://github.com/proddy/EMS-ESP/issues/162
---
CHANGELOG.md | 10 ++
src/ems-esp.cpp | 389 +++++++++++++++++++++++-----------------------
src/ems.cpp | 300 ++++++++++++++++++++++-------------
src/ems.h | 105 +++++++------
src/ems_devices.h | 6 +
5 files changed, 463 insertions(+), 347 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 344699e48..6aa93839b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [1.9.1 beta] 2019-09-07
+
+### Added
+
+- Support for multiple Heating Circuits (RC35 only for now and writing via telnet) - https://github.com/proddy/EMS-ESP/issues/162
+
+### Removed
+
+- Removed `heating_circuit` parameter
+
## [1.9.0] 2019-09-01
### Changed
diff --git a/src/ems-esp.cpp b/src/ems-esp.cpp
index 8abc6186d..8bf26f050 100644
--- a/src/ems-esp.cpp
+++ b/src/ems-esp.cpp
@@ -39,8 +39,6 @@ DS18 ds18;
// set to value >0 if the ESP is overheating or there are timing issues. Recommend a value of 1.
#define EMSESP_DELAY 0 // initially set to 0 for no delay. Change to 1 if getting WDT resets from wifi
-#define DEFAULT_HEATINGCIRCUIT 1 // default to HC1 for thermostats that support multiple heating circuits like the RC35
-
// timers, all values are in seconds
#define DEFAULT_PUBLISHTIME 120 // every 2 minutes publish MQTT values, including Dallas sensors
Ticker publishValuesTimer;
@@ -102,7 +100,6 @@ typedef struct {
uint8_t led_gpio; // pin for LED
uint8_t dallas_gpio; // pin for attaching external dallas temperature sensors
bool dallas_parasite; // on/off is using parasite
- uint8_t heating_circuit; // number of heating circuit, 1 or 2
uint8_t tx_mode; // TX mode 1,2 or 3
} _EMSESP_Settings;
@@ -141,9 +138,9 @@ static const command_t project_cmds[] PROGMEM = {
{false, "autodetect [deep]", "detect EMS devices and attempt to automatically set boiler and thermostat types"},
{false, "shower ", "toggle either timer or alert on/off"},
{false, "send XX ...", "send raw telegram data as hex to EMS bus"},
- {false, "thermostat read ", "send read request to the thermostat"},
- {false, "thermostat temp ", "set current thermostat temperature"},
- {false, "thermostat mode ", "set mode (0=low/night, 1=manual/day, 2=auto)"},
+ {false, "thermostat read ", "send read request to the thermostat for heating circuit hc 1-4"},
+ {false, "thermostat temp [hc] ", "set current thermostat temperature"},
+ {false, "thermostat mode [hc] ", "set mode (0=low/night, 1=manual/day, 2=auto) for heating circuit hc 1-4"},
{false, "thermostat scan ", "probe thermostat on all type id responses"},
{false, "boiler read ", "send read request to boiler"},
{false, "boiler wwtemp ", "set boiler warm water temperature"},
@@ -392,29 +389,33 @@ void _renderBoolValue(const char * prefix, uint8_t value) {
// figures out the thermostat mode
// returns 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
-uint8_t _getThermostatMode() {
- int thermoMode = EMS_VALUE_INT_NOTSET;
+// hc_num is 1 to 4
+uint8_t _getThermostatMode(uint8_t hc_num) {
+ int thermoMode = EMS_VALUE_INT_NOTSET;
+ uint8_t model = ems_getThermostatModel();
- if (ems_getThermostatModel() == EMS_MODEL_RC20) {
- if (EMS_Thermostat.mode == 0) {
+ uint8_t mode = EMS_Thermostat.hc[hc_num - 1].mode;
+
+ if (model == EMS_MODEL_RC20) {
+ if (mode == 0) {
thermoMode = 0; // low
- } else if (EMS_Thermostat.mode == 1) {
+ } else if (mode == 1) {
thermoMode = 1; // manual
- } else if (EMS_Thermostat.mode == 2) {
+ } else if (mode == 2) {
thermoMode = 2; // auto
}
- } else if (ems_getThermostatModel() == EMS_MODEL_RC300) {
- if (EMS_Thermostat.mode == 0) {
+ } else if (model == EMS_MODEL_RC300) {
+ if (mode == 0) {
thermoMode = 1; // manual
- } else if (EMS_Thermostat.mode == 1) {
+ } else if (mode == 1) {
thermoMode = 2; // auto
}
- } else { // default for all thermostats
- if (EMS_Thermostat.mode == 0) {
+ } else { // default for all other thermostats
+ if (mode == 0) {
thermoMode = 3; // night
- } else if (EMS_Thermostat.mode == 1) {
+ } else if (mode == 1) {
thermoMode = 4; // day
- } else if (EMS_Thermostat.mode == 2) {
+ } else if (mode == 2) {
thermoMode = 2; // auto
}
}
@@ -602,58 +603,64 @@ void showInfo() {
myDebug_P(PSTR("%sThermostat stats:%s"), COLOR_BOLD_ON, COLOR_BOLD_OFF);
myDebug_P(PSTR(" Thermostat: %s"), ems_getThermostatDescription(buffer_type, false));
- // Render Current & Setpoint Room Temperature
- if (ems_getThermostatModel() == EMS_MODEL_EASY) {
- // Temperatures are *100
- _renderShortValue("Set room temperature", "C", EMS_Thermostat.setpoint_roomTemp, 10); // *100
- _renderShortValue("Current room temperature", "C", EMS_Thermostat.curr_roomTemp, 10); // *100
- } else if ((ems_getThermostatModel() == EMS_MODEL_FR10) || (ems_getThermostatModel() == EMS_MODEL_FW100)
- || (ems_getThermostatModel() == EMS_MODEL_FW120)) {
- // Temperatures are *10
- _renderShortValue("Set room temperature", "C", EMS_Thermostat.setpoint_roomTemp, 1); // *10
- _renderShortValue("Current room temperature", "C", EMS_Thermostat.curr_roomTemp, 1); // *10
- } else {
- // because we store in 2 bytes short, when converting to a single byte we'll loose the negative value if its unset
- _renderShortValue("Setpoint room temperature", "C", EMS_Thermostat.setpoint_roomTemp, 2); // convert to a single byte * 2
- _renderShortValue("Current room temperature", "C", EMS_Thermostat.curr_roomTemp, 1); // is *10
- }
-
- // Render Day/Night/Holiday Temperature
- if ((EMS_Thermostat.holidaytemp > 0) && (EMSESP_Settings.heating_circuit == 2)) { // only if we are on a RC35 we show more info
- _renderIntValue("Day temperature", "C", EMS_Thermostat.daytemp, 2); // convert to a single byte * 2
- _renderIntValue("Night temperature", "C", EMS_Thermostat.nighttemp, 2); // convert to a single byte * 2
- _renderIntValue("Vacation temperature", "C", EMS_Thermostat.holidaytemp, 2); // convert to a single byte * 2
- }
-
// Render Thermostat Date & Time
- // not for EASY
- if ((ems_getThermostatModel() != EMS_MODEL_EASY)) {
- myDebug_P(PSTR(" Thermostat time is %02d:%02d:%02d %d/%d/%d"),
- EMS_Thermostat.hour,
- EMS_Thermostat.minute,
- EMS_Thermostat.second,
- EMS_Thermostat.day,
- EMS_Thermostat.month,
- EMS_Thermostat.year + 2000);
+ uint8_t model = ems_getThermostatModel();
+ if ((model != EMS_MODEL_EASY)) {
+ myDebug_P(PSTR(" Thermostat time is %s"), EMS_Thermostat.datetime);
}
- // Render Termostat Mode, if we have a mode
- uint8_t thermoMode = _getThermostatMode(); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
+ uint8_t _m_setpoint, _m_curr;
+ switch (model) {
+ case EMS_MODEL_EASY:
+ _m_setpoint = 10; // *100
+ _m_curr = 10; // *100
+ break;
+ case EMS_MODEL_FR10:
+ case EMS_MODEL_FW100:
+ case EMS_MODEL_FW120:
+ _m_setpoint = 1; // *10
+ _m_curr = 1; // *10
+ break;
+ default: // RC30,RC35 etc...
+ _m_setpoint = 2; // *2
+ _m_curr = 1; // *10
+ break;
+ }
- if (thermoMode == 0) {
- myDebug_P(PSTR(" Mode is set to low"));
- } else if (thermoMode == 1) {
- myDebug_P(PSTR(" Mode is set to manual"));
- } else if (thermoMode == 2) {
- myDebug_P(PSTR(" Mode is set to auto"));
- } else if (thermoMode == 3) {
- myDebug_P(PSTR(" Mode is set to night"));
- } else if (thermoMode == 4) {
- myDebug_P(PSTR(" Mode is set to day"));
+ // go through all Heating Circuits
+ for (uint8_t hc_num = 1; hc_num <= EMS_THERMOSTAT_MAXHC; hc_num++) {
+ // only show if we have data for the Heating Circuit
+ if (EMS_Thermostat.hc[hc_num - 1].active) {
+ myDebug_P(PSTR(" Heating Circuit %d"), hc_num);
+ // Render Current & Setpoint Room Temperature for each thermostat type
+ _renderShortValue(" Setpoint room temperature", "C", EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp, _m_setpoint);
+ _renderShortValue(" Current room temperature", "C", EMS_Thermostat.hc[hc_num - 1].curr_roomTemp, _m_curr);
+
+ // Render Day/Night/Holiday Temperature on RC35s
+ if (model == EMS_MODEL_RC35) {
+ _renderIntValue(" Day temperature", "C", EMS_Thermostat.hc[hc_num - 1].daytemp, 2); // convert to a single byte * 2
+ _renderIntValue(" Night temperature", "C", EMS_Thermostat.hc[hc_num - 1].nighttemp, 2); // convert to a single byte * 2
+ _renderIntValue(" Vacation temperature", "C", EMS_Thermostat.hc[hc_num - 1].holidaytemp, 2); // convert to a single byte * 2
+ }
+
+ // Render Termostat Mode, if we have a mode
+ uint8_t thermoMode = _getThermostatMode(hc_num); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
+ if (thermoMode == 0) {
+ myDebug_P(PSTR(" Mode is set to low"));
+ } else if (thermoMode == 1) {
+ myDebug_P(PSTR(" Mode is set to manual"));
+ } else if (thermoMode == 2) {
+ myDebug_P(PSTR(" Mode is set to auto"));
+ } else if (thermoMode == 3) {
+ myDebug_P(PSTR(" Mode is set to night"));
+ } else if (thermoMode == 4) {
+ myDebug_P(PSTR(" Mode is set to day"));
+ }
+ }
}
}
- // Dallas
+ // Dallas external temp sensors
if (EMSESP_Settings.dallas_sensors != 0) {
myDebug_P(PSTR("")); // newline
char buffer[128] = {0};
@@ -826,80 +833,97 @@ void publishValues(bool force) {
last_boilerActive = ((EMS_Boiler.tapwaterActive << 1) + EMS_Boiler.heatingActive); // remember last state
}
- // handle the thermostat values separately
- // only send thermostat values if we actually have them
- if (ems_getThermostatEnabled() && ((EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET) && (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET))) {
- // build new json object
- doc.clear();
- JsonObject rootThermostat = doc.to();
+ // handle the thermostat values
+ if (ems_getThermostatEnabled()) {
+ uint8_t total_active_hc = 0; // number of HCs
+ for (uint8_t hc_v = 0; hc_v < EMS_THERMOSTAT_MAXHC; hc_v++) {
+ _EMS_Thermostat_HC * thermostat = &EMS_Thermostat.hc[hc_v];
- rootThermostat[THERMOSTAT_HC] = _int_to_char(s, EMSESP_Settings.heating_circuit);
+ total_active_hc++; // increase count for #HCs we encounter
- // different logic depending on thermostat types
- if (ems_getThermostatModel() == EMS_MODEL_EASY) {
- if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
- rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 100;
- if (EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
- rootThermostat[THERMOSTAT_CURRTEMP] = (double)EMS_Thermostat.curr_roomTemp / 100;
- } else if ((ems_getThermostatModel() == EMS_MODEL_FR10) || (ems_getThermostatModel() == EMS_MODEL_FW100)
- || (ems_getThermostatModel() == EMS_MODEL_FW120)) {
- if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
- rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 10;
- if (EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
- rootThermostat[THERMOSTAT_CURRTEMP] = (double)EMS_Thermostat.curr_roomTemp / 10;
- } else {
- if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
- rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 2;
- if (EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
- rootThermostat[THERMOSTAT_CURRTEMP] = (double)EMS_Thermostat.curr_roomTemp / 10;
+ // only send if we have an active Heating Circuit with real data
+ if ((thermostat->active) && (thermostat->curr_roomTemp != EMS_VALUE_SHORT_NOTSET) && (thermostat->setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)) {
+ // build new json object
+ doc.clear();
+ JsonObject rootThermostat = doc.to();
- if (EMS_Thermostat.daytemp != EMS_VALUE_INT_NOTSET)
- rootThermostat[THERMOSTAT_DAYTEMP] = (double)EMS_Thermostat.daytemp / 2;
- if (EMS_Thermostat.nighttemp != EMS_VALUE_INT_NOTSET)
- rootThermostat[THERMOSTAT_NIGHTTEMP] = (double)EMS_Thermostat.nighttemp / 2;
- if (EMS_Thermostat.holidaytemp != EMS_VALUE_INT_NOTSET)
- rootThermostat[THERMOSTAT_HOLIDAYTEMP] = (double)EMS_Thermostat.holidaytemp / 2;
+ rootThermostat[THERMOSTAT_HC] = _int_to_char(s, (thermostat->hc) + 1); // heating circuit 1..4
- if (EMS_Thermostat.heatingtype != EMS_VALUE_INT_NOTSET)
- rootThermostat[THERMOSTAT_HEATINGTYPE] = EMS_Thermostat.heatingtype;
+ // different logic depending on thermostat types
+ if (ems_getThermostatModel() == EMS_MODEL_EASY) {
+ if (thermostat->setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ rootThermostat[THERMOSTAT_SELTEMP] = (double)thermostat->setpoint_roomTemp / 100;
+ if (thermostat->curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ rootThermostat[THERMOSTAT_CURRTEMP] = (double)thermostat->curr_roomTemp / 100;
+ } else if ((ems_getThermostatModel() == EMS_MODEL_FR10) || (ems_getThermostatModel() == EMS_MODEL_FW100)
+ || (ems_getThermostatModel() == EMS_MODEL_FW120)) {
+ if (thermostat->setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ rootThermostat[THERMOSTAT_SELTEMP] = (double)thermostat->setpoint_roomTemp / 10;
+ if (thermostat->curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ rootThermostat[THERMOSTAT_CURRTEMP] = (double)thermostat->curr_roomTemp / 10;
+ } else {
+ if (thermostat->setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ rootThermostat[THERMOSTAT_SELTEMP] = (double)thermostat->setpoint_roomTemp / 2;
+ if (thermostat->curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ rootThermostat[THERMOSTAT_CURRTEMP] = (double)thermostat->curr_roomTemp / 10;
- if (EMS_Thermostat.circuitcalctemp != EMS_VALUE_INT_NOTSET)
- rootThermostat[THERMOSTAT_CIRCUITCALCTEMP] = EMS_Thermostat.circuitcalctemp;
- }
+ if (thermostat->daytemp != EMS_VALUE_INT_NOTSET)
+ rootThermostat[THERMOSTAT_DAYTEMP] = (double)thermostat->daytemp / 2;
+ if (thermostat->nighttemp != EMS_VALUE_INT_NOTSET)
+ rootThermostat[THERMOSTAT_NIGHTTEMP] = (double)thermostat->nighttemp / 2;
+ if (thermostat->holidaytemp != EMS_VALUE_INT_NOTSET)
+ rootThermostat[THERMOSTAT_HOLIDAYTEMP] = (double)thermostat->holidaytemp / 2;
- uint8_t thermoMode = _getThermostatMode(); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
+ if (thermostat->heatingtype != EMS_VALUE_INT_NOTSET)
+ rootThermostat[THERMOSTAT_HEATINGTYPE] = thermostat->heatingtype;
- // Termostat Mode
- if (thermoMode == 0) {
- rootThermostat[THERMOSTAT_MODE] = "low";
- } else if (thermoMode == 1) {
- rootThermostat[THERMOSTAT_MODE] = "manual";
- } else if (thermoMode == 2) {
- rootThermostat[THERMOSTAT_MODE] = "auto";
- } else if (thermoMode == 3) {
- rootThermostat[THERMOSTAT_MODE] = "night";
- } else if (thermoMode == 4) {
- rootThermostat[THERMOSTAT_MODE] = "day";
- }
+ if (thermostat->circuitcalctemp != EMS_VALUE_INT_NOTSET)
+ rootThermostat[THERMOSTAT_CIRCUITCALCTEMP] = thermostat->circuitcalctemp;
+ }
- data[0] = '\0'; // reset data for next package
- serializeJson(doc, data, sizeof(data));
+ uint8_t thermoMode = _getThermostatMode(hc_v + 1); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
- // check for empty json
- jsonSize = measureJson(doc);
- if (jsonSize > 2) {
- // calculate new CRC
- crc.reset();
- for (uint8_t i = 0; i < (jsonSize - 1); i++) {
- crc.update(data[i]);
- }
- fchecksum = crc.finalize();
- if ((previousThermostatPublishCRC != fchecksum) || force) {
- previousThermostatPublishCRC = fchecksum;
- myDebugLog("Publishing thermostat data via MQTT");
+ // Termostat Mode
+ if (thermoMode == 0) {
+ rootThermostat[THERMOSTAT_MODE] = "low";
+ } else if (thermoMode == 1) {
+ rootThermostat[THERMOSTAT_MODE] = "manual";
+ } else if (thermoMode == 2) {
+ rootThermostat[THERMOSTAT_MODE] = "auto";
+ } else if (thermoMode == 3) {
+ rootThermostat[THERMOSTAT_MODE] = "night";
+ } else if (thermoMode == 4) {
+ rootThermostat[THERMOSTAT_MODE] = "day";
+ }
- // send values via MQTT
- myESP.mqttPublish(TOPIC_THERMOSTAT_DATA, data);
+ data[0] = '\0'; // reset data for next package
+ serializeJson(doc, data, sizeof(data));
+
+ // check for empty json
+ jsonSize = measureJson(doc);
+ if (jsonSize > 2) {
+ // calculate new CRC
+ crc.reset();
+ for (uint8_t i = 0; i < (jsonSize - 1); i++) {
+ crc.update(data[i]);
+ }
+ fchecksum = crc.finalize();
+ if ((previousThermostatPublishCRC != fchecksum) || force) {
+ previousThermostatPublishCRC = fchecksum;
+ myDebugLog("Publishing thermostat data via MQTT");
+
+ // send values via MQTT
+
+ char thermostat_topicname[20];
+ strlcpy(thermostat_topicname, TOPIC_THERMOSTAT_DATA, sizeof(thermostat_topicname)); // "thermostat_data"
+ // if we have more than 1 active Heating Circuit, postfix with the HC number
+ if (total_active_hc > 1) {
+ char buffer[4];
+ strlcat(thermostat_topicname, itoa(total_active_hc, buffer, 10), sizeof(thermostat_topicname));
+ }
+ myESP.mqttPublish(thermostat_topicname, data);
+ }
+ }
}
}
}
@@ -1066,7 +1090,7 @@ void do_scanThermostat() {
// do a system health check every now and then to see if we all connections
void do_systemCheck() {
- if (!ems_getBusConnected()) {
+ if (!ems_getBusConnected() && !myESP.getUseSerial()) {
myDebug_P(PSTR("Error! Unable to read the EMS bus."));
}
}
@@ -1180,9 +1204,6 @@ bool LoadSaveCallback(MYESP_FSACTION action, JsonObject json) {
EMSESP_Settings.listen_mode = settings["listen_mode"];
ems_setTxDisabled(EMSESP_Settings.listen_mode);
- EMSESP_Settings.heating_circuit = settings["heating_circuit"] | DEFAULT_HEATINGCIRCUIT;
- ems_setThermostatHC(EMSESP_Settings.heating_circuit);
-
EMSESP_Settings.tx_mode = settings["tx_mode"] | 1; // default to 1 (generic)
ems_setTxMode(EMSESP_Settings.tx_mode);
@@ -1200,7 +1221,6 @@ bool LoadSaveCallback(MYESP_FSACTION action, JsonObject json) {
settings["shower_timer"] = EMSESP_Settings.shower_timer;
settings["shower_alert"] = EMSESP_Settings.shower_alert;
settings["publish_time"] = EMSESP_Settings.publish_time;
- settings["heating_circuit"] = EMSESP_Settings.heating_circuit;
settings["tx_mode"] = EMSESP_Settings.tx_mode;
return true;
@@ -1308,18 +1328,6 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
ok = true;
}
- // heating_circuit
- if ((strcmp(setting, "heating_circuit") == 0) && (wc == 2)) {
- uint8_t hc = atoi(value);
- if ((hc >= 1) && (hc <= 2)) {
- EMSESP_Settings.heating_circuit = hc;
- ems_setThermostatHC(hc);
- ok = true;
- } else {
- myDebug_P(PSTR("Error. Usage: set heating_circuit <1 | 2>"));
- }
- }
-
// tx_mode
if ((strcmp(setting, "tx_mode") == 0) && (wc == 2)) {
uint8_t mode = atoi(value);
@@ -1338,7 +1346,6 @@ bool SetListCallback(MYESP_FSACTION action, uint8_t wc, const char * setting, co
myDebug_P(PSTR(" led_gpio=%d"), EMSESP_Settings.led_gpio);
myDebug_P(PSTR(" dallas_gpio=%d"), EMSESP_Settings.dallas_gpio);
myDebug_P(PSTR(" dallas_parasite=%s"), EMSESP_Settings.dallas_parasite ? "on" : "off");
- myDebug_P(PSTR(" heating_circuit=%d"), EMSESP_Settings.heating_circuit);
myDebug_P(PSTR(" tx_mode=%d"), EMSESP_Settings.tx_mode);
myDebug_P(PSTR(" listen_mode=%s"), EMSESP_Settings.listen_mode ? "on" : "off");
myDebug_P(PSTR(" shower_timer=%s"), EMSESP_Settings.shower_timer ? "on" : "off");
@@ -1487,13 +1494,21 @@ void TelnetCommandCallback(uint8_t wc, const char * commandLine) {
}
// thermostat commands
- if ((strcmp(first_cmd, "thermostat") == 0) && (wc == 3)) {
- char * second_cmd = _readWord();
+ if ((strcmp(first_cmd, "thermostat") == 0) && (wc >= 3)) {
+ char * second_cmd = _readWord();
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC;
+
if (strcmp(second_cmd, "temp") == 0) {
- ems_setThermostatTemp(_readFloatNumber());
+ if (wc == 4) {
+ hc = _readIntNumber(); // next parameter is the heating circuit
+ }
+ ems_setThermostatTemp(_readFloatNumber(), hc);
ok = true;
} else if (strcmp(second_cmd, "mode") == 0) {
- ems_setThermostatMode(_readIntNumber());
+ if (wc == 4) {
+ hc = _readIntNumber(); // next parameter is the heating circuit
+ }
+ ems_setThermostatMode(_readIntNumber(), hc);
ok = true;
} else if (strcmp(second_cmd, "read") == 0) {
ems_doReadCommand(_readHexNumber(), EMS_Thermostat.device_id);
@@ -1602,7 +1617,7 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
float f = strtof((char *)message, 0);
char s[10] = {0};
myDebug_P(PSTR("MQTT topic: thermostat temperature value %s"), _float_to_char(s, f));
- ems_setThermostatTemp(f);
+ ems_setThermostatTemp(f, EMS_THERMOSTAT_DEFAULTHC);
publishValues(true); // publish back immediately, can't remember why I do this?!
}
@@ -1610,21 +1625,11 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
if (strcmp(topic, TOPIC_THERMOSTAT_CMD_MODE) == 0) {
myDebug_P(PSTR("MQTT topic: thermostat mode value %s"), message);
if (strcmp((char *)message, "auto") == 0) {
- ems_setThermostatMode(2);
+ ems_setThermostatMode(2, EMS_THERMOSTAT_DEFAULTHC);
} else if (strcmp((char *)message, "day") == 0 || strcmp((char *)message, "manual") == 0) {
- ems_setThermostatMode(1);
+ ems_setThermostatMode(1, EMS_THERMOSTAT_DEFAULTHC);
} else if (strcmp((char *)message, "night") == 0 || strcmp((char *)message, "off") == 0) {
- ems_setThermostatMode(0);
- }
- }
-
- // thermostat heating circuit change
- if (strcmp(topic, TOPIC_THERMOSTAT_CMD_HC) == 0) {
- myDebug_P(PSTR("MQTT topic: thermostat heating circuit value %s"), message);
- uint8_t hc = atoi((char *)message);
- if ((hc >= 1) && (hc <= 2)) {
- EMSESP_Settings.heating_circuit = hc;
- ems_setThermostatHC(hc);
+ ems_setThermostatMode(0, EMS_THERMOSTAT_DEFAULTHC);
}
}
@@ -1633,7 +1638,7 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
float f = strtof((char *)message, 0);
char s[10] = {0};
myDebug_P(PSTR("MQTT topic: new thermostat night temperature value %s"), _float_to_char(s, f));
- ems_setThermostatTemp(f, 1);
+ ems_setThermostatTemp(f, EMS_THERMOSTAT_DEFAULTHC, 1);
}
// set daytemp value
@@ -1641,7 +1646,7 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
float f = strtof((char *)message, 0);
char s[10] = {0};
myDebug_P(PSTR("MQTT topic: new thermostat day temperature value %s"), _float_to_char(s, f));
- ems_setThermostatTemp(f, 2);
+ ems_setThermostatTemp(f, EMS_THERMOSTAT_DEFAULTHC, 2);
}
// set holiday value
@@ -1649,7 +1654,7 @@ void MQTTCallback(unsigned int type, const char * topic, const char * message) {
float f = strtof((char *)message, 0);
char s[10] = {0};
myDebug_P(PSTR("MQTT topic: new thermostat holiday temperature value %s"), _float_to_char(s, f));
- ems_setThermostatTemp(f, 3);
+ ems_setThermostatTemp(f, EMS_THERMOSTAT_DEFAULTHC, 3);
}
// wwActivated
@@ -1770,27 +1775,30 @@ void WebCallback(JsonObject root) {
char buffer[200];
thermostat["tm"] = ems_getThermostatDescription(buffer, true);
+ // TODO: enable support multiple HCs
+ uint8_t hc_num = EMS_THERMOSTAT_DEFAULTHC; // default to HC1
+
// Render Current & Setpoint Room Temperature
if (ems_getThermostatModel() == EMS_MODEL_EASY) {
- if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
- thermostat["ts"] = (double)EMS_Thermostat.setpoint_roomTemp / 100;
- if (EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
- thermostat["tc"] = (double)EMS_Thermostat.curr_roomTemp / 100;
+ if (EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ thermostat["ts"] = (double)EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp / 100;
+ if (EMS_Thermostat.hc[hc_num - 1].curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ thermostat["tc"] = (double)EMS_Thermostat.hc[hc_num - 1].curr_roomTemp / 100;
} else if ((ems_getThermostatModel() == EMS_MODEL_FR10) || (ems_getThermostatModel() == EMS_MODEL_FW100)
|| (ems_getThermostatModel() == EMS_MODEL_FW120)) {
- if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
- thermostat["ts"] = (double)EMS_Thermostat.setpoint_roomTemp / 10;
- if (EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
- thermostat["tc"] = (double)EMS_Thermostat.curr_roomTemp / 10;
+ if (EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ thermostat["ts"] = (double)EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp / 10;
+ if (EMS_Thermostat.hc[hc_num - 1].curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ thermostat["tc"] = (double)EMS_Thermostat.hc[hc_num - 1].curr_roomTemp / 10;
} else {
- if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
- thermostat["ts"] = (double)EMS_Thermostat.setpoint_roomTemp / 2;
- if (EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
- thermostat["tc"] = (double)EMS_Thermostat.curr_roomTemp / 10;
+ if (EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ thermostat["ts"] = (double)EMS_Thermostat.hc[hc_num - 1].setpoint_roomTemp / 2;
+ if (EMS_Thermostat.hc[hc_num - 1].curr_roomTemp != EMS_VALUE_SHORT_NOTSET)
+ thermostat["tc"] = (double)EMS_Thermostat.hc[hc_num - 1].curr_roomTemp / 10;
}
// Render Termostat Mode, if we have a mode
- uint8_t thermoMode = _getThermostatMode(); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
+ uint8_t thermoMode = _getThermostatMode(hc_num); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day
if (thermoMode == 0) {
thermostat["tmode"] = "low";
} else if (thermoMode == 1) {
@@ -1890,17 +1898,16 @@ void WebCallback(JsonObject root) {
// Most of these will be overwritten after the SPIFFS config file is loaded
void initEMSESP() {
// general settings
- EMSESP_Settings.shower_timer = false;
- EMSESP_Settings.shower_alert = false;
- EMSESP_Settings.led = true; // LED is on by default
- EMSESP_Settings.listen_mode = false;
- EMSESP_Settings.publish_time = DEFAULT_PUBLISHTIME;
- EMSESP_Settings.timestamp = millis();
- EMSESP_Settings.dallas_sensors = 0;
- EMSESP_Settings.led_gpio = EMSESP_LED_GPIO;
- EMSESP_Settings.dallas_gpio = EMSESP_DALLAS_GPIO;
- EMSESP_Settings.heating_circuit = 1; // default heating circuit to HC1
- EMSESP_Settings.tx_mode = 1; // default tx mode
+ EMSESP_Settings.shower_timer = false;
+ EMSESP_Settings.shower_alert = false;
+ EMSESP_Settings.led = true; // LED is on by default
+ EMSESP_Settings.listen_mode = false;
+ EMSESP_Settings.publish_time = DEFAULT_PUBLISHTIME;
+ EMSESP_Settings.timestamp = millis();
+ EMSESP_Settings.dallas_sensors = 0;
+ EMSESP_Settings.led_gpio = EMSESP_LED_GPIO;
+ EMSESP_Settings.dallas_gpio = EMSESP_DALLAS_GPIO;
+ EMSESP_Settings.tx_mode = 1; // default tx mode
// shower settings
EMSESP_Shower.timerStart = 0;
diff --git a/src/ems.cpp b/src/ems.cpp
index b4e96f994..b8f5b03d7 100644
--- a/src/ems.cpp
+++ b/src/ems.cpp
@@ -159,6 +159,10 @@ const _EMS_Type EMS_Types[] = {
{EMS_MODEL_RC35, EMS_TYPE_RC35StatusMessage_HC1, "RC35StatusMessage_HC1", _process_RC35StatusMessage},
{EMS_MODEL_RC35, EMS_TYPE_RC35Set_HC2, "RC35Set_HC2", _process_RC35Set},
{EMS_MODEL_RC35, EMS_TYPE_RC35StatusMessage_HC2, "RC35StatusMessage_HC2", _process_RC35StatusMessage},
+ {EMS_MODEL_RC35, EMS_TYPE_RC35Set_HC3, "RC35Set_HC2", _process_RC35Set},
+ {EMS_MODEL_RC35, EMS_TYPE_RC35StatusMessage_HC3, "RC35StatusMessage_HC3", _process_RC35StatusMessage},
+ {EMS_MODEL_RC35, EMS_TYPE_RC35Set_HC4, "RC35Set_HC4", _process_RC35Set},
+ {EMS_MODEL_RC35, EMS_TYPE_RC35StatusMessage_HC4, "RC35StatusMessage_HC4", _process_RC35StatusMessage},
// ES73
{EMS_MODEL_ES73, EMS_TYPE_RCOutdoorTempMessage, "RCOutdoorTempMessage", _process_RCOutdoorTempMessage},
@@ -234,25 +238,24 @@ void ems_init() {
EMS_Sys_Status.emsPollAck[0] = EMS_ID_ME;
// thermostat
- EMS_Thermostat.setpoint_roomTemp = EMS_VALUE_SHORT_NOTSET;
- EMS_Thermostat.curr_roomTemp = EMS_VALUE_SHORT_NOTSET;
- EMS_Thermostat.hour = 0;
- EMS_Thermostat.minute = 0;
- EMS_Thermostat.second = 0;
- EMS_Thermostat.day = 0;
- EMS_Thermostat.month = 0;
- EMS_Thermostat.year = 0;
- EMS_Thermostat.mode = EMS_VALUE_INT_NOTSET;
- EMS_Thermostat.day_mode = EMS_VALUE_INT_NOTSET;
- EMS_Thermostat.device_id = EMS_ID_NONE;
- EMS_Thermostat.write_supported = false;
- EMS_Thermostat.hc = 1; // default heating circuit is 1
- EMS_Thermostat.daytemp = EMS_VALUE_INT_NOTSET; // 0x47 byte
- EMS_Thermostat.nighttemp = EMS_VALUE_INT_NOTSET; // 0x47 byte
- EMS_Thermostat.holidaytemp = EMS_VALUE_INT_NOTSET; // 0x47 byte
- EMS_Thermostat.heatingtype = EMS_VALUE_INT_NOTSET; // 0x47 byte floor heating = 3
- EMS_Thermostat.circuitcalctemp = EMS_VALUE_INT_NOTSET; // 0x48 byte 14
+ strlcpy(EMS_Thermostat.datetime, "?", sizeof(EMS_Thermostat.datetime));
+ EMS_Thermostat.write_supported = false;
+ EMS_Thermostat.device_id = EMS_ID_NONE;
+ // init all heating circuits
+ for (uint8_t i = 0; i < EMS_THERMOSTAT_MAXHC; i++) {
+ EMS_Thermostat.hc[i].hc = i;
+ EMS_Thermostat.hc[i].active = false;
+ EMS_Thermostat.hc[i].mode = EMS_VALUE_INT_NOTSET;
+ EMS_Thermostat.hc[i].day_mode = EMS_VALUE_INT_NOTSET;
+ EMS_Thermostat.hc[i].daytemp = EMS_VALUE_INT_NOTSET;
+ EMS_Thermostat.hc[i].nighttemp = EMS_VALUE_INT_NOTSET;
+ EMS_Thermostat.hc[i].holidaytemp = EMS_VALUE_INT_NOTSET;
+ EMS_Thermostat.hc[i].heatingtype = EMS_VALUE_INT_NOTSET; // floor heating = 3
+ EMS_Thermostat.hc[i].circuitcalctemp = EMS_VALUE_INT_NOTSET;
+ EMS_Thermostat.hc[i].setpoint_roomTemp = EMS_VALUE_SHORT_NOTSET;
+ EMS_Thermostat.hc[i].curr_roomTemp = EMS_VALUE_SHORT_NOTSET;
+ }
// UBAParameterWW
EMS_Boiler.wWActivated = EMS_VALUE_INT_NOTSET; // Warm Water activated
@@ -357,10 +360,6 @@ void ems_setEmsRefreshed(bool b) {
EMS_Sys_Status.emsRefreshed = b;
}
-void ems_setThermostatHC(uint8_t hc) {
- EMS_Thermostat.hc = hc;
-}
-
bool ems_getBoilerEnabled() {
return (EMS_Boiler.device_id != EMS_ID_NONE);
}
@@ -1344,8 +1343,11 @@ void _process_UBAMonitorSlow(_EMS_RxTelegram * EMS_RxTelegram) {
* e.g. 17 0B 91 00 80 1E 00 CB 27 00 00 00 00 05 01 00 CB 00 (CRC=47), #data=14
*/
void _process_RC10StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
- EMS_Thermostat.setpoint_roomTemp = _toByte(EMS_OFFSET_RC10StatusMessage_setpoint); // is * 2
- EMS_Thermostat.curr_roomTemp = _toShort(EMS_OFFSET_RC10StatusMessage_curr); // is * 10
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC - 1; // use HC1
+
+ EMS_Thermostat.hc[hc].active = true;
+ EMS_Thermostat.hc[hc].setpoint_roomTemp = _toByte(EMS_OFFSET_RC10StatusMessage_setpoint); // is * 2
+ EMS_Thermostat.hc[hc].curr_roomTemp = _toShort(EMS_OFFSET_RC10StatusMessage_curr); // is * 10
EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
}
@@ -1356,8 +1358,11 @@ void _process_RC10StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
* received every 60 seconds
*/
void _process_RC20StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
- EMS_Thermostat.setpoint_roomTemp = _toByte(EMS_OFFSET_RC20StatusMessage_setpoint); // is * 2
- EMS_Thermostat.curr_roomTemp = _toShort(EMS_OFFSET_RC20StatusMessage_curr); // is * 10
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC - 1; // use HC1
+
+ EMS_Thermostat.hc[hc].active = true;
+ EMS_Thermostat.hc[hc].setpoint_roomTemp = _toByte(EMS_OFFSET_RC20StatusMessage_setpoint); // is * 2
+ EMS_Thermostat.hc[hc].curr_roomTemp = _toShort(EMS_OFFSET_RC20StatusMessage_curr); // is * 10
EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
}
@@ -1367,29 +1372,35 @@ void _process_RC20StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
* For reading the temp values only * received every 60 seconds
*/
void _process_RC30StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
- EMS_Thermostat.setpoint_roomTemp = _toByte(EMS_OFFSET_RC30StatusMessage_setpoint); // is * 2
- EMS_Thermostat.curr_roomTemp = _toShort(EMS_OFFSET_RC30StatusMessage_curr); // note, its 2 bytes here
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC - 1; // use HC1
+
+ EMS_Thermostat.hc[hc].active = true;
+ EMS_Thermostat.hc[hc].setpoint_roomTemp = _toByte(EMS_OFFSET_RC30StatusMessage_setpoint); // is * 2
+ EMS_Thermostat.hc[hc].curr_roomTemp = _toShort(EMS_OFFSET_RC30StatusMessage_curr); // note, its 2 bytes here
EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
}
/**
- * type 0x3E and 0x48 - data from the RC35 thermostat (0x10) - 16 bytes
+ * type 0x3E (HC1), 0x48 (HC2), 0x52 (HC3), 0x5C (HC4) - HK1MonitorMessage - data from the RC35 thermostat (0x10) - 16 bytes
+ *
* For reading the temp values only
* received every 60 seconds
*/
void _process_RC35StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
- EMS_Thermostat.setpoint_roomTemp = _toByte(EMS_OFFSET_RC35StatusMessage_setpoint); // is * 2
+ uint8_t hc_num = _getHeatingCircuit(EMS_RxTelegram); // which HC is it?
+
+ EMS_Thermostat.hc[hc_num].setpoint_roomTemp = _toByte(EMS_OFFSET_RC35StatusMessage_setpoint); // is * 2
// check if temp sensor is unavailable
if (EMS_RxTelegram->data[3] == 0x7D) {
- EMS_Thermostat.curr_roomTemp = EMS_VALUE_SHORT_NOTSET;
+ EMS_Thermostat.hc[hc_num].curr_roomTemp = EMS_VALUE_SHORT_NOTSET;
} else {
- EMS_Thermostat.curr_roomTemp = _toShort(EMS_OFFSET_RC35StatusMessage_curr);
+ EMS_Thermostat.hc[hc_num].curr_roomTemp = _toShort(EMS_OFFSET_RC35StatusMessage_curr);
}
- EMS_Thermostat.day_mode = _bitRead(EMS_OFFSET_RC35StatusMessage_mode, 1); // get day mode flag
+ EMS_Thermostat.hc[hc_num].day_mode = _bitRead(EMS_OFFSET_RC35StatusMessage_mode, 1); // get day mode flag
- EMS_Thermostat.circuitcalctemp = _toByte(EMS_OFFSET_RC35Set_circuitcalctemp); // 0x48 calculated temperature
+ EMS_Thermostat.hc[hc_num].circuitcalctemp = _toByte(EMS_OFFSET_RC35Set_circuitcalctemp); // 0x48 calculated temperature
EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
}
@@ -1399,8 +1410,11 @@ void _process_RC35StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
* The Easy has a digital precision of its floats to 2 decimal places, so values must be divided by 100
*/
void _process_EasyStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
- EMS_Thermostat.curr_roomTemp = _toShort(EMS_OFFSET_EasyStatusMessage_curr); // is *100
- EMS_Thermostat.setpoint_roomTemp = _toShort(EMS_OFFSET_EasyStatusMessage_setpoint); // is *100
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC - 1; // use HC1
+
+ EMS_Thermostat.hc[hc].active = true;
+ EMS_Thermostat.hc[hc].curr_roomTemp = _toShort(EMS_OFFSET_EasyStatusMessage_curr); // is *100
+ EMS_Thermostat.hc[hc].setpoint_roomTemp = _toShort(EMS_OFFSET_EasyStatusMessage_setpoint); // is *100
EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
}
@@ -1410,23 +1424,26 @@ void _process_EasyStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
* EMS+ messages may come in with different offsets so handle them here
*/
void _process_RCPLUSStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC - 1; // use HC1
+ EMS_Thermostat.hc[hc].active = true;
+
// handle single data values
if (EMS_RxTelegram->data_length == 1) {
switch (EMS_RxTelegram->offset) {
- case EMS_OFFSET_RCPLUSStatusMessage_curr: // setpoint target temp
- EMS_Thermostat.curr_roomTemp = _toShort(0); // value is * 10
+ case EMS_OFFSET_RCPLUSStatusMessage_curr: // setpoint target temp
+ EMS_Thermostat.hc[hc].curr_roomTemp = _toShort(0); // value is * 10
break;
- case EMS_OFFSET_RCPLUSStatusMessage_setpoint: // current target temp
- EMS_Thermostat.setpoint_roomTemp = _toByte(0); // value is * 2
+ case EMS_OFFSET_RCPLUSStatusMessage_setpoint: // current target temp
+ EMS_Thermostat.hc[hc].setpoint_roomTemp = _toByte(0); // value is * 2
break;
- case EMS_OFFSET_RCPLUSStatusMessage_currsetpoint: // current setpoint temp, e.g. Thermostat -> all, telegram: 10 00 FF 06 01 A5 22
- EMS_Thermostat.setpoint_roomTemp = _toByte(0); // value is * 2
+ case EMS_OFFSET_RCPLUSStatusMessage_currsetpoint: // current setpoint temp, e.g. Thermostat -> all, telegram: 10 00 FF 06 01 A5 22
+ EMS_Thermostat.hc[hc].setpoint_roomTemp = _toByte(0); // value is * 2
break;
- case EMS_OFFSET_RCPLUSStatusMessage_mode: // thermostat mode auto/manual
- // manual : 10 00 FF 0A 01 A5 02
- // auto : Thermostat -> all, type 0x01A5 telegram: 10 00 FF 0A 01 A5 03
- EMS_Thermostat.mode = _bitRead(0, 0); // bit 1, mode (auto=1 or manual=0)
- EMS_Thermostat.day_mode = _bitRead(0, 1); // get day mode flag
+ case EMS_OFFSET_RCPLUSStatusMessage_mode: // thermostat mode auto/manual
+ // manual : 10 00 FF 0A 01 A5 02
+ // auto : Thermostat -> all, type 0x01A5 telegram: 10 00 FF 0A 01 A5 03
+ EMS_Thermostat.hc[hc].mode = _bitRead(0, 0); // bit 1, mode (auto=1 or manual=0)
+ EMS_Thermostat.hc[EMS_TYPE_RC35StatusMessage_HC3].day_mode = _bitRead(0, 1); // get day mode flag
break;
}
@@ -1434,10 +1451,10 @@ void _process_RCPLUSStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
// the whole telegram
// e.g. Thermostat -> all, telegram: 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
// 10 00 FF 00 01 A5 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
- EMS_Thermostat.curr_roomTemp = _toShort(EMS_OFFSET_RCPLUSStatusMessage_curr); // value is * 10
- EMS_Thermostat.setpoint_roomTemp = _toByte(EMS_OFFSET_RCPLUSStatusMessage_setpoint); // value is * 2
- EMS_Thermostat.day_mode = _bitRead(EMS_OFFSET_RCPLUSStatusMessage_mode, 1); // get day mode flag
- EMS_Thermostat.mode = _bitRead(EMS_OFFSET_RCPLUSStatusMessage_mode, 0); // bit 1, mode (auto=1 or manual=0)
+ EMS_Thermostat.hc[hc].curr_roomTemp = _toShort(EMS_OFFSET_RCPLUSStatusMessage_curr); // value is * 10
+ EMS_Thermostat.hc[hc].setpoint_roomTemp = _toByte(EMS_OFFSET_RCPLUSStatusMessage_setpoint); // value is * 2
+ EMS_Thermostat.hc[hc].day_mode = _bitRead(EMS_OFFSET_RCPLUSStatusMessage_mode, 1); // get day mode flag
+ EMS_Thermostat.hc[hc].mode = _bitRead(EMS_OFFSET_RCPLUSStatusMessage_mode, 0); // bit 1, mode (auto=1 or manual=0)
}
EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
@@ -1455,10 +1472,13 @@ void _process_RCPLUSStatusMode(_EMS_RxTelegram * EMS_RxTelegram) {
*/
void _process_JunkersStatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
if (EMS_RxTelegram->offset == 0) {
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC - 1; // use HC1
+ EMS_Thermostat.hc[hc].active = true;
+
// e.g. for FR10: 90 00 FF 00 00 6F 03 01 00 BE 00 BF
// e.g. for FW100: 90 00 FF 00 00 6F 03 02 00 D7 00 DA F3 34 00 C4
- EMS_Thermostat.curr_roomTemp = _toShort(EMS_OFFSET_JunkersStatusMessage_curr); // value is * 10
- EMS_Thermostat.setpoint_roomTemp = _toShort(EMS_OFFSET_JunkersStatusMessage_setpoint); // value is * 10
+ EMS_Thermostat.hc[hc].curr_roomTemp = _toShort(EMS_OFFSET_JunkersStatusMessage_curr); // value is * 10
+ EMS_Thermostat.hc[hc].setpoint_roomTemp = _toShort(EMS_OFFSET_JunkersStatusMessage_setpoint); // value is * 10
}
}
@@ -1471,18 +1491,20 @@ void _process_RCPLUSSetMessage(_EMS_RxTelegram * EMS_RxTelegram) {
return;
}
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC - 1; // use HC1
+ EMS_Thermostat.hc[hc].active = true;
+
// check for single values
// but ignore values of 0xFF, e.g. 10 00 FF 08 01 B9 FF
if ((EMS_RxTelegram->data_length == 1) && (_toByte(0) != 0xFF)) {
// check for setpoint temps, e.g. Thermostat -> all, type 0x01B9, telegram: 10 00 FF 08 01 B9 26 (CRC=1A) #data=1
-
if ((EMS_RxTelegram->offset == EMS_OFFSET_RCPLUSSet_temp_setpoint) || (EMS_RxTelegram->offset == EMS_OFFSET_RCPLUSSet_manual_setpoint)) {
- EMS_Thermostat.setpoint_roomTemp = _toByte(0); // value is * 2
- EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
+ EMS_Thermostat.hc[hc].setpoint_roomTemp = _toByte(0); // value is * 2
+ EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
// check for mode, eg. 10 00 FF 08 01 B9 FF
} else if (EMS_RxTelegram->offset == EMS_OFFSET_RCPLUSSet_mode) {
- EMS_Thermostat.mode = (_toByte(0) == 0xFF); // Auto = xFF, Manual = x00 (auto=1 or manual=0)
+ EMS_Thermostat.hc[hc].mode = (_toByte(0) == 0xFF); // Auto = xFF, Manual = x00 (auto=1 or manual=0)
EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
}
@@ -1491,10 +1513,10 @@ void _process_RCPLUSSetMessage(_EMS_RxTelegram * EMS_RxTelegram) {
// check for long broadcasts
if (EMS_RxTelegram->offset == 0) {
- EMS_Thermostat.mode = _toByte(EMS_OFFSET_RCPLUSSet_mode);
- EMS_Thermostat.daytemp = _toByte(EMS_OFFSET_RCPLUSSet_temp_comfort2); // is * 2
- EMS_Thermostat.nighttemp = _toByte(EMS_OFFSET_RCPLUSSet_temp_eco); // is * 2
- EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
+ EMS_Thermostat.hc[hc].mode = _toByte(EMS_OFFSET_RCPLUSSet_mode);
+ EMS_Thermostat.hc[hc].daytemp = _toByte(EMS_OFFSET_RCPLUSSet_temp_comfort2); // is * 2
+ EMS_Thermostat.hc[hc].nighttemp = _toByte(EMS_OFFSET_RCPLUSSet_temp_eco); // is * 2
+ EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
}
}
@@ -1511,7 +1533,10 @@ void _process_RC10Set(_EMS_RxTelegram * EMS_RxTelegram) {
* received only after requested
*/
void _process_RC20Set(_EMS_RxTelegram * EMS_RxTelegram) {
- EMS_Thermostat.mode = _toByte(EMS_OFFSET_RC20Set_mode);
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC - 1; // use HC1
+
+ EMS_Thermostat.hc[hc].active = true;
+ EMS_Thermostat.hc[hc].mode = _toByte(EMS_OFFSET_RC20Set_mode); // fixed for HC1
}
/**
@@ -1519,21 +1544,50 @@ void _process_RC20Set(_EMS_RxTelegram * EMS_RxTelegram) {
* received only after requested
*/
void _process_RC30Set(_EMS_RxTelegram * EMS_RxTelegram) {
- EMS_Thermostat.mode = _toByte(EMS_OFFSET_RC30Set_mode);
+ uint8_t hc = EMS_THERMOSTAT_DEFAULTHC - 1; // use HC1
+
+ EMS_Thermostat.hc[hc].active = true;
+ EMS_Thermostat.hc[hc].mode = _toByte(EMS_OFFSET_RC30Set_mode); // fixed for HC1
+}
+
+// return which heating circuit it is, 1-4
+uint8_t _getHeatingCircuit(_EMS_RxTelegram * EMS_RxTelegram) {
+ uint8_t hc_num;
+ switch (EMS_RxTelegram->type) {
+ case EMS_TYPE_RC35StatusMessage_HC1:
+ case EMS_TYPE_RC35Set_HC1:
+ default:
+ hc_num = 1;
+ break;
+ case EMS_TYPE_RC35StatusMessage_HC2:
+ case EMS_TYPE_RC35Set_HC2:
+ hc_num = 2;
+ break;
+ case EMS_TYPE_RC35StatusMessage_HC3:
+ case EMS_TYPE_RC35Set_HC3:
+ hc_num = 3;
+ break;
+ case EMS_TYPE_RC35StatusMessage_HC4:
+ case EMS_TYPE_RC35Set_HC4:
+ hc_num = 4;
+ break;
+ }
+
+ return (hc_num);
}
/**
- * type 0x3D and 0x47 - for reading the mode from the RC35 thermostat (0x10)
- * Working Mode Heating Circuit 1 & 2 (HC1, HC2)
+ * type 0x3D (HC1), 0x47 (HC2), 0x51 (HC3), 0x5B (HC4) - Working Mode Heating - for reading the mode from the RC35 thermostat (0x10)
* received only after requested
*/
void _process_RC35Set(_EMS_RxTelegram * EMS_RxTelegram) {
- EMS_Thermostat.mode = _toByte(EMS_OFFSET_RC35Set_mode);
+ uint8_t hc_num = _getHeatingCircuit(EMS_RxTelegram); // which HC is it?
- EMS_Thermostat.daytemp = _toByte(EMS_OFFSET_RC35Set_temp_day); // is * 2
- EMS_Thermostat.nighttemp = _toByte(EMS_OFFSET_RC35Set_temp_night); // is * 2
- EMS_Thermostat.holidaytemp = _toByte(EMS_OFFSET_RC35Set_temp_holiday); // is * 2
- EMS_Thermostat.heatingtype = _toByte(EMS_OFFSET_RC35Set_heatingtype); // byte 0 bit floor heating = 3 0x47
+ EMS_Thermostat.hc[hc_num].mode = _toByte(EMS_OFFSET_RC35Set_mode);
+ EMS_Thermostat.hc[hc_num].daytemp = _toByte(EMS_OFFSET_RC35Set_temp_day); // is * 2
+ EMS_Thermostat.hc[hc_num].nighttemp = _toByte(EMS_OFFSET_RC35Set_temp_night); // is * 2
+ EMS_Thermostat.hc[hc_num].holidaytemp = _toByte(EMS_OFFSET_RC35Set_temp_holiday); // is * 2
+ EMS_Thermostat.hc[hc_num].heatingtype = _toByte(EMS_OFFSET_RC35Set_heatingtype); // byte 0 bit floor heating = 3
EMS_Sys_Status.emsRefreshed = true; // triggers a send the values back via MQTT
}
@@ -1703,12 +1757,23 @@ void _process_RCTime(_EMS_RxTelegram * EMS_RxTelegram) {
return; // not supported
}
- EMS_Thermostat.hour = _toByte(2);
- EMS_Thermostat.minute = _toByte(4);
- EMS_Thermostat.second = _toByte(5);
- EMS_Thermostat.day = _toByte(3);
- EMS_Thermostat.month = _toByte(1);
- EMS_Thermostat.year = _toByte(0);
+ // render time to HH:MM:SS DD/MM/YYYY
+ char time_sp[25];
+ char buffer[4];
+
+ strlcpy(time_sp, _smallitoa(_toByte(2), buffer), sizeof(time_sp)); // hour
+ strlcat(time_sp, ":", sizeof(time_sp));
+ strlcat(time_sp, _smallitoa(_toByte(4), buffer), sizeof(time_sp)); // minute
+ strlcat(time_sp, ":", sizeof(time_sp));
+ strlcat(time_sp, _smallitoa(_toByte(5), buffer), sizeof(time_sp)); // second
+ strlcat(time_sp, " ", sizeof(time_sp));
+ strlcat(time_sp, _smallitoa(_toByte(3), buffer), sizeof(time_sp)); // day
+ strlcat(time_sp, "/", sizeof(time_sp));
+ strlcat(time_sp, _smallitoa(_toByte(1), buffer), sizeof(time_sp)); // month
+ strlcat(time_sp, "/", sizeof(time_sp));
+ strlcat(time_sp, itoa(_toByte(0) + 2000, buffer, 10), sizeof(time_sp)); // year
+
+ strlcpy(EMS_Thermostat.datetime, time_sp, sizeof(time_sp)); // store
}
/*
@@ -2027,7 +2092,7 @@ void ems_getThermostatValues() {
uint8_t model_id = EMS_Thermostat.model_id;
uint8_t device_id = EMS_Thermostat.device_id;
- uint8_t hc = EMS_Thermostat.hc;
+ uint8_t statusMsg, opMode;
switch (model_id) {
case EMS_MODEL_RC20:
@@ -2043,12 +2108,22 @@ void ems_getThermostatValues() {
break;
case EMS_MODEL_RC35:
case EMS_MODEL_ES73:
- if (hc == 1) {
- ems_doReadCommand(EMS_TYPE_RC35StatusMessage_HC1, device_id); // to get the temps
- ems_doReadCommand(EMS_TYPE_RC35Set_HC1, device_id); // to get the mode
- } else if (hc == 2) {
- ems_doReadCommand(EMS_TYPE_RC35StatusMessage_HC2, device_id); // to get the temps
- ems_doReadCommand(EMS_TYPE_RC35Set_HC2, device_id); // to get the mode
+ for (uint8_t hc_num = 1; hc_num <= EMS_THERMOSTAT_MAXHC; hc_num++) {
+ if (hc_num == 1) {
+ statusMsg = EMS_TYPE_RC35StatusMessage_HC1;
+ opMode = EMS_TYPE_RC35Set_HC1;
+ } else if (hc_num == 2) {
+ statusMsg = EMS_TYPE_RC35StatusMessage_HC2;
+ opMode = EMS_TYPE_RC35Set_HC2;
+ } else if (hc_num == 3) {
+ statusMsg = EMS_TYPE_RC35StatusMessage_HC3;
+ opMode = EMS_TYPE_RC35Set_HC3;
+ } else if (hc_num == 4) {
+ statusMsg = EMS_TYPE_RC35StatusMessage_HC4;
+ opMode = EMS_TYPE_RC35Set_HC4;
+ }
+ ems_doReadCommand(statusMsg, device_id); // to get the temps
+ ems_doReadCommand(opMode, device_id); // to get the mode
}
break;
case EMS_MODEL_RC300:
@@ -2482,13 +2557,13 @@ void ems_sendRawTelegram(char * telegram) {
* Set the temperature of the thermostat
* temptype 0 = normal, 1=night temp, 2=day temp, 3=holiday temp
*/
-void ems_setThermostatTemp(float temperature, uint8_t temptype) {
+void ems_setThermostatTemp(float temperature, uint8_t hc_num, uint8_t temptype) {
if (!ems_getThermostatEnabled()) {
return;
}
if (!EMS_Thermostat.write_supported) {
- myDebug_P(PSTR("Write not supported for this Thermostat model"));
+ myDebug_P(PSTR("Write not supported yet for this Thermostat model"));
return;
}
@@ -2498,12 +2573,11 @@ void ems_setThermostatTemp(float temperature, uint8_t temptype) {
uint8_t model_id = EMS_Thermostat.model_id;
uint8_t device_id = EMS_Thermostat.device_id;
- uint8_t hc = EMS_Thermostat.hc; // heating circuit
EMS_TxTelegram.action = EMS_TX_TELEGRAM_WRITE;
EMS_TxTelegram.dest = device_id;
- myDebug_P(PSTR("Setting new thermostat temperature"));
+ myDebug_P(PSTR("Setting new thermostat temperature for heating circuit %d"), hc_num);
if (model_id == EMS_MODEL_RC20) {
EMS_TxTelegram.type = EMS_TYPE_RC20Set;
@@ -2526,10 +2600,10 @@ void ems_setThermostatTemp(float temperature, uint8_t temptype) {
} else if (model_id == EMS_MODEL_RC300) {
EMS_TxTelegram.type = EMS_TYPE_RCPLUSSet; // for 3000 and 1010, e.g. 0B 10 FF (0A | 08) 01 89 2B
// check mode
- if (EMS_Thermostat.mode == 1) { // auto
- EMS_TxTelegram.offset = 0x08; // auto offset
- } else if (EMS_Thermostat.mode == 0) { // manuaL
- EMS_TxTelegram.offset = 0x0A; // manual offset
+ if (EMS_Thermostat.hc[hc_num].mode == 1) { // auto
+ EMS_TxTelegram.offset = 0x08; // auto offset
+ } else if (EMS_Thermostat.hc[hc_num].mode == 0) { // manuaL
+ EMS_TxTelegram.offset = 0x0A; // manual offset
}
// EMS_TxTelegram.type_validate = EMS_TYPE_RCPLUSStatusMessage; // validate by reading from a different telegram
EMS_TxTelegram.type_validate = EMS_ID_NONE; // validate by reading from a different telegram
@@ -2549,24 +2623,28 @@ void ems_setThermostatTemp(float temperature, uint8_t temptype) {
break;
default:
case 0: // automatic selection, if no type is defined, we use the standard code
- if (EMS_Thermostat.day_mode == 0) {
+ if (EMS_Thermostat.hc[hc_num].day_mode == 0) {
EMS_TxTelegram.offset = EMS_OFFSET_RC35Set_temp_night;
- } else if (EMS_Thermostat.day_mode == 1) {
+ } else if (EMS_Thermostat.hc[hc_num].day_mode == 1) {
EMS_TxTelegram.offset = EMS_OFFSET_RC35Set_temp_day;
}
break;
}
- if (hc == 1) {
- // heating circuit 1
+
+ if (hc_num == 1) {
EMS_TxTelegram.type = EMS_TYPE_RC35Set_HC1;
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC1;
- EMS_TxTelegram.type_validate = EMS_TxTelegram.type;
- } else {
- // heating circuit 2
+ } else if (hc_num == 2) {
EMS_TxTelegram.type = EMS_TYPE_RC35Set_HC2;
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC2;
- EMS_TxTelegram.type_validate = EMS_TxTelegram.type;
+ } else if (hc_num == 3) {
+ EMS_TxTelegram.type = EMS_TYPE_RC35Set_HC3;
+ EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC3;
+ } else if (hc_num == 4) {
+ EMS_TxTelegram.type = EMS_TYPE_RC35Set_HC4;
+ EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC4;
}
+ EMS_TxTelegram.type_validate = EMS_TxTelegram.type;
}
EMS_TxTelegram.length = EMS_MIN_TELEGRAM_LENGTH;
@@ -2583,7 +2661,7 @@ void ems_setThermostatTemp(float temperature, uint8_t temptype) {
* (0=low/night, 1=manual/day, 2=auto/clock), 0xA8 on a RC20 and 0xA7 on RC30
* 0x01B9 for EMS+ 300/1000/3000, Auto=0xFF Manual=0x00. See https://github.com/proddy/EMS-ESP/wiki/RC3xx-Thermostats
*/
-void ems_setThermostatMode(uint8_t mode) {
+void ems_setThermostatMode(uint8_t mode, uint8_t hc_num) {
if (!ems_getThermostatEnabled()) {
return;
}
@@ -2595,7 +2673,6 @@ void ems_setThermostatMode(uint8_t mode) {
uint8_t model_id = EMS_Thermostat.model_id;
uint8_t device_id = EMS_Thermostat.device_id;
- uint8_t hc = EMS_Thermostat.hc;
// RC300/1000/3000 have different settings
if (model_id == EMS_MODEL_RC300) {
@@ -2606,7 +2683,7 @@ void ems_setThermostatMode(uint8_t mode) {
}
}
- myDebug_P(PSTR("Setting thermostat mode to %d"), mode);
+ myDebug_P(PSTR("Setting thermostat mode to %d for heating circuit"), mode, hc_num);
_EMS_TxTelegram EMS_TxTelegram = EMS_TX_TELEGRAM_NEW; // create new Tx
EMS_TxTelegram.timestamp = millis(); // set timestamp
@@ -2631,14 +2708,21 @@ void ems_setThermostatMode(uint8_t mode) {
EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC30StatusMessage;
} else if ((model_id == EMS_MODEL_RC35) || (model_id == EMS_MODEL_ES73)) {
- EMS_TxTelegram.type = (hc == 2) ? EMS_TYPE_RC35Set_HC2 : EMS_TYPE_RC35Set_HC1;
+ if (hc_num == 1) {
+ EMS_TxTelegram.type = EMS_TYPE_RC35Set_HC1;
+ EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC1;
+ } else if (hc_num == 2) {
+ EMS_TxTelegram.type = EMS_TYPE_RC35Set_HC2;
+ EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC2;
+ } else if (hc_num == 3) {
+ EMS_TxTelegram.type = EMS_TYPE_RC35Set_HC3;
+ EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC3;
+ } else if (hc_num == 4) {
+ EMS_TxTelegram.type = EMS_TYPE_RC35Set_HC4;
+ EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC4;
+ }
EMS_TxTelegram.offset = EMS_OFFSET_RC35Set_mode;
EMS_TxTelegram.type_validate = EMS_TxTelegram.type;
- if (hc == 1) {
- EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC1;
- } else {
- EMS_TxTelegram.comparisonPostRead = EMS_TYPE_RC35StatusMessage_HC2;
- }
} else if (model_id == EMS_MODEL_RC300) {
EMS_TxTelegram.type = EMS_TYPE_RCPLUSSet; // for 3000 and 1010, e.g. 48 10 FF 00 01 B9 00 for manual
diff --git a/src/ems.h b/src/ems.h
index d1e5a12a0..2b8021043 100644
--- a/src/ems.h
+++ b/src/ems.h
@@ -81,16 +81,14 @@
#define EMS_ID_HP 0x38 // HeatPump
#define EMS_ID_GATEWAY 0x48 // KM200 Web Gateway
-#define EMS_PRODUCTID_HEATRONICS 95 // ProductID for a Junkers Heatronic3 device
+// Product IDs
+#define EMS_PRODUCTID_HEATRONICS 95 // Junkers Heatronic3 device
+#define EMS_PRODUCTID_SM10 73 // SM10 solar module
+#define EMS_PRODUCTID_SM100 163 // SM100 solar module
+#define EMS_PRODUCTID_ISM1 101 // Junkers ISM1 solar module
-#define EMS_PRODUCTID_SM10 73 // ProductID for SM10 solar module
-#define EMS_PRODUCTID_SM100 163 // ProductID for SM10 solar module
-#define EMS_PRODUCTID_ISM1 101 // ProductID for SM10 solar module
-
-#define EMS_MIN_TELEGRAM_LENGTH 6 // minimal length for a validation telegram, including CRC
-
-// max length of a telegram, including CRC, for Rx and Tx.
-#define EMS_MAX_TELEGRAM_LENGTH 32
+#define EMS_MIN_TELEGRAM_LENGTH 6 // minimal length for a validation telegram, including CRC
+#define EMS_MAX_TELEGRAM_LENGTH 32 // max length of a telegram, including CRC, for Rx and Tx.
// default values for null values
#define EMS_VALUE_INT_ON 1 // boolean true
@@ -100,6 +98,8 @@
#define EMS_VALUE_USHORT_NOTSET 0x8000 // for 2-byte unsigned shorts
#define EMS_VALUE_LONG_NOTSET 0xFFFFFF // for 3-byte longs
+#define EMS_THERMOSTAT_MAXHC 4 // max number of heating circuits
+#define EMS_THERMOSTAT_DEFAULTHC 1 // default heating circuit is 1
#define EMS_THERMOSTAT_WRITE_YES true
#define EMS_THERMOSTAT_WRITE_NO false
@@ -116,11 +116,11 @@
#define EMS_SYS_LOGGING_DEFAULT EMS_SYS_LOGGING_NONE
// define the model types which get rendered to html colors in the web interface
-#define EMS_MODELTYPE_BOILER 1 // success color
+#define EMS_MODELTYPE_BOILER 1 // success color
#define EMS_MODELTYPE_THERMOSTAT 2 // info color
-#define EMS_MODELTYPE_SM 3 // warning color
-#define EMS_MODELTYPE_HP 4 // success color
-#define EMS_MODELTYPE_OTHER 5 // no color
+#define EMS_MODELTYPE_SM 3 // warning color
+#define EMS_MODELTYPE_HP 4 // success color
+#define EMS_MODELTYPE_OTHER 5 // no color
/* EMS UART transfer status */
typedef enum {
@@ -273,7 +273,13 @@ typedef struct {
/*
* Telegram package defintions
*/
-typedef struct { // UBAParameterWW
+typedef struct {
+ // settings
+ uint8_t device_id; // this is typically always 0x08
+ uint8_t product_id;
+ char version[10];
+
+ // UBAParameterWW
uint8_t wWActivated; // Warm Water activated
uint8_t wWSelTemp; // Warm Water selected temperature
uint8_t wWCircPump; // Warm Water circulation pump Available
@@ -324,23 +330,19 @@ typedef struct { // UBAParameterWW
uint8_t tapwaterActive; // Hot tap water is on/off
uint8_t heatingActive; // Central heating is on/off
- // settings
- char version[10];
- uint8_t device_id; // this is typically always 0x08
- uint8_t product_id;
} _EMS_Boiler;
/*
* Telegram package defintions for Other EMS devices
*/
-
typedef struct {
- uint8_t HPModulation; // heatpump modulation in %
- uint8_t HPSpeed; // speed 0-100 %
- uint8_t device_id; // the device ID of the Heat Pump (e.g. 0x30)
- uint8_t model_id; // Solar Module / Heat Pump model (e.g. 3 > EMS_MODEL_OTHER )
+ uint8_t device_id; // the device ID of the Heat Pump (e.g. 0x30)
+ uint8_t model_id; // Solar Module / Heat Pump model
uint8_t product_id;
char version[10];
+
+ uint8_t HPModulation; // heatpump modulation in %
+ uint8_t HPSpeed; // speed 0-100 %
} _EMS_HeatPump;
typedef struct {
@@ -352,6 +354,11 @@ typedef struct {
// SM Solar Module - SM10/SM100/ISM1
typedef struct {
+ uint8_t device_id; // the device ID of the Solar Module
+ uint8_t model_id; // Solar Module
+ uint8_t product_id;
+ char version[10];
+
int16_t collectorTemp; // collector temp
int16_t bottomTemp; // bottom temp
uint8_t pumpModulation; // modulation solar pump
@@ -361,35 +368,35 @@ typedef struct {
uint16_t EnergyToday;
uint16_t EnergyTotal;
uint32_t pumpWorkMin; // Total solar pump operating time
- uint8_t device_id; // the device ID of the Solar Module
- uint8_t model_id; // Solar Module
- uint8_t product_id;
- char version[10];
} _EMS_SolarModule;
+// heating circuit
+typedef struct {
+ uint8_t hc; // heating circuit 1,2, 3 or 4
+ bool active; // true if there is data for this HC
+ int16_t setpoint_roomTemp; // current set temp
+ int16_t curr_roomTemp; // current room temp
+ uint8_t mode; // 0=low, 1=manual, 2=auto
+ bool day_mode; // 0=night, 1=day
+ uint8_t daytemp;
+ uint8_t nighttemp;
+ uint8_t holidaytemp;
+ uint8_t heatingtype; // type of heating: 1 radiator, 2 convectors, 3 floors, 4 room supply
+ uint8_t circuitcalctemp; // calculated setpoint flow temperature
+} _EMS_Thermostat_HC;
+
// Thermostat data
typedef struct {
uint8_t device_id; // the device ID of the thermostat
uint8_t model_id; // thermostat model
uint8_t product_id;
- bool write_supported;
- uint8_t hc; // heating circuit 1 or 2
char version[10];
- int16_t setpoint_roomTemp; // current set temp
- int16_t curr_roomTemp; // current room temp
- uint8_t mode; // 0=low, 1=manual, 2=auto
- bool day_mode; // 0=night, 1=day
- uint8_t hour;
- uint8_t minute;
- uint8_t second;
- uint8_t day;
- uint8_t month;
- uint8_t year;
- uint8_t daytemp;
- uint8_t nighttemp;
- uint8_t holidaytemp;
- uint8_t heatingtype;
- uint8_t circuitcalctemp;
+
+ char datetime[25]; // HH:MM:SS DD/MM/YYYY
+ bool write_supported;
+
+ _EMS_Thermostat_HC hc[EMS_THERMOSTAT_MAXHC - 1]; // array for the 4 heating circuits
+
} _EMS_Thermostat;
// call back function signature for processing telegram types
@@ -419,9 +426,8 @@ void ems_startupTelegrams();
bool ems_checkEMSBUSAlive();
void ems_clearDeviceList();
-void ems_setThermostatTemp(float temperature, uint8_t temptype = 0);
-void ems_setThermostatMode(uint8_t mode);
-void ems_setThermostatHC(uint8_t hc);
+void ems_setThermostatTemp(float temperature, uint8_t hc, uint8_t temptype = 0);
+void ems_setThermostatMode(uint8_t mode, uint8_t hc);
void ems_setWarmWaterTemp(uint8_t temperature);
void ems_setFlowTemp(uint8_t temperature);
void ems_setWarmWaterActivated(bool activated);
@@ -432,9 +438,10 @@ void ems_setEmsRefreshed(bool b);
void ems_setWarmWaterModeComfort(uint8_t comfort);
void ems_setModels();
void ems_setTxDisabled(bool b);
-bool ems_getTxDisabled();
void ems_setTxMode(uint8_t mode);
+uint8_t _getHeatingCircuit(_EMS_RxTelegram * EMS_RxTelegram);
+
char * ems_getThermostatDescription(char * buffer, bool name_only = false);
char * ems_getBoilerDescription(char * buffer, bool name_only = false);
char * ems_getSolarModuleDescription(char * buffer, bool name_only = false);
@@ -456,6 +463,8 @@ uint8_t ems_getSolarModuleModel();
void ems_discoverModels();
bool ems_getTxCapable();
uint32_t ems_getPollFrequency();
+bool ems_getTxDisabled();
+
// private functions
uint8_t _crcCalculator(uint8_t * data, uint8_t len);
diff --git a/src/ems_devices.h b/src/ems_devices.h
index 85273de02..af34e0f9b 100644
--- a/src/ems_devices.h
+++ b/src/ems_devices.h
@@ -91,12 +91,18 @@
// RC35 specific
#define EMS_TYPE_RC35StatusMessage_HC1 0x3E // is an automatic thermostat broadcast giving us temps on HC1
#define EMS_TYPE_RC35StatusMessage_HC2 0x48 // is an automatic thermostat broadcast giving us temps on HC2
+#define EMS_TYPE_RC35StatusMessage_HC3 0x52 // is an automatic thermostat broadcast giving us temps on HC3
+#define EMS_TYPE_RC35StatusMessage_HC4 0x5C // is an automatic thermostat broadcast giving us temps on HC4
+
#define EMS_OFFSET_RC35StatusMessage_setpoint 2 // desired temp
#define EMS_OFFSET_RC35StatusMessage_curr 3 // current temp
#define EMS_OFFSET_RC35StatusMessage_mode 1 //day mode
#define EMS_TYPE_RC35Set_HC1 0x3D // for setting values like temp and mode (Working mode HC1)
#define EMS_TYPE_RC35Set_HC2 0x47 // for setting values like temp and mode (Working mode HC2)
+#define EMS_TYPE_RC35Set_HC3 0x51 // for setting values like temp and mode (Working mode HC3)
+#define EMS_TYPE_RC35Set_HC4 0x5B // for setting values like temp and mode (Working mode HC4)
+
#define EMS_OFFSET_RC35Set_mode 7 // position of thermostat mode
#define EMS_OFFSET_RC35Set_temp_day 2 // position of thermostat setpoint temperature for day time
#define EMS_OFFSET_RC35Set_temp_night 1 // position of thermostat setpoint temperature for night time
From 4b59d34a3aa112e828db753c6b548b29541251fa Mon Sep 17 00:00:00 2001
From: proddy
Date: Sun, 8 Sep 2019 09:41:36 +0200
Subject: [PATCH 08/92] typo with eeprom_rotate library
---
platformio.ini-example | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/platformio.ini-example b/platformio.ini-example
index b3c2b21f8..6ba3863f9 100644
--- a/platformio.ini-example
+++ b/platformio.ini-example
@@ -21,7 +21,7 @@ lib_deps =
JustWifi
AsyncMqttClient
ArduinoJson
- EEPROM_rotate
+ EEPROM_Rotate
ESP Async WebServer
ESPAsyncTCP
ESPAsyncUDP
From 3f9a3bfc64284389dc88a7776b73992d05bef6a6 Mon Sep 17 00:00:00 2001
From: proddy
Date: Thu, 12 Sep 2019 17:57:41 +0530
Subject: [PATCH 09/92] https://github.com/proddy/EMS-ESP/issues/180
---
CHANGELOG.md | 6 +++++-
src/ems.cpp | 12 +++++++++---
src/version.h | 2 +-
3 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6aa93839b..5b67d5507 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,11 +5,15 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## [1.9.1 beta] 2019-09-07
+## [1.9.1 beta] 2019-09-12
### Added
- Support for multiple Heating Circuits (RC35 only for now and writing via telnet) - https://github.com/proddy/EMS-ESP/issues/162
+
+### Fixed
+
+- fixed zero values (0.0) for setpoint temperature with the RC35 thermostat when in Auto mode - https://github.com/proddy/EMS-ESP/issues/180
### Removed
diff --git a/src/ems.cpp b/src/ems.cpp
index b8f5b03d7..d26010d2e 100644
--- a/src/ems.cpp
+++ b/src/ems.cpp
@@ -1390,14 +1390,20 @@ void _process_RC30StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
void _process_RC35StatusMessage(_EMS_RxTelegram * EMS_RxTelegram) {
uint8_t hc_num = _getHeatingCircuit(EMS_RxTelegram); // which HC is it?
- EMS_Thermostat.hc[hc_num].setpoint_roomTemp = _toByte(EMS_OFFSET_RC35StatusMessage_setpoint); // is * 2
+ // check if setpoint temp sensor is unavailable
+ if (EMS_RxTelegram->data[EMS_OFFSET_RC35StatusMessage_setpoint] == 0x7D) {
+ EMS_Thermostat.hc[hc_num].setpoint_roomTemp = EMS_VALUE_SHORT_NOTSET;
+ } else {
+ EMS_Thermostat.hc[hc_num].setpoint_roomTemp = _toShort(EMS_OFFSET_RC35StatusMessage_setpoint); // is * 2
+ }
- // check if temp sensor is unavailable
- if (EMS_RxTelegram->data[3] == 0x7D) {
+ // check if current temp sensor is unavailable
+ if (EMS_RxTelegram->data[EMS_OFFSET_RC35StatusMessage_curr] == 0x7D) {
EMS_Thermostat.hc[hc_num].curr_roomTemp = EMS_VALUE_SHORT_NOTSET;
} else {
EMS_Thermostat.hc[hc_num].curr_roomTemp = _toShort(EMS_OFFSET_RC35StatusMessage_curr);
}
+
EMS_Thermostat.hc[hc_num].day_mode = _bitRead(EMS_OFFSET_RC35StatusMessage_mode, 1); // get day mode flag
EMS_Thermostat.hc[hc_num].circuitcalctemp = _toByte(EMS_OFFSET_RC35Set_circuitcalctemp); // 0x48 calculated temperature
diff --git a/src/version.h b/src/version.h
index c108e9995..ba0aba749 100644
--- a/src/version.h
+++ b/src/version.h
@@ -1 +1 @@
-#define APP_VERSION "1.9.1b1"
+#define APP_VERSION "1.9.1b2"
From b709b469fdd33fc9337cf0e74c3768c593a3d771 Mon Sep 17 00:00:00 2001
From: Paul
Date: Sat, 14 Sep 2019 10:28:51 +0200
Subject: [PATCH 10/92] show mqtt subscriptions in mqttlog command
---
src/MyESP.cpp | 56 +++++++++++++++++++++++++++++++++++----------------
src/MyESP.h | 18 +++++++++--------
2 files changed, 49 insertions(+), 25 deletions(-)
diff --git a/src/MyESP.cpp b/src/MyESP.cpp
index 55f47144f..178c17c05 100644
--- a/src/MyESP.cpp
+++ b/src/MyESP.cpp
@@ -95,8 +95,7 @@ MyESP::MyESP() {
_systemStable = true;
// ntp
- _ntp_server = strdup(MYESP_NTP_SERVER);
- ;
+ _ntp_server = strdup(MYESP_NTP_SERVER);
_ntp_interval = 60;
_ntp_enabled = false;
@@ -105,6 +104,7 @@ MyESP::MyESP() {
// MQTT log
for (uint8_t i = 0; i < MYESP_MQTTLOG_MAX; i++) {
+ MQTT_log[i].type = 0;
MQTT_log[i].timestamp = 0;
MQTT_log[i].topic = nullptr;
MQTT_log[i].payload = nullptr;
@@ -353,16 +353,21 @@ void MyESP::_mqttOnMessage(char * topic, char * payload, size_t len) {
// MQTT subscribe
void MyESP::mqttSubscribe(const char * topic) {
if (mqttClient.connected() && (strlen(topic) > 0)) {
- unsigned int packetId = mqttClient.subscribe(_mqttTopic(topic), _mqtt_qos);
- myDebug_P(PSTR("[MQTT] Subscribing to %s (PID %d)"), _mqttTopic(topic), packetId);
+ char topic_s[MQTT_MAX_TOPIC_SIZE];
+ strlcpy(topic_s, _mqttTopic(topic), sizeof(topic_s));
+ (void)mqttClient.subscribe(topic_s, _mqtt_qos);
+ myDebug_P(PSTR("[MQTT] Subscribing to %s"), topic_s);
+
+ // add to mqtt log
+ _addMQTTLog(topic_s, "", 2); // type of 2 means Subscribe. Has an empty payload for now XXX
}
}
// MQTT unsubscribe
void MyESP::mqttUnsubscribe(const char * topic) {
if (mqttClient.connected() && (strlen(topic) > 0)) {
- unsigned int packetId = mqttClient.unsubscribe(_mqttTopic(topic));
- myDebug_P(PSTR("[MQTT] Unsubscribing to %s (PID %d)"), _mqttTopic(topic), packetId);
+ (void)mqttClient.unsubscribe(_mqttTopic(topic));
+ myDebug_P(PSTR("[MQTT] Unsubscribing to %s"), _mqttTopic(topic));
}
}
@@ -371,7 +376,7 @@ void MyESP::mqttPublish(const char * topic, const char * payload) {
// myDebug_P(PSTR("[MQTT] Sending pubish to %s with payload %s"), _mqttTopic(topic), payload); // for debugging
mqttClient.publish(_mqttTopic(topic), _mqtt_qos, _mqtt_retain, payload);
- _addMQTTLog(topic, payload); // add to the log
+ _addMQTTLog(topic, payload, 1); // add to the log, using type of 1 for Publish
}
// MQTT onConnect - when a connect is established
@@ -626,7 +631,7 @@ void MyESP::_consoleShowHelp() {
// see if a char * string is empty. It could not be initialized yet.
// return true if there is a value
bool MyESP::_hasValue(char * s) {
- if (s == nullptr) {
+ if ((s == nullptr) || (strlen(s) == 0)) {
return false;
}
return (s[0] != '\0');
@@ -2464,8 +2469,9 @@ void MyESP::_sendStatus() {
// create MQTT log
JsonArray list = root.createNestedArray("mqttlog");
+ // only send Publish
for (uint8_t i = 0; i < MYESP_MQTTLOG_MAX; i++) {
- if (MQTT_log[i].topic != nullptr) {
+ if ((MQTT_log[i].type == 1) && (MQTT_log[i].topic != nullptr)) {
JsonObject item = list.createNestedObject();
item["topic"] = MQTT_log[i].topic;
item["payload"] = MQTT_log[i].payload;
@@ -2639,10 +2645,24 @@ void MyESP::_printHeap(const char * s) {
// print MQTT log - everything that was published last per topic
void MyESP::_printMQTTLog() {
myDebug_P(PSTR("MQTT publish log:"));
+ uint8_t i;
- for (uint8_t i = 0; i < MYESP_MQTTLOG_MAX; i++) {
- if (MQTT_log[i].topic != nullptr) {
- myDebug_P(PSTR("(%d) [%lu] Topic:%s Payload:%s"), i, MQTT_log[i].timestamp, MQTT_log[i].topic, MQTT_log[i].payload);
+ for (i = 0; i < MYESP_MQTTLOG_MAX; i++) {
+ if ((MQTT_log[i].topic != nullptr) && (MQTT_log[i].type == 1)) {
+ myDebug_P(PSTR(" Topic:%s Payload:%s"), MQTT_log[i].topic, MQTT_log[i].payload);
+ }
+ }
+
+ myDebug_P(PSTR("")); // newline
+ myDebug_P(PSTR("MQTT subscribe log:"));
+
+ for (i = 0; i < MYESP_MQTTLOG_MAX; i++) {
+ if ((MQTT_log[i].topic != nullptr) && (MQTT_log[i].type == 2)) {
+ if (_hasValue(MQTT_log[i].payload)) {
+ myDebug_P(PSTR(" Topic:%s Last Payload:%s"), MQTT_log[i].topic, MQTT_log[i].payload);
+ } else {
+ myDebug_P(PSTR(" Topic:%s"), MQTT_log[i].topic);
+ }
}
}
@@ -2650,16 +2670,18 @@ void MyESP::_printMQTTLog() {
}
// add an MQTT log entry to our buffer
-void MyESP::_addMQTTLog(const char * topic, const char * payload) {
+// type 0=none, 1=publish, 2=subscribe
+void MyESP::_addMQTTLog(const char * topic, const char * payload, const uint8_t type) {
static uint8_t logCount = 0;
uint8_t logPointer = 0;
bool found = false;
- // myDebug("Publish [#%d] %s (%d) %s (%d)", logCount, topic, strlen(topic), payload, strlen(payload)); // for debugging
+ // myDebug("_addMQTTLog [#%d] %s (%d) [%s] (%d)", logCount, topic, strlen(topic), payload, strlen(payload)); // for debugging
// find the topic
+ // topics must be unique for either publish or subscribe
while ((logPointer < MYESP_MQTTLOG_MAX) && (_hasValue(MQTT_log[logPointer].topic))) {
- if (strcmp(MQTT_log[logPointer].topic, topic) == 0) {
+ if ((strcmp(MQTT_log[logPointer].topic, topic) == 0) && (MQTT_log[logPointer].type == type)) {
found = true;
break;
}
@@ -2678,12 +2700,12 @@ void MyESP::_addMQTTLog(const char * topic, const char * payload) {
if (MQTT_log[logPointer].topic) {
free(MQTT_log[logPointer].topic);
}
-
if (MQTT_log[logPointer].payload) {
free(MQTT_log[logPointer].payload);
}
- // add new record
+ // and add new record
+ MQTT_log[logPointer].type = type; // 0=none, 1=publish, 2=subscribe
MQTT_log[logPointer].topic = strdup(topic);
MQTT_log[logPointer].payload = strdup(payload);
MQTT_log[logPointer].timestamp = now();
diff --git a/src/MyESP.h b/src/MyESP.h
index eaf3d3993..b962d042f 100644
--- a/src/MyESP.h
+++ b/src/MyESP.h
@@ -9,7 +9,7 @@
#ifndef MyESP_h
#define MyESP_h
-#define MYESP_VERSION "1.2.0"
+#define MYESP_VERSION "1.2.1"
#include
#include
@@ -87,7 +87,7 @@ extern struct rst_info resetInfo;
#define MQTT_MAX_PAYLOAD_SIZE 500 // max size of a JSON object. See https://arduinojson.org/v6/assistant/
#define MQTT_MAX_PAYLOAD_SIZE_LARGE 2000 // max size of a large JSON object, like for sending MQTT log
#define MYESP_JSON_MAXSIZE 2000 // for large Dynamic json files
-#define MYESP_MQTTLOG_MAX 20 // max number of log entries for MQTT publishes
+#define MYESP_MQTTLOG_MAX 40 // max number of log entries for MQTT publishes and subscribes
#define MYESP_JSON_LOG_MAXSIZE 300 // max size of an JSON log entry
// Internal MQTT events
@@ -212,9 +212,10 @@ typedef enum {
// for storing all MQTT publish messages
typedef struct {
- char * topic;
- char * payload;
- time_t timestamp;
+ uint8_t type; // 0=none, 1=publish, 2=subscribe
+ char * topic;
+ char * payload;
+ time_t timestamp;
} _MQTT_Log;
typedef std::function mqtt_callback_f;
@@ -317,9 +318,10 @@ class MyESP {
char * _mqttTopic(const char * topic);
// mqtt log
- _MQTT_Log MQTT_log[MYESP_MQTTLOG_MAX]; // log for publish messages
- void _printMQTTLog();
- void _addMQTTLog(const char * topic, const char * payload);
+ _MQTT_Log MQTT_log[MYESP_MQTTLOG_MAX]; // log for publish and subscribe messages
+
+ void _printMQTTLog();
+ void _addMQTTLog(const char * topic, const char * payload, const uint8_t type);
AsyncMqttClient mqttClient; // the MQTT class
uint32_t _mqtt_reconnect_delay;
From ca65ac0677c359af18a97ee9ee6b9d799a9700b1 Mon Sep 17 00:00:00 2001
From: Paul
Date: Sat, 14 Sep 2019 10:35:47 +0200
Subject: [PATCH 11/92] remove heating_circuit
---
CHANGELOG.md | 1 +
src/MyESP.cpp | 2 +-
src/custom.htm | 13 -------------
src/custom.js | 7 ++-----
src/ems-esp.cpp | 1 -
tools/wsemulator/wserver.js | 1 -
6 files changed, 4 insertions(+), 21 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5b67d5507..9f502f925 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Support for multiple Heating Circuits (RC35 only for now and writing via telnet) - https://github.com/proddy/EMS-ESP/issues/162
+- mqttlog command also shows which MQTT topics it is subscribed too
### Fixed
diff --git a/src/MyESP.cpp b/src/MyESP.cpp
index 178c17c05..f94fedecd 100644
--- a/src/MyESP.cpp
+++ b/src/MyESP.cpp
@@ -359,7 +359,7 @@ void MyESP::mqttSubscribe(const char * topic) {
myDebug_P(PSTR("[MQTT] Subscribing to %s"), topic_s);
// add to mqtt log
- _addMQTTLog(topic_s, "", 2); // type of 2 means Subscribe. Has an empty payload for now XXX
+ _addMQTTLog(topic_s, "", 2); // type of 2 means Subscribe. Has an empty payload for now
}
}
diff --git a/src/custom.htm b/src/custom.htm
index 01ddd4aed..a875c89c1 100644
--- a/src/custom.htm
+++ b/src/custom.htm
@@ -122,19 +122,6 @@
-
-
-
-
-
-
-