// @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=[ "EigeneDatenpunkte.0"];
// beispiel const instanzArr=[ "eigeneDatenpunkte.0", "ping.0",];
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 = "15102019-1.1"
const warnColor = warnFarbe ;
const format = "<!DOCTYPE html><html lang=\"de\"><head><title>Putzer</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"></head><body>";
const htmlTable="<table style=\"color:"+color_in_table+";text-align:left; font-family:"+schriftart+";background-image: linear-gradient(67deg,transparent,"+color_gradient1+");\">";
const htmlReset="<p style=\"color:red;font-family:"+schriftart+";\"><i>!!! ohne Javascript Instanzen !!! kann enabled werden</i></p>"
const htmlHeaders = "style=\"color:"+colorHeadlines+";\"";
const htmlHeadersDP = "style=\"color:"+colorHeadlinesDP+";\"";
// var htmlOhneAnzahl="<p style=\"color:red;font-family:"+schriftart+";\"><i>!!! ohne DatenpunktZählung !!! kann enabled werden</i></p>"
const htmlError="<p style=\"color:red;font-family:"+schriftart+";\"><i>Script hat Fehler - bitte Log checken !!!</i></p>"
var allInstArr=[];
var instanzArrHelp=[];
const dpPrefix = "javascript."+ instance +".";
var mylogs=false;
var htmlDP=[];
var htmlMSG=[];
var counterAll=0;
var directSearch=false;
var switchOn=false;
var htmlHelper="";
var htmlHelperFile="";
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,});
//------------------------------------------CHECK INSTANZEN--------------------------------------------------------
function instanzCount(){
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 (!ohneInstanz && !directSearch) {
if(!id.includes("vis")){
counter++;
if (getState(id).val==null) {;counter2++; mylog(ida[2]+ida[3]+"--------------------der hier wurde nie gestartet");
htmlDP.push(ida[2]+"."+ida[3]);
htmlMSG.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");
htmlDP.push(ida[2]+"."+ida[3]);
htmlMSG.push("nicht aktiviert");} /*else{instanzArr.push(ida[2]+"."+ida[3])}*/
}}
});
if (!ohneInstanz) {
mylog("______________________________________________Anzahl Instanzen: " + counter.toString());
htmlDP.push("");
htmlMSG.push("");
htmlDP.push("Anzahl Instanzen");
htmlMSG.push(counter.toString());
mylog("______________________________________________Anzahl gestoppter Instanzen ohne Werte: " + counter2.toString())
htmlDP.push("Instanzen ohne Werte");
htmlMSG.push(counter2.toString());
htmlDP.push("Instanzen nicht aktiviert");
htmlMSG.push(counter3.toString());
}
}
//------------------------------------------CHECK ZUORDNUNG--------------------------------------------------------
function checkTypes(select) {
mylog("bin in check types");
var counter=0;
htmlMSG.push("");
htmlDP.push("");
var sub= select.substring(select.length-1, select.length); log("---------: "+sub);log("----------select: "+select);
mylog(select)
$(select).each(function (id, i) {
counter++
if (!id.includes('scriptEnabled') && !id.includes('scriptProblem') && getState(id).val !== null /*&& !id.includes('Log-Script') && !id.includes('Ereignisliste') && !id.includes('GETPROCESS')*/ ){
if (!JSON.stringify(getObject(id)).includes("type")) {
var valType = typeof getState(id).val;
htmlDP.push(id+": "+valType);
htmlMSG.push("<b>missing TYPE !!</b>" );}
else{ var dpType = getObject(id).common.type;
var valType = typeof getState(id).val;
if(dpType != "mixed" ) {
if(dpType !== valType && !(dpType == 'array' && valType == 'object') /*&& !(dpType =='text' && valType=='string') && !(dpType =='string' && valType=='text')*/ ) {
mylog(id + ': Datenpunkttyp: ' + dpType + ', Wert: ' + valType);
htmlDP.push(id+": "+valType);
htmlMSG.push(dpType );
/* später testing)
console.log("======1=============no type: "+id +"object: "+JSON.stringify(getObject(id)));
if(!getObject(id).common.hasOwnProperty("type")) console.log("--------------kein TYPE: "+id) ;
console.log("======2=============no type: "+id +"object: "+JSON.stringify(getObject(id).common));
*/
}
}}
/*
if(dpType != valType && !(dpType == 'array' && valType == 'object')) {
log(id + ': Datenpunkttyp: ' + dpType + ', Wert: ' + valType);
htmlDP.push(dpType);
htmlMSG.push(valType);
}*/
}
});
htmlDP.push("<i>ID + IST-WERT</i>");
htmlMSG.push("<i>SOLL-WERT</i>");
htmlDP.push("-col-<b>geprüfte Instanz</b>");
htmlMSG.push("-col-<i><b>"+select+"</b></i>");
mylog("fertg" + counter.toString())
}
//------------------------------------------CHECK WERTE--------------------------------------------------------
function checkWerte(select) {
mylog("bin in check Werte");
var counter=0;
mylog(select);
$(select).each(function (id, i) {
counter++
if (!id.includes('scriptEnabled') && !id.includes('scriptProblem') /* ) && !id.includes('Ereignisliste') && !id.includes('GETPROCESS')*/ ){
//var dpType = getObject(id).common.type;
var valType = getState(id).val;
// if(dpType != "mixed" ) {}
if(valType === null) {mylog(id + ': Datenpunkttyp: ' /*+ dpType */+ ", Wert: "+valType);
htmlDP.push(id);
var ddd = new Date().getTime()-getObject(id).ts;
htmlMSG.push("missing seit " + Math.floor((ddd)/1000/60/60/24)+"d "+Math.floor((ddd)/1000/60/60 %24)+"h "+Math.floor((ddd)/1000/60 %60)+"m ");
}
}
});
mylog("bin raus aus check Werte");
}
//---------------------------------------------------------------------------------------------------------------------
function mylog(message) {
if(mylogs)
console.log(message);
}
//------------------------------------------Zähle Objecte der INSTANZEN--------------------------------------------------------
function countDP(idb){
mylog("bin richtig in count");
var counter4=0;
$(idb+".*").each(function(id, i) {
counter4++; })
mylog(idb+counter4);
htmlDP.unshift(idb);
htmlMSG.unshift(counter4.toString());
counterAll=counterAll+counter4;
mylog("bin raus aus count");
}
//----------------------------------------------Direct Suchen
on({id:dpPrefix + "ProofingDatapoints.OrdnerCheck", ack: false, change: "any"}, function (obj) {
directSearch=true;
instanzArrHelp=[];
setState(dpPrefix + "ProofingDatapoints.RunScript",true);
});
//-----------------------------------------------SCHALTER MAIN------------------------------------------------
on({id:dpPrefix + "ProofingDatapoints.RunScript", ack: false, val: true}, function (obj) {
let java= getState(dpPrefix + "ProofingDatapoints.JavaInstanzCheck").val;
let instanzAnzahl= getState(dpPrefix + "ProofingDatapoints.ObjectAnzahlCheck").val;
let monster= getState(dpPrefix + "ProofingDatapoints.MonsterSearch").val;
var ohneInstanz = getState(dpPrefix + "ProofingDatapoints.ohneInstanzAnzeige").val;
var endehtmlConst= "<p style=\"color:"+warnColor+"; font-family:"+schriftart+";\">Letztes File Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss")+"</p>";
var endehtmlDPConst= "<p style=\"color:"+warnColor+"; font-family:"+schriftart+";\">Letztes Table Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss")+"</p>";
setState(dpPrefix + "ProofingDatapoints.ScriptVersion",versionNr);
htmlHelper="";
htmlHelperFile="";
setState(dpPrefix + "ProofingDatapoints.HTMLTable",htmlReset+endehtml+htmlError);
writeFile(null, "/ProofingDatapoints/htmlputz.html" ,htmlReset+endehtml+htmlError+"</body>", function (error) {mylog('file written'); });
counterAll=0;
instanzArrHelp=[];
allInstArr=[];
setStateDelayed(dpPrefix + "ProofingDatapoints.RunScript",false,2500);
htmlDP=[];
htmlMSG=[];
instanzCount(); //überprüft instanzen und stellt allInstArr her
htmlDP.push("-col-<b>INSTANZ INFO</b>"); htmlMSG.push(""); htmlDP.push(""); htmlMSG.push("");
mylog(instanzArr.length+"==================="+instanzArr.toString());
if (monster) {instanzArrHelp=allInstArr;} else {instanzArrHelp=instanzArr} //ACHTUNG MONSTERSEARCH
if (directSearch) {instanzArrHelp=[]; instanzArrHelp.push(getState(dpPrefix + "ProofingDatapoints.OrdnerCheck").val);}
for(let name in instanzArrHelp){
checkWerte(instanzArrHelp[name]+".*") //checkt alle werte in intanzArr
mylog("!!!!!!!!!!!!!!!!!!!!: "+instanzArrHelp[name]);}
if (instanzAnzahl){
htmlDP.unshift(""); htmlMSG.unshift("");htmlDP.unshift("<b>OBJECTE IN INSTANZ</b>"); htmlMSG.unshift("Anzahl");
for(let name in instanzArrHelp){
countDP(instanzArrHelp[name]);mylog("bin in zhlen");}
if (java && !monster) countDP("javascript")
htmlDP.unshift("-col-<b>GESAMT GEPRÜFTE OBJECTE IN INSTANZEN</b>"); htmlMSG.unshift("-col-<b>"+counterAll.toString()+"</b>");
}
mylog("=============: "+counterAll);
if (java && !monster && !ohneInstanz && !directSearch) checkWerte('javascript.*'); //checkt alle javainstanzen
htmlDP.push("-col-<b>ID's OHNE WERT:</b>");
htmlMSG.push("");
for(let name in instanzArrHelp){
checkTypes(instanzArrHelp[name]+".*")
mylog("!!!!!!!!!!!!!!!!!!!!: "+instanzArrHelp[name])};
htmlDP.push("");
htmlMSG.push("");
htmlDP.push("-col-<b>IDs MIT FALSCHEN TYPE:</b>");
htmlMSG.push("");
if (java && !monster && !ohneInstanz && !directSearch ) checkTypes('javascript.*');
for(var i= htmlDP.length-1; i>-1; i--) {
let htmlDPVis; let htmlDPFile;let htmlMSGVis;let htmlMSGFile;
if(htmlDP[i].includes("-col-")) {htmlDPVis=htmlDP[i].replace("-col-", (htmlHeadersDP+">")); htmlDPVis=" "+htmlDPVis } else {htmlDPVis=">"+htmlDP[i]}
if(htmlMSG[i].includes("-col-")) {htmlMSGVis=htmlMSG[i].replace("-col-", (htmlHeadersDP+">"));htmlMSGVis=" "+htmlMSGVis } else {htmlMSGVis=">"+htmlMSG[i]}
htmlHelper= htmlHelper+"<tr><td"+htmlDPVis+"  </td><td"+htmlMSGVis+"  </td></tr>"
// 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-")) {htmlDPFile=htmlDP[i].replace("-col-", (htmlHeaders+">")); htmlDPFile= " "+htmlDPFile ; } else {htmlDPFile=">"+htmlDP[i]}
if(htmlMSG[i].includes("-col-")) {htmlMSGFile=htmlMSG[i].replace("-col-", (htmlHeaders+">")); htmlMSGFile=" "+htmlMSGFile; } else {htmlMSGFile=">"+htmlMSG[i]}
htmlHelperFile= htmlHelperFile+"<tr><td"+htmlDPFile+"  </td><td"+htmlMSGFile+"  </td></tr>"
}
var endehtml=endehtmlConst;
var endehtmlDP=endehtmlDPConst;
if (monster){endehtml="<p style=\"color:"+warnColor+"; font-family:"+schriftart+";\"><i>!!! Monster Suche wird automatisch deaktiviert !!!</i></p>"+endehtml;
endehtmlDP="<p style=\"color:"+warnColor+"; font-family:"+schriftart+";\"><i>!!! ACHTUNG: SYSTEM WIRD BELASTET !!! </br></br>!!! Monster Suche wird automatisch deaktiviert !!! </br></br> BERICHT/AUSWERTUNG NUR ÜBER WEBSEITE</i></p>"+endehtmlDP;}
if (!instanzAnzahl){endehtml="<p style=\"color:"+warnColor+"; font-family:"+schriftart+";\"><i>!!! Auswertung ohne DatenpunktZählung !!! kann enabled werden</i></p>"+endehtml;
endehtmlDP="<p style=\"color:"+warnColor+"; font-family:"+schriftart+";\"><i>!!! Auswertung ohne DatenpunktZählung !!! kann enabled werden</i></p>"+endehtmlDP;}
if (!java){ endehtml="<p style=\"color:"+warnColor+"; font-family:"+schriftart+";\"><i>!!! Auswertung ohne Javascript Instanzen !!! kann enabled werden</i></p>"+endehtml;
endehtmlDP="<p style=\"color:"+warnColor+"; font-family:"+schriftart+";\"><i>!!! Auswertung ohne Javascript Instanzen !!! kann enabled werden</i></p>"+endehtmlDP;}
if(!monster) { setStateDelayed(dpPrefix + "ProofingDatapoints.HTMLTable",endehtmlDP+"<table>"+htmlHelper,900);} else{setStateDelayed(dpPrefix + "ProofingDatapoints.HTMLTable",endehtmlDP,900);}
mylog("================================schreibe file") ;
writeFile(null, "/ProofingDatapoints/htmlputz.html" ,format+endehtml+htmlTable+htmlHelperFile+"</table></body>", function (error) { mylog('file written'); });
// endehtml=endehtmlConst;
// endehtmlDP=endehtmlDPConst;
setState(dpPrefix + "ProofingDatapoints.MonsterSearch",false); //setzt monstersearch zurück
directSearch=false;
});