// @Liv-in-sky Okt. 2019 // WICHTIG // hier muss die instanz der eigenen datenpunkte angegeben werden oder zusätzlich, die man prüfen möchte , "alexa2.0" //oder auch nur einzelne ornder in der datenstruktur z.b. "javascript.2.WLANUnifi" const instanzArr=[ "controll-own.0", "Eigene_Datenpunkte.0"]; // beispiel const instanzArr=[ "eigeneDatenpunkte.0", "ping.0",]; const blackList=["controll-own.0.AAATEST.TestStart4","controll-own.0.test"] ; //ohne filter: const blacklist=[] //um verzeichnisse, einzelne datenpunkte // auszufiltern var color_in_table="black" // Farbe text in webseite let schriftart="Helvetica"; // möglich: Helvetica,Serif var color_gradient1="#819FF7"; // Hintergrund webseite var colorHeadlines="darkblue"; // Farbe Überschriften in der VIS Anzeige var colorHeadlinesDP="#36d5ec "; // Farbe Überschriften in der WebSeite Anzeige var warnFarbe = "#36d5ec"; //Farbe für Warnungen in vis und Webseite //------------------------------------------AB HIER NICHTS ÄNDERN-------------------------------------------------------- const versionNr = "13112019-2.1" var warnColor = warnFarbe ; const format = "Putzer"; var htmlTable=""; var htmlReset="

!!! ohne Javascript Instanzen !!! kann enabled werden

" var htmlHeaders = "style=\"color:"+colorHeadlines+";\""; var htmlHeadersDP = "style=\"color:"+colorHeadlinesDP+";\""; const htmlHeadersRed = "style=\"color:#D86C62;\""; const htmlHeadersDPRed = "style=\"color:#F4853D;\""; // var htmlOhneAnzahl="

!!! ohne DatenpunktZählung !!! kann enabled werden

" var allInstArr=[]; var allJSInst=[]; var instanzArrHelp=[]; const dpPrefix = "javascript."+ instance +"."; var mylogs=false; var htmlDP=[]; var htmlDP_T=[]; var htmlDP_W=[]; var htmlDP_A=[]; var htmlDP_I=[]; var htmlDP_C=[]; var htmlDP_B=[]; var htmlDP_IN=[]; var htmlDP_SH=[]; let htmlDP_SH2=[]; let htmlDP_SH3=[]; var htmlMSG=[]; var htmlMSG_T=[]; var htmlMSG_W=[]; var htmlMSG_A=[]; var htmlMSG_I=[]; var htmlMSG_C=[]; var htmlMSG_B=[]; var htmlMSG_IN=[]; var htmlMSG_SH=[]; let htmlMSG_SH2=[]; let htmlMSG_SH3=[]; var counterAll=0; var directSearch=false; var switchOn=false; var helplogs=true; var htmlHelper=""; var htmlHelperFile=""; var alarmInstanz1=false; var unusedDayFactor ; var unusedDay; var aliasArr; var ali; var monster; let java; let instanzAnzahl; var ohneInstanz; var endehtmlConst; var endehtmlDPConst; var endehtml ; var endehtmlDP ; let ausgabeInstanzen=""; let werti; let typie; let smartHome; let smartArr=[]; const arrKeys = ["en","de","ru","pt","nl","fr","it","es","pl","zh-cn"]; createState(dpPrefix + "ProofingDatapoints.HTMLTable", { name: 'HTMLTable', type: 'string', read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.ScriptVersion", versionNr,{ name: 'ScriptVersion', type: 'string', read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.RunScript",false, { name: 'RunScript', type: 'boolean', role:"switch", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.JavaInstanzCheck", true,{ name: 'JavaInstanzCheck', type: 'boolean', role:"switch", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.ObjectAnzahlCheck", true,{ name: 'ObjectAnzahlCheck', type: 'boolean', role:"switch", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.MonsterSearch", false,{ name: 'MonsterSearch', type: 'boolean', role:"switch", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.ohneInstanzAnzeige", false,{ name: 'ohneInstanzAnzeige', type: 'boolean', role:"switch", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.OrdnerCheck", "", { name: 'OrdnerCheck', type: 'string', read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.RunSuccessful", false, { name: 'RunSuccessful', type: 'boolean', role:"state", read: true, write: false,}); createState(dpPrefix + "ProofingDatapoints.LatestChangeDP", false, { name: 'LatestChangeDP', type: 'boolean', role:"state", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.LatestChangeDP_Factor", 100, { name: 'LatestChangeDP_Factor', type: 'number', role:"state", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.CheckAliase", false, { name: 'Check_Alias_0_Ordner', type: 'boolean', role:"state", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.WertAnalyse", true, { name: 'WertAnalyse', type: 'boolean', role:"state", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.TypeAnalyse", true, { name: 'TypeAnalyse', type: 'boolean', role:"state", read: true, write: true,}); createState(dpPrefix + "ProofingDatapoints.SmartHomeAnalyse", false, { name: 'SmartHomeAnalyse', type: 'boolean', role:"state", read: true, write: true,}); //------------------------------------------CHECK INSTANZEN-------------------------------------------------------- async function instanzCount(){ log("_______bin in check Instanz"); if (!directSearch) {await calmDown(800);} else {await calmDown(1200);} return new Promise(async (resolve, reject) => { try{ htmlDP_IN=[]; htmlMSG_IN=[]; allJSInst=[]; allInstArr=[]; instanzArrHelp=[]; // var ohneInstanz = getState(dpPrefix + "ProofingDatapoints.ohneInstanzAnzeige").val; var counter=0; var counter2=0;var counter3=0; $('system.adapter.*.alive').each(function(id, i) { var ida = id.split('.'); allInstArr.push(ida[2]+"."+ida[3]); if(ida.includes("javascript")) {allJSInst.push(ida[2]+"."+ida[3]);} //else {allInstArr.push(ida[2]+"."+ida[3]);} if (!ohneInstanz) { if( !(id.includes("vis") || id.includes("devices"))){ counter++; if (getState(id).val==null) {counter2++; mylog(ida[2]+ida[3]+"--------------------der hier wurde nie gestartet"); htmlDP_IN.push(ida[2]+"."+ida[3]); htmlMSG_IN.push("Instanzen ohne Werte");} //else{instanzArr.push(ida[2]+"."+ida[3])} if (getState(id).val==false) {counter3++;mylog(ida[2]+ida[3]+"-----------------------der hier ist ausgeschalten"); if(!id.includes("ical")){ htmlDP_IN.push(ida[2]+"."+ida[3]); //log(ida[2]+"."+ida[3],"error"); htmlMSG_IN.push("-erro-nicht aktiviert");}else counter3--;} /*else{instanzArr.push(ida[2]+"."+ida[3])}*/ }} }); if (!ohneInstanz ) { mylog("______________________________________________Anzahl Instanzen: " + counter.toString()); htmlDP_IN.push(""); htmlMSG_IN.push(""); htmlDP_IN.push("Anzahl Instanzen"); htmlMSG_IN.push(counter.toString()); mylog("______________________________________________Anzahl gestoppter Instanzen ohne Werte: " + counter2.toString()) htmlDP_IN.push("Instanzen ohne Werte"); htmlMSG_IN.push(counter2.toString()); htmlDP_IN.push("Instanzen nicht aktiviert"); htmlMSG_IN.push(counter3.toString()); htmlDP_IN.push("-col-INSTANZ INFO"); htmlMSG_IN.push(""); htmlDP_IN.push(""); htmlMSG_IN.push(""); } // ende ohne instanz //log(instanzArr.length+"==================="+instanzArr.toString(),"error"); // setzte die zu prüfenden instanzen instanzArr.push("0_userdata.0"); let caseHelper=0; instanzArrHelp=[]; // log("=====durchsuchende Instanzen=======1=============: + "+ instanzArrHelp.toString()); if (directSearch ) caseHelper=1; if (java && !directSearch) caseHelper=2 if (monster) caseHelper=3 switch (caseHelper) { case 0: // suche mit instanzArr instanzArrHelp=instanzArr; //log("=====durchsuchende Instanzen=========2===========: + "+ instanzArrHelp.toString()+" alJSArr : " +allJSInst.toString() ); ; break case 1: // suche mit diretsuche - nur was im datenpunkt steht let oChk =getState(dpPrefix + "ProofingDatapoints.OrdnerCheck").val; instanzArrHelp.push(oChk); //log("=====durchsuchende Instanzen=========2===========: + "+ instanzArrHelp.toString()); ausgabeInstanzen=oChk; ; break case 2: // suche mit instanzArr und java instanzen ABER nur, wenn directsearch ist aus instanzArrHelp=[]; // instanzArrHelp=instanzArr; for (var i=0; i"} log("ausgabew: "+ausgabeInstanzen,"error"); //log(instanzArr.length+"==================="+instanzArr.toString(),"error"); //log("=====durchsuchende Instanzen=======4=============: + "+ instanzArrHelp.toString()); //log("ausgabew: "+ausgabeInstanzen,"error"); if (htmlDP_I.length != htmlMSG_I.length) {console.log("-------- !!! FEHLER in AUSGABE CHECK INSTANZEN : "+ "AnzahlDP: "+htmlDP_I.length+" AnzahlMSG: "+htmlMSG_I.length,"error");} log("_______bin raus aus check Instanz"); setState(dpPrefix + "ProofingDatapoints.HTMLTable",htmlPart1); resolve(); } catch (e) {console.log("------------ERROR: "+e ); reject(e); return e} }); //end promise } // end function //------------------------------------------CHECK TYPE -- ZUORDNUNG-------------------------------------------------------- async function checkTypes() { return new Promise(async (resolve, reject) => { try { helplog("bin in check types"); if (!directSearch) {await calmDown(800);} else {await calmDown(1200);} var counter=0; var select=[]; htmlMSG_I.push(""); htmlDP_I.push(""); htmlMSG_B=[]; htmlDP_B=[]; // for(var name in blackList){ for (let i= blackList.length-1; i>-1; i--){ htmlDP_B.push("BlackList Entry"+[i]); htmlMSG_B.push(blackList[i] );} // if (!java) blackList.push("javascript") select=instanzArrHelp; //log("Instanz : " + select.toString(),"error" ); for(let name in select){ await calmDown(50); var sub= select[name].substring(select.length-1, select.length); //log("---------: "+sub);//console.log("----------select: "+select); //mylog(select); $(select[name]+".*").each(function (id, i) { counter++ let blisthelper=false; // BLACKLIST bearbeitung for(let blister in blackList){ // log("indexof : " + id.indexOf(blackList[blister]) + " id : "+ id + " blister : " + blackList[blister],"error" ); if (id.indexOf(blackList[blister]) >=0) { blisthelper=true ; /*log(" die blacklist: "+blackList[blister] + " die ID dazu : "+id,"error");*/} } //ende blacklist // try{ //if(getObject(id).common.hasOwnProperty("alias")) console.log(id); // TEST ABSTURZ // } catch (e) {console.log("------------ERROR: "+e + "bei id: " + id ); reject(e); return alarmInstanz1=true} if ((!id.includes('scriptEnabled') && !id.includes('scriptProblem') && !blisthelper) /*&& getState(id).val !== null && !id.includes('Log-Script') && !id.includes('Ereignisliste') && !id.includes('GETPROCESS')*/ ){ if (!JSON.stringify(getObject(id)).includes("type") && !JSON.stringify(getObject(id)).includes("common") /*&& !JSON.stringify(getObject(id)).includes("meta")*/ ) { //console.log("===============id nach stringify - kein value zu: "+id); var valType = typeof getState(id).val; htmlDP_I.push((id+": "+valType).substring(0,150)); htmlMSG_I.push("-erro-missing DP-OBEJCT !!" );} else { //console.log("status2-checkType"); // log(JSON.stringify(getObject(id).common),"error"); var jsonHelp=JSON.parse(JSON.stringify(getObject(id).common)) if(!JSON.stringify(jsonHelp).includes("type")) { htmlDP_I.push((id).substring(0,150)); htmlMSG_I.push("-erro-missing common.type entry !!" );} else { var dpType = getObject(id).common.type; var valType = typeof getState(id).val; if(getObject(id).common.type ==null || getObject(id).common.type == undefined || getObject(id).common.type =="") { // PrÜFUNG common.type //console.log("shit happens","error"); htmlDP_I.push(id.substring(0,150)); htmlMSG_I.push("-col-ACHTUNG common.type fehlt"); } else { let typesIOhelp=false; // VERGLEICH/PRÜFUNG MIT ALLEN TYPES for (var i =0; iACHTUNG common.type falsch: "+dpType+"");}} if (getState(id).val !== null && !(typeof getState(id).val == "string" && getState(id).val=="")) { // ANZEIGE ALLER DATENPUNKTE MIT STATE !=null if(dpType != "mixed" && !(dpType=="string" && valType=="number") && !(dpType=="object" && valType=="string")) { if(dpType !== valType && !(dpType == 'array' && valType == 'object' && dpType == 'meta.user') /*&& !(dpType =='text' && valType=='string') && !(dpType =='string' && valType=='text')*/ ) { //mylog(id + ': Datenpunkttyp: ' + dpType + ', Wert: ' + valType); htmlDP_I.push((id+": "+valType).substring(0,150)); htmlMSG_I.push(dpType );} }//end of mixed } //end val ungleich null }//ende test ob common.type exists } // end of check object includes name and type - check of existing DP }//ende if scriptenabled }); //ende selektor htmlDP_I.push("ID + IST-WERT"); htmlMSG_I.push("SOLL-WERT"); htmlDP_I.push("-col-markierte common.type-Werte der Instanz"); htmlMSG_I.push("-col-"+select[name]+""); htmlDP_I.push("");htmlMSG_I.push(""); helplog("fertg bei checkType mit: "+select[name]+ " und " + counter.toString()+ " Durchläufen bisher"); if (htmlDP_I.length != htmlMSG_I.length) {console.log("-------- !!! FEHLER in AUSGABE CHECK WERTE : "+ "AnzahlDP: "+htmlDP_I.length+" AnzahlMSG: "+htmlMSG_I.length,"error");} } //ende for htmlMSG_I.push("-col-ist common.type richhtig definiert ?"); htmlDP_I.push("-col-DP-ANALYSE IN TYPE-CONFIG"); setState(dpPrefix + "ProofingDatapoints.HTMLTable",htmlPart4); helplog("fertg in checkType mit CheckType"); resolve(); } catch (e) {console.log("------------ERROR: "+e ); reject(e); return e} }); //end promise } //end function //------------------------------------------CHECK WERTE-------------------------------------------------------- async function checkWerte() { return new Promise(async (resolve, reject) => { try{ helplog("bin in check Werte"); if (!directSearch) {await calmDown(800);} else {await calmDown(1200);} var counter=0; var jetzt=new Date().getTime(); var error1; selectW=[]; htmlDP_W=[];; htmlMSG_W=[]; var selectW = instanzArrHelp; //if (java && !monster && !ohneInstanz && !directSearch) {for ( var js in allJSInst) {selectW.push(allJSInst[js]);}} for(let name in selectW){ mylog(selectW); await calmDown(50); $(selectW[name]+".*").each(function (id, i) { try{ counter++ error1=id; //console.log(getObject("abc").common.hasOwnProperty("type")); // TEST ABSTURZ // console.log("statusalias"); if ((!id.includes('scriptEnabled') && !id.includes('scriptProblem')) /*&& !id.includes('alias.0') ) && !id.includes('Ereignisliste') && !id.includes('GETPROCESS')*/ ){ //var dpType = getObject(id).common.type; if (!JSON.stringify(getObject(id)).includes("type") && !JSON.stringify(getObject(id)).includes("name") ) { //CHECK MISSING OBJECT)) try{ valType = typeof getState(id).val; //console.log(getObject("abc").common.hasOwnProperty("type")); // TEST ABSTURZ } catch (e) {console.log("------------ERROR: "+e + "bei id: " + id); return alarmInstanz1=true} htmlDP_W.push((id+": "+valType).substring(0,150)); htmlMSG_W.push("-erro-missing DP-OBEJCT !!" );} else { // console.log("status0"); var valType = getState(id).val; if(valType === null && !unusedDay) {mylog(id + ': Datenpunkttyp: ' /*+ dpType */+ ", Wert: "+valType); htmlDP_W.push(id.substring(0,150)); var ddd = jetzt-getObject(id).ts; htmlMSG_W.push("not used & created at: " + Math.floor((ddd)/1000/60/60/24)+"d "+Math.floor((ddd)/1000/60/60 %24)+"h "+Math.floor((ddd)/1000/60 %60)+"m"); } if (unusedDay){//console.log( (jetzt - (86400000 * unusedDayFactor))-getObject(id).ts + id + getState(id).ts ); var ddd = jetzt-getState(id).ts; if ( (jetzt - (86400000 * unusedDayFactor)) - getState(id).lc > 0 ){ htmlDP_W.push(id.substring(0,150)); htmlMSG_W.push("created: "+ Math.floor((ddd)/1000/60/60/24)+"d "+Math.floor((ddd)/1000/60/60 %24)+"h "+Math.floor((ddd)/1000/60 %60)+"m"+" ---> lastChange over "+ unusedDayFactor +" days"); }} // console.log("status2"); try{ if(getObject(id).common.hasOwnProperty("states") /*&& JSON.stringify(getObject(id).common.states)!=null && JSON.stringify(getObject(id).common.states)!=undefined*/ ){ //CHECK STATES //console.log("======2=============no type: "+id +"object: "+JSON.stringify(getObject(id).common.states)); var jsonHelp=JSON.parse(JSON.stringify(getObject(id).common.states)) if(!JSON.stringify(jsonHelp).includes(null) && JSON.stringify(jsonHelp).includes(":")) { // CHECK has definition of STATES try{ var helpStates= Object.keys(getObject(id).common.states); } catch (e) {console.log("------------ERROR: "+e + "bei id: " + id); extendObject(id, {common: {states:{"0":"script"}}})} var helpType= getObject(id).common.type; // console.log(helpType);//console.log(helpStates.toString()); // console.log(helpStates[0] + helpStates[1] ); if (helpType=="number" || helpType=="boolean") { // check type of state var alarmString=false;var alarmString2=false; for (var i=0; i < helpStates.length ;i++){ //console.log( helpStates[i]); mylog(isNaN(helpStates[i]).toString()) ; if (isNaN(helpStates[i]) && helpType=="number") alarmString=true; //type number - stehen da nummern drin var helpTypeBool= helpStates[i].toString() + helpType; if (helpType=="boolean") {if (helpTypeBool !="falseboolean" && helpTypeBool != "trueboolean") alarmString2=true;} //type boolean - stehen da booleans } if (alarmString){ htmlDP_W.push(id.substring(0,150)); htmlMSG_W.push("-erro-ACHTUNG Multistate must be number")} if (alarmString2){ htmlDP_W.push(id.substring(0,150)); htmlMSG_W.push("-erro-ACHTUNG Multistate must be boolean")} } else {htmlDP_W.push(id.substring(0,150)); htmlMSG_W.push("-erro-ACHTUNG Multistate wrong Def. - missing states.type")} } else {mylog ("hat keine states def. "+id); htmlDP_W.push(id.substring(0,150)); htmlMSG_W.push("-erro-ACHTUNG MultiState hat keine States"); } }//ende states check } catch (e) {console.log("------------ERROR: "+e + "bei id: " + id); return alarmInstanz1=true} } //ende check missing object } // ende script enabled check } catch (e) {console.log("------------ERROR: "+e + "bei id: " + id); return alarmInstanz1=true} }); // ende selct.each htmlDP_W.push("-col-markierte Werte der Instanz"); htmlMSG_W.push("-col-"+selectW[name]+""); htmlDP_W.push("");htmlMSG_W.push(""); helplog("bin raus aus check Werte bei :"+ selectW[name]); } //ende for htmlDP_W.push(""); htmlMSG_W.push(""); htmlDP_W.push("-col-ANALYSE WERTE PRO INSTANZ"); htmlMSG_W.push("-col-MultiState-Check, zeitliche Angaben"); if (htmlDP_W.length != htmlMSG_W.length) {console.log("-------- !!! FEHLER in ANZAHL AUSGABE CHECK WERTE : "+ "AnzahlDP: "+htmlDP_W.length+" AnzahlMSG: "+htmlMSG_W.length,"error");} helplog("bin raus aus check Werte "); setState(dpPrefix + "ProofingDatapoints.HTMLTable",htmlPart3); resolve("ok"); } catch (e) {console.log("------------ERROR: "+e ); reject(e); return e} }); //end promise } //end function //--------------------------------------------------------------------------------------------------------------------- function mylog(message) { if(mylogs) console.log(message); }function helplog(message) { if(helplogs) console.log(message); } //----------------------------------------------Direct Suchen on({id:dpPrefix + "ProofingDatapoints.OrdnerCheck", ack: false, change: "any"}, function (obj) { directSearch=true; // instanzArrHelp=[]; setState(dpPrefix + "ProofingDatapoints.RunScript",true); }); //-----------------------------------------------ALIAS CHECK------------------------------------------------ async function checkAlias() { return new Promise(async (resolve, reject) => { try{ if (!directSearch) {await calmDown(800);} else {await calmDown(1200);} if(ali) { helplog("bin in check aliase"); let counter=0; htmlDP_A=[]; htmlMSG_A=[]; var jetzt=new Date().getTime(); var aliasArrAlarm aliasArr=[]; var aliasArrOrg=[]; for(var l=0;lACHTUNG wrong DP assignment: ");}} //log(aliasArr.toString(),"error"); htmlDP_A.push("ALIAS DP ASSIGNMENT"); htmlMSG_A.push("ALIAS STATUS"); htmlDP_A.push("-col-geprüftes Alias"); htmlMSG_A.push("-col-Anzahl: "+aliasArr.length+""); htmlDP_A.push(""); htmlMSG_A.push(""); htmlMSG_A.push(""); htmlDP_A.push("-col-ANALSYSE ALIAS WERTE"); if (htmlDP_A.length != htmlMSG_A.length) {console.log("-------- !!! FEHLER in ANZAHL AUSGABE CHECK ALIAS : "+ "AnzahlDP: "+htmlDP_A.length+" AnzahlMSG: "+htmlMSG_A.length,"error");} helplog("bin raus aus check aliase"); } //ali check setState(dpPrefix + "ProofingDatapoints.HTMLTable",htmlPart5); resolve(); } catch (e) {console.log("------------ERROR: "+e ); reject(e); return e} }); //end promise } //end function //---------------------------------------CHECK SMART-IOT------------------------------------------------ async function checkSmartIot() { return new Promise(async (resolve, reject) => { try { helplog("bin in check SmartIot"); if (!directSearch) {await calmDown(800);} else {await calmDown(1200);} var counter=0; var select=[]; htmlDP_SH=[];; htmlMSG_SH=[]; let counterSH=0; let counterSH2=0; let counterSH3=0; smartArr=[]; htmlDP_SH2=[]; htmlMSG_SH2=[]; let html_SH_ALL=[]; let htmlObj=[]; instanzArrHelp=[]; for (var i=0; i=0) { blisthelper=true ; } } //ende blacklist if ((!id.includes('scriptEnabled') && !id.includes('scriptProblem') && !blisthelper) ) { if (!JSON.stringify(getObject(id)).includes("type") && !JSON.stringify(getObject(id)).includes("common") /*&& !JSON.stringify(getObject(id)).includes("meta")*/ ) { //console.log("===============id nach stringify - kein value zu: "+id); } else { counterSH2++; if(smartHome){ // SMARTHOMEcheck if(getObject(id).common.hasOwnProperty("smartName") ){ counterSH++; var helpStates= Object.keys(getObject(id).common.smartName); var helpStates2= typeof getObject(id).common.smartName; // log("welche einträge : "+ Object.keys(getObject(id).common.smartName).toString()+" id: "+id + "länge keys : " + helpStates.length); if (helpStates.length==0) {htmlDP_SH.push(""); htmlMSG_SH.push("-col-DeviceName not defined");}//htmlDP_SH.push("");htmlMSG_SH.push("");} if (helpStates.length>=1 && helpStates2 == "string") {htmlDP_SH.push(""); htmlMSG_SH.push("-col- SmartName-Object missing");htmlDP_SH.push(id); htmlMSG_SH.push("-col-no Object");htmlDP_SH.push(""); htmlMSG_SH.push("");} if (helpStates.length>=1 && helpStates2 != "string") { //Array für de einträge !Object.keys(getObject(id).common.smartName).includes("smartType") for(var index in helpStates ){ if(helpStates[index]!="" && arrKeys.includes(helpStates[index])){ var objectInhalt = getObject(id).common.smartName[helpStates[index]]; //MAIN OBJECT-Inhalt //log(smartArr.toString()+"_____________bin in ARRKEY : "+objectInhalt.trim()); if(getObject(id).common.smartName[helpStates[index]].match(/,/g)) { var helpSplit2=objectInhalt.split(','); for(var index4 in helpSplit2){ //log("----bin in den gesplitteten : " + helpSplit2[index4]); if (smartArr.includes(helpSplit2[index4].trim())){ //log("in smartArr : "+" duplicate bei gesplittet : "+objectInhalt.trim(),"error"); htmlDP_SH.push(""); htmlMSG_SH.push("-erro-in "+helpStates[index]+" with "+helpSplit2[index4]+": Duplicate Smart Definition"); htmlDP_SH3.push("Duplicate in Key: "+helpStates[index]+" -> name: "+helpSplit2[index4]); htmlMSG_SH3.push("-col-ID: "+id); } } } // end split und for alle elemente in key else {if (smartArr.includes(objectInhalt.trim())){ // log("_____________bin da2 : "+objectInhalt.trim()); // log("in smartArr : "+" duplicate bei einzelwerten : "+objectInhalt.trim(),"error"); htmlDP_SH.push(""); htmlMSG_SH.push("-erro-in "+helpStates[index]+" with "+objectInhalt+": Duplicate Smart Definition"); htmlDP_SH3.push("Duplicate in Key: "+helpStates[index]+" -> name: "+objectInhalt); htmlMSG_SH3.push("-erro-ID: "+id);} } splitKeys(objectInhalt, getObject(id)._id ); // bringe key inhalt in smartArr } // ende if key ist in arrKey (it,de,en) } //ende for alle key entries smartArr = smartArr.filter(function(item, pos, self) { // Doppelte Einträge in vergleich-Array finden return self.indexOf(item) == pos;}) } // ende hat de == 2 if (Object.keys(getObject(id).common.smartName).includes("smartType") && helpStates2 != "string"){ for(var index in helpStates ){ if(helpStates[index]!="smartType" && helpStates[index]!=""){ htmlDP_SH.push(""); htmlMSG_SH.push(helpStates[index]+": "+getObject(id).common.smartName[helpStates[index]]); } } // log("wert: "+getObject(id).common.smartName[helpStates[index]]); htmlDP_SH.push(id.substring(0,150)); htmlMSG_SH.push("SmartType: "+getObject(id).common.smartName.smartType);htmlDP_SH.push("");htmlMSG_SH.push(""); } else { if(helpStates2 != "string") { for(var index in helpStates ){ if(helpStates[index]!="smartType" && helpStates[index]!=""){ htmlDP_SH.push(""); htmlMSG_SH.push(helpStates[index]+": "+getObject(id).common.smartName[helpStates[index]]);} } //log("wert: "+getObject(id).common.smartName[helpStates[index]]); htmlDP_SH.push(id.substring(0,150)); htmlMSG_SH.push("-col-no Type available");htmlDP_SH.push("");htmlMSG_SH.push(""); }} }//ende hat property smartname }// ende if smarthome } // ende datenpunkt existent }//ende if scriptenabled }); //ende selektor } //ende for name in select // for (var index3=0; index3 beta[1].toUpperCase().trim()) return -1; if (beta[1].toUpperCase().trim() > alpha[1].toUpperCase().trim()) return 1; return 0; }); // Schreibe Duplizierte Werte in Arr let helpLeer=["", ""]; html_SH_ALL.push(helpLeer); for (let i=0; iGesamt Datenpunkte Smart: "+counterSH+" (check blacklist!)"); } htmlDP_SH.push("-col-SMARTHOME DEFINITION"); htmlMSG_SH.push("-col-SmartName Type-Definition"); //log("ARRAY für SMART : "+smartArr.toString(),"error"); //log("SH: "+counterSH+" SH2: "+ counterSH2+" SH3: "+counterSH3, "error"); helplog("fertg in mit SmartIot"); if (htmlDP_SH.length != htmlMSG_SH.length) {console.log("-------- !!! FEHLER in ANZAHL AUSGABE SMARTNAME WERTE : "+ "AnzahlDP: "+htmlDP_SH.length+" AnzahlMSG: "+htmlMSG_SH.length,"error");} resolve(); } catch (e) {console.log("------------ERROR: "+e ); reject(e); return e} }); //end promise } //end function //----------------------------function split keys------------------- function splitKeys(key,id) { if(key.match(/,/g)) { //log("-----"+key.toString()); var helpSplit=key.split(','); //log ("----- gesplittet: "+ helpSplit.toString()); for (var index2=0; index2SmartName ID: "+id); htmlMSG_SH2.push(helpSplit[index2]);smartArr.push(helpSplit[index2].trim());} else{htmlDP_SH2.push("-col-SmartName ID: "+id); htmlMSG_SH2.push("-erro-maybe missing key entry (comma at end)");} }}} else{ htmlDP_SH2.push("-col-SmartName: "+id); htmlMSG_SH2.push(key); //log ("----- einmal: "+ key); if (! smartArr.includes(key.trim())) { smartArr.push(key.trim()); }} // for (var index3=0; index3 { setTimeout(() => res("Waiting done!"), howLong) // setTimeout(() => res(), howLong) }); // wait until the promise returns us a value let result = await promise; // "Now it's done!" //log(result); } //-------------------------------------------------write stuff---------------------------------------------- async function writeStuff() { //ab hier geht es um die ausgabe //zusammenführen htmlDP.push("========================================="); htmlMSG.push("============================================"); if (smartHome) {for (var i=0; iBLACKLIST WERTE"); htmlDP.push("========================================="); htmlMSG.push("============================================"); if (htmlDP.length != htmlMSG.length) {console.log("-------- !!! FEHLER in ANZAHL DATENAUSGABE : "+ "AnzahlDP: "+htmlDP.length+" AnzahlMSG: "+htmlMSG.length,"error");} else { //console.log(htmlMSG.length+"--"+htmlDP.length) for(var i= htmlDP.length-1; i>-1; i--) { //console.log(htmlDP[i]+"anerer :"+htmlMSG[i]); // if (htmlMSG[i].includes("-col-")) console.log(htmlMSG[i]); let htmlDPVis; let htmlDPFile;let htmlMSGVis;let htmlMSGFile; if(htmlDP[i].includes("-col-") || htmlDP[i].includes("-erro-")) { if(htmlDP[i].includes("-erro-")) htmlDPVis=htmlDP[i].replace("-erro-", (htmlHeadersDPRed+">")); if(htmlDP[i].includes("-col-")) htmlDPVis=htmlDP[i].replace("-col-", (htmlHeadersDP+">")); htmlDPVis=" "+htmlDPVis } else {htmlDPVis=">"+htmlDP[i]} if(htmlMSG[i].includes("-col-") || htmlMSG[i].includes("-erro-")) {if(htmlMSG[i].includes("-erro-")) htmlMSGVis=htmlMSG[i].replace("-erro-", (htmlHeadersDPRed+">")); if(htmlMSG[i].includes("-col-")) htmlMSGVis=htmlMSG[i].replace("-col-", (htmlHeadersDP+">"));htmlMSGVis=" "+htmlMSGVis } else {htmlMSGVis=">"+htmlMSG[i]} // if(htmlDP[i].includes("-erro-")) {htmlDPVis=htmlDP[i].replace("-erro-", (htmlHeadersDPRed+">")); htmlDPVis=" "+htmlDPVis } else {htmlDPVis=">"+htmlDP[i]} // if(htmlMSG[i].includes("-erro-")) {htmlMSGVis=htmlMSG[i].replace("-erro-", (htmlHeadersDPRed+">"));htmlMSGVis=" "+htmlMSGVis } else {htmlMSGVis=">"+htmlMSG[i]} htmlHelper= htmlHelper+"" // if(htmlDP[i].includes("-col-")) {htmlDP[i]=htmlDP[i].replace("-col-", (htmlHeaders+">")); htmlDPFile=htmlDP[i]; htmlDPFile= " "+htmlDPFile ; } else {htmlDPFile=">"+htmlDP[i]} if(htmlDP[i].includes("-col-") || htmlDP[i].includes("-erro-")) {if(htmlDP[i].includes("-erro-")) htmlDPFile=htmlDP[i].replace("-erro-", (htmlHeadersRed+">")); if(htmlDP[i].includes("-col-")) htmlDPFile=htmlDP[i].replace("-col-", (htmlHeaders+">")); htmlDPFile= " "+htmlDPFile ; } else {htmlDPFile=">"+htmlDP[i]} if(htmlMSG[i].includes("-col-") || htmlMSG[i].includes("-erro-")) {if(htmlMSG[i].includes("-erro-")) htmlMSGFile=htmlMSG[i].replace("-erro-", (htmlHeadersRed+">")); if(htmlMSG[i].includes("-col-")) htmlMSGFile=htmlMSG[i].replace("-col-", (htmlHeaders+">")); htmlMSGFile=" "+htmlMSGFile; } else {htmlMSGFile=">"+htmlMSG[i]} //if(htmlDP[i].includes("-erro-")) {htmlDPFile=htmlDP[i].replace("-erro-", (htmlHeadersRed+">")); htmlDPFile= " "+htmlDPFile ; } else {htmlDPFile=">"+htmlDP[i]} // if(htmlMSG[i].includes("-erro-")) {htmlMSGFile=htmlMSG[i].replace("-erro-", (htmlHeadersRed+">")); htmlMSGFile=" "+htmlMSGFile; } else {htmlMSGFile=">"+htmlMSG[i]} htmlHelperFile= htmlHelperFile+"" } endehtml=endehtmlConst; endehtmlDP=endehtmlDPConst; if (monster){endehtml="

!!! Monster Suche wird automatisch deaktiviert !!!

"+endehtml; endehtmlDP="


!!! Monster Suche wurde automatisch deaktiviert !!!

BERICHT - ANALYSE - AUSWERTUNG NUR ÜBER WEBSEITE

"+endehtmlDP;} if (!instanzAnzahl){endehtml="

!!! Auswertung ohne DatenpunktZählung !!! kann enabled werden

"+endehtml; endehtmlDP="

!!! Auswertung ohne DatenpunktZählung !!! kann enabled werden

"+endehtmlDP;} if (!java){ endehtml="

!!! Auswertung ohne Javascript Instanzen !!! kann enabled werden

"+endehtml; endehtmlDP="

!!! Auswertung ohne Javascript Instanzen !!! kann enabled werden

"+endehtmlDP;} if (!werti){ endehtml="

!!! Auswertung ohne Wert Analyse !!! kann enabled werden

"+endehtml; endehtmlDP="

!!! Auswertung ohne Wert Analyse !!! kann enabled werden

"+endehtmlDP;} if (!typie){ endehtml="

!!! Auswertung ohne Type Analyse !!! kann enabled werden

"+endehtml; endehtmlDP="

!!! Auswertung ohne Type Analyse !!! kann enabled werden

"+endehtmlDP;} if (!ali){ endehtml="

!!! Auswertung ohne Alias Analyse !!! kann enabled werden

"+endehtml; endehtmlDP="

!!! Auswertung ohne Alias Analyse !!! kann enabled werden

"+endehtmlDP;} if(!monster) { setStateDelayed(dpPrefix + "ProofingDatapoints.HTMLTable",endehtmlDP+"
"+htmlHelper,900);} else{setStateDelayed(dpPrefix + "ProofingDatapoints.HTMLTable",endehtmlDP,900);} mylog("================================schreibe file") ; writeFile(null, "/ProofingDatapoints/htmlputz.html" ,format+endehtml+htmlTable+htmlHelperFile+"
", function (error) { mylog('file written'); }); // endehtml=endehtmlConst; // endehtmlDP=endehtmlDPConst; setState(dpPrefix + "ProofingDatapoints.MonsterSearch",false); //setzt monstersearch zurück directSearch=false; setState(dpPrefix + "ProofingDatapoints.RunSuccessful",true); } //ende else bei fehler im array zur ausgabe } //------------------------------------------Zähle Objecte der INSTANZEN-------------------------------------------------------- async function countDP(){ return new Promise(async (resolve, reject) => { if (!directSearch) {await calmDown(800);} else {await calmDown(1200);} try{ helplog("bin richtig in count"); var idb =instanzArrHelp; //if (java && !monster) {for ( var js in allJSInst) {idb.push(allJSInst[js]);}} for(let name in idb){ var counter4=0; $(idb[name]+".*").each(function(id, i) { counter4++; }) counterAll=counterAll+counter4; mylog(idb[name]+counter4); if (instanzAnzahl) htmlDP_C.push(idb[name]); if (instanzAnzahl) htmlMSG_C.push(counter4.toString()); } if (instanzAnzahl) {htmlDP_C.push("-col-Gesamt geprüfte Objekte In Instanzen"); htmlMSG_C.push("-col-"+counterAll.toString()+""); } if (instanzAnzahl) {htmlDP_C.push(""); htmlMSG_C.push("");htmlDP_C.push("-col-OBJECTE IN GEPRÜFTEN INSTANZEN"); htmlMSG_C.push("Anzahl");} if (htmlDP_C.length != htmlMSG_C.length) {console.log("-------- !!! FEHLER in AUSGABE ZÄHLEN INSTANZEN : "+ "AnzahlDP: "+htmlDP_C.length+" AnzahlMSG: "+htmlMSG_C.length,"error");} helplog("bin raus aus count"); setState(dpPrefix + "ProofingDatapoints.HTMLTable",htmlPart2); resolve("ok"); } catch (e) {console.log("------------ERROR: "+e ); reject(e); return e} }); //end promise } //-----------------------------------------------SCHALTER MAIN------------------------------------------------ on({id:dpPrefix + "ProofingDatapoints.RunScript", ack: false, val: true}, function (obj) { log('_______________________ starte MAIN'); mainScript(); }); async function mainScript(){ setState(dpPrefix + "ProofingDatapoints.RunSuccessful",false); java= getState(dpPrefix + "ProofingDatapoints.JavaInstanzCheck").val; instanzAnzahl= getState(dpPrefix + "ProofingDatapoints.ObjectAnzahlCheck").val; monster= getState(dpPrefix + "ProofingDatapoints.MonsterSearch").val; ohneInstanz = getState(dpPrefix + "ProofingDatapoints.ohneInstanzAnzeige").val; unusedDayFactor = getState(dpPrefix + "ProofingDatapoints.LatestChangeDP_Factor").val; ali = getState(dpPrefix + "ProofingDatapoints.CheckAliase").val; typie = getState(dpPrefix + "ProofingDatapoints.TypeAnalyse").val; werti = getState(dpPrefix + "ProofingDatapoints.WertAnalyse").val; smartHome = getState(dpPrefix + "ProofingDatapoints.SmartHomeAnalyse").val; unusedDay = getState(dpPrefix + "ProofingDatapoints.LatestChangeDP").val; endehtmlConst= "

Letztes File Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "TT:MM.JJJJ -- SS:mm:ss")+"

"; endehtmlDPConst= "

Letztes Table Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "TT.MM.JJJJ -- SS:mm:ss")+"

"; setState(dpPrefix + "ProofingDatapoints.ScriptVersion",versionNr); htmlHelper=""; htmlHelperFile=""; counterAll=0; instanzArrHelp=[]; allInstArr=[]; htmlDP=[]; htmlDP_I=[]; htmlDP_W=[]; htmlDP_A=[]; htmlDP_C=[]; htmlMSG=[]; htmlMSG_I=[]; htmlMSG_W=[]; htmlMSG_A=[]; htmlMSG_C=[]; aliasArr=[]; setState(dpPrefix + "ProofingDatapoints.HTMLTable",htmlReset+endehtml+htmlError); setStateDelayed(dpPrefix + "ProofingDatapoints.RunScript",false,2500); writeFile(null, "/ProofingDatapoints/htmlputz.html" ,htmlReset+endehtml+htmlError+"", function (error) {mylog('file written'); }); // log(getState("controll-own.0.AAATEST.test.testIndicator").val,"error");typeof getState(id).val; // log(typeof getState("controll-own.0.AAATEST.test.testIndicator").val,"error"); // try{ //let valType = getState("controll-own.0.AAATEST.test.testIndicator").val; // } catch (e) {console.log("------------ERROR: "+e + "bei id: " + id); return alarmInstanz1=true} // console.log("nach try") if (unusedDay ) typie=true; if (!monster) {const aa= await instanzCount() //!monster Promise.all([aa]) .then(await countDP()) // .then(await calmDown(1000)) .then(await checkWerte()) .then(await checkTypes()) .then(await checkAlias()) .then(await checkSmartIot()) //.catch(() => {log("FEHLER");}) Promise.all([countDP,checkWerte,checkTypes,checkAlias]).then( () => {writeStuff();log("_SCHLUSS");})//.catch(() => {log("FEHLER");}) } else{ setState(dpPrefix + "ProofingDatapoints.HTMLTable",htmlPartMonsterOff); setState(dpPrefix + "ProofingDatapoints.MonsterSearch",false); //setzt monstersearch zurück setStateDelayed(dpPrefix + "ProofingDatapoints.RunScript",false,2500); writeFile(null, "/ProofingDatapoints/htmlputz.html" ,htmlPartMonsterOff+"", function (error) {mylog('file written'); }); } } const htmlError="

Script hat Fehler - bitte Log checken !!!

"; const htmlPart1="


!!! Script is running ... through part 1 - Instanz-Count ? !!!"; const htmlPartMonsterOff="


!!! Monster Search is disabled !!!"; const htmlPart2="


!!! Script successful ... in part 1 - Instanz-Count ?? !!!"+ "




!!! Script is running ... through part 2 - DP-Count ? !!!"; const htmlPart3= "


!!! Script successful ... in part 1 - Instanz-Count ?? !!!"+ "




!!! Script successfull ... in part 2 - DP-Count ?? !!!"+ "






!!! Script is running ... through part 3 - Werte-Check ? !!!"; const htmlPart4="


!!! Script successful ... in part 1 - Instanz-Count ?? !!!"+ "




!!! Script successful ... in part 2 - DP-Count ?? !!!"+ "






!!! successful ... in part 3 - Werte-Check ?? !!!"+ "






!!! Script is running ... through part 4 - Type-Check ? !!!"; const htmlPart5="


!!! Script successful ... in part 1 - Instanz-Count ?? !!!"+ "




!!! Script successful ... in part 2 - DP-Count ?? !!!"+ "






!!! successful ... in part 3 - Werte-Check ?? !!!"+ "






!!! successful ... in part 4 - Type-Check ?? !!!" + "






!!! Script is running (needs time) ... through part SmartDevices - Type-Check ? !!!"; const typesIO = ["boolean", "number", "string", "object", "array", "mixed", "sensor.window", "sensor.door", "sensor.alarm", "sensor.alarm.flood", "sensor.alarm.fire", "sensor.alarm.secure", "sensor.alarm.flood", "sensor.alarm.power", "sensor.alarm.secure", "sensor.door", "sensor.light", "sensor.lock", "sensor.motion", "sensor.rain", "sensor.noise", "sensor.rain", "sensor.window", "button", "button.long", "button.stop", "button.start", "button.open.door", "button.open.window", "button.mode", "button.mode.auto", "button.mode.manual", "button.mode.silent", "button.open.door", "button.open.window", "button.start", "button.stop", "value", "value.window", "value.temperature", "value.humidity", "value.battery", "value.blind", "value.brightness", "value.min", "value.max", "value.current", "value.curtain", "value.default", "value.battery", "value.valve", "value.time", "value.direction", "value.distance", "value.distance.visibility", "value.gps", "value.gps.elevation", "value.gps.latitude", "value.gps.longitude", "value.humidity", "value.interval", "value.gps.longitude", "value.gps.latitude", "value.gps.elevation", "value.gps", "value.power.consumption", "value.direction", "value.curtain", "value.blind", "value.tilt", "value.lock", "value.speed", "value.max", "value.min", "value.power.consumption", "value.pressure", "value.distance", "value.distance.visibility", "value.severity", "value.warning", "value.sun.elevation", "value.speed", "value.sun.azimuth", "value.sun.elevation", "value.temperature", "value.tilt", "value.time", "value.valve", "value.voltage", "value.current", "value.warning", "value.window", "indicator", "indicator.working", "indicator.reachable", "indicator.connected", "indicator.maintenance", "indicator.maintenance.lowbat", "indicator.maintenance.unreach", "indicator.maintenance.alarm", "indicator.lowbat", "indicator.alarm", "indicator.alarm.fire", "indicator.alarm.flood", "indicator.alarm.secure", "indicator.connected", "indicator.lowbat", "indicator.maintenance", "indicator.maintenance.alarm", "indicator.maintenance.lowbat", "indicator.maintenance.unreach", "indicator.reachable", "indicator.working", "level", "level.co2", "level.dimmer", "level.blind", "level.temperature", "level.valve", "level.color.red", "level.color.green", "level.co2", "level.color.blue", "level.color.white", "level.color.green", "level.color.hue", "level.color.saturation", "level.color.rgb", "level.color.luminance", "level.color.red", "level.color.rgb", "level.color.saturation", "level.color.temperature", "level.color.white", "level.curtain", "level.dimmer", "level.temperature", "level.tilt", "level.timer", "level.timer.sleep", "level.valve", "level.volume", "level.volume.group", "level.curtain", "level.tilt", "switch", "switch.lock", "switch.lock.door", "switch.lock.window", "switch.boost", "switch.light", "switch.comfort", "switch.enable", "switch.power", "switch.light", "switch.lock", "switch.lock.door", "switch.lock.window", "switch.mode.*", "switch.mode.auto", "switch.mode.color", "switch.mode.manual", "switch.mode.silent", "switch.mode.moonlight", "switch.mode.color", "switch.mode.silent", "switch.power", "button.stop", "button.play", "button.fastforward", "button.fastreverse", "button.forward", "button.next", "button.prev", "button.pause", "switch.pause", "button.forward", "button.play", "button.prev", "button.reverse", "button.fastforward", "button.fastreverse", "button.volume.up", "button.stop", "button.volume.down", "media.seek", "media.mode.shuffle", "media.mode.repeat", "media.state", "media.artist", "button.volume.up", "level.bass", "level.treble", "media.add", "media.album", "media.title", "media.title.next", "media.artist", "media.bitrate", "media.broadcastDate", "media.clear", "media.content", "media.cover", "media.cover.big", "media.cover.small", "media.duration.text", "media.date", "media.duration", "media.elapsed.text", "media.duration.text", "media.elapsed", "media.broadcastDate", "media.mute", "media.season", "media.elapsed.text", "media.episode", "media.mute.group", "media.tts", "media.bitrate", "media.genre", "media.date", "media.track", "media.input", "media.jump", "media.link", "media.mode.repeat", "media.mode.shuffle", "media.mute", "media.mute.group", "media.playid", "media.add", "media.clear", "media.playlist", "media.season", "media.seek", "media.state", "media.title", "media.title.next", "media.track", "media.tts", "media.url", "media.url.announcement", "media.jump", "media.content", "media.link", "media.input", "level.bass", "level.treble", "switch.pause", "switch.power.zone", "value.temperature", "value.temperature.windchill", "value.temperature.dewpoint", "value.temperature.feelslike", "value.temperature.min", "value.temperature.max", "value.humidity", "value.humidity.min", "value.humidity.max", "value.speed.wind", "value.speed.max.wind", "value.speed.min.wind", "value.speed.wind.gust", "value.direction.wind", "value.direction.max.wind", "value.direction.min.wind", "weather.direction.wind", "date", "date.forecast.1", "date.sunrise", "date.sunset", "dayofweek", "location", "weather.icon", "weather.icon.wind", "weather.icon.name", "weather.state", "value.clouds", "value.direction.max.wind", "value.direction.min.wind", "value.direction.wind", "value.direction.wind.forecast.0", "value.direction.wind.forecast.1", "value.humidity", "value.humidity.max", "value.humidity.min", "value.precipitation", "value.precipitation.day.forecast.0", "value.precipitation.forecast.0", "value.precipitation.forecast.0", "value.precipitation.forecast.1", "value.precipitation.forecast.1", "value.precipitation.hour", "value.precipitation.night.forecast.0", "value.precipitation.today", "value.pressure.forecast.0", "value.pressure.forecast.1", "value.radiation", "value.uv", "value.clouds", "value.rain", "value.rain.hour", "value.rain.today", "value.snow", "value.snow.hour", "value.snow.today", "value.snowline", "value.speed.max.wind", "value.speed.min.wind", "value.speed.wind", "value.speed.wind.forecast.0", "value.speed.wind.forecast.1", "value.speed.wind.gust", "value.temperature", "value.temperature.dewpoint", "value.temperature.feelslike", "value.temperature.max", "value.temperature.max.forecast.0", "value.temperature.max.forecast.1", "value.temperature.min", "value.temperature.min.forecast.0", "value.temperature.min.forecast.1", "value.temperature.windchill", "value.uv", "weather.chart.url", "weather.chart.url.forecast", "weather.direction.wind", "weather.direction.wind.forecast.0", "weather.html", "weather.title", "weather.title.short", "weather.type", "weather.icon", "weather.icon.forecast.1", "weather.icon.name", "weather.icon.wind", "weather.json", "value.speed.wind.forecast.0", "weather.state", "weather.state.forecast.0", "value.direction.wind.forecast.0", "weather.direction.wind.forecast.0", "value.pressure.forecast.0", "value.temperature.min.forecast.0", "value.temperature.max.forecast.0", "value.precipitation.forecast.0", "value.precipitation.forecast.0", "weather.state.forecast.1", "weather.title", "weather.title.forecast.0", "value.precipitation.day.forecast.0", "value.precipitation.night.forecast.0", "weather.title.short", "weather.type", "date.forecast.1", "weather.icon.forecast.1", "weather.state.forecast.1", "value.temperature.min.forecast.1", "value.temperature.max.forecast.1", "value.precipitation.forecast.1", "value.precipitation.forecast.1", "value.direction.wind.forecast.1", "value.speed.wind.forecast.1", "value.pressure.forecast.1", "date.end", "date.start", "info.address", "info.display", "info.ip", "info.mac", "info.name", "info.address", "info.port", "info.standby", "info.status", "info.display", "date.start", "date.end", "text.phone", "url.icon", "url.cam", "url.audio", "url.blank", "url.cam", "url.icon", "url.same", "url.audio", "text.phone", "adapter.messagebox", "adapter.wakeup"];