UNPKG

mydomoathome

Version:

Imperihome ISS API gateway to Domoticz

2 lines 2 MB
!function(e){function a(i){if(n[i])return n[i].exports;var t=n[i]={exports:{},id:i,loaded:!1};return e[i].call(t.exports,t,t.exports,a),t.loaded=!0,t.exports}var n={};return a.m=e,a.c=n,a.p="",a(0)}([function(e,a,n){(function(a){function i(e){e&&logger.warn("No global conf in /etc/mydomoathome:"+err.message)}function t(){if(c("./config.json"))try{K.use("file",{file:"./config.json"},i)}catch(e){return logger.error("Global conf parsing issue !"),void logger.error(e)}}function o(){if(c("/etc/mydomoathome/config.json"))try{K.use("file",{file:"/etc/mydomoathome/config.json"},i)}catch(e){return logger.error("Global conf parsing issue !"),void logger.error(e)}}function s(){try{K.load(function(e){if(e)return void logger.warn("Conf load error:"+e.message)})}catch(e){return logger.error("Global conf load issue !"),void logger.error(e)}}function r(){K.get("port")||K.get("app_name")?(se.set("port",process.env.PORT||K.get("port")),me=K.get("app_name")||"MyDomoAtHome",he=K.get("passcode")||he):logger.warn("basic configuration not found in /etc/mydomoathome/config.json, defaulting"),K.get("domoticz:host")||K.get("domoticz:port")||logger.warn("domoticz access configuration not found in /etc/mydomoathome/config.json, defaulting")}function c(e){try{return Z.statSync(e).isFile()}catch(a){return!1}}function p(e,a,n){function i(e){return(t?/^\d+[A-Za-z]*$/:/^\d+$/).test(e)}var t=n&&n.lexicographical,o=n&&n.zeroExtend,s=e.split("."),r=a.split(".");if(!s.every(i)||!r.every(i))return NaN;if(o){for(;s.length<r.length;)s.push("0");for(;r.length<s.length;)r.push("0")}t||(s=s.map(Number),r=r.map(Number));for(var c=0;c<s.length;++c){if(r.length==c)return 1;if(s[c]!=r[c])return s[c]>r[c]?1:-1}return s.length!=r.length?-1:0}function u(){var e=K.get("domoticz:ssl")===!0?"https":"http",a=K.get("domoticz:host")||"127.0.0.1",n=K.get("domoticz:port")||process.env.DOMO_PORT||"8080",i=K.get("domoticz:path")||"/",t=K.get("domo_path"),o="json.htm",s=!1;if(K.get("domoticz:auth")&&K.get("domoticz:auth:username")&&K.get("domoticz:auth:password"))var s=K.get("domoticz:auth:username")+":"+K.get("domoticz:auth:password")+"@";if(s)var r=e+"://"+s+a+":"+n+i+o;else var r=e+"://"+a+":"+n+i+o;return process.env.DOMO?process.env.DOMO+"/json.htm":t?t+"/json.htm":r}function l(){var e=X();if("undefined"!=typeof re&&null!==re&&re.isBefore(X().add(2,"h")))return ce;var a={url:"https://api.github.com/repos/empierre/MyDomoAtHome/releases/latest",headers:{"User-Agent":"request"}};$(a,function(a,n,i){if(a||200!=n.statusCode)return"unknown";var t=JSON.parse(i);return re=e,ce=t.tag_name,logger.info("Refreshing version cache: "+t.tag_name),t.tag_name})}function d(e){var a,n;n="true"===e.HaveDimmer?1:0;var i=e.deviceId;switch(e.Status){case"On":a=1;var t=ue[i];t?(n?(t.Action=0,t.MaxDimLevel=e.MaxDimLevel):t.Action=1,ue[i]=t):t={MaxDimLevel:null,Action:1,graph:null,Selector:null},ue[i]=t;break;case"Off":a=0;var t=ue[i];t?(n?(t.Action=0,t.MaxDimLevel=e.MaxDimLevel):t.Action=1,ue[i]=t):t={MaxDimLevel:null,Action:1,graph:null,Selector:null},ue[i]=t;break;case"Open":a=1;var t=ue[i];t?(t.Action=2,ue[i]=t):t={MaxDimLevel:null,Action:2,graph:null,Selector:null},ue[i]=t;break;case"Closed":a=0;var t=ue[i];t?(t.Action=2,ue[i]=t):t={MaxDimLevel:null,Action:2,graph:null,Selector:null},ue[i]=t;break;case"Panic":a=1;var t=ue[i];t?(t.Action=3,ue[i]=t):t={MaxDimLevel:null,Action:3,graph:null,Selector:null},ue[i]=t;break;case"Normal":a=0;var t=ue[i];t?(t.Action=3,ue[i]=t):t={MaxDimLevel:null,Action:3,graph:null,Selector:null},ue[i]=t;break;default:a=e.Status}return a}function m(e){var a=0;switch(e.Status){case"On":case"Open":case"Panic":case"All On":a=1;break;case"Normal":case"Off":case"Closed":case"All Off":a=0;break;default:a=0}var n=ue[e.idx]||{MaxDimLevel:null,Action:null,graph:null,Selector:null,Protected:null};if(n||"true"!==e.Protected||(n.Protected=1),ue[e.idx]=n,"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var i={id:e.idx,name:e.Name,type:"DevSwitch",room:de[e.PlanIDs[0]]};else{var i={id:e.idx,name:e.Name,type:"DevSwitch",room:"Switches"};le.Switches=1}return params=[],params.push({key:"Status",value:a.toString()}),e.Energy&&params.push({key:"Energy",value:e.Energy}),i.params=params,i}function f(e){var a=X(e.LastUpdate,"YYYY-MM-DD HH:mm:ss").valueOf(),n={id:e.idx,name:e.Name,type:"DevMultiSwitch",room:"Switches"},i=ue[e.idx]||{MaxDimLevel:null,Action:null,graph:null,Selector:null,Protected:null};if(i||"true"!==e.Protected||(i.Protected=1),ue[e.idx]=i,"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var n={id:e.idx,name:e.Name,type:"DevMultiSwitch",room:de[e.PlanIDs[0]]};else{var n={id:e.idx,name:e.Name,type:"DevMultiSwitch",room:"Switches"};le.Switches=1}var t=[];t.push({key:"LastRun",value:a});var o=e.LevelNames.split("|").join(",");e.LevelOffHidden&&(o=o.replace("Off,",""));var s=e.LevelNames.split("|"),i={MaxDimLevel:null,Action:null,graph:null,Selector:s};ue[e.idx]=i;var r=e.Level/10;return t.push({key:"Value",value:s[r].toString()}),t.push({key:"Choices",value:o}),n.params=t,n}function h(e){var a=0;switch(e.SwitchType){case"Push On Button":a=1;break;case"Push Off Button":a=0;break;default:a=0}var n=ue[e.idx]||{MaxDimLevel:null,Action:null,graph:null,Selector:null,Protected:null};if(n||"true"!==e.Protected||(n.Protected=1),ue[e.idx]=n,"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var i={id:e.idx,name:e.Name,type:"DevSwitch",room:de[e.PlanIDs[0]]};else{var i={id:e.idx,name:e.Name,type:"DevSwitch",room:"Switches"};le.Switches=1}return params=[],params.push({key:"pulseable",value:"1"}),i.params=params,i}function v(e){var a=0;switch(a=d(e),e.SwitchType){case"Push On Button":a=1;break;case"Push Off Button":a=0;break;default:a=0}var n=ue[e.idx]||{MaxDimLevel:null,Action:null,graph:null,Selector:null,Protected:null};if(n||"true"!==e.Protected||(n.Protected=1),ue[e.idx]=n,"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var i={id:e.idx,name:e.Name,type:"DevRGBLight",room:de[e.PlanIDs[0]]};else{var i={id:e.idx,name:e.Name,type:"DevRGBLight",room:"Switches"};le.Switches=1}if(e.Status.match(/Set Level/)||"true"===e.HaveDimmer){var n={MaxDimLevel:null,Action:null,graph:null};ue[e.idx]&&(n=ue[e.idx]),n.MaxDimLevel=e.MaxDimLevel,n.Action=0,ue[e.idx]=n,params=[],params.push({key:"Status",value:"1"}),params.push({key:"dimmable",value:"1"}),params.push({key:"Level",value:e.Level.toString()}),e.Energy&&params.push({key:"Energy",value:e.Energy}),i.params=params}else params=[],params.push({key:"Status",value:a}),i.params=params;return i}function x(e){var a=0;if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var n={id:e.idx,name:e.Name,type:"DevDimmer",room:de[e.PlanIDs[0]]};else{var n={id:e.idx,name:e.Name,type:"DevDimmer",room:"Switches"};le.Switches=1}var i=ue[e.idx]||{MaxDimLevel:null,Action:null,graph:null,Selector:null,Protected:null};i||"true"!==e.Protected||(i.Protected=1),ue[e.idx]=i,a=d(e),e.Status.match(/Set Level/)&&(a=1);var i={MaxDimLevel:null,Action:null,graph:null};return ue[e.idx]&&(i=ue[e.idx]),i.MaxDimLevel=e.MaxDimLevel,i.Action=0,ue[e.idx]=i,params=[],params.push({key:"Status",value:a.toString()}),0==a?params.push({key:"Level",value:"0"}):params.push({key:"Level",value:e.Level.toString()}),e.Energy&&params.push({key:"Energy",value:e.Energy}),n.params=params,n}function g(e){var a=0;a=d(e);var n=ue[e.idx]||{MaxDimLevel:null,Action:null,graph:null,Selector:null,Protected:null};n||"true"!==e.Protected||(n.Protected=1),ue[e.idx]=n;var i=0,t=0,n={MaxDimLevel:null,Action:null,graph:null};ue[e.idx]&&(n=ue[e.idx]),n.Action=5,n.MaxDimLevel=e.MaxDimLevel,ue[e.idx]=n,"Open"===e.Status?(i=e.Level||100,a=1):e.Status.match(/Set Level/)||"true"===e.HaveDimmer?(i=e.Level,a=i>0?1:0):(i=e.Level||0,a=0),"Venetian Blinds EU"!==e.SwitchType&&"Venetian Blinds US"!==e.SwitchType&&"RollerTrol, Hasta new"!==e.SwitchType||(t=1);var o={id:e.idx,name:e.Name,type:"DevShutter",room:"Switches"};if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var o={id:e.idx,name:e.Name,type:"DevShutter",room:de[e.PlanIDs[0]]};else{var o={id:e.idx,name:e.Name,type:"DevShutter",room:"Switches"};le.Switches=1}return params=[],params.push({key:"Status",value:a}),params.push({key:"Level",value:i.toString()}),params.push({key:"stopable",value:t.toString()}),params.push({key:"pulsable",value:"0"}),o.params=params,o}function y(e){var a=0;a=d(e);var n=ue[e.idx]||{MaxDimLevel:null,Action:null,graph:null,Selector:null,Protected:null};n||"true"!==e.Protected||(n.Protected=1),ue[e.idx]=n;var i=0,t=0,n={MaxDimLevel:null,Action:null,graph:null};ue[e.idx]&&(n=ue[e.idx]),n.Action=6,n.MaxDimLevel=e.MaxDimLevel,ue[e.idx]=n,"Open"==e.Status?(i=100,a=1):e.Status.match(/Set Level/)||"true"===e.HaveDimmer?(i=e.Level,a=i>0?1:0):(i=e.Level||0,a=0),"Venetian Blinds EU"!==e.SwitchType&&"Venetian Blinds US"!==e.SwitchType&&"RollerTrol, Hasta new"!==e.SwitchType||(t=1);var o={id:e.idx,name:e.Name,type:"DevShutter",room:"Switches"};if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var o={id:e.idx,name:e.Name,type:"DevShutter",room:de[e.PlanIDs[0]]};else{var o={id:e.idx,name:e.Name,type:"DevShutter",room:"Switches"};le.Switches=1}return params=[],params.push({key:"Status",value:a}),params.push({key:"Level",value:i.toString()}),params.push({key:"stopable",value:t.toString()}),params.push({key:"pulsable",value:"0"}),o.params=params,o}function b(e){var a=X(e.LastUpdate,"YYYY-MM-DD HH:mm:ss").valueOf(),n={id:e.idx,name:e.Name,type:"DevMotion",room:"Switches"};if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var n={id:e.idx,name:e.Name,type:"DevMotion",room:de[e.PlanIDs[0]]};else{var n={id:e.idx,name:e.Name,type:"DevMotion",room:"Switches"};le.Switches=1}params=[];var i=d(e);return params.push({key:"Armable",value:"0"}),params.push({key:"ackable",value:"0"}),params.push({key:"Armed",value:"1"}),params.push({key:"Tripped",value:i.toString()}),params.push({key:"lasttrip",value:a.toString()}),n.params=params,n}function k(e){var a=X(e.LastUpdate,"YYYY-MM-DD HH:mm:ss").valueOf(),n={id:e.idx,name:e.Name,type:"DevDoor",room:"Switches"};if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var n={id:e.idx,name:e.Name,type:"DevDoor",room:de[e.PlanIDs[0]]};else{var n={id:e.idx,name:e.Name,type:"DevDoor",room:"Switches"};le.Switches=1}params=[];var i=d(e);return params.push({key:"armable",value:"0"}),params.push({key:"Ackable",value:"0"}),params.push({key:"Armed",value:"1"}),params.push({key:"Tripped",value:i.toString()}),params.push({key:"lasttrip",value:a.toString()}),n.params=params,n}function _(e){var a=X(e.LastUpdate,"YYYY-MM-DD HH:mm:ss").valueOf(),n=0;"Security"==e.Type&&(n=1);var i={id:e.idx,name:e.Name,type:"DevSmoke",room:"Switches"};if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var i={id:e.idx,name:e.Name,type:"DevSmoke",room:de[e.PlanIDs[0]]};else{var i={id:e.idx,name:e.Name,type:"DevSmoke",room:"Switches"};le.Switches=1}params=[];var t=d(e);return params.push({key:"Armable",value:"0"}),params.push({key:"ackable",value:n.toString()}),params.push({key:"Armed",value:"1"}),params.push({key:"Tripped",value:t.toString()}),params.push({key:"lasttrip",value:a.toString()}),i.params=params,i}function w(e){if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevGenericSensor",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevGenericSensor",room:"Utility"};le.Utility=1}return e.Status?(params=[],params.push({key:"Value",value:e.Status.toString()}),a.params=params):e.Data&&(params=[],params.push({key:"Value",value:e.Data.toString()}),a.params=params),a}function j(e){var a=/([0-9]+(?:\.[0-9]+)?) ?(.+)/,n=e.Data.match(a).slice(1),i=n[0],t=n[1],o={id:e.idx,name:e.Name,type:"DevGenericSensor",room:"Utility"};if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var o={id:e.idx,name:e.Name,type:"DevGenericSensor",room:de[e.PlanIDs[0]]};else{var o={id:e.idx,name:e.Name,type:"DevGenericSensor",room:"Utility"};le.Utility=1}return params=[],params.push({key:"Value",value:i.toString(),unit:t.toString(),graphable:"true"}),o.params=params,o}function M(e){le.Utility=1;var a,n=/([0-9]+(?:\.[0-9]+)?) Watt/,i=/([0-9]+(?:\.[0-9]+)?) kWh/,t=[],o=[];if(e.UsageDeliv){var s={id:e.idx+"_L1",name:e.Name,type:"DevElectricity",room:"Utility"};if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var s={id:e.idx+"_L1",name:e.Name,type:"DevElectricity",room:de[e.PlanIDs[0]]};else{var s={id:e.idx+"_L1",name:e.Name,type:"DevElectricity",room:"Utility"};le.Utility=1}var t=[],r=n.exec(e.Usage),c=0;null!=r&&(c=Math.ceil(Number(r[1])));var r=i.exec(e.CounterToday),p=0;null!=r&&(p=Math.ceil(Number(r[1]))),t.push({key:"Watts",value:c,unit:"W"}),t.push({key:"ConsoTotal",value:Math.ceil(p),unit:"kWh",graphable:"true"}),s.params=t,o.push(s);var t=[];if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var u={id:e.idx+"_L2",name:e.Name+"Deliv",type:"DevElectricity",room:de[e.PlanIDs[0]]};else{var u={id:e.idx+"_L2",name:e.Name+"Deliv",type:"DevElectricity",room:"Utility"};le.Utility=1}var r=n.exec(e.UsageDeliv),l=0;null!=r&&(l=Math.ceil(Number(r[1])));var r=i.exec(e.CounterDelivToday),d=0;null!=r&&(d=Math.ceil(Number(r[1]))),t.push({key:"Watts",value:l,unit:"W"}),t.push({key:"ConsoTotal",value:Math.ceil(d),unit:"kWh",graphable:"true"}),u.params=t,o.push(u);var t=[],m={id:e.idx+"_L3",name:e.Name+" CounterToday",type:"DevGenericSensor",room:"Utility"};CounterToday=Math.ceil(e.Counter),t.push({key:"Value",value:CounterToday,unit:"kWh",graphable:"true"}),m.params=t,o.push(m);var t=[],f={id:e.idx+"_L4",name:e.Name+" CounterDelivToday",type:"DevGenericSensor",room:"Utility"},r=i.exec(e.CounterDelivToday),h=0;return h=Math.ceil(e.CounterDeliv),t.push({key:"Value",value:h,unit:"kWh",graphable:"false"}),f.params=t,o.push(f),o}if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0?a={id:e.idx,name:e.Name,type:"DevElectricity",room:de[e.PlanIDs[0]]}:(a={id:e.idx,name:e.Name,type:"DevElectricity",room:"Utility"},le.Utility=1),e.Usage){var r=n.exec(e.Usage),c=0;if(null!=r&&(c=r[1]),c||(c=0),t.push({key:"Watts",value:c,unit:"W"}),e.Data){var r=i.exec(e.Data),v=0;null!=r&&(v=Math.ceil(Number(r[1]))),t.push({key:"ConsoTotal",value:v.toString(),unit:"kWh",graphable:"true"})}}else if(e.CounterToday){var r=i.exec(e.CounterToday),c=0;if(null!=r&&(c=r[1]),c||(c=0),t.push({key:"Watts",value:c,unit:"kWh"}),e.Counter){var r=i.exec(e.Counter),v=0;null!=r&&(v=Math.ceil(Number(r[1]))),t.push({key:"ConsoTotal",value:v.toString(),unit:"kWh",graphable:"true"})}}else{var r=n.exec(e.Data),v=0;null!=r&&(v=Math.ceil(Number(r[1]))),t.push({key:"Watts",value:v.toString(),unit:"W",graphable:"true"})}return a.params=t,a}function L(e){var a=/[\s,]+/,n=[],i=e.Data.split(a),t=0;if(null!=i){if(t=i[0],"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var o={id:e.idx+"_L1",name:e.Name,type:"DevElectricity",room:de[e.PlanIDs[0]]};else{var o={id:e.idx+"_L1",name:e.Name,type:"DevElectricity",room:"Utility"};le.Utility=1}var s=[];if(s.push({key:"Watts",value:t.toString(),unit:"W",graphable:"true"}),o.params=s,n.push(o),t=i[2],"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var r={id:e.idx+"_L2",name:e.Name,type:"DevElectricity",room:de[e.PlanIDs[0]]};else{var r={id:e.idx+"_L2",name:e.Name,type:"DevElectricity",room:"Utility"};le.Utility=1}var c=[];if(c.push({key:"Watts",value:t.toString(),unit:"W",graphable:"true"}),r.params=c,n.push(r),t=i[4],"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var p={id:e.idx+"_L3",name:e.Name,type:"DevElectricity",room:de[e.PlanIDs[0]]};else{var p={id:e.idx+"_L3",name:e.Name,type:"DevElectricity",room:"Utility"};le.Utility=1}var u=[];u.push({key:"Watts",value:t.toString(),unit:"W",graphable:"true"}),p.params=u,n.push(p)}return n}function S(e){var a=/([0-9]+(?:\.[0-9]+)?) /;if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var n={id:e.idx,name:e.Name,type:"DevElectricity",room:de[e.PlanIDs[0]]};else{var n={id:e.idx,name:e.Name,type:"DevElectricity",room:"Utility"};le.Utility=1}var i,t=[];switch(e.SwitchTypeVal){case"0":i="kWh";break;case"1":i="m3";break;case"2":i="m3";break;case"3":i=e.ValueUnits.toString();break;case"4":i="kWh"}if(e.Counter){var o=a.exec(e.CounterToday),s=0;if(null!=o&&(s=Math.ceil(Number(o[1]))),s||(s=0),o=Math.ceil(s),t.push({key:"Watts",value:s,unit:i}),e.Counter){var o=a.exec(e.Counter),r=0;null!=o&&(r=Math.ceil(Number(o[1]))),t.push({key:"ConsoTotal",value:r.toString(),unit:i,graphable:"true"})}}else{var o=a.exec(e.Data),r=0;null!=o&&(r=Math.ceil(Number(o[1]))),t.push({key:"Watts",value:r.toString(),unit:i,graphable:"true"})}return n.params=t,n}function T(e){var a=/([0-9]+(?:\.[0-9]+)?) m3/,n=/([0-9]+(?:\.[0-9]+)?)/;if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var i={id:e.idx,name:e.Name,type:"DevElectricity",room:de[e.PlanIDs[0]]};else{var i={id:e.idx,name:e.Name,type:"DevElectricity",room:"Utility"};le.Utility=1}var t=[];if(e.CounterToday){var o=a.exec(e.CounterToday),s=0;null!=o&&(s=o[1]),s||(s=0),t.push({key:"Watts",value:s.toString(),unit:"m3"})}if(e.Data){var o=n.exec(e.Counter),r=0;null!=o&&(r=Math.ceil(o[1])),t.push({key:"ConsoTotal",value:r.toString(),unit:"m3"})}return i.params=t,i}function D(e){var a=/([0-9]+(?:\.[0-9]+)?) Liter/,n=/([0-9]+(?:\.[0-9]+)?) m3/,i=0;if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var t={id:e.idx,name:e.Name,type:"DevElectricity",room:de[e.PlanIDs[0]]};else{var t={id:e.idx,name:e.Name,type:"DevElectricity",room:"Utility"};le.Utility=1}var o=[];if(e.CounterToday){var s=a.exec(e.CounterToday),r=0;null!=s&&(r=Number(s[1]),i=Number(s[1])),r||(r=0),o.push({key:"Watts",value:r.toString(),unit:"l",graphable:"false"})}if(e.Counter){var s=n.exec(e.Counter),c=0;null!=s&&(c=Number(s[1])),o.push({key:"ConsoTotal",value:c.toString(),unit:"m3",graphable:"true"})}return t.params=o,t}function E(e){var a=/([0-9]+(?:\.[0-9]+)?) l\/min/;if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var n={id:e.idx,name:e.Name,type:"DevGenericSensor",room:de[e.PlanIDs[0]]};else{var n={id:e.idx,name:e.Name,type:"DevGenericSensor",room:"Utility"};le.Utility=1}var i=[],t=a.exec(e.Data),o=0;return null!=t&&(o=Number(t[1])),i.push({key:"Value",value:o.toString(),unit:"l/s",graphable:!0}),n.params=i,n}function Y(e){switch(e.Type){case"Temp":if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevTemperature",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevTemperature",room:"Temp"};le.Temp=1}return n=[],n.push({key:"Value",value:e.Temp,unit:"°C",graphable:"true"}),a.params=n,a;case"Humidity":if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevHygrometry",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevHygrometry",room:"Temp"};le.Temp=1}return n=[],n.push({key:"Value",value:e.Humidity,unit:"%",graphable:"true"}),a.params=n,a;case"Temp + Humidity":if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevTempHygro",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevTempHygro",room:"Temp"};le.Temp=1}var n=[];return n.push({key:"Hygro",value:e.Humidity,unit:"%",graphable:"true"}),n.push({key:"Temp",value:e.Temp,unit:"°C",graphable:"true"}),a.params=n,a;case"Temp + Humidity + Baro":var i=[];if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevTempHygro",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevTempHygro",room:"Temp"};le.Temp=1}var n=[];if(n.push({key:"Hygro",value:e.Humidity,unit:"%",graphable:"true"}),n.push({key:"Temp",value:e.Temp,unit:"°C",graphable:"true"}),a.params=n,i.push(a),"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx+"_1",name:e.Name,type:"DevPressure",room:de[e.PlanIDs[0]]};else{var a={id:e.idx+"_1",name:e.Name,type:"DevPressure",room:"Weather"};le.Weather=1}return n=[],n.push({key:"Value",value:e.Barometer,unit:"mbar",graphable:"true"}),a.params=n,i.push(a),i;default:logger.info("General: should not happen")}}function z(e){if(le.Weather=1,"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevPressure",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevPressure",room:"Weather"};le.Weather=1}if(params=[],"Pressure"===e.SubType)if(e.Pressure<800){var n=1e3*e.Pressure;params.push({key:"Value",value:n,unit:"mbar",graphable:"true"})}else params.push({key:"Value",value:e.Pressure,unit:"bar",graphable:"true"});else if(e.Barometer<800){var n=1e3*e.Barometer;params.push({key:"Value",value:n,unit:"mbar",graphable:"true"})}else params.push({key:"Value",value:e.Barometer,unit:"bar",graphable:"true"});return a.params=params,a}function A(e){if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevRain",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevRain",room:"Weather"};le.Weather=1}var n=[];return"undefined"!=typeof e.Rain&&null!==e.Rain&&n.push({key:"Accumulation",value:e.Rain.toString(),unit:"mm",graphable:"true"}),"undefined"!=typeof e.RainRate&&null!==e.RainRate&&n.push({key:"Value",value:e.RainRate.toString(),unit:"mm/h",graphable:"true"}),a.params=n,a}function O(e){var a={id:e.idx,name:e.Name,type:"DevUV",room:"Weather"};if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevUV",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevUV",room:"Weather"};le.Weather=1}return params=[],params.push({key:"Value",value:e.UVI,unit:"",graphable:"true"}),a.params=params,a}function q(e){var a=/([0-9]+(?:\.[0-9]+)?) ?(.+)/,n=e.Data.match(a).slice(1),i=n[0],t=n[1];if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var o={id:e.idx,name:e.Name,type:"DevNoise",room:de[e.PlanIDs[0]]};else{var o={id:e.idx,name:e.Name,type:"DevNoise",room:"Utility"};le.Utility=1}return params=[],params.push({key:"Value",value:i,unit:t.toString(),graphable:"true"}),o.params=params,o}function F(e){var a=/(\d+) Lux/,n=a.exec(e.Data),i=0;if(null!=n&&(i=n[1]),"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var t={id:e.idx,name:e.Name,type:"DevLuminosity",room:de[e.PlanIDs[0]],params:[]};else{var t={id:e.idx,name:e.Name,type:"DevLuminosity",room:"Weather",params:[]};le.Weather=1}return params=[],params.push({key:"Value",value:i,unit:"lux",graphable:"true"}),t.params=params,t}function C(e){var a=/(\d+) ppm/,n=a.exec(e.Data),i=0;if(null!=n&&(i=Number(n[1])),"undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var t={id:e.idx,name:e.Name,type:"DevCO2",room:de[e.PlanIDs[0]],params:[]};else{var t={id:e.idx,name:e.Name,type:"DevCO2",room:"Temp",params:[]};le.Temp=1}return params=[],params.push({key:"Value",value:i.toString(),unit:"ppm",graphable:"true"}),t.params=params,t}function P(e){if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevWind",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevWind",room:"Weather"};le.Weather=1}var n=[];return n.push({key:"Speed",value:e.Speed,unit:"km/h",graphable:"true"}),"undefined"!=typeof e.Direction&&null!==e.Direction&&n.push({key:"Direction",value:e.Direction.toString(),unit:"°",graphable:"true"}),a.params=n,a}function H(e){if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var a={id:e.idx,name:e.Name,type:"DevThermostat",room:de[e.PlanIDs[0]]};else{var a={id:e.idx,name:e.Name,type:"DevThermostat",room:"Switches"};le.Utility=1}var n=[];return n.push({key:"cursetpoint",value:e.SetPoint.toString()}),n.push({key:"curtemp",value:e.SetPoint.toString()}),n.push({key:"step",value:"0.5"}),n.push({key:"curmode",value:"default"}),n.push({key:"availablemodes",value:"default"}),a.params=n,a}function B(e){var a=X(e.LastUpdate,"YYYY-MM-DD HH:mm:ss").valueOf();if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var n={id:"SC"+e.idx,name:e.Name,type:"DevScene",room:de[e.PlanIDs[0]]};else{var n={id:"SC"+e.idx,name:e.Name,type:"DevScene",room:"Scenes"};le.Scenes=1}return params=[],params.push({key:"LastRun",value:a}),n.params=params,n}function I(e){var a=X(e.LastUpdate,"YYYY-MM-DD HH:mm:ss").valueOf();if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var n={id:"SC"+e.idx,name:e.Name,type:"DevMultiSwitch",room:de[e.PlanIDs[0]]};else{var n={id:"SC"+e.idx,name:e.Name,type:"DevMultiSwitch",room:"Scenes"};le.Scenes=1}var i=[];return i.push({key:"LastRun",value:a}),i.push({key:"Value",value:e.Status}),i.push({key:"Choices",value:"On,Off"}),n.params=i,n}function N(e){var a=X(e.LastUpdate,"YYYY-MM-DD HH:mm:ss").valueOf();if("undefined"!=typeof e.PlanIDs&&null!==e.PlanIDs[0]&&e.PlanIDs[0]>0)var n={id:e.idx,name:e.Name,type:"DevMultiSwitch",room:de[e.PlanIDs[0]]};else{var n={id:e.idx,name:e.Name,type:"DevMultiSwitch",room:"Switches"};le.Switches=1}var i=[];i.push({key:"LastRun",value:a});var t={MaxDimLevel:null,Action:10,graph:null,Selector:"Normal,Auto,AutoWithEco,Away,DayOff,Custom,HeatingOff"};ue[e.idx]=t;e.Level/10;return i.push({key:"Value",value:e.Status.toString()}),i.push({key:"Choices",value:"Normal,Auto,AutoWithEco,Away,DayOff,Custom,HeatingOff"}),n.params=i,n}function R(e){var a=u()+"?type=devices&rid="+e,n=ie("GET",a),i=JSON.parse(n.body.toString("utf-8"));return i.result[0].Type}function U(e){var a=u()+"?type=devices&rid="+e,n=ie("GET",a),i=JSON.parse(n.body.toString("utf-8"));return i.result[0].SubType}function W(){var e=u()+"?type=cameras&rid=",a=ie("GET",e),n=JSON.parse(a.body.toString("utf-8")),i=[];if("undefined"!=typeof n.result&&null!==n.result)for(var t=0;t<n.result.length;t++){var o={id:"C"+t,name:n.result[t].Name,type:"DevCamera",room:"Switches"},s=[];s.push({key:"localjpegurl",value:n.result[t].ImageURL}),o.params=s,i.push(o)}return i}var V=n(9),J=n(330),G=(n(530),n(4)),$=n(440),K=n(79),Z=n(6),Q=n(64),X=n(1),ee=(n(409),n(401)),ae=n(285),ne=n(118),ie=(n(320),n(509)),te=n(107),oe=n(400),se=J();global.logger=te;var re,ce=l(),pe=oe.version,ue={},le=[],de=[],me="MyDomoAtHome",fe=process.env.PORT||"3002",he=process.env.SEC||"";se.set("port",fe),se.set("view engine","ejs");var ve=process.env.MDAH_HOME||G.resolve(a+"/..");se.use(ee()),se.use(ae.json()),se.use(ae.urlencoded({extended:!0})),process.env.MDAH_HOME?(se.use(J["static"](G.join(process.env.MDAH_HOME+"/public"))),se.set("views",G.resolve(process.env.MDAH_HOME+"/views")),logger.add(te.transports.File,{filename:process.env.MDAH_HOME+"/var/usage.log"})):(se.use(J["static"](G.join(a+"/public"))),se.set("views",G.resolve(a+"/views")),logger.add(te.transports.File,{filename:"/var/log/mydomoathome/usage.log"})),t(),o(),s(),r(),K.get("debug")===!0&&se.use(logger("dev")),se.use(ae.json()),se.use(ae.urlencoded({extended:!1}));var xe=function(e,a,n){if(!K.get("auth")||null===K.get("auth"))return void n();var i=K.get("auth:username"),t=K.get("auth:password"),o=ne(e);return o&&o.name&&o.pass?o.name!==i||o.pass!==t?(a.set("WWW-Authenticate","Basic realm=Authorization Required"),void a.sendStatus(401)):void n():(a.set("WWW-Authenticate","Basic realm=Authorization Required"),void a.sendStatus(401))};se.get("/",xe,function(e,a){a.render("index",{node_version:process.version,app_name:me,domo_path:u(),mdah_ver:pe,my_ip:ge,my_port:se.get("port")})}),se.get("/system",xe,function(e,a){var n=me;a.type("json");l();a.json({id:n,apiversion:1})}),se.get("/rooms",xe,function(e,a){a.type("json");var n={url:u()+"?type=plans&order=name&used=true",headers:{"User-Agent":"request"}};$(n,function(e,a,n){if(!e&&200==a.statusCode){var i=JSON.parse(n);if("undefined"!=typeof i.result&&null!==i.result)for(var t=0;t<i.result.length;t++)i.result[t].Devices>0&&(de[i.result[t].idx]=i.result[t].Name,le[i.result[t].Name]=i.result[t].Devices)}});var i=[];for(property in le)i.push({id:property,name:property});var t={};t.rooms=i,a.json(t)}),se.get("/devices/:deviceId/action/:actionName/:actionParam?",xe,function(e,a){a.type("json");var n=e.params.deviceId,i=e.params.actionName,t=e.params.actionParam;switch(i){case"pulse":a.type("json");var o={url:u()+"?type=command&param=switchlight&idx="+n+"&switchcmd=On&level=0&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break;case"setStatus":var s;s=1==t?"On":"Off",a.type("json");var o={url:u()+"?type=command&param=switchlight&idx="+n+"&switchcmd="+s+"&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break;case"setArmed":a.status(500).send({success:!1,errormsg:"not implemented"});break;case"setAck":a.type("json");var o={url:u()+"?type=command&param=resetsecuritystatus&idx="+n+"&switchcmd=Normal&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break;case"setLevel":var r,c;if(a.type("json"),"undefined"==typeof ue[n]||null===ue[n].Action){a.status(500).send({success:!1,errormsg:"error"});break}switch(ue[n].Action){case 1:1==t?r="?type=command&param=switchlight&idx="+n+"&switchcmd=Off&passcode="+he:0==t?r="?type=command&param=switchlight&idx="+n+"&switchcmd=On&passcode="+he:logger.error("Should not happen"+ue[n]);break;case 2:case 3:100==t?r="?type=command&param=switchlight&idx="+n+"&switchcmd=On&passcode="+he:0==t?r="?type=command&param=switchlight&idx="+n+"&switchcmd=Off&passcode="+he:(c=Math.ceil(t*ue[n].MaxDimLevel/100),r="?type=command&param=switchlight&idx="+n+"&switchcmd=Set%20Level&level="+c+"&passcode="+he);break;case 5:0==t?r="?type=command&param=switchlight&idx="+n+"&switchcmd=Off&passcode="+he:100==t?r="?type=command&param=switchlight&idx="+n+"&switchcmd=On&passcode="+he:(c=Math.ceil(t*ue[n].MaxDimLevel/100),r="?type=command&param=switchlight&idx="+n+"&switchcmd=Set%20Level&level="+c+"&passcode="+he);break;case 6:r=100==t?"?type=command&param=switchlight&idx="+n+"&switchcmd=Off&passcode="+he:0==t?"?type=command&param=switchlight&idx="+n+"&switchcmd=On&passcode="+he:"?type=command&param=switchlight&idx="+n+"&switchcmd=Set%20Level&level="+t+"&passcode="+he;break;default:c=Math.ceil(t*ue[n].MaxDimLevel/100),r="?type=command&param=switchlight&idx="+n+"&switchcmd=Set%20Level&level="+c+"&passcode="+he}var o={url:u()+r,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break;case"stopShutter":a.type("json");var o={url:u()+"?type=command&param=switchlight&idx="+n+"&switchcmd=Stop&level=0&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break;case"pulseShutter":a.status(500).send({success:!1,errormsg:"not implemented"});break;case"setSetPoint":a.type("json");var o={url:u()+"?type=setused&idx="+n+"&used=true&setpoint="+t+"&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({ success:!1,errormsg:t.message})}});break;case"launchScene":a.type("json");var p=n.match(/^SC(\d+)/),o={url:u()+"?type=command&param=switchscene&idx="+p[1]+"&switchcmd=On&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break;case"setColor":a.type("json");var o={url:u()+"?type=command&param=setcolbrightnessvalue&idx="+n+"&hex="+t.substr(2,6).toUpperCase()+"&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break;case"setChoice":if(n.match(/^S/)){var p=n.match(/^SC(\d+)/);a.type("json");var o={url:u()+"?type=command&param=switchscene&idx="+p[1]+"&switchcmd="+t+"&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break}if(10===ue[n].Action){a.type("json");var l=0;l=10*ue[n].Selector.indexOf(t);var o={url:u()+"?type=command&param=switchmodal&idx="+n+"&status="+t+"&action=1&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break}a.type("json");var l=0;l=10*ue[n].Selector.indexOf(t);var o={url:u()+"?type=command&param=switchlight&idx="+n+"&switchcmd=Set%20Level&level="+l+"&passcode="+he,headers:{"User-Agent":"request"}};$(o,function(e,n,i){if(e||200!=n.statusCode)a.status(500).send({success:!1,errormsg:"error"});else{var t=JSON.parse(i);"OK"==t.status?a.status(200).send({success:!0}):a.status(500).send({success:!1,errormsg:t.message})}});break;case"setMode":a.status(403).send({success:!1,errormsg:"not implemented"});break;default:a.status(403).send({success:!1,errormsg:"not implemented"})}}),se.get("/devices/:deviceId/:paramKey/histo/:startdate/:enddate",xe,function(e,a){a.type("json");var n=e.params.deviceId,i=e.params.paramKey,t=e.params.startdate,o=e.params.enddate,s=(o-t)/1e3,r="";if(n.match(/_L/)){var c;c=n.match(/(\d+)_L(.)/),n=c[1],r=c[2]||""}var p=R(n).toLowerCase(),l=p,d="&method=1";if("lux"!==p&&"energy"!==p||(p="counter",d="&method=1"),"air quality"!==p&&"p1 smart meter"!==p&&"Watts"!==i||(p="counter"),"general"===l){var m=U(n);p="Current"===m||"kWh"===m||"Solar Radiation"===m||"Visibility"===m||"Pressure"===m?"counter":"Percentage"}"temp"!==i&&"temp + humidity"!==p&&"hygro"!==i&&"humidity"!==p||(p="temp");var f;f=s<=172800?"day":s<1209600?"week":s<5270400?"month":"year",a.type("json");var h={url:u()+"?type=graph&sensor="+p+d+"&idx="+n+"&range="+f,headers:{"User-Agent":"request"}};$(h,function(e,n,o){if(e||200!=n.statusCode)a.status(403).send({success:!1,errormsg:"not implemented"});else{var s=JSON.parse(o),c=[];if(s.result){for(var p=0;p<s.result.length;p++){var u;for(var p in s.result[p])if("d"!==p)if(p.match(/_max/)||p.match(/_min/)){var d=/^([^_]*)_/;u=p.match(d).slice(1)}else u=p}if("tm"===u&&(u="te"),"temp"===i){u="te";for(var p=0;p<s.result.length;p++){var m=parseFloat(s.result[p][u]),h=X(s.result[p].d,"YYYY-MM-DD HH:mm:ss").valueOf(),v={date:h,value:m};c.push(v)}}else if("hygro"===i){u="hu";for(var p=0;p<s.result.length;p++){var m=s.result[p][u],h=X(s.result[p].d,"YYYY-MM-DD HH:mm:ss").valueOf(),v={date:h,value:m};c.push(v)}}else if("ConsoTotal"===i)if("p1 smart meter"===l){var x;1==r?(u="r1",x="r2"):2==r&&(u="v",x="v2");for(var p=0;p<s.result.length;p++){var m=parseFloat(s.result[p][u])+parseFloat(s.result[p][x]),h=X(s.result[p].d,"YYYY-MM-DD HH:mm:ss").valueOf(),v={date:h,value:m};c.push(v)}}else{u="v";for(var p=0;p<s.result.length;p++){var m=s.result[p][u],h=X(s.result[p].d,"YYYY-MM-DD HH:mm:ss").valueOf(),v={date:h,value:m};c.push(v)}}else if("Watts"===i){u="v"+r;for(var x="v"+(parseInt(r)+3),p=0;p<s.result.length;p++)if("month"===f||"year"===f){var m=(parseFloat(s.result[p][u])+parseFloat(s.result[p][x]))/2,h=X(s.result[p].d,"YYYY-MM-DD HH:mm:ss").valueOf(),v={date:h,value:m};c.push(v)}else{var m=s.result[p][u],h=X(s.result[p].d,"YYYY-MM-DD HH:mm:ss").valueOf(),v={date:h,value:m};c.push(v)}}else if("speed"===i){u="sp";for(var p=0;p<s.result.length;p++){var m=s.result[p][u],h=X(s.result[p].d,"YYYY-MM-DD HH:mm:ss").valueOf(),v={date:h,value:m};c.push(v)}}else{var g,y;"te"===u?(g="te",y="te"):"hu"===u?(g="hu",y="hu"):"mm"===u?(g="mm",y="mm"):"uvi"===u?(g="uvi",y="uvi"):(g=u+"_max",y=u+"_min");for(var p=0;p<s.result.length;p++)if("month"===f||"year"===f){var m=(parseFloat(s.result[p][g])+parseFloat(s.result[p][y]))/2,h=X(s.result[p].d,"YYYY-MM-DD HH:mm:ss").valueOf(),v={date:h,value:m};c.push(v)}else{var m=s.result[p][u],h=X(s.result[p].d,"YYYY-MM-DD HH:mm:ss").valueOf(),v={date:h,value:m};c.push(v)}}var b={};b.values=c,a.json(b)}else{var v={date:t,value:0};c.push(v);var b={};b.values=c,a.json(b)}}})}),se.get("/devices",xe,function(e,a){a.type("json");var n={url:u()+"?type=devices&filter=utility&order=Name",headers:{"User-Agent":"request"}},i={};$(n,function(e,a,n){if(!e&&200==a.statusCode){var t=JSON.parse(n);if("undefined"!=typeof t.result&&null!==t.result)for(var o=0;o<t.result.length;o++)"Electric"==t.result[o].SubType&&(i[t.result[o].ID]=t.result[o].Data.replace(" Watt",""))}});var n={url:u()+"?type=devices&filter=all&used=true&order=Name",headers:{"User-Agent":"request"}};$(n,function(e,n,t){if(e||200!=n.statusCode){var o=[];o.push(w({idx:"S00",Name:"Unable to connect to Domoticz",Data:u()})),o.push(w({idx:"S01",Name:"Please add this gateway in Setup/settings/Local Networks",Data:""}));var s={};s.devices=o,a.json(s)}else{var r=JSON.parse(t),o=[],c={id:"S0",name:"MyDomoAtHome",type:"DevGenericSensor"},d=[];d.push({key:"Value",value:pe,unit:"",graphable:"false"}),c.params=d,o.push(c);var R=l();if("undefined"!=typeof R&&null!==R&&p(pe,R.substring(1))<0){var c={id:"S1",name:"New version found",type:"DevGenericSensor"},d=[];d.push({key:"Value",value:ce,unit:"",graphable:"false"}),c.params=d,o.push(c)}for(var U=0;U<r.result.length;U++)switch("undefined"!=typeof r.result[U].ID&&null!==r.result[U].ID&&i[r.result[U].ID.substr(1-r.result[U].ID.length)]&&(r.result[U].Energy=i[r.result[U].ID.substr(1-r.result[U].ID.length)]),r.result[U].Type){case(r.result[U].Type.match(/Light/)||{}).input:switch(r.result[U].SwitchType){case"On/Off":case"Dusk Sensor":"RGB"==r.result[U].SubType?o.push(v(r.result[U])):"RGBW"==r.result[U].SubType?o.push(v(r.result[U])):o.push(m(r.result[U]));break;case"Push On Button":case"Push Off Button":o.push(h(r.result[U]));break;case"Switch":o.push(m(r.result[U]));break;case"Dimmer":"RGB"==r.result[U].SubType?o.push(v(r.result[U])):"RGBW"==r.result[U].SubType?o.push(v(r.result[U])):o.push(x(r.result[U]));break;case"Doorbell":o.push(x(r.result[U]));break;case"Blinds Inverted":case"Blinds Percentage Inverted":o.push(g(r.result[U]));break;case"Blinds Percentage":case"Blinds":case"Venetian Blinds EU":case"Venetian Blinds US":case"RollerTrol, Hasta new":o.push(y(r.result[U]));break;case"Motion Sensor":o.push(b(r.result[U]));break;case"Door Lock":case"Contact":o.push(k(r.result[U]));break;case"Smoke Detector":o.push(_(r.result[U]));break;case(r.result[U].SwitchType.match(/Siren/)||{}).input:o.push(m(r.result[U]));break;case"Selector":o.push(f(r.result[U]));break;case"Media Player":}break;case"Chime":o.push(x(r.result[U]));break;case"Blinds":case"RFY":switch(r.result[U].SwitchType){case"Blinds Inverted":case"Blinds Percentage Inverted":o.push(g(r.result[U]));break;case"On/Off":o.push(m(r.result[U]));break;case"Blinds Percentage":case"Blinds":case"RFY":case"Venetian Blinds EU":case"Venetian Blinds US":case"RollerTrol, Hasta new":o.push(y(r.result[U]))}break;case"Security":switch(r.result[U].SwitchType){case"Smoke Detector":o.push(_(r.result[U]));break;case"Security":o.push(w(r.result[U]))}break;case"P1 Smart Meter":switch(r.result[U].SubType){case"Energy":for(var V=M(r.result[U]),J=0;J<V.length;J++)o.push(V[J]);break;case"Gas":o.push(T(r.result[U]))}break;case"Lighting Limitless/Applamp":o.push(v(r.result[U]));break;case"YouLess Meter":switch(r.result[U].SubType){case"YouLess counter":o.push(M(r.result[U]))}break;case"Energy":case"Power":case"Usage":o.push(M(r.result[U]));break;case"Current":o.push(M(r.result[U]));break;case"Current/Energy":for(var V=L(r.result[U]),J=0;J<V.length;J++)o.push(V[J]);break;case"Temp":case"Temp + Humidity":case"Humidity":o.push(Y(r.result[U]));break;case"Temp + Humidity + Baro":for(var V=Y(r.result[U]),J=0;J<V.length;J++)o.push(V[J]);break;case"Rain":o.push(A(r.result[U]));break;case"UV":o.push(O(r.result[U]));break;case"Lux":o.push(F(r.result[U]));break;case"Air Quality":o.push(C(r.result[U]));break;case"Wind":o.push(P(r.result[U]));break;case"RFXMeter":switch(r.result[U].SwitchTypeVal){case 0:o.push(T(r.result[U]));break;case 1:o.push(T(r.result[U]));break;case 2:o.push(D(r.result[U]));break;case 3:o.push(S(r.result[U]))}break;case"General":switch(r.result[U].SubType){case"Percentage":o.push(j(r.result[U]));break;case"Voltage":case"Current":o.push(j(r.result[U]));break;case"kWh":o.push(M(r.result[U]));break;case"Pressure":case"Barometer":o.push(z(r.result[U]));break;case"Visibility":case"Solar Radiation":o.push(j(r.result[U]));break;case"Text":case"Alert":o.push(w(r.result[U]));break;case"Unknown":break;case"Waterflow":o.push(E(r.result[U]));break;case"Sound Level":o.push(q(r.result[U]));break;case"Counter Incremental":o.push(S(r.result[U]));break;case"Custom Sensor":o.push(j(r.result[U]))}break;case"Heating":switch(r.result[U].SubType){case"Evohome":o.push(N(r.result[U]))}break;case"Thermostat":o.push(H(r.result[U]));break;case"Scene":o.push(B(r.result[U]));break;case"Group":o.push(I(r.result[U]))}for(var V=W(),J=0;J<V.length;J++)o.push(V[J]);var s={};s.devices=o,a.json(s)}})}),se.use(function(e,a,n){var i=new Error("Not found");i.status=404,n(i)}),se.use(function(e,a,n,i){n.status(e.status||500),n.send({message:e.message,error:e})}),logger.info("Domoticz server: "+u()),logger.info("Node version: "+process.versions.node),logger.info("MDAH version: "+me+" "+pe),logger.info("OS version: "+Q.type()+" "+Q.platform()+" "+Q.release()),process.env.CONTAINER&&logger.info("Microservice: yes");var ge,ye=Q.networkInterfaces(),be=[];for(var ke in ye)for(var _e in ye[ke]){var we=ye[ke][_e];"IPv4"!==we.family||we.internal||(be.push(we.address),ge=we.address)}p(process.versions.node,"1.0.0")<0?logger.info("Hostname: "+Q.hostname()+" "+ge):logger.info("Hostname: "+Q.hostname()+" "+ge+" in "+Q.homedir()+" "+ve),process.once("SIGUSR2",function(){je(function(){process.kill(process.pid,"SIGUSR2")})}),process.once("SIGINT",function(){je(function(){process.kill(process.pid,"SIGINT")})});var je=function(){logger.warn("Received kill signal, shutting down gracefully."),Me.close(function(){logger.warn("Closed out remaining connections."),process.exit()}),setTimeout(function(){console.error("Could not close connections in time, forcefully shutting down"),process.exit()},2e3)},Me=V.createServer(se);Me.listen(se.get("port"),function(){logger.info("MDAH port: "+se.get("port"))}),Me.on("error",function(e){"EADDRINUSE"==e.code&&(logger.info("Address in use, retrying..."),setTimeout(function(){Me.close(),Me.listen(fe)},4e3))}),e.exports=se}).call(a,"/")},function(e,a,n){(function(e){!function(a,n){e.exports=n()}(this,function(){"use strict";function a(){return ci.apply(null,arguments)}function i(e){ci=e}function t(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function o(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function s(e,a){var n,i=[];for(n=0;n<e.length;++n)i.push(a(e[n],n));return i}function r(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function c(e,a){for(var n in a)r(a,n)&&(e[n]=a[n]);return r(a,"toString")&&(e.toString=a.toString),r(a,"valueOf")&&(e.valueOf=a.valueOf),e}function p(e,a,n,i){return Ce(e,a,n,i,!0).utc()}function u(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null}}function l(e){return null==e._pf&&(e._pf=u()),e._pf}function d(e){if(null==e._isValid){var a=l(e),n=pi.call(a.parsedDateParts,function(e){return null!=e});e._isValid=!isNaN(e._d.getTime())&&a.overflow<0&&!a.empty&&!a.invalidMonth&&!a.invalidWeekday&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&n),e._strict&&(e._isValid=e._isValid&&0===a.charsLeftOver&&0===a.unusedTokens.length&&void 0===a.bigHour)}return e._isValid}function m(e){var a=p(NaN);return null!=e?c(l(a),e):l(a).userInvalidated=!0,a}function f(e){return void 0===e}function h(e,a){var n,i,t;if(f(a._isAMomentObject)||(e._isAMomentObject=a._isAMomentObject),f(a._i)||(e._i=a._i),f(a._f)||(e._f=a._f),f(a._l)||(e._l=a._l),f(a._strict)||(e._strict=a._strict),f(a._tzm)||(e._tzm=a._tzm),f(a._isUTC)||(e._isUTC=a._isUTC),f(a._offset)||(e._offset=a._offset),f(a._pf)||(e._pf=l(a)),f(a._locale)||(e._locale=a._locale),ui.length>0)for(n in ui)i=ui[n],t=a[i],f(t)||(e[i]=t);return e}function v(e){h(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),li===!1&&(li=!0,a.updateOffset(this),li=!1)}function x(e){return e instanceof v||null!=e&&null!=e._isAMomentObject}function g(e){return e<0?Math.ceil(e):Math.floor(e)}function y(e){var a=+e,n=0;return 0!==a&&isFinite(a)&&(n=g(a)),n}function b(e,a,n){var i,t=Math.min(e.length,a.length),o=Math.abs(e.length-a.length),s=0;for(i=0;i<t;i++)(n&&e[i]!==a[i]||!n&&y(e[i])!==y(a[i]))&&s++;return s+o}function k(e){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function _(e,n){var i=!0;return c(function(){return null!=a.deprecationHandler&&a.deprecationHandler(null,e),i&&(k(e+"\nArguments: "+Array.prototype.slice.call(arguments).join(", ")+"\n"+(new Error).stack),i=!1),n.apply(this,arguments)},n)}function w(e,n){null!=a.deprecationHandler&&a.deprecationHandler(e,n),di[e]||(k(n),di[e]=!0)}function j(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function M(e){return"[object Object]"===Object.prototype.toString.call(e)}function L(e){var a,n;for(n in e)a=e[n],j(a)?this[n]=a:this["_"+n]=a;this._config=e,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function S(e,a){var n,i=c({},e);for(n in a)r(a,n)&&(M(e[n])&&M(a[n])?(i[n]={},c(i[n],e[n]),c(i[n],a[n])):null!=a[n]?i[n]=a[n]:delete i[n]);return i}function T(e){null!=e&&this.set(e)}function D(e){return e?e.toLowerCase().replace("_","-"):e}function E(e){for(var a,n,i,t,o=0;o<e.length;){for(t=D(e[o]).split("-"),a=t.length,n=D(e[o+1]),n=n?n.split("-"):null;a>0;){if(i=Y(t.slice(0,a).join("-")))return i;if(n&&n.length>=a&&b(t,n,!0)>=a-1)break;a--}o++}return null}function Y(a){var i=null;if(!vi[a]&&"undefined"!=typeof e&&e&&e.exports)try{i=fi._abbr,n(408)("./"+a),z(i)}catch(t){}return vi[a]}function z(e,a){var n;return e&&(n=f(a)?q(e):A(e,a),n&&(fi=n)),fi._abbr}function A(e,a){return null!==a?(a.abbr=e,null!=vi[e]?(w("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale"),a=S(vi[e]._config,a)):null!=a.parentLocale&&(null!=vi[a.parentLocale]?a=S(vi[a.parentLocale]._config,a):w("parentLocaleUndefined","specified parentLocale is not defined yet")),vi[e]=new T(a),z(e),vi[e]):(delete vi[e],null)}function O(e,a){if(null!=a){var n;null!=vi[e]&&(a=S(vi[e]._config,a)),n=new T(a),n.parentLocale=vi[e],vi[e]=n,z(e)}else null!=vi[e]&&(null!=vi[e].parentLocale?vi[e]=vi[e].parentLocale:null!=vi[e]&&delete vi[e]);return vi[e]}function q(e){var a;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return fi;if(!t(e)){if(a=Y(e))return a;e=[e]}return E(e)}function F(){return mi(vi)}function C(e,a){var n=e.toLowerCase();xi[n]=xi[n+"s"]=xi[a]=e}function P(e){return"string"==typeof e?xi[e]||xi[e.toLowerCase()]:void 0}function H(e){var a,n,i={};for(n in e)r(e,n)&&(a=P(n),a&&(i[a]=e[n]));return i}function B(e,n){return function(i){return null!=i?(N(this,e,i),a.updateOffset(this,n),this):I(this,e)}}function I(e,a){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+a]():NaN}function N(e,a,n){e.isValid()&&e._d["set"+(e._isUTC?"UTC":"")+a](n)}function R(e,a){var n;if("object"==typeof e)for(n in e)this.set(n,e[n]);else if(e=P(e),j(this[e]))return this[e](a);return this}function U(e,a,n){var i=""+Math.abs(e),t=a-i.length,o=e>=0;return(o?n?"+":"":"-")+Math.pow(10,Math.max(0,t)).toString().substr(1)+i}function W(e,a,n,i){var t=i;"string"==typeof i&&(t=function(){return this[i]()}),e&&(ki[e]=t),a&&(ki[a[0]]=function(){return U(t.apply(this,arguments),a[1],a[2])}),n&&(ki[n]=function(){return this.localeData().ordinal(t.apply(this,arguments),e)})}function V(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function J(e){var a,n,i=e.match(gi);for(a=0,n=i.length;a<n;a++)ki[i[a]]?i[a]=ki[i[a]]:i[a]=V(i[a]);return function(a){var t,o="";for(t=0;t<n;t++)o+=i[t]instanceof Function?i[t].call(a,e):i[t];return o}}function G(e,a){return e.isValid()?(a=$(a,e.localeData()),bi[a]=bi[a]||J(a),bi[a](e)):e.localeData().invalidDate()}function $(e,a){function n(e){return a.longDateFormat(e)||e}var i=5;for(yi.lastIndex=0;i>=0&&yi.test(e);)e=e.replace(yi,n),yi.lastIndex=0,i-=1;return e}function K(e,a,n){Hi[e]=j(a)?a:function(e,i){return e&&n?n:a}}function Z(e,a){return r(Hi,e)?Hi[e](a._strict,a._locale):new RegExp(Q(e))}function Q(e){return X(e.replace("\\