daily pastebin goal
18%
SHARE
TWEET

Untitled

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