library(leaflet)
library(htmlwidgets)


###################################################################
# SELECT TIME PERIOD
# seconds for  2 days
daystep <- 60*60*24
step <- daystep*2
t2 <- Sys.time()
t1 <- t2 - step

t1 <- as.POSIXct("2025-12-11 00:00:00")
t2 <- as.POSIXct("2025-12-22 00:00:00")

runningdate <- seq.Date( from=as.Date(t1), to=as.Date(t2), by="day")

#IDS <- c("2CF7F1C0532000AA","2CF7F1C0532000BD","2CF7F1C0532000AE","2CF7F1C053200110")

IDS <- c(
"2CF7F1C053300306",
"2CF7F1C05330029D",
"2CF7F1C053300330",
"2CF7F1C053300329",
"2CF7F1C0533002A8",
"2CF7F1C05330033E",
"2CF7F1C053300312",
"2CF7F1C053300341",
"2CF7F1C0533002AB",
"2CF7F1C053300298"
)

#"2CF7F1C0533002E0",


LAB <- c(
"2CF7F1C053300306",
"2CF7F1C05330029D",
"2CF7F1C053300330",
"2CF7F1C053300329",
"2CF7F1C0533002A8",
"2CF7F1C05330033E",
"2CF7F1C053300312",
"2CF7F1C053300341",
"2CF7F1C0533002AB",
"2CF7F1C053300298"
)

#"2CF7F1C0533002E0",


COL <- c("cornflowerblue","darkblue","cadetblue","mediumorchid1",
         "orange","red2","firebrick4","tomato3",
         "forestgreen","black","tan4","indianred1","darkolivegreen4",
         "magenta","tan3","lightsalmon","yellowgreen","chartreuse","wheat4","darkgrey",
         "tan1","seagreen","mediumvioletred","tan2")


###################################################################

data <- data.frame(matrix(ncol = 5, nrow = 0))

# GET FILES FOR SELECTED DAYS
init <- 1
for (j in seq_along(IDS)) {
  ID <- IDS[j]

  mondir1 <- substr(runningdate[1], 1, 7)
  mondir2 <- substr(runningdate[length(runningdate)], 1, 7)
  filename1 <- paste(ID,"_",mondir1,".csv",sep="")
  filename2 <- paste(ID,"_",mondir2,".csv",sep="")

    URL=paste("https://saqn.geo.uni-augsburg.de/lorawan/",mondir1,"/",filename1,sep="")
    message("filename =",URL)

   tryCatch(
    {
     data1 <- read.table(URL,header=T,sep=",", fill=T)
     colnames(data1) <- c("date","temp","rhum","batt")
     data1$id <- ID
     data <- rbind(data,data1)
    },
    error = function(cond) {
     message(conditionMessage(cond))
    },
    warning = function(cond) {
     message(conditionMessage(cond))
   },
    finally = {
     message("done!")
    }
   )

   if( mondir1 != mondir2 ){

   tryCatch(
    {
     # data2 <- read.table(URL,header=F,sep=",", col.names=c("date","temp","rhum","batt"), fill=T, header=T)
     URL=paste("https://saqn.geo.uni-augsburg.de/lorawan/",mondir2,"/",filename2,sep="")
     message("filename =",URL)
     data2 <- read.table(URL,header=T,sep=",", fill=T)
     colnames(data2) <- c("date","temp","rhum","batt")
     data2$id <- ID
     data <- rbind(data,data2)
    },
    error = function(cond) {
     message(conditionMessage(cond))
    },
    warning = function(cond) {
     message(conditionMessage(cond))
   },
    finally = {
     message("done!")
    }
   )

  }
}

data[data < -9998] <- NA
#data$time <- as.POSIXct(data$date)
data$time <- as.POSIXct(data$date,format="%Y-%m-%dT%H:%M:%OSZ")



#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

aggregationstep <- "5 min"
timesteps <- data.frame( time=seq(from=as.POSIXct(t1),to=as.POSIXct(t2),by=aggregationstep))
aggtemp <- timesteps
aggrhum <- timesteps

ids <- sort(unique(data$id))
for (i in seq_along(ids)) {
  idsertemp <- as.numeric(data$temp[data$id==ids[i]])
  idserrhum <- as.numeric(data$rhum[data$id==ids[i]])
  idtime <-  as.POSIXct(data$time[data$id==ids[i]])
  
  tmptemp <- data.frame(time=idtime,temp=idsertemp)
  tmprhum <- data.frame(time=idtime,rhum=idserrhum)
  
  timesteps1 <- as.numeric(timesteps$time)
  idtime1 <- as.numeric(idtime)
  cuts <- cut( idtime1,breaks=timesteps1,labels=format(timesteps$time[1:length(timesteps1)-1],"%Y-%m-%d %H:%M UTC"))
  
  tmptemp$cuts <- cuts
  tmprhum$cuts <- cuts
  
  
   agg <- aggregate(. ~ cuts, tmptemp, mean)
   agg$time <- as.POSIXct(agg$cuts)
   reg <- merge(timesteps,agg,by="time",all.x=T)
   aggtemp$temp <- as.numeric(reg$temp)
   names(aggtemp)[length(names(aggtemp))] <- paste0("id",ids[i])  
  
   agg <- aggregate(. ~ cuts, tmprhum, mean)
   agg$time <- as.POSIXct(agg$cuts)
   reg <- merge(timesteps,agg,by="time",all.x=T)
   aggrhum$rhum <- as.numeric(reg$rhum)
   names(aggrhum)[length(names(aggrhum))] <- paste0("id",ids[i])
   
  #agg <- aggregate(x, as.data.frame(y), mean)
  
}



# CREATE COLOR PALETTE
tempmin <- min(aggtemp[,2:7],na.rm = TRUE) - 1
tempmax <- max(aggtemp[,2:7],na.rm = TRUE) - 1
paltemp <- colorNumeric( palette = "Reds", domain = c(tempmin,tempmax),na.rm=TRUE) 

rhummin <- min(aggrhum[,2:7],na.rm = TRUE) - 1
rhummax <- max(aggrhum[,2:7],na.rm = TRUE) - 1
palrhum <- colorNumeric( palette = "Reds", domain = c(rhummin,rhummax),na.rm=TRUE)

m = leaflet(options = leafletOptions(zoomSnap = 0.01, zoomDelta = 0.01))






saveWidget(m, file="/zugspitze/lappwald/saqn/sensecap/ledvance-recent.html", title="Temperature")



#nrow <- length(data$time[data$id=="2CF7F1C0533002C6"])
#rhum <- data.frame(matrix(ncol = 7, nrow = nrow))
#colnames(rhum) <- c("time",as.list(IDS))
#rhum$time <- data$time[data$id=="2CF7F1C0533002C6"]
#for (i in seq_along(IDS)) {
#  message(paste(i,IDS[i]))
#  rhum[,(i+1)] <- data$rhum[data$id==IDS[i]]
#}


#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#---------------------------------------------------------
png("sensecap_temp_ledvance5m.png",width=1600, height=600, units="px", res=300, pointsize=3)
tempmin <- min(aggtemp[,2:7],na.rm = TRUE) - 1
tempmax <- max(aggtemp[,2:7],na.rm = TRUE) - 1
plot(aggtemp$time,aggtemp[,2],xlab=paste("time UTC"),ylab="air temperature (°C)",
xlim=c(as.POSIXct(t1),as.POSIXct(t2)),ylim=c(tempmin,tempmax),type="n",xaxs="i",yaxs="i",xaxt="n",
main=paste("air Temperature (S2101) ",t1," - ",t2," UTC" ))
Axis(x=aggtemp[,2:7],side=4)
ihours <- round( seq( as.POSIXct(t1), as.POSIXct(t2),by=3600) , units="hours")
axis.POSIXct(1, x=aggtemp$time, at = ihours, format = "%a %m-%d %H:%M")
abline(v= as.POSIXct(ihours) ,lwd=0.2,col="gray")
abline(h=seq(-40,tempmax,by=1),lwd=0.2,col="gray")
abline(h=seq(-40,tempmax,by=5),lwd=0.2,col="black")
abline(h=0.0,lwd=0.5,col="black")

for (i in seq_along(IDS)) {
ID <- IDS[i]
COLOR <- COL[i]
message(ID,COLOR)
lines(aggtemp$time,aggtemp[,(i+1)],col=COLOR,t="l",lwd=0.5)
}

legend("topleft",LAB, col=COL[1:length(LAB)],lty=1,lwd=0.5)
dev.off()

#---------------------------------------------------------
png("sensecap_rhum_ledvance5m.png",width=1600, height=600, units="px", res=300, pointsize=3)
rhummin <- min(aggrhum[,2:7],na.rm = TRUE) - 1
rhummax <- max(aggrhum[,2:7],na.rm = TRUE) - 1
plot(aggrhum$time,aggrhum[,2],xlab=paste("time UTC"),ylab="relative humidity (%)",
xlim=c(as.POSIXct(t1),as.POSIXct(t2)),ylim=c(rhummin,rhummax),type="n",xaxs="i",yaxs="i",xaxt="n",
main=paste("relative humidity (S2101) ",t1," - ",t2," UTC" ))
Axis(x=aggrhum[,2:7],side=4)
ihours <- round( seq( as.POSIXct(t1), as.POSIXct(t2),by=3600) , units="hours")
axis.POSIXct(1, x=aggrhum$time, at = ihours, format = "%a %m-%d %H:%M")
abline(v= as.POSIXct(ihours) ,lwd=0.2,col="gray")
abline(h=seq(-40,rhummax,by=1),lwd=0.2,col="gray")
abline(h=seq(-40,rhummax,by=5),lwd=0.2,col="black")
abline(h=0.0,lwd=0.5,col="black")

for (i in seq_along(IDS)) {
ID <- IDS[i]
COLOR <- COL[i]
message(ID,COLOR)
lines(aggrhum$time,aggrhum[,(i+1)],col=COLOR,t="l",lwd=0.5)
}

legend("topleft",LAB, col=COL[1:length(LAB)],lty=1,lwd=0.5)
dev.off()

mask <- as.integer(format(  aggtemp[,1] , "%H" )) <= 6 | as.integer(format(  aggtemp[,1] , "%H" )) >=18
aggtempc <- aggtemp[mask,]
aggrhumc <- aggrhum[mask,]


#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
aggtempc <- na.omit(aggtempc)
aggrhumc <- na.omit(aggrhumc)

meantemp=unname(rowSums(aggtempc[2:7])/6)
meanrhum=unname(rowSums(aggrhumc[2:7])/6)

tempa <- aggtempc[,2:7] - meantemp
boxplot(tempa)

rhuma <- aggrhumc[,2:7] - meanrhum
#boxplot(rhuma)
