// @liv-in-sky 4.10.2021 11:45
//forum: https://forum.iobroker.net/topic/38286/vis-tabelle-f%C3%BCr-wlan-wetterstation
const dataInputPath="0_userdata.0.Statistik.Wetter.Data"; //SEHR WICHTIG !!!!!!!!!
const inhaltFarbe="black";
const inhaltHintergrund="lightgray";
const monatFarbe="white";
const hintergrund="gray";
const htmlFarbTableBorderColor="black";
const abstandZelle=6;
const htmlRahmenLinien="all";
const htmlSchriftgroessehtmlSchriftart=""; //nicht verwendbar!
const htmlFarbFelderschrift="red"; //nicht verwendbar!
const htmlSchriftgroesse="13px";
const htmlSchriftart="Ubuntu-Light"; //"monospace" oder z.b. "Helvetica"
const weite="auto"; //oder "500px"
let myTable="table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+"; font-size:"+htmlSchriftgroesse+
"; font-family:"+htmlSchriftart+";\"";
const varData={
Tiefstwert: { einheit:"°C", name:"Minimum Temperatur"},
Hoechstwert: { einheit:"°C", name:"Maximum Temperatur"},
Temp_Durchschnitt:{ einheit:"°C", name:"Durchschnittstemperatur"},
Max_Windboe: { einheit:'km/h', name:"Max Windböe"},
Max_Regenmenge: { einheit:'l/m2', name:"Max. Regen/Tag"},
Regenmenge_Monat: { einheit:'l/m2', name:"Regen"},
sehr_kalte_Tage: { einheit:"", name:"Sehr kalte Tage (Min. unter -10°C)"},
Eistage: { einheit:"", name:"Eistage (Max. unter 0°C)"},
Frost_Tage: { einheit:"", name:"Frosttage (Min. unter 0°C)"},
kalte_Tage: { einheit:"", name:"Kalte Tage (Max. unter 10°C)"},
warme_Tage: { einheit:"", name:"Warme Tage (über 20°C)"},
Sommertage: { einheit:"", name:"Sommertage (über 25°C)"},
heisse_Tage: { einheit:"", name:'Heiße Tage (über 30°C)'}
}
const monate =["JANUAR","FEBRUAR","MÄRZ","APRIL","MAI","JUNI","JULI","AUGUST","SEPTEMBER","OKTOBER","NOVEMBER","DEZEMBER"];
//--------------------------nix mehr ändern ab hier--------------------------------------
let myObj;
let myArrAll=[]
let myArrErstellt=[]
let tableContent;
let monWahlVIS;
let lastThree;
//----------------------------------------------------------------------------------------
function dataStuff(){
let myArrAll=[]
let mySelector=dataInputPath+'.*.*'
$(mySelector).each(function(id, i) {
let ida=id.split("."); let lang=ida.length; let jahri=lang-2; let moni=lang-1;
let obj2 = { jahr: ida[jahri]};
let obj3 = { monat: ida[moni]};
let formathelp=getState(id).val
let helper;
if (typeof(formathelp)=="object") {helper=getState(id).val[0];}
else if (typeof(formathelp)=="string") { helper=getState(id).val;
helper=JSON.parse(helper.substring(1, (getState(id).val).length-1)); }
else {helper=JSON.parse(getState(id).val);}
helper={ ...helper, ...obj2, ...obj3}
myArrAll.push(JSON.stringify(helper))
});
//log(myArrAll)
tableContent = ""
myObj=JSON.parse("["+myArrAll.toString()+"]")
if (lastThree==0) {
//KOPFZEILE
let choseMonth=monate[monWahlVIS-1]
let choseMonthArr=choseMonth.split('')
let test=""
for (let i=0;i<choseMonthArr.length;i++){
// log(choseMonthArr[i])
test=test+choseMonthArr[i]+`
`
}
//log(test)
//tableContent+='<td class=\"test-klein\" rowspan=\"14\"\">'+choseMonth+'</td><td>Wetterwerte</td>'
tableContent+='<td class=\"myWetterStation\" width=\"25px\" style=\"color:'+monatFarbe+';font-size:26px; background-color:'+hintergrund+' ; vertical-align:middle; text-align:center \" rowspan=\"14\"\">'+test+'</td><td style=\"color:'+monatFarbe+'; background-color:'+hintergrund+'"\>Jahreswerte</td>'
for (let i=0;i<myObj.length;i++) {
if(parseInt(myObj[i].monat)==monWahlVIS){
tableContent += '<td style=\"color:'+monatFarbe+'; background-color:'+hintergrund+'"\ align=center>' + myObj[i].jahr+'</td>'}
}; tableContent="<tr style=\"font-weight\:bold\">"+tableContent+"</tr>"
//RESTZEILEN
for(var index in varData){
tableContent+='<td style=\"color:'+inhaltFarbe+'; background-color:'+inhaltHintergrund+'\">'+varData[index].name+'</td>'
for (let i=0;i<myObj.length;i++) {
if(myObj[i].monat==monWahlVIS){
tableContent += '<td style=\"color:'+inhaltFarbe+'; background-color:'+inhaltHintergrund+'\" align=right>' + myObj[i][index] + ' '+ varData[index].einheit+'</td>'}
}; tableContent="<tr>"+tableContent+"</tr>"
}
} //lastThree
else {
//log(myObj[0].monat)
myObj.sort(function (alpha, beta) {
if (parseInt(alpha.monat) > parseInt(beta.monat))
return 1;
if (parseInt(beta.monat) > parseInt(alpha.monat))
return -1;
return 0;});
// log(myObj[0].monat)
//KOPFZEILE LASTTHREE
let choseJahr=lastThree.toString()//formatDate(getDateObject((new Date().getTime())), "JJJJ")//monate[monWahlVIS-1]
let choseMonthArr=choseJahr.split('')
let test=""
for (let i=0;i<choseMonthArr.length;i++){
// log(choseMonthArr[i])
test=test+choseMonthArr[i]+`
`
}
//log(test)
//tableContent+='<td class=\"test-klein\" rowspan=\"14\"\">'+choseMonth+'</td><td>Wetterwerte</td>'
tableContent+='<td class=\"myWetterStation\" width=\"25px\" style=\"color:'+monatFarbe+';font-size:26px; background-color:'+hintergrund+' ; vertical-align:middle; text-align:center \" rowspan=\"14\"\">'+test+'</td><td style=\"color:'+monatFarbe+'; background-color:'+hintergrund+'"\>Wetterwerte</td>'
for (let i=0;i<myObj.length;i++) {
if( parseInt(myObj[i].jahr)==parseInt(choseJahr) ){ //&& (parseInt(myObj[i].monat)==parseInt(monWahlVIS) || parseInt(myObj[i].monat)==parseInt(monWahlVIS)-1 || parseInt(myObj[i].monat)==parseInt(monWahlVIS)-2)){
tableContent += '<td style=\"color:'+monatFarbe+'; background-color:'+hintergrund+'"\ align=center>' + monate[parseInt(myObj[i].monat)-1]+'</td>';}
}; tableContent="<tr style=\"font-weight\:bold\">"+tableContent+"</tr>"
//RESTZEILEN
for(var index in varData){
tableContent+='<td style=\"color:'+inhaltFarbe+'; background-color:'+inhaltHintergrund+'\">'+varData[index].name+'</td>'
for (let i=0;i<myObj.length;i++) {
if( parseInt(myObj[i].jahr)==parseInt(choseJahr) ){ //&& (parseInt(myObj[i].monat)==parseInt(monWahlVIS) || parseInt(myObj[i].monat)==parseInt(monWahlVIS)-1 || parseInt(myObj[i].monat)==parseInt(monWahlVIS)-2)){
tableContent += '<td style=\"color:'+inhaltFarbe+'; background-color:'+inhaltHintergrund+'\" align=right>' + myObj[i][index] + ' '+ varData[index].einheit+'</td>'}
}; tableContent="<tr>"+tableContent+"</tr>"
}
}
tableContent = '<'+myTable+' ><tbody>'+tableContent+'</tbody></table >'
//log(tableContent)
setState("javascript." + instance + ".Wetterstation.MonthlyDaten",tableContent)
}
//--------------------------------------------------------------------------------------------------
async function main() {
if (!(await existsStateAsync("javascript." + instance + ".Wetterstation.MonthlyDaten"))) {
await createStateAsync("Wetterstation.MonthlyDaten", "leer", {type: "string", name: "MonthlyDaten", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".Wetterstation.MonatAuswahl"))) {
await createStateAsync("Wetterstation.MonatAuswahl", 10, {type: "number", name: "MonatAuswahl", role: "value", read: true, write: true, } ); }
if (!(await existsStateAsync("javascript." + instance + ".Wetterstation.AuswahlJahr"))) {
await createStateAsync("Wetterstation.AuswahlJahr", 0, {type: "number", name: "AuswahlJahr", role: "value", read: true, write: true, } ); }
lastThree = (await getStateAsync("javascript." + instance + ".Wetterstation.AuswahlJahr")).val //? lastThree=true : lastThree=false;
monWahlVIS=((await getStateAsync("javascript." + instance + ".Wetterstation.MonatAuswahl")).val )
dataStuff();
}
//-----------------------------------------------------------------------------------------------------
main()
on({id: "javascript." + instance + ".Wetterstation.MonatAuswahl", change: "any"}, async function (obj) {
main()
});
on({id: "javascript." + instance + ".Wetterstation.AuswahlJahr", change: "any"}, async function (obj) {
main()
});
schedule('*/30 * * * *', function() {
let MonatTmp = parseInt(formatDate(getDateObject((new Date().getTime())), "MM"));
if (MonatTmp>1) { MonatTmp--; } //Patch
setState("javascript." + instance + ".Wetterstation.MonatAuswahl", MonatTmp) ;
setStateDelayed("javascript." + instance + ".Wetterstation.AuswahlJahr", parseInt(formatDate(getDateObject((new Date().getTime())), "JJJJ")),10000) ;
});