//@liv-in-sky 2022 09.07.-08:00 -new Strukture // DAS WIDGET IN DER VIS // das Standard html-Widget wird genutzt in der VIS - dazu den DP javascript.x.Tabellen@Liv.SONOFFTabelleVIS als binding angeben d.h. // im html-teil des widgets wird der daten punkt in geschweiften klammern angegeben z.B. {javascript.x.Tabellen@Liv.SONOFFTabelleVIS} // @ts-ignoreMD let braucheEinVISWidget=true; // immer true let dpVIS="ShellyTabelleVIS" // Name für Tabelle - keine datenpunkte eintragen !! let dpJSON="ShellyTabelleJSON" // hier nicht genutzt- ist immer false let willUnterUserdataSpeichern=false; // die Tabelle wird unter 0_userdata.0.... gespeichert let braucheMaterialDesignWidget=false; // not in use let braucheMaterialDesignWidgetList=false; // not in use let mySchedule="*/2 * * * * "; // nur aktiv, wenn moechteNurScheduleAlsTrigger=true; //ZUSÄTZLICH VARIABLEN let moechteNurScheduleAlsTrigger=false; // triggerverhalten (refresh im browser) mit true reduzieren auf minimum let mitAlphabet=false; // wenn true wird immer nach namen sortiertiert und eine zeile eingfügt mit dem Anfangsbuchstaben let sortierenEIN=true; //let mitSearch=false; let welcheSortierung=1; // Startsortierung - je nach spalte 0: name; 1: online; 2:type; 3:rssi ..... const schalterUmrahmung="1" //wenn überschriften buttons sind , den rahmen mit 0 wegmachen let tabletDoppelHilfe=true; // auf tablet geht kein doppelklick - es erschein ein weiterer button in der seitenleiste let deviceNameStattHostname=false; //zeigt devicename anstatt hostname let maxWeiteFlexBoxen="170"; // max. Breite für die einzel-flexboxen //let newTreeView=false; // WENN NEUE BAUMSRUKTUR DES ADAPTERS GENUTZT WIRD let showInstanzInName=true; // zeigt die sonoff instanz nummer nach dem namen let showTriggerActivity=false; //zeigt im log, wie oft getriggert wird nutzt warning als log ! let geteiteVersionsAnzeige=true; // auf true lassen !! //const mitYesterday=true; // Für anzeige der yestersay werte bei energie-aufzeichnenden geräten (poe, blitzwolf, teckin, ..) //const mitLink=true; // link zum sonoff-web-interface const farbeNichtConnected="lightblue"; // webview und flexboxen let farbeInaktiverShelly="lightblue" //Tabelleview //SCHALTER SWITCH const powerButtonColorONBkground="red" //"lightyellow";//"#5590CA"; const powerButtonColorOFFBkground="lightyellow" //"red"//"#7090B3";//"#07417A";//"#265686"; const powerButtonColorONSchrift="white"; const powerButtonColorOFFSchrift="black"; //SCHALTER IP const ipButtonColorONBkground ="lightyellow"; const ipButtonColorOFFBkground ="#7090B3"; const ipButtonColorONSchrift="black"; const ipButtonColorOFFSchrift="white"; //SCHALTER SENSOREN (door,flood) const sensorButtonColorONBkground ="lightyellow"; const sensorButtonColorOFFBkground ="#7090B3"; //#7090B3 const sensorButtonColorONSchrift="black"; const sensorButtonColorOFFSchrift="white"; //let ipButtonColorONBkground2="#5590CA"; //let powerButtonColorONSchrift2="white"; let flexboxView=false; // startet im flexbox modus - keine tabelle //VON ALTEM SCRIPT const farbeNichtErreichbar="#819FF7"// not in use // farbe für devices, die gerade nicht online sind // möglich i=schräg, b ist fett und span ist normal - nur eines davon !!! const materialD_IP_erreichbar="#D8D8D8"; // not in use const materialD_IP_nichtErreichbar="#F7819F"; // not in use const bildergroesse=30; // not in use let pfadFuerBilder="/vis.0/armin/img/" // not in use //hier eintragen für die übersetzung der standardnamen - aliase - rechte seite wird statt linker angezeigt - die beispiele kann man raus löschen // BITTE AUF DIE KOMMAs ACHTEN //BLOCK NOT IN SE var symbolOK="✔️"; // auch möglich: ="✅" 🟩 ✔️ 🌎 var symbolKO="🔵" // ist in let symbolSchalter //"🔔"; //z.b. auch "X" für ein rotes kreuz oder : ="❌" ⚪ 🟢 ⚫ ⭕ 🔴 🔵 🚫 ⏱ 💀 👍 👎 📑 💲 👀 😡 🟥 ⬜ 🧊 💬 🗑️ 🔔 var symbolWARN="ℹ️"; // ="⚠️" oder info: "ℹ️" var symbolKO_MD="🟥" // ist in let symbolSchalter ⬄ var symbolLink="🌎"; var externalOhneInfo=false; //noch nicht integriert //--------------------------------------- ↔️ 🔁 🢀🢂 🔁 //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3 - es MÜSSEN in allen Arrays die GLEICHE Anzahl für die Werte sein let htmlFeld= ["NAME","UP","TYPE","RSSI","IP","UPTIME","STATE","FIRMW","TYPE"]; // GLEICHE ANZAHL !! NAME/ÜBERSCHRIFT DER SPALTE let val= ["true","true","true","true","true","false","true","false","true"]; // bei false wird spalte ausgeblendet// GLEICHE ANZAHL !! SPALTE ANZEIGEN/AUSBLENDEN UND HIER SIND DIE WERTE, DIE IN DER SCHLEIFE GEFILTERET WERDEN - jeder val[x] muss unten in der schleife gesetzt werden !! let Feld1lAlign= ["left","center","center","center","center","center","center","center","center"] ; // GLEICHE ANZAHL !! AUSRICHTUNG IN DER SPALTE let htmlSpalte1Weite=["0px","0px","0px","0px","0px","0px","0px","0px","0px"]; // GLEICHE ANZAHL !! BREITE DER SPALTE, wenn "0px" auto let schalterInSpaltenUeberschrift=[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true]; // WENN BUTTONS INSTALLIERT WERDEN - sonst false let symbolSchalter= ["na","✓","✗","🗘","⮂","⇈"]; //ONLINE SYMBOLE // SYMBOLE DER BUTTONS //----------------------------------- //Symbole für Tabelle z.b.: ⚪ ⚫ ⭕ 🔴 🔵 ⏱ 💀 👍 👎 📑 💲 👀 🔹 ✅ ❌ ⚠️ mehr: https://emojiterra.com/de/ oder https://unicode-table.com/de/html-entities/ //hier werden die styles für die tabelle definiert //ÜBERSCHRIFT ÜBER TABELLE const htmlUberschrift=true; // mit Überschrift über der tabelle const htmlSignature=false; // anstatt der Überscghrift eine signature: - kleiner - anliegend const htmlFeldUeber='SHELLY'; // für Überschrift und Signature falls htmlUberschrift und htmlSignature ist true const htmlFarbUber="white"; // Farbe der Überschrift const htmlSchriftWeite="normal"; // bold, normal - Fettschrift für Überschrift const htmlUEberFontGroesse="18px"; // schriftgröße überschrift //SEITENLEISTE const ichWillSeitenLeiste=true; // links einblenden einer Seitenleiste const ichWillAuchRechtsEineLeiste=false; const nameSeitenLeiste="SHELLY" const breiteSeitenleiste=35; const schriftGroesseSeitenleiste=18; const abstandSeitentextVonOben=4; const htmlFarbSeiteSchrift="white"; const htmlBackgroundFarbeSeitenliste="blue"; //BUTTON ÜBERSCHRIFT const htmlBackgroundButtonUeberschrift="transparent"; //SUCHE let bkgroundSearch=1; // hintergrund für suche-ergebnis und flexboxen // 1: carbon; 2: iobroker; 3: colored bubbles; 4: gradient farben von htmlFarbTableColorGradient1; 5: gradient farben wie farbeUngeradeZeilen; 6: heller hintergrund const sucheEin=true; const sucheHoehe=25; const inputBorderColor="gray"; //MEHRERE TABELLEN NEBENEINANDER let mehrfachTabelle=1; // bis zu 3 Tabellen werden nebeneinander geschrieben- verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3 !!! const trennungsLinie=7; // extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind const farbetrennungsLinie="lightyellow"; // bei mehreren Tabellen nebeneinander wird ein Strich zw. den Tabellen gezogen const htmlFarbTableColorUber="white" // Spalten-Überschrift in der tabelle - für die einzelnen Spalten //"#BDBDBD"; const htmlFarbZweiteTabelle="white"; // Farbe der Spalten-Überschrift bei jeder 2.ten Tabelle //ÜBERSCHRIFT SPALTEN - OBERSTE ZEILE IN TAB const UeberSchriftHoehe=40; // Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe const LinieUnterUeberschrift="2"; //not in use // Liniehoehe nur unter Spaltenüberschrift const farbeLinieUnterUeberschrift="green"; //not in use // LinienFarbe unter Spaltenüberschrift const groesseUeberschrift=16; const UeberschriftStyle="normal" // möglich "bold" const UeberschriftSpalten=true; //not in use // ein- oder ausblenden der spatlen-überschriften const htmlGradBkgroundSpalteUeber=[150,5,20]; // einstellung des gradienten für die spaltenüberschrift const htmlGrad1BkgroundSpalteUeber="#2F2F2F"//"#265686"; // Gradient -farbe 1 für die spaltenüberschrift "#2F2F2F"// const htmlGrad2BkgroundSpalteUeber="#3c3c3c"//"#5590CA"; // Gradient -farbe 2 für die spaltenüberschrift "#3c3c3c"// //GANZE TABELLE const linienRows="0" //Border für rows // LinieUnterUeberschrift gehört dazu const linienCols="1" //Border für cols const innenBorder="gray" //Border Farbe const abstandZelle="7"; // legt den abstand in den zellen zum rahmen fest const zeilenAbstand=40; // legt den abstand zwischen den zeilen fest const farbeUngeradeZeilen="#2F2F2F"; // Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2 - bei "transparent" gewinnt htmlFarbTableColorGradient1 const farbeGeradeZeilen="#3c3c3c"//"#151515"; // Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2 - bei "transparent" gewinnt htmlFarbTableColorGradient2 let weite="915"; // Weite der Tabelle - verhindert das dynamische breiter werden, wenn werte unterschiedliche werte haben let hoeheTabelle=300; const zentriert=true; // ganze tabelle zentriert im html Widget - muss in pixel angegeben werden oder "auto" const backgroundAll="#000000"; // Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget const htmlSchriftart="Jura-DemiBold" // "Jura-DemiBold" //"RobotoCondensed-Bold" //"Helvetica"; ..... Ubuntu-Regular const htmlSchriftgroesse="16px"; // schriftgröße in den zellen //const rahmenBreite="1px"; //not in use //mit 0 ist äußerer rahmen weg //FELDER UND RAHMEN const htmlFarbFelderschrift="#CBCBCA"; // SchriftFarbe der Felder const htmlFarbFelderschrift2="#CBCBCA"; // SchriftFarbe der Felder für jede 2te Tabelle const htmlGradient=[150,5,20]; // einstellung des gradienten const htmlFarbTableColorGradient1="#265686"; // Gradient - Hintergrund der Tabelle - Verlauffarbe"#2F2F2F"// "#4D4C4C"// const htmlFarbTableColorGradient2="#5590CA"; // Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf "#3c3c3c"// "#4D4C4C"// const htmlFarbTableBorderColor="grey"; // Farbe des Rahmen - ist dieser gleich den gradienten, sind die rahmen unsichtbar //let htmlRahmenLinien="none"; // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows" // AB HIER NICHTS ÄNDERN ------------------------------------------------------------------------------------------------- // AB HIER NICHTS ÄNDERN ------------------------------------------------------------------------------------------------- // AB HIER NICHTS ÄNDERN ---------------------------------erst wieder ab Zeile 134---------------------------------------- ///////////////////////////////////// LOGGING function dlog(message) { if(debugTrigger) console.log(message); } let debugTrigger=false; // zeigt alle trigger punkte im log ///////////////////////////////////// LOGGING end let borderHelpBottum; let borderHelpRight; let htmlcenterHelp; let htmlcenterHelp2; let welcherSpeicherOrt; let trHelperClass=" "; let htmlTabUeber4; let htmlTabUeber2; let htmlTabUeber2_1; let searchMe; let htmlSeitenleiste; let htmlTabStyle; let htmlTabUeber3=""; //wird in function writeHTML gesetzt - wegen umschalten views let buttonScript; //scripte am ende einfügen let bkgDiv; //background scroll-div let scrollBar; //dünne scrollbar var aktiv=0; var inaktive=0; let myButtonUeberschrift; //not in use let htmlZentriert; //css let einmalAbstand; //seitenleiste let myScann=""; let isOnline=false; if(weite=="auto") {weite="100%"} else {weite=String(Number(weite)*mehrfachTabelle)} makeMyCSS(); makeMySearch_Seitenleiste(); //------------------------------------------------------ if ( !(val.length == Feld1lAlign.length && htmlSpalte1Weite.length == htmlFeld.length && val.length == htmlFeld.length) || (mehrfachTabelle<1 || mehrfachTabelle>3) ) { log("Anzahle der Definitions Arrays sind ungleich ODER mehrfachTabelle ist falsch - Script wurde gestoppt !!!","error"); // @ts-ignore stopScript();} let braucheEinJSON=false; // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile let triggerBySonoffPower=true; const styleNichtErreichbar="i"; // möglich i=schräg, b ist fett und span ist normal - nur eines davon !!! const mitSchalter=true; // für freigabe von schaltern für POWER let langeGesamt=0; let htmlTabUeber=""; let htmlOut=""; let htmlUnter="" let htmlSeitenleisteRechts=""; let htmlSeitenleisteRechts2=";" let htmlMittelLeiste=""; let mix; let counter; //let makeJsonWidget; let myObject=[]; let myArrMac=[] const dpPrefix = "javascript."+ instance +"."; var rootcount=true; var myObjOld=[]; var myJsonWidget=[]; var myJsonWidget2=[]; var valButton=1; var myObj; //HIER SIND DIE WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !! var val1; var val0; var val2;let val3; var json1; var json2; var json3; var json4; var json5; var json6; let myObjExtra=[]; let laeuftSchon=false; var hostDaten=""; let refreshHelper=""; let refreshHelperOn=true; needDP(); var myData="xxxxx"; var arrTriggerSonoff=[]; let triggerBySonoffSwitch=false; let helperLeerzeile="" let Eyestday=""; let Etoday="";let Etotal="";let Epower=""; let dieSchalter=[]; ;let thisID; let thisSensors=[] ; let versionFlex=""; let thisObjName=""; let thisEnergy=[]; let helpFirmware; let helpShutterPosition; let helpSortierenSchalter; arrTriggerSonoff=[]; if (triggerBySonoffPower) { // $('shelly.*.*.POWER*').each(function(id, i) { if (existsState(id)) arrTriggerSonoff.push(id) });} // if (triggerBySonoffSwitch) { $('shelly.*.*.Switch*').each(function(id, i) { if (existsState(id) ) arrTriggerSonoff.push(id); }); if (!moechteNurScheduleAlsTrigger) { $('shelly.*.*.online').each(function(id, i) { if (existsState(id) && !existsState(id.replace("online","bat.value")) && !existsState(id.replace("online","sensor.battery"))) {arrTriggerSonoff.push(id); } }); $('shelly.*.sensor.door').each(function(id, i) { if (existsState(id)) arrTriggerSonoff.push(id); }); $('shelly.*.sensor.flood').each(function(id, i) { if (existsState(id)) arrTriggerSonoff.push(id); }); $('shelly.*.*.mode').each(function(id, i) { if (existsState(id)) arrTriggerSonoff.push(id); }); }} // }else { //--------------------------------------------------------------------------------------------------------- dlog(arrTriggerSonoff.toString()) async function setReset(){await Sleep(2000);setState(`${welcherSpeicherOrt}.Spalte13`,"iframe_closed"); setState(`${welcherSpeicherOrt}.Spalte14`,0)} setReset() async function writeHTML(mitDatenGet){ makeMyVisScripte(); if (mitSchalter ) triggerBySonoffPower=true; aktiv=0; inaktive=0; //laeuftSchon=true; let seitenLeistenTest=""; //log(flexboxView.toString()) flexboxView ? htmlTabUeber3=`
` : htmlTabUeber3=` `; let htmlTabUeber1=htmlTabUeber4 myObject=[]; //let makeJsonWidget=[]; htmlOut=""; counter=-1; //-------------------------------------------------------------------------------------------------------------------------------------------------- //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------ //---------alle val[x] werte müssen von euch bestimmt werden - val[0],val[1],val[2] !!!------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------------------------------------- //if(!newTreeView){ var myColl=[]; var val1help; let welcheView=""; var tempArr=[];var humArr=[];var illArr=[];var energyArr=[];var sw2Arr=[];var irArr=[];;var rfArr=[];var disArr=[];var colArr=[];;let batArr=[]; thisSensors=[] ; let markerSensor; $('shelly.*.*.*').each(function(id, i) { var ida = id.split('.'); let helpShuttpow=false; if ( existsObject(`shelly.${ida[1]}.${ida[2]}.Shutter`) ) {if ( existsState(`shelly.${ida[1]}.${ida[2]}.mode`)) {if ( getState(`shelly.${ida[1]}.${ida[2]}.mode` ).val.includes("roller")) helpShuttpow=true } } if(ida.length>=5){ markerSensor="long"; if(id.indexOf("tmp.temperatureC")>0) tempArr.push(id); if(id.indexOf("sensor.temperatureC")>0) tempArr.push(id); if(id.indexOf("hum.value")>0) humArr.push(id); if(id.indexOf("bat.value")>0) batArr.push(id); if(id.indexOf("sensor.battery")>0) batArr.push(id); if(id.indexOf("sensor.lux")>0) illArr.push(id); if(id.indexOf("Power")>-1 && !helpShuttpow && ( ida[3].includes("Relay") || ida[3].includes("lights") )) energyArr.push(id); if(id.indexOf("power")>-1 && !helpShuttpow && ( !ida[3].includes("Relay") || ida[3].includes("lights") )) energyArr.push(id); if(id.indexOf("Emeter")>-1 && ( ida[4]=="Power")) energyArr.push(id); } }); // log(tempArr) // log(batArr) //log(illArr);log(humArr);log(tempArr);log(colArr);log(sw1Arr);log(disArr); let valueuptime $('shelly.*.*.id').each(function(id, i) { helpSortierenSchalter="xxx" thisSensors=[]; Eyestday=""; Etoday=""; Etotal=""; Epower=""; dieSchalter=[]; ; thisID; thisObjName; let ida = id.split('.'); //0 if( existsState(id.replace("id","name")) ) { if (getState(id.replace("id","name")).val!="" && getState(id.replace("id","name")).val!=null && getState(id.replace("id","name")).val!=undefined) { val[0]=getState(id.replace("id","name")).val} else{ val[0]=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name.replace("Device ","") }} else{val[0]=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name.replace("Device ","")} // " --- ";}"."+ida[3]+"."+ida[4] val[0]=val[0].replace(/^\([0-9][0-9][0-9]\) /,""); val[0]=val[0].replace(/^[0-9][0-9][0-9]\-/,""); //4 if (existsState(id.replace("id","hostname"))) {getState(id.replace("id","hostname")).val!=null && getState(id.replace("id","hostname")).val!="" && getState(id.replace("id","hostname")).val!=undefined ? val[4]=getState(id.replace("id","hostname")).val : val[4]="noHostname"} //1 if (existsState(id.replace("id","online"))) { getState(id.replace("id","online")).val!=null /*&& getState(id.replace("id","online")).val!="" && getState(id.replace("id","online")).val!=undefined*/ ? val[1]=getState(id.replace("id","online")).val : val[1]="false"} else { val[1]="false"} // if(!Boolean(val[1])) arrTriggerSonoff.push(id.replace("id","online")); //5 if (existsState(id.replace("id","uptime"))) { if(getState(id.replace("id","uptime")).val!=null && getState(id.replace("id","uptime")).val!="" && getState(id.replace("id","uptime")).val!=undefined ) { val[5]=getState(id.replace("id","uptime")).val; if(getObject(id.replace("id","uptime")).common.type=="string") { //log("string") valueuptime=val[5].replace(/^([0-9]*?D)([0-9][0-9]:.*)/,"$1 $2" );// log(valueuptime) valueuptime=valueuptime.replace(/^([0-9]*?:.*)/,"0D $1" ); //log(valueuptime) val[5]=valueuptime} else{//log(val[5]); valueuptime=val[5]=uptimeString(Number(val[5])); // log(valueuptime) } } else{val[5]="noUptime"}} // log(valueuptime.toString()+" ----" +val[3].replace(/^(.+)D.+/,"$1")) if(!Boolean(val[1])) valueuptime=val[5]="00:00:00" //3 if (existsState(id.replace("id","rssi"))) {getState(id.replace("id","rssi")).val!=null && getState(id.replace("id","rssi")).val!="" && getState(id.replace("id","rssi")).val!=undefined ? val[3]=getState(id.replace("id","rssi")).val: val[4]="noRSSI"} // if(!Boolean(val[1])) val[3]="0" //2 if (existsState(id.replace("id","id"))) { getState(id.replace("id","id")).val!=null && getState(id.replace("id","id")).val!="" && getState(id.replace("id","id")).val!=undefined ? val[2]=getState(id.replace("id","id")).val: val[2]="noID"} if (existsState(id.replace("id","firmware"))) {//log(getState(id.replace("id","firmware")).val) getState(id.replace("id","firmware")).val!=null /*&& getState(id.replace("id","firmware")).val!="" && getState(id.replace("id","firmware")).val!=undefined*/ ? val[7]=String(getState(id.replace("id","firmware")).val): val[7]="noVersion"} if (existsState(id.replace("id","version"))) {getState(id.replace("id","version")).val!=null && getState(id.replace("id","version")).val!="" && getState(id.replace("id","version")).val!=undefined ? helpFirmware=getState(id.replace("id","version")).val: helpFirmware="noVersion"} if (existsState(id.replace("id","Shutter.Position"))) {getState(id.replace("id","Shutter.Position")).val!=null && getState(id.replace("id","Shutter.Position")).val!=undefined ? helpShutterPosition =getState(id.replace("id","Shutter.Position")).val+"%": helpShutterPosition="noPos"} val[8] = thisObjName=ida[2].replace("Device ","") //////////////////////////////////////////////// vorbereitung switch spalte if (val[2]=="shellyix3") {dieSchalter.push(id); helpSortierenSchalter="button"; } function getSchatlerArt(ad) { let idx = ad.split('.'); //log(idx+" "+existsObject(idx[0]+'.'+idx[1]+'.'+idx[2]+'.'+"lights")) if(existsObject(idx[0]+'.'+idx[1]+'.'+idx[2]+'.'+"white0") ) { return "white" } else { if(existsObject(idx[0]+'.'+idx[1]+'.'+idx[2]+'.'+"lights") ) {return "lights"} else {return "relay"}} } let helpShutter=false $("shelly."+ida[1]+"."+ida[2]+".*.Switch").each(function(ad, y) { if ( !existsObject(`shelly.${ida[1]}.${ida[2]}.Shutter`)) { dieSchalter.push(ad); helpSortierenSchalter=getSchatlerArt(ad) } else { if ((getState(id.replace("id","mode" )).val).includes("roller") && !helpShutter) { helpShutter=true; if (/*existsState(`shelly.${ida[1]}.${ida[2]}.Shutter.Open`)*/ true) { dieSchalter.push(`shelly.${ida[1]}.${ida[2]}.Shutter.Open`); helpSortierenSchalter="shutter" } } else { if (!helpShutter) {dieSchalter.push(ad); helpSortierenSchalter=getSchatlerArt(ad) } } } }); $("shelly."+ida[1]+"."+ida[2]+".sensor.door").each(function(ad, y) { /*let idg = ad.split('.'); */ if (existsState(ad)) {dieSchalter.push(ad); helpSortierenSchalter="door"} }); $("shelly."+ida[1]+"."+ida[2]+".sensor.flood").each(function(ad, y) { /*let idg = ad.split('.'); */ if (existsState(ad)) {dieSchalter.push(ad); helpSortierenSchalter="flood" }}); $("shelly."+ida[1]+"."+ida[2]+".mode").each(function(ad, y) { /*let idg = ad.split('.'); */ if (existsState(ad)) { if (getState(ad).val=="roller") {dieSchalter.push(ad); helpSortierenSchalter="roller" } } }); $("shelly."+ida[1]+"."+ida[2]+".Button.Event").each(function(ad, y) { /*let idg = ad.split('.'); */ if (existsState(ad)) {dieSchalter.push(ad); helpSortierenSchalter="button"} }); //log(dieSchalter) //////////////////////////////////////////////// vorbereitung switch spalte ende // ---- Alle gleich bei A_LIVE if(tempArr.length>0) { for (let pp=0;pp0 ) {for (let pp=0;pp0 ) {for (let pp=0;pp0 ) {for (let pp=0;pp0 ) {for (let pp=0;pp b[i] ) return 1;} return 0;} ); // log(myObject[12].value7) switch (welcheSortierung) { case 0: sortMe("alpha","value0");break; //name case 1: sortMe("bool","value1");break;//log("online");break; //online- string case 2: sortMe("alpha","value2");break; //type case 3: break; case 4: break; case 5: sortMe("alpha","value5");break; case 6: sortMe("alpha","helpSortierenSchalter");break; //break; // sortMe("num","dieSchalter.length"); case 7: sortMe("alpha","value7");break; case 8: sortMe("alpha","value8");break; } } aktiv=0; inaktive=0; let zaehler=0 for(let zz=0;zz$2 val[8]=myObject[zz].value8.replace(/^(.*?)\#(.*)/,"$1" ); versionFlex=myObject[zz].value7//.replace(/(.+)\((.+)\)/,"$1
($2)"); dieSchalter=myObject[zz].dieSchalter; thisID=myObject[zz].thisID; thisObjName=myObject[zz].thisObjName; valueuptime=myObject[zz].valueuptime Epower=myObject[zz].Epower; Etoday=myObject[zz].Etoday; Etotal=myObject[zz].Etotal; Eyestday=myObject[zz].Eyestday; thisSensors=myObject[zz].thisSensors; helpFirmware=myObject[zz].helpFirmware; helpShutterPosition =myObject[zz].helpShutterPosition; // if (myObject[zz].thisSensors.length >0) log(myObject[zz].thisSensors.toString()) //log(myObject[zz].) let allButtons=""; // if (myObject[zz].value1!=true ) allButtons=" --- "; for(let oo=0;oo0 && existsState(dieSchalter[oo])/*&& oo >= 1*/ /* && myObject[zz].value1*/ ){ allButtons= allButtons+ makeButtons(getState(dieSchalter[oo]).val,dieSchalter[oo],myObject[zz].value1)//+" "; if(oo==2) allButtons=allButtons+""} else { allButtons= allButtons+ makeButtons(true,dieSchalter[oo],myObject[zz].value1)//+" "; if(oo==2) allButtons=allButtons+""} } // if(dieSchalter.length>2) log(val[6]) // allButtons=allButtons.replace(/(.+)(\&ensp\;)$/g,"$1"); // allButtons=allButtons.replace(/(.+)(\&ensp\;)(
)$/g,"$1$3"); val[6]=allButtons // log(allButtons) function makeButtons(value,dpID,offline) {// log(dpID) let myids=dpID.split(".");valButton=myids[myids.length-2].toLowerCase();//log(valButton) // valButton=dpID.replace(/.+\.(S)witch(.*)/,"$1 $2");valButton="SS" let caseHelp=0; // log(myids[3]+myids[4]) if ( myids[4]=="door") caseHelp=1; if ( myids[4]=="flood") caseHelp=2; if ( myids[4]=="Open") caseHelp=3; if ( myids[3]=="mode") caseHelp=4; if ( myids[4]=="Event") caseHelp=5; if(existsState(dpID)) if ( getState(dpID).val=="shellyix3") caseHelp=5; // log("-------"+caseHelp.toString() +" ----" + dpID +" ------- " + getState(dpID).val) // log(caseHelp.toString()) // log(offline+ " "+dpID) switch(caseHelp) { case 0: if( !offline) return "" if( value ) {return "" } else {return "" } case 1: if( !offline) return "" if( value) {return "" } else {return "" } case 2: if( !offline) return "" if( value) {return "" } else {return "" } case 3: if( !offline) return "" if( false) {return "" } else {return "" } case 4: if( !offline) return "" if( false) {return "" } else {return "" } case 5: if( !offline) return "" if( false) {return "" } else {return "" } } } // if (myObject[zz].value1!="true") {val[1]=symbolSchalter[2];inaktive++} // if (myObject[zz].value1=="true") {val[1]=symbolSchalter[1];aktiv++} val[0]=myObject[zz].value0; let helpCloud=`http://`+val[4] let helpCloud2=thisID.replace(/.*?\#(.*?)\#.*/,"$1").toLowerCase(); //log(helpCloud2) if ( !myObject[zz].value1) helpCloud=`https://home.shelly.cloud/#/device/${helpCloud2}` //e0126a /*'https://home.shelly.cloud/#/device/f38d5d' val[1]=myObject[zz].value4; // log(typeof val[2]) myObject[zz].value4!="noHostname" && myObject[zz].value4 !=null ? val[4]=myObject[zz].value4 : myObject[zz].value1=false; myObject[zz].value1 ? val[4]= ` `: val[4]= ` ` let regH=myObject[zz].value5.trim().replace(/^(.+)[C-E].+?$/,"$1 d") if(regH.includes(":")) regH=""; //log(myObject[zz].value3.replace(reg,"$1 d")) if( myObject[zz].value5!="noUptime" && myObject[zz].value5 !="missingState" ) {geteiteVersionsAnzeige ? val[5]=( (myObject[zz].value5.replace(/.+D(.+)/,"$1"))+"
"+regH) : val[5]=myObject[zz].value5.replace(/(.+D)(.*)/,"$2 +$1");} else {val[5]="noUptime"} val[5]=valueuptime myObject[zz].value3!="noRSSI" && myObject[zz].value3 !="missingState" ? val[3]=myObject[zz].value3+" dB" : val[3]="noRSSI" myObject[zz].value2!="noID" && myObject[zz].value2 !="missingState" ? val[2]=myObject[zz].value2.replace(/.helly(.+)/,"$1") : val[2]="shelly ?"; val[2]= val[2].replace(/(motion)(sensor)/,"$1 $2") // geteiteVersionsAnzeige ? helpFirmware=myObject[zz].value7/*.replace(/^(.+?)\/(.+)/,"$1
$2")*/ : val[7]=myObject[zz].value7; if(geteiteVersionsAnzeige) helpFirmware=helpFirmware.replace(/\//g," ") if(geteiteVersionsAnzeige) helpFirmware=helpFirmware.replace(/\-/g,"- ") if(geteiteVersionsAnzeige) helpFirmware=helpFirmware.replace(/\@/g," @") // log(typeof val[7]) if (val[7].includes("true")) val[7]=symbolSchalter[5]; if (val[7].includes("false")) val[7]=" - "; if (val[7].includes("noVersion")) val[7]=" ? "; // log(val[7]) if(geteiteVersionsAnzeige) versionFlex=val[7]; // für flexview wegen farbe let helpIP= val[5]; let helpUP= val[4]; let helpRSSI= val[3]; if (!myObject[zz].value1) {val[1]=symbolSchalter[2];inaktive++} if (myObject[zz].value1) {val[1]=symbolSchalter[1];aktiv++} // if(getState("javascript." + instance +".Tabellen@Liv."+dpVIS+".Spalte2").val) { val[2]=myObject[zz].value2} if (!myObject[zz].value1) { val[0]=""+val[0]+""; val[1]=""+val[1]+""; val[2]=""+val[2]+""; val[3]=""+val[3]+""; val[5]=""+val[5]+""; val[4]=""+val[4]+""; val[6]=""+val[6]+""; val[7]=""+val[7]+""; val[8]=""+val[8]+""; } counter++; // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN flexboxView ? flexboxBind(myObject[zz].value1,helpUP,helpIP,helpRSSI) : tabelleBind(); // HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT langeGesamt++; // WICHTIG Seitenleiste } //------------------------------------------------------------------------------------------------------------------------------------------------- //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------------------------------------- // log(zaehler.toString()) // log(JSON.stringify(myObject)) // AB HIER NICHTS ÄNDERN - tabelle fertigstellen // for (let i=0;i"+seitenLeistenTest+"" htmlSeitenleisteRechts2=""+seitenLeistenTest+"" htmlMittelLeiste=""+seitenLeistenTest+"" } else{ htmlSeitenleisteRechts="";htmlMittelLeiste=""; } htmlMittelLeiste=""; if(mehrfachTabelle>1) htmlSeitenleisteRechts2 = "" ; if(mehrfachTabelle==1 && !ichWillAuchRechtsEineLeiste) htmlSeitenleisteRechts2 = "" ; //SpaltenÜberschrift for (let ue=0;ue"+htmlFeld[ue]+"")} else {let valButton=welcherSpeicherOrt+".Spalte"+ue; if(ue==htmlSpalte1Weite.length-1) {htmlTabUeber2=htmlTabUeber2.concat(""+ ""+" "+htmlSeitenleisteRechts2) } else{ if(ue==0) { myScann=(myScann.replace("scanned in ","")).replace("seconds","s"); htmlTabUeber2=htmlTabUeber2.concat(""+ ""+"    ("+(aktiv+inaktive)+"\/"+(inaktive)+")") } else{ htmlTabUeber2=htmlTabUeber2.concat(""+"" +""); } // sonst } //ue!=last }} //SpaltenÜberschrift bei mehrfachtabelle if (!flexboxView){ htmlTabUeber2_1="" for (let ue=0;ue" +""+htmlSeitenleisteRechts)} else{ if(ue==0){htmlTabUeber2_1=htmlTabUeber2_1.concat(htmlMittelLeiste+"" +"") } else{ htmlTabUeber2_1=htmlTabUeber2_1.concat(""+"" +"")}} } }else { htmlTabUeber2_1="";for (let ue=0;ue"+htmlFeld[ue]+"")} /* for (let ue=0;ue"+"" +"")}*/ } htmlTabUeber=""; switch (mehrfachTabelle) { case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3; break; case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break; case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2_1+htmlTabUeber3; break; case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break; }; if (!UeberschriftSpalten) {htmlTabUeber=""} flexboxView ? flexboxFinish() : tabelleFinish(); if (braucheEinJSON ) {setStateDelayed(welcherSpeicherOrt+".JSONVis",JSON.stringify(makeJsonWidget),1000 )} } // function ende //MAIN: if (moechteNurScheduleAlsTrigger) {schedule(mySchedule, function () { if(true) writeHTML(true); // if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/ });} }); } writeHTML(true); function tabelleBind(){ switch (mehrfachTabelle) { case 1: if(counter%2==0) {htmlOut=htmlOut+""; for(let u=0;u"+val[u]+""); // style=\"width:"+htmlSpalte1Weite[u]+"\" } htmlOut=htmlOut.concat(""); break; } else {htmlOut=htmlOut+""; for(let u=0;u"+val[u]+""); //style=\"width:"+htmlSpalte1Weite[u]+"\" } htmlOut=htmlOut.concat(""); break; } case 2: if(counter%4==0){ if(counter%2==0) {htmlOut = htmlOut+""; for(let u=0;u"+val[u]+"");} else {htmlOut=htmlOut.concat(""+val[u]+"")} } } else { for(let u=0;u"+val[u]+""); } htmlOut=htmlOut.concat(""); } break; } else { if(counter%2==0) {htmlOut=htmlOut+""; for(let u=0;u"+val[u]+"");} else {htmlOut=htmlOut.concat(""+val[u]+"")} } } else { for(let u=0;u"+val[u]+""); } htmlOut=htmlOut.concat(""); } break;} case 3: if(counter%2==0) { if(counter%3==0 ) {htmlOut = htmlOut+""; for(let u=0;u"+val[u]+"");} else {htmlOut=htmlOut.concat(""+val[u]+"")} } } else { if(counter%3==1) {for(let u=0;u"+val[u]+"");} else {htmlOut=htmlOut.concat(""+val[u]+"")} } } else { for(let u=0;u"+val[u]+""); } htmlOut=htmlOut.concat(""); } } break; } else { if(counter%3==0 ) {htmlOut = htmlOut+""; for(let u=0;u"+val[u]+"");} else {htmlOut=htmlOut.concat(""+val[u]+"")} } } else{ if(counter%3==1 ) { for(let u=0;u"+val[u]+"");} else {htmlOut=htmlOut.concat(""+val[u]+"")} } } else { for(let u=0;u"+val[u]+""); } htmlOut=htmlOut.concat(""); } } break; } } //switch ende } function tabelleAusbessern() { // bessert mei mehrfachtabellen die nicht vollen zeilenn aus - bevor die unterüberschriften kommen switch (mehrfachTabelle) { case 1: break; case 2: let helpMehrfach=""; for(let w=0;w ")};helpMehrfach=helpMehrfach.concat("") if(counter%2==0) htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach); break; case 3: let helpMehrfach2=""; for(let w=0;w ")};helpMehrfach2=helpMehrfach2.concat("") if(counter%3==2) htmlOut = htmlOut.replace(/<\/td>$/, ""); if(counter%3==1) htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach2); let helpMehrfach3=""; let helpMehrfach31="";for(let w=0;w ")} for(let w=0;w ")} else {helpMehrfach3=helpMehrfach3.concat(" "+helpMehrfach31)} };helpMehrfach3=helpMehrfach3.concat("") if(counter%3==0) htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach3); break; }} function tabelleFinish() { switch (mehrfachTabelle) { case 1: break; case 2: let helpMehrfach=""; for(let w=0;w ")};helpMehrfach=helpMehrfach.concat("") if(counter%2==0) htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach); break; case 3: let helpMehrfach2=""; for(let w=0;w ")};helpMehrfach2=helpMehrfach2.concat("") if(counter%3==2) htmlOut = htmlOut.replace(/<\/td>$/, ""); if(counter%3==1) htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach2); let helpMehrfach3=""; let helpMehrfach31="";for(let w=0;w ")} for(let w=0;w ")} else {helpMehrfach3=helpMehrfach3.concat(" "+helpMehrfach31)} };helpMehrfach3=helpMehrfach3.concat("") if(counter%3==0) htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach3); break; } var htmlUeber= "

"+htmlFeldUeber+"  Last Update: "+formatDate(getDateObject((new Date().getTime())), 'SS:mm:ss')+"

"; // if(mitSearch) htmlUeber=htmlUeber+searchM if(htmlSignature) htmlUnter="
"+htmlFeldUeber+"  Last Update: "+formatDate(getDateObject((new Date().getTime())), "SS:mm:ss");"
"; var htmlOutVIS=""; if (htmlUberschrift) { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+searchMe+htmlTabStyle+htmlTabUeber+htmlOut+"
"+htmlUnter+""+ buttonScript : htmlOutVIS=htmlUeber+searchMe+htmlTabStyle+htmlTabUeber+htmlOut+""+htmlUnter+""+ buttonScript ; } else { zentriert ? htmlOutVIS=htmlZentriert+searchMe+htmlTabStyle+htmlTabUeber+htmlOut+""+htmlUnter+""+ buttonScript : htmlOutVIS=searchMe+htmlTabStyle+htmlTabUeber+htmlOut+""+htmlUnter+""+ buttonScript; } // log("bin raus aus tabelleBind"); if (braucheEinVISWidget) setStateDelayed(welcherSpeicherOrt+".HTMLTableVis", htmlOutVIS ,1000); /* var htmlUnter= "
"+htmlFeldUeber+"  Last Update: "+formatDate(getDateObject((new Date().getTime())), "SS:mm:ss");+"
" if (!htmlSignature) htmlUnter=""; var htmlEnd=""+htmlUnter+""; */ } function flexboxBind(online,helpUP,helpIP,helpRSSI){ let energyHelper=""; let divHelpi="";//log(online) //log(thisSensors.toString()) // test= "
" let colLeiste= "
" let sensorHelpi=" style=\"display: inline-block;font-size:90%; margin: auto; padding: 5px; border: 1px solid; border-radius: 5px ;margin-top: 5px; margin-bottom: 5px;\">SENSORS:
"; for (let i=0;i"+colLeiste+"
"} else{ sensorHelpi=sensorHelpi+ thisSensors[i]+"
"}} if(thisSensors.length==0) sensorHelpi=">" //log("sensors: "+sensorHelpi) // log(val[6]) if (!online) divHelpi=`style=\"border-color: black; background-image: linear-gradient(${htmlGradient[0]}deg,${htmlFarbFelderschrift} 5%, #434141 10%)\"` if( Etoday!="") { energyHelper="
ENERGY:

Total: "+Number(Etotal).toFixed(0)+" kWh
Heute: "+Number(Etoday).toFixed(2)+" kWh
Gestern: "+Number(Eyestday).toFixed(2)+" kWh
Power: "+Epower+" W
" } // bildHelper!="" ? energyHelper="" : energyHelper="" /* htmlOut=htmlOut+"
"+ ""+val[0]+"
("+val[2]+")

"+ energyHelper+"
INFO:
"+versionFlex+"
"+val[5]+"
"+val[4]+ "
POWER:

"+ val[6]+"

"+"
"+ "
" */ htmlOut=htmlOut+ "
"+ "
"+val[0]+"
TYPE: "+val[2]+"

"+thisObjName+"
"+ // "
"+ energyHelper+ `
INFO:
IP: ${helpUP}
RSSI: ${helpRSSI}
UP: ${helpIP}
`+ `
FIRMWARE:
${versionFlex}

`+ //"style=\"font-size: 90%; font-weight: bold;\">SENSORS:

" ""+"
"+ "
"+htmlFeld[6]+":

"+val[6]+"
"+ "
" } function flexboxFinish(){ var htmlUeber= "

"+htmlFeldUeber+"  Last Update: "+formatDate(getDateObject((new Date().getTime())), 'SS:mm:ss')+"

"; // if(mitSearch) htmlUeber=htmlUeber+searchMe if(htmlSignature) htmlUnter="
"+htmlFeldUeber+"  Last Update: "+formatDate(getDateObject((new Date().getTime())), "SS:mm:ss");"
"; // let htmlIframe=`
` let htmlIframe=`
` var htmlOutVIS=""; if (htmlUberschrift) { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+searchMe+htmlTabStyle+htmlTabUeber+htmlIframe+htmlOut+""+htmlUnter+""+ buttonScript : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlIframe+htmlOut+""+htmlUnter+""+ buttonScript ; } else { zentriert ? htmlOutVIS=htmlZentriert+searchMe+htmlTabStyle+htmlTabUeber+htmlIframe+htmlOut+""+htmlUnter+""+ buttonScript : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlIframe+htmlOut+""+htmlUnter+""+ buttonScript; } setStateDelayed(welcherSpeicherOrt+".HTMLTableVis", htmlOutVIS ,1000); } let noon=false; async function needDP(){ willUnterUserdataSpeichern ? welcherSpeicherOrt="0_userdata.0.Tabellen@Liv."+dpVIS : welcherSpeicherOrt="javascript." + instance + ".Tabellen@Liv."+dpVIS for(let s=0;s0) refreshHelperOn=false; // if (obj.id=="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte5") welcheSortierung=5; // if (obj.id=="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte6" ) welcheSortierung=6; // log(String(mehrfachTabelle)) if (false) { setTimeout(function () { noon=false; //log(obj.id+" "+getState(welcherSpeicherOrt+".Spalte13").val) if(obj.id.includes(dpVIS) && !obj.id.includes("Spalte15")) { if( (obj.id!=welcherSpeicherOrt+".Spalte12" && obj.id!=welcherSpeicherOrt+".Spalte13" && getState(welcherSpeicherOrt+".Spalte13").val=="iframe_closed" ) ) {writeHTML(true)} else{/*log("blocked")*/} /*: writeHTML(false);*/ //&& getState(welcherSpeicherOrt+".Spalte13").val=="iframe_offen" if( (obj.id==welcherSpeicherOrt+".Spalte12" && getState(welcherSpeicherOrt+".Spalte13").val=="iframe_offen" ) ) {writeHTML(true)} else{/*log("blocked2")*/}} /*: writeHTML(false);*/ else{ if ( getState(welcherSpeicherOrt+".Spalte15").val==getState(welcherSpeicherOrt+".Spalte14").val && !laeuftSchon && (obj.id!=welcherSpeicherOrt+".Spalte12" && obj.id!=welcherSpeicherOrt+".Spalte13" && getState(welcherSpeicherOrt+".Spalte13").val=="iframe_closed" && !obj.id.includes("Spalte15")) ) { // log("jetz"); laeuftSchon=true;writeHTML(true); setTimeout(function () { laeuftSchon=false ; // if (Schaltcounter>1) {Schaltcounter=0;writeHTML(true)} }, 2550); } }}, 500); } if(true) { setTimeout(function () { noon=false; //log(obj.id+" "+getState(welcherSpeicherOrt+".Spalte12").val) if(obj.id.includes(dpVIS)) // trigger von script oder dp von adapter ? { // log(obj.id); if( (obj.id!=welcherSpeicherOrt+".Spalte12" && obj.id!=welcherSpeicherOrt+".Spalte13" && obj.id!=welcherSpeicherOrt+".Spalte15" /*&& getState(welcherSpeicherOrt+".Spalte12").val=="iframe_closed"*/ ) ) {/*log("1er");*/refreshHelperOn=false;writeHTML(true)} else{/*log("blocked")*/ /*: writeHTML(false);*/ //&& getState(welcherSpeicherOrt+".Spalte12").val=="iframe_offen" if( (obj.id==welcherSpeicherOrt+".Spalte9" || obj.id==welcherSpeicherOrt+".Spalte10" || obj.id==welcherSpeicherOrt+".Spalte11") && obj.id!=welcherSpeicherOrt+".Spalte15") {/*refreshHelperOn=false*/;writeHTML(true);/*log("2er" )*/} } // if( (obj.id==welcherSpeicherOrt+".Spalte11" && getState(welcherSpeicherOrt+".Spalte12").val=="iframe_offen" ) ) {writeHTML(true)} // if( )writeHTML(true) } else{ if (getState(welcherSpeicherOrt+".Spalte14").val==getState(welcherSpeicherOrt+".Spalte15").val && !obj.id.includes("Spalte15") && !laeuftSchon && getState(welcherSpeicherOrt+".Spalte13").val=="iframe_closed" ) { laeuftSchon=true;writeHTML(true); ;/*log("3er - " + getState(welcherSpeicherOrt+".Spalte14").val+" - "+getState(welcherSpeicherOrt+".Spalte15").val + (getState(welcherSpeicherOrt+".Spalte14").val==getState(welcherSpeicherOrt+".Spalte15").val))*/ setTimeout(function () { laeuftSchon=false ; // if (Schaltcounter>1) {Schaltcounter=0;writeHTML(true)} }, 2550); } }}, 500); } } });}, 150); /* let Schaltcounter=0 on({id: arrTriggerSonoff, ack: false, change: "ne"}, function (obj) { Schaltcounter++ if (!laeuftSchon) { // log("jetz"); laeuftSchon=true;writeHTML(true); setTimeout(function () { laeuftSchon=false ; if (Schaltcounter>1) {Schaltcounter=0;writeHTML(true)} }, 5550); } }); */ //SORTIEREN function sortMe(myType,value){ if(myType=="alpha" ){ myObject.sort(function (alpha, beta) { if ((alpha[value].toString().toUpperCase()).trim() > (beta[value].toString().toUpperCase()).trim()) return 1; if ((beta[value].toString().toUpperCase()).trim()> (alpha[value].toUpperCase().toString()).trim()) return -1; return 0; });} if(myType=="bool" ) { myObject .sort(function(x, y) { return x[value] - y[value] }); } if(myType=="num" ) { myObject.sort(function (alpha, beta) { return beta[value] -alpha[value]; });} } function makeMyCSS() { trHelperClass=" "; for (let jj=0;jj<(Feld1lAlign.length);jj++) { trHelperClass= trHelperClass+ " .scrollContent"+dpVIS+" td"+":nth-of-type("+(jj+1)+") {width: "+htmlSpalte1Weite[jj]+"; text-align: "+Feld1lAlign[jj]+" }" } if(mehrfachTabelle>=2) for (let jj=0;jj<(Feld1lAlign.length);jj++) { trHelperClass= trHelperClass+ " .scrollContent"+dpVIS+" td"+":nth-of-type("+(jj+1+(Feld1lAlign.length))+") {width: "+htmlSpalte1Weite[jj]+"; text-align: "+Feld1lAlign[jj]+" }" } if(mehrfachTabelle==3) for (let jj=0;jj<(Feld1lAlign.length);jj++) { trHelperClass= trHelperClass+ " .scrollContent"+dpVIS+" td"+":nth-of-type("+(jj+1+(2*Feld1lAlign.length))+") {width: "+htmlSpalte1Weite[jj]+"; text-align: "+Feld1lAlign[jj]+" }" } // log(trHelperClass) switch (bkgroundSearch){ case 1 : bkgDiv=`background: radial-gradient(black 15%, transparent 16%) 0 0, radial-gradient(black 15%, transparent 16%) 8px 8px, radial-gradient(rgba(255,255,255,.1) 15%, transparent 20%) 0 1px, radial-gradient(rgba(255,255,255,.1) 15%, transparent 20%) 8px 9px; background-color:#282828; background-size:16px 16px;`; break; case 2 : bkgDiv=`background: url(data:image/gif;base64,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)` ; break case 3 : bkgDiv=`background: radial-gradient(rgba(255,255,255,0) 0, rgba(255,255,255,.15) 30%, rgba(255,255,255,.3) 32%, rgba(255,255,255,0) 33%) 0 0, radial-gradient(rgba(255,255,255,0) 0, rgba(255,255,255,.1) 11%, rgba(255,255,255,.3) 13%, rgba(255,255,255,0) 14%) 0 0, radial-gradient(rgba(255,255,255,0) 0, rgba(255,255,255,.2) 17%, rgba(255,255,255,.43) 19%, rgba(255,255,255,0) 20%) 0 110px, radial-gradient(rgba(255,255,255,0) 0, rgba(255,255,255,.2) 11%, rgba(255,255,255,.4) 13%, rgba(255,255,255,0) 14%) -130px -170px, radial-gradient(rgba(255,255,255,0) 0, rgba(255,255,255,.2) 11%, rgba(255,255,255,.4) 13%, rgba(255,255,255,0) 14%) 130px 370px, radial-gradient(rgba(255,255,255,0) 0, rgba(255,255,255,.1) 11%, rgba(255,255,255,.2) 13%, rgba(255,255,255,0) 14%) 0 0, linear-gradient(45deg, #343702 0%, #184500 20%, #187546 30%, #006782 40%, #0b1284 50%, #760ea1 60%, #83096e 70%, #840b2a 80%, #b13e12 90%, #e27412 100%); background-size: 470px 470px, 970px 970px, 410px 410px, 610px 610px, 530px 530px, 730px 730px, 100% 100%; background-color: #840b2a;`; break; case 4 : bkgDiv=`background: radial-gradient(${htmlFarbTableColorGradient1}, ${htmlFarbTableColorGradient2});`; break; //265686 5590CA 2F2F2F 3c3c3c case 5 : bkgDiv=`background: radial-gradient(${farbeUngeradeZeilen}, ${farbeGeradeZeilen});`; break; //265686 5590CA 2F2F2F 3c3c3c case 6 : bkgDiv=`background: radial-gradient(#bfbcbc, #ffffff);`; break; //265686 5590CA 2F2F2F 3c3c3c } scrollBar=` .thescroller${dpVIS}::-webkit-scrollbar { width: 5px;} .thescroller${dpVIS}::-webkit-scrollbar-track {background: transparent; width: 5px;} .thescroller${dpVIS}::-webkit-scrollbar-thumb {border-radius: 40px; border: transparent ; background: ${htmlFarbTableColorGradient1}; } .thescroller${dpVIS} {scrollbar-width: thin; scrollbar-color: ${htmlFarbTableColorGradient1} transparent;}` myButtonUeberschrift=" .myButt"+dpVIS+" {border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color: "+htmlBackgroundButtonUeberschrift+"\; color: "+htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text-align:left;}" htmlZentriert= ""+'
' }// endCSS function makeMySearch_Seitenleiste() { einmalAbstand=`
` let seitenLeistenTest="
"+symbolSchalter[3]+"
"; for (let f=0;f `} for (let i=0;i ` } if (tabletDoppelHilfe) seitenLeistenTest=seitenLeistenTest+einmalAbstand+ einmalAbstand+"
"+symbolSchalter[4]+"
" htmlSeitenleiste=""; if (ichWillSeitenLeiste) htmlSeitenleiste= "
"+seitenLeistenTest+"
" ;// htmlTabUeber1=htmlTabUeber1+ searchMe=""; sucheEin ? searchMe="
" : searchMe="" searchMe=searchMe+htmlSeitenleiste htmlTabStyle= "
"+ ""+ // rules=\""+htmlRahmenLinien+" "" htmlTabUeber4=""; } function makeMyVisScripte() { let valSpalte=[] ; for(let kk=0;kk { /*console.log(states);*/ self.servConn.setState(myval, !states[myval].val);} )}; ` /*ueberschr.*/ + '$( "button.myButt'+dpVIS+'" ).click(function() { $( this ).slideUp() ; setTimeout(function() { $( "button.myButt'+dpVIS+'" ).hide() ; $( ".mySpan'+dpVIS+'" ).text(\"wait ...\")}, 500); });' //'[class*="test"]' [class~="value"] "[class~='gerade']" /*search*/ + `var allRows${dpVIS} = $("[class*='gerade${dpVIS}']"); $("input.myinputclass${dpVIS}").on("keydown keyup", function() { allRows${dpVIS}.hide(); $("tr:contains('" + $(this).val() + "')").show(); });` /*search*/ + `var allRows2${dpVIS} = $("div.divFlexBoxenEinzeln${dpVIS}"); /*console.log(allRows2${dpVIS});*/ $("input.myinputclass${dpVIS}").on("keydown keyup", function() { allRows2${dpVIS}.hide(); $("div.divFlexBoxenEinzeln${dpVIS}:contains('" + $(this).val() + "')").show(); var $gesucht${dpVIS}=$(this).val(); vis.setValue('${welcherSpeicherOrt}.Spalte12',$(this).val()); /*console.log('val: '+$gesucht${dpVIS})*/ });` // + `$( ".seitenleiste${dpVIS}:not(.sonderTablet${dpVIS})" ).click(function() { $( "button.myButt${dpVIS}" ).slideUp() ; setTimeout(function() { $( "button.myButt${dpVIS}" ).hide() ; $( ".mySpan${dpVIS}" ).text(\"refresh\")}, 500); var Self = this; var myvali='${welcherSpeicherOrt}.Spalte9'; vis.setValue(myvali,true) ; vis.setValue('${welcherSpeicherOrt}.Spalte12',''); console.log("spalt8") });` /*refresh Site*/ + `$( ".refreshSie${dpVIS},.close${dpVIS}" ).click(function() { $( "button.myButt${dpVIS}" ).slideUp() ; setTimeout(function() { $( "button.myButt${dpVIS}" ).hide() ;` + `$( ".mySpan${dpVIS}" ).text(\"refresh\")}, 200); setTimeout(function () { var Self = this; var myvali='${welcherSpeicherOrt}.Spalte9';console.log(myvali); self.servConn.getStates(myvali, (error, states) => { console.log(states); self.servConn.setState(myvali, !states[myvali].val);} ) ;}, 500);` + `vis.setValue('${welcherSpeicherOrt}.Spalte12',''); console.log("spalt8") ;vis.setValue('${welcherSpeicherOrt}.Spalte13','iframe_closed');vis.setValue('${welcherSpeicherOrt}.Spalte14',0); vis.setValue('${welcherSpeicherOrt}.Spalte15',0) });` // + `$( ".seitenleiste${dpVIS}:not(.seitenleiste${dpVIS}.sonderTablet${dpVIS})" ).click(function() {var Self = this; var myvali='javascript.${instance}.Tabellen@Liv.${dpVIS}.Spalte5'; vis.setValue(myvali,true) ; console.log("spalt5") });` /*dbclick*/ + `$( "[class*='gerade${dpVIS}']" ).dblclick(function() {var Self = this; var myvali='${welcherSpeicherOrt}.Spalte10'; self.servConn.getStates(myvali, (error, states) => { console.log(states); self.servConn.setState(myvali, !states[myvali].val);} ); console.log("spalt9") ;vis.setValue('${welcherSpeicherOrt}.Spalte14',0); vis.setValue('${welcherSpeicherOrt}.Spalte15',0) });` /*dbclick*/ + `$( "[class*='divFlexBoxen${dpVIS}']" ).dblclick(function() {var Self = this; var myvali='${welcherSpeicherOrt}.Spalte10'; self.servConn.getStates(myvali, (error, states) => { console.log(states); self.servConn.setState(myvali, !states[myvali].val);} ); console.log("spalt9") ; vis.setValue('${welcherSpeicherOrt}.Spalte14',0); vis.setValue('${welcherSpeicherOrt}.Spalte15',0) });` /*tablet*/ + `$( ".sonderTablet${dpVIS}" ).click(function() { var myvali='${welcherSpeicherOrt}.Spalte11'; self.servConn.getStates(myvali, (error, states) => { console.log(states); self.servConn.setState(myvali, !states[myvali].val);} ); console.log("spalt10"); vis.setValue('${welcherSpeicherOrt}.Spalte14',0); vis.setValue('${welcherSpeicherOrt}.Spalte15',0); });` + `function setOnDblClickCustom( myvalue ) { var Self = this; var objID = myvalue; Self.servConn.getStates(objID, (error, states) => { /*console.log(states);*/ Self.servConn.setState(objID, !states[objID].val); }); };` /*iFrame*/ + `$(".ipFlexIframe${dpVIS}").click(function() { /*console.log($(this).val());*/ $(".close${dpVIS}").text("close(x)");$(".close${dpVIS}").attr('style','color: ${farbeNichtConnected}');$(".divFlexBoxen${dpVIS}").animate({ scrollTop: 0 }); $("#iframe${dpVIS}").attr('src', $(this).val()).attr('width','460').attr('frameborder','1').attr('height','780').attr('style','background: linear-gradient(${htmlGradient[0]}deg,${htmlFarbTableColorGradient2} 10%,${htmlFarbTableColorGradient1} 20%)');vis.setValue('${welcherSpeicherOrt}.Spalte13','iframe_offen'); console.log("spalt12"); }); ` // + `$( ".divFlexBoxenEinzeln${dpVIS} .retteAnsicht${dpVIS}" ).click(function() { vis.setValue('${welcherSpeicherOrt}.Spalte13','iframe_offen'); console.log("spalt12") });` /*focus tab*/ + `var row_index${dpVIS}=0; $( ".retteAnsicht${dpVIS}" ).click(function() { row_index${dpVIS} = $(".tableContainer${dpVIS}").scrollTop(); vis.setValue('${welcherSpeicherOrt}.Spalte14',row_index${dpVIS}); /*console.log('scrollscrollscrollscroll table: '+ $(".tableContainer${dpVIS}").scrollTop()); */ });` //.position().top /*focus flex*/ + ` $( ".retteAnsicht${dpVIS}" ).click(function() { /* console.log($(this).closest());*/ row_index${dpVIS} = $(".divFlexBoxen${dpVIS}").scrollTop(); if (row_index${dpVIS} != null){ vis.setValue('${welcherSpeicherOrt}.Spalte14',row_index${dpVIS}) } ; /*console.log('scrollscrollscrollscroll flexbox: '+ $(".divFlexBoxen${dpVIS}").scrollTop());*/ });` //.position().top // + `$(window).scroll(function(){var scrollPos${dpVIS} = $("div.vis-widget-body").scrollTop();console.log(scrollPos${dpVIS});});` /*scroll all*/ + `$('.tableContainer${dpVIS}').scroll(function(){var scrollPos1${dpVIS} = $('.tableContainer${dpVIS}').scrollTop()/*;console.log(scrollPos1${dpVIS})*/;vis.setValue('${welcherSpeicherOrt}.Spalte15',scrollPos1${dpVIS})});` + `$('.divFlexBoxen${dpVIS}').scroll(function(){var scrollPos1${dpVIS} = $('.divFlexBoxen${dpVIS}').scrollTop()/*;console.log(scrollPos1${dpVIS})*/;vis.setValue('${welcherSpeicherOrt}.Spalte15',scrollPos1${dpVIS})});` /*holt Input DP*/ + `var gesucht${dpVIS}; var myState='${welcherSpeicherOrt}.Spalte12'; /*console.log(myState) ;*/ var Self=this; Self.servConn.getStates( myState, (error, states) => { /*console.log('states: ' + states['${welcherSpeicherOrt}.Spalte12'].val );*/ gesucht${dpVIS} = states['${welcherSpeicherOrt}.Spalte12'].val; /*console.log("gesucht: "+ gesucht${dpVIS});*/ });` /*erst. jQfunc*/ + `var jqueryFunction${dpVIS} ; $.jqueryFunction${dpVIS} = function( _msg${dpVIS} ) { /*alert( allRows[0] );*/ allRows${dpVIS}.hide(); $("tr:contains('" + _msg${dpVIS} + "')").show(); allRows2${dpVIS}.hide(); $("div.divFlexBoxenEinzeln${dpVIS}:contains('" + _msg${dpVIS} + "')").show(); } ; ` /*Input again*/ + `setTimeout(function(){ /*console.log('gesucht2: '+gesucht${dpVIS});*/ if (gesucht${dpVIS}!="") $.jqueryFunction${dpVIS}(gesucht${dpVIS}) ;$("#search${dpVIS}").val(gesucht${dpVIS}); }, 300); ` + `var Self=this; Self.servConn.getStates( '${welcherSpeicherOrt}.Spalte14', (error, states) => { /* console.log('states: ' + states['${welcherSpeicherOrt}.Spalte14'].val );*/ row_index${dpVIS} = states['${welcherSpeicherOrt}.Spalte14'].val; /*console.log("row_index nach dp: "+ row_index${dpVIS});*/ $(".tableContainer${dpVIS}").animate({ scrollTop: row_index${dpVIS} },0); $(".divFlexBoxen${dpVIS}").animate({ scrollTop: row_index${dpVIS} },0); });` /*$(".divFlexBoxen${dpVIS}").scrollTop(row_index${dpVIS});*/ // + `$(document).ready(function() { setTimeout(function () { var Self = this; var myvali='${welcherSpeicherOrt}.Spalte9';/*console.log(myvali)*/; self.servConn.getStates(myvali, (error, states) => { console.log(states); self.servConn.setState(myvali, !states[myvali].val);} ) }, 1500) });` // + `$(document).ready(function() { setTimeout(function () { console.log("document ready remove display-none shelly"); $(".myclasstr_gerade${dpVIS}").removeAttr( 'style' ); $(".myclasstr_ungerade${dpVIS}").removeAttr( 'style' ); }, 1000) } );` /*refreshhelper*/ // + `$(".tableContainer${dpVIS}").ready(function() { setTimeout(function () { console.log("document ready remove display-none shelly"); $(".myclasstr_gerade${dpVIS}").removeAttr( 'style' ); $(".myclasstr_ungerade${dpVIS}").removeAttr( 'style' ); }, 1300) } );` + refreshHelper + spaltenAnzeigeScript + spaltenAnzeigeScriptEnd +'' //.close${dpVIS} Spalte15 } function makeJsonWidget(vax1,vax2,vax3,vax4,vax5,vax6) { //log(vax3+vax6+htmlFeld1) vax4=pfadFuerBilder+vax4+".png" ; if ( braucheMaterialDesignWidgetList) { myJsonWidget.push({ Device : vax4, IP : vax1, Status : vax2, Kategorie : vax3+" "+vax6 } );} // log(myJsonWidget) if (braucheMaterialDesignWidget) { let colorIP= materialD_IP_erreichbar //"lightgreen"; // log(vax3) if (vax3==symbolSchalter[2]) colorIP=materialD_IP_nichtErreichbar //"lightcoral"; // vax4=pfadFuerBilder+vax4+".png" ; let mysubText = `
${vax2}
${vax3}${vax6}
` let ip=vax2 myJsonWidget2.push({ text: vax1, subText: mysubText, statusBarColor: vax5, image: vax4, imageColor: "", listType: "text", showValueLabel: true, ip: ip, //vax2, status: vax3, link:vax6 }); } } async function needDP2(myData){ if (!(await existsStateAsync("Tabellen@Liv."+dpVIS+".Device_Collection"))) { await createStateAsync("Tabellen@Liv."+dpVIS+".Device_Collection", myData,{type: "array", name: "Device_Collection", desc: 'Device_Collection', role: "value", read: true, write: true, } ); } } async function getData(myData){ return getState(myData).val; } function Sleep(milliseconds) { return new Promise(resolve => setTimeout(resolve, milliseconds)); } /* let Schaltcounter=0 on({id: arrTriggerSonoff, ack: false, change: "ne"}, function (obj) { Schaltcounter++ if (!laeuftSchon) { // log("jetz"); laeuftSchon=true;writeHTML(true); setTimeout(function () { laeuftSchon=false ; if (Schaltcounter>1) {Schaltcounter=0;writeHTML(true)} }, 5550); } }); */ function makeTheFirstObject(id,valueuptime){ // log(" -"+helpSortierenSchalter+" ---------- "+id) myObject.push({ "value0" : val[0], // "INSTANCE" "value1" : Boolean(val[1]), // "SINCE" "value2" : val[2], // "STATUS" "value3" : val[3], // "INSTANCE" "value4" : val[4], // "SINCE" "value5" : val[5], "value6": val[6], "value7": val[7], "value8": val[8], "thisObjName": thisObjName, "valueuptime": valueuptime, "thisID": id, "dieSchalter" : dieSchalter, "Epower" : Epower, "Etoday" : Etoday, "Etotal" : Etotal, "Eyestday" : Eyestday, "thisSensors" : thisSensors, "isOnline" : isOnline, "helpFirmware" : helpFirmware, "helpShutterPosition" : helpShutterPosition, "helpSortierenSchalter" : helpSortierenSchalter // ID }) /* makeJsonWidget.push({ [htmlFeld[0]] : val[0], // "INSTANCE" [htmlFeld[1]] : val[1], // "SINCE" [htmlFeld[2]] : val[2], // "STATUS" "vallly" : getState(id).val })*/ } function withoutTasmota10(id,ida) { // unter Tasmota 10 alt und neu anzeige if( existsState(id.replace("INFO.Module","INFO.Hostname")) ) { val[0]=getState(id.replace("INFO.Module","INFO.Hostname")).val ;} else {val[0]=""} if(deviceNameStattHostname || val[0]=="") val[0]=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ; if (showInstanzInName) val[0]=val[0]+' ('+ida[1]+')'; if( existsState(id.replace("INFO.Module","alive")) ) { val[1]=(getState(id.replace("INFO.Module","alive")).val).toString(); isOnline=getState(id.replace("INFO.Module","alive")).val } else { val[1]="false"; isOnline=false } // ;log("dp "+getState(id.replace("INFO.Module","alive")).val+" val0 "+val[1]) if( existsState(id.replace("Module","Version")) ) { val[2]=getState(id).val } //.replace(/\(.+\)/g,"") if( existsState(id.replace("Module","Version")) ) { val[6]=getState(id.replace("Module","Version")).val } // val6 wird unten bestimmt if( !flexboxView) { if( existsState(id.replace("Module","IPAddress")) ) { getState(id.replace("INFO.Module","alive")).val ? val[4]= ` `: val[4]= ` ` } }else { if( existsState(id.replace("Module","IPAddress")) ) { getState(id.replace("INFO.Module","alive")).val ? val[4]= ` `: val[4]= ` ` } } } function newOverTasmota10(id,ida) { // struktur ab tasmota 10 NEUE ansicht if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info2.Hostname") ) { val[0]=getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info2.Hostname").val ;} else {val[0]=""} if(deviceNameStattHostname || val[0]=="") val[0]=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ; // log(val[0]) if (showInstanzInName) val[0]=val[0]+' ('+ida[1]+')'; if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive") ) { val[1]=(getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive").val).toString(); isOnline=getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive").val } else { val[1]="false"; isOnline=false } // ;log("dp "+getState(id.replace("INFO.Module","alive")).val+" val0 "+val[1]) if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info1.Version") ) { val[2]=getState(id).val } //.replace(/\(.+\)/g,"") if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info1.Version") ) { val[6]=getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info1.Version").val } // val6 wird unten bestimmt if( !flexboxView) { if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info2.IPAddress") ) { getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive").val ? val[4]= ` `: val[4]= ` ` } }else { if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info2.IPAddress") ) { getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive").val ? val[4]= ` `: val[4]= ` ` } } } function oldOverTasmota10(id,ida) { // struktur unter tasmota 10 ALTE ansicht if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info2_Hostname") ) { val[0]=getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info2_Hostname").val ;} else {val[0]=""} if(deviceNameStattHostname || val[0]=="") val[0]=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ; // log(val[0]) if (showInstanzInName) val[0]=val[0]+' ('+ida[1]+')'; if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive") ) { val[1]=(getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive").val).toString(); isOnline=getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive").val } else { val[1]="false"; isOnline=false } // ;log("dp "+getState(id.replace("INFO.Module","alive")).val+" val0 "+val[1]) if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info1_Version") ) { val[2]=getState(id).val } //.replace(/\(.+\)/g,"") if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info1_Version") ) { val[6]=getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info1_Version").val } // val6 wird unten bestimmt if( !flexboxView) { if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info2_IPAddress") ) { getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive").val ? val[4]= ` `: val[4]= ` ` } }else { if( existsState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"INFO.Info2_IPAddress") ) { getState(ida[0]+'.'+ ida[1]+'.'+ida[2]+'.'+"alive").val ? val[4]= ` `: val[4]= ` ` } } } function uptimeString(uptime) { if (uptime < 0) { uptime = 0; } const timeDifference = Number(new Date(uptime * 1000)); const secondsInADay = 60 * 60 * 1000 * 24; const secondsInAHour = 60 * 60 * 1000; const days = Math.floor(timeDifference / (secondsInADay) * 1); let hours = Math.floor((timeDifference % (secondsInADay)) / (secondsInAHour) * 1); let mins = Math.floor(((timeDifference % (secondsInADay)) % (secondsInAHour)) / (60 * 1000) * 1); let secs = Math.floor((((timeDifference % (secondsInADay)) % (secondsInAHour)) % (60 * 1000)) / 1000 * 1); let newHours;let newMins;let newSecs; if (hours < 10) { newHours = '0' + hours; } else{newHours=String(hours)} if (mins < 10) { newMins = '0' + mins; } else{newMins=String(mins)} if (secs < 10) { newSecs = '0' + secs; } else{newSecs=String(secs)} if (days > 0) { return days + 'D ' + newHours + ':' + newMins + ':' + newSecs; } else { return newHours + ':' + newMins + ':' + newSecs; } }