|
1216 | 1216 | if (objects[_adapter] && objects[_adapter].common && objects[_adapter].common.subscribable) {
|
1217 | 1217 | var alive = 'system.adapter.' + a + '.alive';
|
1218 | 1218 | adapterSubs[alive] = adapterSubs[alive] || [];
|
1219 |
| - adapterSubs[alive].push(pattern.id); |
1220 |
| - adapter.sendTo(a, 'subscribe', pattern.id); |
| 1219 | + |
| 1220 | + var subExists = adapterSubs[alive].filter(function(sub){ |
| 1221 | + return sub === pattern.id; |
| 1222 | + }).length > 0; |
| 1223 | + |
| 1224 | + if (!subExists) { |
| 1225 | + adapterSubs[alive].push(pattern.id); |
| 1226 | + adapter.sendTo(a, 'subscribe', pattern.id); |
| 1227 | + } |
1221 | 1228 | }
|
1222 | 1229 | }
|
1223 | 1230 |
|
|
1249 | 1256 | }
|
1250 | 1257 | },
|
1251 | 1258 | adapterUnsubscribe: function (id) {
|
1252 |
| - if (typeof id !== 'string') { |
1253 |
| - adapter.log.error('adapterSubscribe: invalid type of id' + typeof id); |
1254 |
| - return; |
1255 |
| - } |
1256 |
| - var parts = id.split('.'); |
1257 |
| - var _adapter = 'system.adapter.' + parts[0] + '.' + parts[1]; |
1258 |
| - if (objects[_adapter] && objects[_adapter].common && objects[_adapter].common.subscribable) { |
1259 |
| - var a = parts[0] + '.' + parts[1]; |
1260 |
| - var alive = 'system.adapter.' + a + '.alive'; |
1261 |
| - if (adapterSubs[alive]) { |
1262 |
| - var pos = adapterSubs[alive].indexOf(id); |
1263 |
| - if (pos != -1) adapterSubs[alive].splice(pos, 1); |
1264 |
| - if (!adapterSubs[alive].length) delete adapterSubs[alive]; |
1265 |
| - } |
1266 |
| - adapter.sendTo(a, 'unsubscribe', id); |
1267 |
| - } |
| 1259 | + unsubscribe(id); |
| 1260 | + // if (typeof id !== 'string') { |
| 1261 | + // adapter.log.error('adapterSubscribe: invalid type of id' + typeof id); |
| 1262 | + // return; |
| 1263 | + // } |
| 1264 | + // var parts = id.split('.'); |
| 1265 | + // var _adapter = 'system.adapter.' + parts[0] + '.' + parts[1]; |
| 1266 | + // if (objects[_adapter] && objects[_adapter].common && objects[_adapter].common.subscribable) { |
| 1267 | + // var a = parts[0] + '.' + parts[1]; |
| 1268 | + // var alive = 'system.adapter.' + a + '.alive'; |
| 1269 | + // if (adapterSubs[alive]) { |
| 1270 | + // var pos = adapterSubs[alive].indexOf(id); |
| 1271 | + // if (pos != -1) adapterSubs[alive].splice(pos, 1); |
| 1272 | + // if (!adapterSubs[alive].length) delete adapterSubs[alive]; |
| 1273 | + // } |
| 1274 | + // adapter.sendTo(a, 'unsubscribe', id); |
| 1275 | + // } |
1268 | 1276 | },
|
1269 | 1277 | unsubscribe: function (idOrObject) {
|
1270 | 1278 | var i;
|
|
1738 | 1746 | }
|
1739 | 1747 | };
|
1740 | 1748 | },
|
| 1749 | + |
1741 | 1750 | formatValue: function (value, decimals, format) {
|
1742 | 1751 | if (!format && objects['system.config']) {
|
1743 | 1752 | format = objects['system.config'].common.isFloatComma ? '.,' : ',.';
|
1744 | 1753 | }
|
1745 | 1754 | return adapter.formatValue(value, decimals, format);
|
1746 | 1755 | },
|
| 1756 | + |
1747 | 1757 | formatDate: function (date, format) {
|
1748 | 1758 | if (!format) {
|
1749 | 1759 | format = objects['system.config'] ? (objects['system.config'].common.dateFormat || 'DD.MM.YYYY') : 'DD.MM.YYYY';
|
1750 | 1760 | }
|
1751 | 1761 |
|
1752 | 1762 | return adapter.formatDate(date, format);
|
1753 | 1763 | },
|
| 1764 | + |
1754 | 1765 | writeFile: function (fileName, data, callback) {
|
1755 | 1766 | adapter.writeFile(null, fileName, data, callback);
|
1756 | 1767 | },
|
1757 | 1768 | readFile: function (fileName, callback) {
|
1758 | 1769 | adapter.readFile(null, fileName, callback);
|
1759 | 1770 | },
|
1760 |
| - getHistory: function (instance, options, callback) { |
| 1771 | + getHistory: function (instance, options, callback) { |
1761 | 1772 | if (typeof instance === 'object') {
|
1762 | 1773 | callback = options;
|
1763 | 1774 | options = instance;
|
|
1881 | 1892 | }
|
1882 | 1893 | }
|
1883 | 1894 |
|
| 1895 | + function unsubscribe(id) { |
| 1896 | + if (typeof id !== 'string') { |
| 1897 | + adapter.log.error('adapterSubscribe: invalid type of id' + typeof id); |
| 1898 | + return; |
| 1899 | + } |
| 1900 | + var parts = id.split('.'); |
| 1901 | + var _adapter = 'system.adapter.' + parts[0] + '.' + parts[1]; |
| 1902 | + if (objects[_adapter] && objects[_adapter].common && objects[_adapter].common.subscribable) { |
| 1903 | + var a = parts[0] + '.' + parts[1]; |
| 1904 | + var alive = 'system.adapter.' + a + '.alive'; |
| 1905 | + if (adapterSubs[alive]) { |
| 1906 | + var pos = adapterSubs[alive].indexOf(id); |
| 1907 | + if (pos != -1) adapterSubs[alive].splice(pos, 1); |
| 1908 | + if (!adapterSubs[alive].length) delete adapterSubs[alive]; |
| 1909 | + } |
| 1910 | + adapter.sendTo(a, 'unsubscribe', id); |
| 1911 | + } |
| 1912 | + } |
| 1913 | + |
| 1914 | + |
1884 | 1915 | function stop(name, callback) {
|
1885 | 1916 | adapter.log.info('Stop script ' + name);
|
1886 | 1917 |
|
|
1891 | 1922 | isEnums = false;
|
1892 | 1923 | for (var i = subscriptions.length - 1; i >= 0 ; i--) {
|
1893 | 1924 | if (subscriptions[i].name == name) {
|
1894 |
| - subscriptions.splice(i, 1); |
| 1925 | + var sub = subscriptions.splice(i, 1)[0]; |
| 1926 | + if (sub) { |
| 1927 | + unsubscribe(sub.pattern.id); |
| 1928 | + } |
1895 | 1929 | } else {
|
1896 | 1930 | if (!isEnums && subscriptions[i].pattern.enumName || subscriptions[i].pattern.enumId) isEnums = true;
|
1897 | 1931 | }
|
|
0 commit comments