Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var http = require('http');
  2. var xpath = require('xpath');
  3. var dom = require('xmldom').DOMParser;
  4.  
  5. var stiebeleltronIP = 'Your IP address of the ISG';
  6.  
  7.  
  8. createState('stiebeleltron.prozess.VERDAMPFERTEMPERATUR', 0, {
  9.     read: true,
  10.     write: false,
  11.     name: "VERDAMPFERTEMPERATUR",
  12.     type: "number",
  13.     unit: "°C",
  14.     role: "value.temperature"
  15. });
  16. createState('stiebeleltron.prozess.VERFLUESSIGERTEMP', 0, {
  17.     read: true,
  18.     write: false,
  19.     name: "VERFLUESSIGERTEMP",
  20.     type: "number",
  21.     unit: "°C",
  22.     role: "value.temperature"
  23. });
  24.  
  25. createState('stiebeleltron.prozess.FORTLUFT_IST_LUEFTERDREHZAHL', 0, {
  26.     read: true,
  27.     write: false,
  28.     name: "FORTLUFT Wärmepumpe IST LÜFTERDREHZAHL",
  29.     type: "number",
  30.     unit: "Hz"
  31. });
  32. createState('stiebeleltron.prozess.FORTLUFT_SOLL_VOLUMENSTROM', 0, {
  33.     read: true,
  34.     write: false,
  35.     name: "Fortluft SOLL Volumenstrom",
  36.     type: "number",
  37.     unit: "%",
  38.     role: "value"
  39. });
  40. createState('stiebeleltron.prozess.HEISSGASTEMPERATUR', 0, {
  41.     read: true,
  42.     write: false,
  43.     name: "HEISSGASTEMPERATUR",
  44.     type: "number",
  45.     unit: "°C",
  46.     role: "value.temperature"
  47. });
  48.  
  49. createState('stiebeleltron.prozess.NIEDERDRUCK', 0, {
  50.     read: true,
  51.     write: false,
  52.     name: "NIEDERDRUCK",
  53.     type: "number",
  54.     unit: "bar"
  55. });
  56.  
  57. createState('stiebeleltron.prozess.HOCHDRUCK', 0, {
  58.     read: true,
  59.     write: false,
  60.     name: "HOCHDRUCK",
  61.     type: "number",
  62.     unit: "bar"
  63. });
  64. createState('stiebeleltron.prozess.POSITION_VENTIL');
  65.  
  66. createState('stiebeleltron.laufzeit.HEIZEN');
  67. createState('stiebeleltron.laufzeit.WARMWASSER');
  68. createState('stiebeleltron.laufzeit.NHZ_1');
  69. createState('stiebeleltron.laufzeit.NHZ_2');
  70.  
  71. createState('stiebeleltron.waermemenge.HEIZEN_TAG');
  72. createState('stiebeleltron.waermemenge.HEIZEN_SUMME');
  73. createState('stiebeleltron.waermemenge.WARMWASSER_TAG');
  74. createState('stiebeleltron.waermemenge.WARMWASSER_SUMME');
  75. createState('stiebeleltron.waermemenge.NHZ_HEIZEN_SUMME');
  76. createState('stiebeleltron.waermemenge.NHZ_WW_SUMME');
  77.  
  78. createState('stiebeleltron.verbrauch.HEIZEN_TAG');
  79. createState('stiebeleltron.verbrauch.HEIZEN_SUMME');
  80. createState('stiebeleltron.verbrauch.WARMWASSER_TAG');        
  81. createState('stiebeleltron.verbrauch.WARMWASSER_SUMME');
  82. createState('stiebeleltron.verbrauch.GESAMT_TAG');
  83. createState('stiebeleltron.verbrauch.GESAMT_SUMME');
  84.  
  85. createState('stiebeleltron.anlage.RAUM_SOLLTEMPERATUR', 0, {
  86.     read: true,
  87.     write: false,
  88.     name: "Raum Soll Temperatur",
  89.     type: "number",
  90.     unit: "°C",
  91.     role: "value.temperature"
  92. });
  93. createState('stiebeleltron.anlage.WARMWASSER_SOLLTEMPERATUR', 0, {
  94.     read: true,
  95.     write: false,
  96.     name: "Warmwasser Ist Temperatur",
  97.     type: "number",
  98.     unit: "°C",
  99.     role: "value.temperature"
  100. });
  101. createState('stiebeleltron.anlage.WARMWASSER_ISTTEMPERATUR', 0, {
  102.     read: true,
  103.     write: false,
  104.     name: "Warmwasser Ist Temperatur",
  105.     type: "number",
  106.     unit: "°C",
  107.     role: "value.temperature"
  108. });
  109. createState('stiebeleltron.anlage.ZULUFT_DREHZAHL', 0, {
  110.     read: true,
  111.     write: false,
  112.     name: "ZULUFT IST LÜFTERDREHZAHL",
  113.     type: "number",
  114.     unit: "Hz"
  115. });
  116. createState('stiebeleltron.anlage.ZULUFT_VOLUMENSTROM', 0, {
  117.     read: true,
  118.     write: false,
  119.     name: "ZULUFT IST VOLUMENSTROM",
  120.     type: "number",
  121.     unit: "m³/h"
  122. });
  123. createState('stiebeleltron.anlage.FORTLUFT_DREHZAHL', 0, {
  124.     read: true,
  125.     write: false,
  126.     name: "FORTLUFT IST LÜFTERDREHZAHL",
  127.     type: "number",
  128.     unit: "Hz"
  129. });
  130. createState('stiebeleltron.anlage.FORTLUFT_VOLUMENSTROM', 0, {
  131.     read: true,
  132.     write: false,
  133.     name: "FORTLUFT IST VOLUMENSTROM",
  134.     type: "number",
  135.     unit: "m³/h"
  136. });
  137.  
  138. createState('stiebeleltron.anlage.LUEFTUNGSSTUFE_TAG', 0, {
  139.     read: true,
  140.     write: true,
  141.     name: "Lüftungsstufe Tagprogramm",
  142.     type: "number",
  143.     min: 0,
  144.     max: 3
  145. });
  146.  
  147. createState('stiebeleltron.anlage.LUEFTUNGSSTUFE_NACHT', 0, {
  148.     read: true,
  149.     write: true,
  150.     name: "Lüftungsstufe Nachtprogramm",
  151.     type: "number",
  152.     min: 0,
  153.     max: 3
  154. });
  155.  
  156. createState('stiebeleltron.anlage.LUEFTUNGSSTUFE_AKTUELL', 0, {
  157.     read: true,
  158.     write: true,
  159.     name: "Lüftungsstufe aktuell",
  160.     type: "number",
  161.     min: 0,
  162.     max: 3
  163. });
  164.  
  165. createState('stiebeleltron.anlage.STARTZEITHEIZKREISPUMPE', 0, {
  166.     read: true,
  167.     write: true,
  168.     name: "Startzeit in msec nach 01.01.1970",
  169.     type: "number"
  170. });
  171.  
  172. createState('stiebeleltron.anlage.AUSSENTEMPERATUR', 0, {
  173.     read: true,
  174.     write: false,
  175.     name: "Aussentemperatur",
  176.     type: "number",
  177.     unit: "°C",
  178.     role: "value.temperature"
  179. });
  180.  
  181. createState('stiebeleltron.anlage.HEIZEN_SOLLTEMPERATUR', 0, {
  182.     read: true,
  183.     write: false,
  184.     name: "HK1 Soll Temperatur",
  185.     type: "number",
  186.     unit: "°C",
  187.     role: "value.temperature"
  188. });
  189. createState('stiebeleltron.anlage.HEIZEN_ISTTEMPERATUR', 0, {
  190.     read: true,
  191.     write: false,
  192.     name: "HK1 Ist Temperatur",
  193.     type: "number",
  194.     unit: "°C",
  195.     role: "value.temperature"
  196. });
  197. createState('stiebeleltron.anlage.HEIZEN2_SOLLTEMPERATUR', 0, {
  198.     read: true,
  199.     write: false,
  200.     name: "HK2 Soll Temperatur",
  201.     type: "number",
  202.     unit: "°C",
  203.     role: "value.temperature"
  204. });
  205. createState('stiebeleltron.anlage.HEIZEN2_ISTTEMPERATUR', 0, {
  206.     read: true,
  207.     write: false,
  208.     name: "HK2 Ist Temperatur",
  209.     type: "number",
  210.     unit: "°C",
  211.     role: "value.temperature"
  212. });
  213. createState('stiebeleltron.anlage.SPREIZUNG', 0, {
  214.     read: true,
  215.     write: false,
  216.     name: "Spreizung = Vorlauf - Rücklauftemperatur",
  217.     type: "number",
  218.     unit: "°C",
  219.     role: "value.temperature"
  220. });
  221.  
  222. createState('stiebeleltron.anlage.VORLAUFTEMPERATUR', 0, {
  223.     read: true,
  224.     write: false,
  225.     name: "Rücklauftemperatur",
  226.     type: "number",
  227.     unit: "°C",
  228.     role: "value.temperature"
  229. });
  230. createState('stiebeleltron.anlage.RUECKLAUFTEMPERATUR', 0, {
  231.     read: true,
  232.     write: false,
  233.     name: "Vorlauftemperatur",
  234.     type: "number",
  235.     unit: "°C",
  236.     role: "value.temperature"
  237. });
  238. createState('stiebeleltron.anlage.STATUS');
  239.  
  240. createState('stiebeleltron.anlage.HEIZKREISPUMPEAKTIV', false, {
  241.     read: true,
  242.     write: true,
  243.     name: "Heizkreispumpe aktiv",
  244.     type: "boolean"
  245. });
  246.  
  247.  
  248. createState('stiebeleltron.anlage.VOLUMENSTROM', 0, {
  249.     read: true,
  250.     write: false,
  251.     name: "Volumenstrom",
  252.     type: "number",
  253.     unit: "l/min"
  254. });
  255.  
  256. createState('stiebeleltron.anlage.VOLUMENSTROM_HEIZEN', 0, {
  257.     read: true,
  258.     write: false,
  259.     name: "Volumenstrom Heizen",
  260.     type: "number",
  261.     unit: "l/min"
  262. });
  263.  
  264. createState('stiebeleltron.anlage.VOLUMENSTROM_WM', 0, {
  265.     read: true,
  266.     write: false,
  267.     name: "Volumenstrom Warmwasser",
  268.     type: "number",
  269.     unit: "l/min"
  270. });
  271.  
  272. createState('stiebeleltron.anlage.THERMISCHELEISTUNG', 0, {
  273.     read: true,
  274.     write: false,
  275.     name: "Thermische Leistung",
  276.     type: "number",
  277.     unit: "kW",
  278.     role: 'value'
  279. });
  280.  
  281. createState('stiebeleltron.prozess.VERDICHTERSTARTS_SCRIPT', 0, {
  282.     read: true,
  283.     write: false,
  284.     name: "Anzahl Verdichterstarts seit " + new Date().toString(),
  285.     type: "number",
  286.     role: 'value'
  287. });
  288.  
  289. createState('stiebeleltron.prozess.VERDICHTERSTARTS', 0, {
  290.     read: true,
  291.     write: false,
  292.     name: "Anzahl Verdichterstarts",
  293.     type: "number",
  294.     role: 'value'
  295. });
  296.  
  297. createState('stiebeleltron.anlage.HEIZSTUFE', 0, {
  298.     read: true,
  299.     write: false,
  300.     name: "Heizstufe",
  301.     type: "number",
  302.     role: 'value'
  303. });
  304.  
  305. on({id:'javascript.0.stiebeleltron.anlage.HEIZSTUFE',
  306.     valGe: 2,
  307.     oldVal: 0,
  308.     change: "any"
  309. }, function(obj)
  310. {
  311.     setState('stiebeleltron.prozess.VERDICHTERSTARTS_SCRIPT',
  312.         getState('javascript.0.stiebeleltron.prozess.VERDICHTERSTARTS_SCRIPT').val + 1);
  313. });
  314.  
  315. on({id: 'javascript.0.stiebeleltron.anlage.LUEFTUNGSSTUFE_TAG'}, function (obj) {
  316.  
  317.     setFAN_Day(getState('javascript.0.stiebeleltron.anlage.LUEFTUNGSSTUFE_TAG').val);
  318.    
  319. });
  320. on({id: 'javascript.0.stiebeleltron.anlage.LUEFTUNGSSTUFE_NACHT'}, function (obj) {
  321.    
  322.    setFAN_Night(getState('javascript.0.stiebeleltron.anlage.LUEFTUNGSSTUFE_NACHT').val);
  323. });
  324.  
  325. schedule("*/30 * * * * *", function () {
  326.     pollStiebelEltron();
  327. });
  328.  
  329. // Frage stiebeleltron ein Mal und speichere die Antwort in CCU.IO Datenpunkten
  330. function pollStiebelEltron() {
  331.     log("polling stiebel eltron adapter");
  332.    
  333.     http.get("http://" + stiebeleltronIP + "/?s=2,0", function (http_res) {
  334.         // initialize the container for our data
  335.         var data = "";
  336.        
  337.         // this event fires many times, each time collecting another piece of the response
  338.         http_res.on("data", function (chunk) {
  339.             // append this chunk to our growing `data` var
  340.             data += chunk;
  341.         });
  342.        
  343.         // this event fires *one* time, after all the `data` events/chunks have been gathered
  344.         http_res.on("end", function () {
  345.             try
  346.             {
  347.                 var newdata = data.replace(/<\/div>\s<\/div>\s<\/div>\s<\/div>\s/gmi, "<\/div>\r\n<\/div>");
  348.                 var doc = new dom().parseFromString(newdata);
  349.                
  350.                 var infoTables = xpath.select("//*[@class='info']", doc);
  351.                
  352.                 var updatedStates = {};
  353.                
  354.                 for (var j in infoTables)
  355.                 {
  356.                     var info = infoTables[j];
  357.                     var statusType = info.childNodes[0].childNodes[0].childNodes[0].data;
  358.                     var statusList = info.getElementsByTagName("tr");
  359.                    
  360.                     for (var j2 = 1; j2 < statusList.length; j2++)
  361.                     {
  362.                         var status = statusList[j2].childNodes[1].childNodes[0].data;
  363.                        
  364.                         var stateKey = updateStatus(statusType, status);
  365.                        
  366.                         updatedStates[stateKey] = "true";
  367.                     }
  368.                 }
  369.                
  370.                 resetStates(updatedStates);
  371.             }
  372.             catch (e) {
  373.                 log("stiebeleltron: Cannot set Website 20 data:" + e, 'error');
  374.             }
  375.         });
  376.     });
  377.    
  378.     http.get("http://" + stiebeleltronIP + "/?s=0", function (http_res) {
  379.        
  380.         // initialize the container for our data
  381.         var data = "";
  382.        
  383.         // this event fires many times, each time collecting another piece of the response
  384.         http_res.on("data", function (chunk) {
  385.             // append this chunk to our growing `data` var
  386.             data += chunk;
  387.         });
  388.        
  389.         // this event fires *one* time, after all the `data` events/chunks have been gathered
  390.         http_res.on("end", function () {
  391.            
  392.             try {// the website has some </divs> without starttags, they must be removed to use dom
  393.                 var newdata = data.replace(/<\/div>\s<\/div>\s<\/div>\s<\/div>\s/gmi, "<\/div>\r\n<\/div>");
  394.                 var doc = new dom().parseFromString(newdata);
  395.                 var nodes = xpath.select("//*[@id=\"box_start_status_system\"]", doc);
  396.                
  397.                 // since i dont get xpath queries work right, i do it the hard way of accessing the childnodes directly
  398.                 // Tabelle Prozessdaten
  399.                 var status = nodes[0].childNodes[1].childNodes[2].childNodes[0].data;
  400.                 setState('javascript.0.stiebeleltron.anlage.STATUS', status);
  401.             }
  402.             catch (e) {
  403.                 log("stiebeleltron: Cannot set Website 1 data:" + e, 'error');
  404.             }
  405.         });
  406.     });
  407.    
  408.     http.get("http://" + stiebeleltronIP + "/?s=2,3", function (http_res) {
  409.         // initialize the container for our data
  410.         var data = "";
  411.        
  412.         // this event fires many times, each time collecting another piece of the response
  413.         http_res.on("data", function (chunk) {
  414.             // append this chunk to our growing `data` var
  415.             data += chunk;
  416.         });
  417.        
  418.         // this event fires *one* time, after all the `data` events/chunks have been gathered
  419.         http_res.on("end", function () {
  420.             try {
  421.                 // the website has some </divs> without starttags, they must be removed to use dom
  422.                 var newdata = data.replace(/<\/div>\s<\/div>\s<\/div>\s<\/div>\s/gmi, "<\/div>\r\n<\/div>");
  423.                 var doc = new dom().parseFromString(newdata);
  424.                 var nodes = xpath.select("//*[@id=\"content\"]", doc);
  425.                
  426.                 // since i dont get xpath queries work right, i do it the hard way of accessing the childnodes directly
  427.                 // Tabelle Prozessdaten
  428.                 var positionVentil = (nodes[0].childNodes[1].childNodes[0].childNodes[24].childNodes[3].childNodes[0].data).trim();
  429.                 setState('javascript.0.stiebeleltron.prozess.POSITION_VENTIL', positionVentil);
  430.                
  431.             }
  432.             catch (e) {
  433.                 log("stiebeleltron: Cannot set Website 23 data:" + e, 'error');
  434.             }
  435.         });
  436.     });
  437.    
  438.     http.get("http://" + stiebeleltronIP + "/?s=1,0", function (http_res) {
  439.         // initialize the container for our data
  440.         var data = "";
  441.        
  442.         // this event fires many times, each time collecting another piece of the response
  443.         http_res.on("data", function (chunk) {
  444.             // append this chunk to our growing `data` var
  445.             data += chunk;
  446.         });
  447.        
  448.         // this event fires *one* time, after all the `data` events/chunks have been gathered
  449.         http_res.on("end", function () {
  450.            
  451.             try {// the website has some </divs> without starttags, they must be removed to use dom
  452.                 var newdata = data.replace(/<\/div>\s<\/div>\s<\/div>\s<\/div>\s/gmi, "<\/div>\r\n<\/div>");
  453.                 var doc = new dom().parseFromString(newdata);
  454.                 var nodes = xpath.select("//*[@id=\"content\"]", doc);
  455.                
  456.                 // since i dont get xpath queries work right, i do it the hard way of accessing the childnodes directly
  457.                 // Tabelle Raumtemperatur //*[@id="content"]/div[1]/table/tbody/tr[2]/td[2]
  458.                 var test = Object("");
  459.                 var raumsoll = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data, test);
  460.                 setState('javascript.0.stiebeleltron.anlage.RAUM_SOLLTEMPERATUR', raumsoll);
  461.                
  462.                 // Tabelle Wärmeerzeuger
  463.                 var heizstufe = parseInt(nodes[0].childNodes[6].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data);
  464.                 setState('javascript.0.stiebeleltron.anlage.HEIZSTUFE', heizstufe);
  465.                
  466.                 // Tabelle Heizung //*[@id="content"]/div[3]/table/tbody/tr[2]/td[2]
  467.                 var aussentemp = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data);
  468.                 setState('javascript.0.stiebeleltron.anlage.AUSSENTEMPERATUR', aussentemp);
  469.                
  470.                 var solltemphk1 = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data);
  471.                 setState('javascript.0.stiebeleltron.anlage.HEIZEN_SOLLTEMPERATUR', solltemphk1);
  472.                
  473.                 var isttemphk1 = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data);
  474.                 var volumenstrom = removeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[18].childNodes[3].childNodes[0].data,5);
  475.  
  476.                 if (volumenstrom <= 0)
  477.                 {   // pump not active, no valid temperatures
  478.                     setState('javascript.0.stiebeleltron.anlage.VOLUMENSTROM', 0);
  479.                     setState('javascript.0.stiebeleltron.anlage.VOLUMENSTROM_HEIZEN', 0);
  480.                     setState('javascript.0.stiebeleltron.anlage.VOLUMENSTROM_WM', 0);
  481.                    
  482.                    
  483.                     setState('javascript.0.stiebeleltron.anlage.VORLAUFTEMPERATUR', 0);
  484.                        
  485.                     setState('javascript.0.stiebeleltron.anlage.RUECKLAUFTEMPERATUR', 0);
  486.                     setState('javascript.0.stiebeleltron.anlage.STARTZEITHEIZKREISPUMPE',-1);
  487.                     setState('javascript.0.stiebeleltron.anlage.HEIZKREISPUMPEAKTIV', true, true);
  488.                    
  489.                     setState('javascript.0.stiebeleltron.anlage.THERMISCHELEISTUNG',0);
  490.                 }
  491.                 else
  492.                 {
  493.                     setState('javascript.0.stiebeleltron.anlage.VOLUMENSTROM', volumenstrom);
  494.                    
  495.                     var vorlaufTemperatur = removeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[12].childNodes[3].childNodes[0].data,2);
  496.                     setState('javascript.0.stiebeleltron.anlage.VORLAUFTEMPERATUR', vorlaufTemperatur);
  497.                    
  498.                     var ruecklaufTemperatur = removeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[14].childNodes[3].childNodes[0].data,2);
  499.                     setState('javascript.0.stiebeleltron.anlage.RUECKLAUFTEMPERATUR', ruecklaufTemperatur);
  500.                    
  501.                     setState('javascript.0.stiebeleltron.anlage.SPREIZUNG', vorlaufTemperatur - ruecklaufTemperatur);
  502.  
  503.                     if (heizstufe === 0
  504.                         || vorlaufTemperatur - ruecklaufTemperatur < 0)
  505.                     {
  506.                         setState('javascript.0.stiebeleltron.anlage.THERMISCHELEISTUNG',0);
  507.                     }
  508.                     else
  509.                     {
  510.                         setState('javascript.0.stiebeleltron.anlage.THERMISCHELEISTUNG',
  511.                             Math.round(
  512.                                 10 *
  513.                                 parseFloat(volumenstrom) / 60 * (vorlaufTemperatur - ruecklaufTemperatur) * 4,182
  514.                                 ) / 10
  515.                                    
  516.                             );
  517.                     }
  518.  
  519.                     if (getState('javascript.0.stiebeleltron.prozess.POSITION_VENTIL').val == 2)
  520.                     {  
  521.                         setState('javascript.0.stiebeleltron.anlage.VOLUMENSTROM_HEIZEN', volumenstrom);
  522.                         setState('javascript.0.stiebeleltron.anlage.VOLUMENSTROM_WM', 0);
  523.                         setState('javascript.0.stiebeleltron.anlage.HEIZKREISPUMPEAKTIV', true, true);
  524.                    
  525.                         // get start date of pump and wait for 120 sec before getting the temperature
  526.                         var startDateHK1Pump = getState('javascript.0.stiebeleltron.anlage.STARTZEITHEIZKREISPUMPE').val;
  527.                         if (startDateHK1Pump <= 0)
  528.                         {
  529.                             setState('javascript.0.stiebeleltron.anlage.STARTZEITHEIZKREISPUMPE',new Date().getTime());
  530.                         }
  531.                         else if (new Date().getTime() - startDateHK1Pump > 120 * 1000)
  532.                         {
  533.                             setState('javascript.0.stiebeleltron.anlage.HEIZEN_ISTTEMPERATUR', isttemphk1);
  534.                            
  535.                             var isttemphk2 = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data);
  536.                             setState('javascript.0.stiebeleltron.anlage.HEIZEN2_ISTTEMPERATUR', isttemphk2);
  537.                            
  538.                             var solltemphk2 = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[10].childNodes[3].childNodes[0].data);
  539.                             setState('javascript.0.stiebeleltron.anlage.HEIZEN2_SOLLTEMPERATUR', solltemphk2);
  540.                         }
  541.                     }
  542.                     else
  543.                     {
  544.                         // Warmwasser Zubereitung
  545.                         setState('javascript.0.stiebeleltron.anlage.STARTZEITHEIZKREISPUMPE',-1);
  546.                        
  547.                         setState('javascript.0.stiebeleltron.anlage.VOLUMENSTROM_HEIZEN', 0);
  548.                         setState('javascript.0.stiebeleltron.anlage.HEIZKREISPUMPEAKTIV', false, true);
  549.                         setState('javascript.0.stiebeleltron.anlage.VOLUMENSTROM_WM', volumenstrom);
  550.                    
  551.                     }
  552.                 }
  553.                
  554.                 // Tabelle Warmwasser
  555.                 var wwist = removeDegreeUnit(nodes[0].childNodes[3].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data);
  556.                 setState('javascript.0.stiebeleltron.anlage.WARMWASSER_ISTTEMPERATUR', wwist);
  557.                
  558.                 var wwsoll = removeDegreeUnit(nodes[0].childNodes[3].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data);
  559.                 setState('javascript.0.stiebeleltron.anlage.WARMWASSER_SOLLTEMPERATUR', wwsoll);
  560.                
  561.                
  562.                 // Tabelle Lüftung
  563.                 var zuluftDrehzahl = removeUnit(nodes[0].childNodes[4].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data,2);
  564.                 setState('javascript.0.stiebeleltron.anlage.ZULUFT_DREHZAHL', zuluftDrehzahl);
  565.                
  566.                 var zuluftVolumenstrom = removeUnit(nodes[0].childNodes[4].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data,4);
  567.                 setState('javascript.0.stiebeleltron.anlage.ZULUFT_VOLUMENSTROM', zuluftVolumenstrom);
  568.                
  569.                 var fortluftDrehzahl = removeUnit(nodes[0].childNodes[4].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data,2);
  570.                 setState('javascript.0.stiebeleltron.anlage.FORTLUFT_DREHZAHL', fortluftDrehzahl);
  571.                
  572.                 var fortluftVolumenstrom = removeUnit(nodes[0].childNodes[4].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data,4);
  573.                 setState('javascript.0.stiebeleltron.anlage.FORTLUFT_VOLUMENSTROM', fortluftVolumenstrom);
  574.                
  575.                 var lueftungsStufe = 0;
  576.                 if (zuluftVolumenstrom >= 175)
  577.                 {
  578.                     lueftungsStufe = 3;
  579.                 }
  580.                 else if (zuluftVolumenstrom >= 125)
  581.                 {
  582.                     lueftungsStufe = 2;  
  583.                 }
  584.                 else if (zuluftVolumenstrom >= 80)
  585.                 {
  586.                     lueftungsStufe = 1;
  587.                 }
  588.                 setState('javascript.0.stiebeleltron.anlage.LUEFTUNGSSTUFE_AKTUELL', lueftungsStufe);
  589.                
  590.             }
  591.             catch (e) {
  592.                 log("stiebeleltron: Cannot set Website 10 data:" + e, 'error');
  593.             }
  594.         });
  595.     });
  596.    
  597.     http.get("http://" + stiebeleltronIP + "/?s=1,1", function (http_res) {
  598.         // initialize the container for our data
  599.         var data = "";
  600.        
  601.         // this event fires many times, each time collecting another piece of the response
  602.         http_res.on("data", function (chunk) {
  603.             // append this chunk to our growing `data` var
  604.             data += chunk;
  605.         });
  606.        
  607.         // this event fires *one* time, after all the `data` events/chunks have been gathered
  608.         http_res.on("end", function () {
  609.             try {
  610.                 // the website has some </divs> without starttags, they must be removed to use dom
  611.                 var newdata = data.replace(/<\/div>\s<\/div>\s<\/div>\s<\/div>\s/gmi, "<\/div>\r\n<\/div>");
  612.                 var doc = new dom().parseFromString(newdata);
  613.                 var nodes = xpath.select("//*[@id=\"content\"]", doc);
  614.                
  615.                 // since i dont get xpath queries work right, i do it the hard way of accessing the childnodes directly
  616.                 // Tabelle Prozessdaten
  617.                 var ruecklauftemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data);
  618.                 setState('javascript.0.stiebeleltron.prozess.HEISSGASTEMPERATUR', ruecklauftemp);
  619.                
  620.                 var hochdruck = removePressureUnit(nodes[0].childNodes[1].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data);
  621.                 setState('javascript.0.stiebeleltron.prozess.HOCHDRUCK', hochdruck);
  622.                
  623.                 var niederdruck = removePressureUnit(nodes[0].childNodes[1].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data);
  624.                 setState('javascript.0.stiebeleltron.prozess.NIEDERDRUCK', niederdruck);
  625.            
  626.                 var verdampfertemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data);
  627.                 setState('javascript.0.stiebeleltron.prozess.VERDAMPFERTEMPERATUR', verdampfertemp);
  628.                
  629.                 var verfluess = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[10].childNodes[3].childNodes[0].data);
  630.                 setState('javascript.0.stiebeleltron.prozess.VERFLUESSIGERTEMP', verfluess);
  631.                
  632.                 // FORTLUFT IST LÜFTERDREHZAHL
  633.                 var rekuperatortemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[12].childNodes[3].childNodes[0].data);
  634.                 setState('javascript.0.stiebeleltron.prozess.FORTLUFT_IST_LUEFTERDREHZAHL', rekuperatortemp);
  635.                
  636.                 // FORTLUFT SOLL VOLUMENSTROM
  637.                 var zwischeneinspritztemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[14].childNodes[3].childNodes[0].data);
  638.                 setState('javascript.0.stiebeleltron.prozess.FORTLUFT_SOLL_VOLUMENSTROM', zwischeneinspritztemp);
  639.                
  640.                 // VERDICHTERSTARTS (ISGweb only!!!)
  641.                 if (nodes[0].childNodes[1].childNodes[0].childNodes.length > 16)
  642.                 {
  643.                     var verdichterstarts = nodes[0].childNodes[1].childNodes[0].childNodes[16].childNodes[3].childNodes[0].data;
  644.                     setState('javascript.0.stiebeleltron.prozess.VERDICHTERSTARTS', verdichterstarts);
  645.                 }
  646.                
  647.                 // Tabelle Wärmemenge
  648.                 var outHeizenTag = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data);
  649.                 setState('javascript.0.stiebeleltron.waermemenge.HEIZEN_TAG', outHeizenTag);
  650.                
  651.                 var outHeizenSumme = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data);
  652.                 setState('javascript.0.stiebeleltron.waermemenge.HEIZEN_SUMME', outHeizenSumme);
  653.                
  654.                 var outwarmwasserTag = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data);
  655.                 setState('javascript.0.stiebeleltron.waermemenge.WARMWASSER_TAG', outwarmwasserTag);
  656.                
  657.                 var outwarmwasserSumme = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data);
  658.                 setState('javascript.0.stiebeleltron.waermemenge.WARMWASSER_SUMME', outwarmwasserSumme);
  659.                
  660.                 var outNHZHeizenSumme = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[10].childNodes[3].childNodes[0].data);
  661.                 setState('javascript.0.stiebeleltron.waermemenge.NHZ_HEIZEN_SUMME', outNHZHeizenSumme);
  662.                
  663.                 var outNHZWarmwasserSumme = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[12].childNodes[3].childNodes[0].data);
  664.                 setState('javascript.0.stiebeleltron.waermemenge.NHZ_WW_SUMME', outNHZWarmwasserSumme);
  665.                
  666.                
  667.                 // Tabelle Leistungsaufnahme
  668.                 var heizenTag = removePowerUnit(nodes[0].childNodes[3].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data);
  669.                 setState('javascript.0.stiebeleltron.verbrauch.HEIZEN_TAG', heizenTag);
  670.                
  671.                 var heizenSumme = removePowerUnit(nodes[0].childNodes[3].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data);
  672.                 setState('javascript.0.stiebeleltron.verbrauch.HEIZEN_SUMME', heizenSumme);
  673.                
  674.                 var warmwasserTag = removePowerUnit(nodes[0].childNodes[3].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data);
  675.                 setState('javascript.0.stiebeleltron.verbrauch.WARMWASSER_TAG', warmwasserTag);
  676.                
  677.                 var warmwasserSumme = removePowerUnit(nodes[0].childNodes[3].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data);
  678.                 setState('javascript.0.stiebeleltron.verbrauch.WARMWASSER_SUMME', warmwasserSumme);
  679.                
  680.                 setState('javascript.0.stiebeleltron.verbrauch.GESAMT_TAG', heizenTag + warmwasserTag);
  681.                 setState('javascript.0.stiebeleltron.verbrauch.GESAMT_SUMME', heizenSumme + warmwasserSumme);
  682.                
  683.                 // Tabelle Laufzeit
  684.                 var laufzeitHeizen = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data);
  685.                 setState('javascript.0.stiebeleltron.laufzeit.HEIZEN', laufzeitHeizen);
  686.                
  687.                 var laufzeitWarmwasser = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data);
  688.                 setState('javascript.0.stiebeleltron.laufzeit.WARMWASSER', laufzeitWarmwasser);
  689.                
  690.                 var laufzeitNhz1 = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data);
  691.                 setState('javascript.0.stiebeleltron.laufzeit.NHZ_1', laufzeitNhz1);
  692.                
  693.                 var laufzeitNhz2 = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data);
  694.                 setState('javascript.0.stiebeleltron.laufzeit.NHZ_2', laufzeitNhz2);
  695.                
  696.                 //var laufzeitNhz1u2 = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[12].childNodes[3].childNodes[0].data);
  697.                 //setState('javascript.0.stiebeleltron.laufzeit.NHZ_1_2', laufzeitNhz1u2);
  698.  
  699.                 // setState('javascript.0.stiebeleltron.laufzeit.NHZ_GESAMT', laufzeitNhz1 + laufzeitNhz2 + laufzeitNhz1u2);
  700.             }
  701.             catch (e) {
  702.                 log("stiebeleltron: Cannot set Website 11 data:" + e, 'error');
  703.             }
  704.         });
  705.     });
  706.    
  707. }
  708.    
  709. function checkFalseBool(input, checkvalue) {
  710.     var result = (input != checkvalue);
  711.     return Boolean(result);
  712. }
  713.  
  714. function checkTrueBool(input, checkvalue) {
  715.     var result = input == checkvalue;
  716.     return Boolean(result);
  717. }
  718.  
  719. function removeUnit(input, unitLength, unit) {
  720.     if (unit)
  721.         unit.valueOf = unit.toSource = unit.toString = input.substring(input.length - unitLength, input.length);
  722.     var value = input.substring(0, input.length - unitLength);
  723.     value = value.replace(/,/, ".");
  724.     return parseFloat(value);
  725. }
  726.  
  727. function removeHourUnit(input, unit) {
  728.     return removeUnit(input, 2, unit);
  729. }
  730.  
  731. function removePowerUnit(input, unit) {
  732.     return removeUnit(input, 4);
  733. }
  734.  
  735. function removePressureUnit(input, unit) {
  736.     return removeUnit(input, 4);
  737. }
  738.  
  739. function removeDegreeUnit(input, unit) {
  740.     return removeUnit(input, 2, unit);
  741. }
  742.  
  743.  
  744. function updateStatus(statusType, status)
  745. {
  746.     var   options = {
  747.                 read: true,
  748.                 write: false,
  749.                 type: "boolean",
  750.                 role: "indicator",
  751.                 name: status
  752.             };
  753.    
  754.     return createOrUpdateState("stiebeleltron.status." + statusType + "." + status, "true", options);
  755. }
  756.  
  757. function resetStates(updatedStates)
  758. {
  759.     $("javascript.0.stiebeleltron.status.*").each(function (id, i)
  760.     {
  761.         if (updatedStates[id] !== "true")
  762.         {
  763.             setState(id, false, true);
  764.         }
  765.     });
  766. }
  767.  
  768. function createOrUpdateState(key, value, options)
  769. {
  770.     key = key.replace(' ' , '_');
  771.     key = key.replace('/' , '_');
  772.     var state = getState("javascript.0." + key);
  773.    
  774.     if (options.type === "boolean")
  775.     {
  776.         value = value == "true";
  777.     }
  778.    
  779.     if (state.notExist)
  780.     {
  781.         // create state
  782.         createState(key, value, 0, options);
  783.     }
  784.     else
  785.     {
  786.         setState("javascript.0." + key, value, true);
  787.     }
  788.    
  789.     return "javascript.0." + key;
  790. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement