// ESP32 with custom flash size
//
// Check out "flashSize" attr in diagram.json
#include "SPIFFS.h"
#include "time.h"
//#include
#include "CronAlarms.h"
//#include "RTC.h"
//include "sys/time.h"
const char* passPath = "/pass.txt";
String pass;
int ln;
String weekdays;
String statecik;
CronId id;
String readFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\r\n", path);
File file = fs.open(path);
if(!file || file.isDirectory()){
Serial.println("- failed to open file for reading");
return String();
}
String fileContent;
while(file.available()){
fileContent = file.readStringUntil('\0');
break;
}
return fileContent;
}
void writeFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Writing file: %s\r\n", path);
File file = fs.open(path, "a");
if(!file){
Serial.println("- failed to open file for writing");
return;
}
ln++;
char messageOut[30];
sprintf(messageOut, "%s", message );
if(file.print(messageOut)){
Serial.println("- file written");
} else {
Serial.println("- frite failed");
}
}
String showTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
//return String();
}
char timeStringBuff[50]; //50 chars should be enough
strftime(timeStringBuff, sizeof(timeStringBuff), "%A, %B %d %Y %H:%M:%S", &timeinfo);
Serial.println(timeStringBuff);
// showTime=strftime(&timeinfo1, "%A, %B %d %Y %H:%M:%S")
return (timeStringBuff);
}
String showTimeHour(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
//Serial.println("Failed to obtain time");
//return String();
}
char timeStringBuff[50]; //50 chars should be enough
//timeinfo.tm_sec=50;
//timeinfo->tm_sec = 50;
strftime(timeStringBuff, sizeof(timeStringBuff), "%M", &timeinfo);
//Serial.println(timeStringBuff);
// showTime=strftime(&timeinfo1, "%A, %B %d %Y %H:%M:%S")
int cleanmin=String(timeStringBuff).toInt();
String cronEntry="";
String minute=String(cleanmin);
strftime(timeStringBuff, sizeof(timeStringBuff), "%H", &timeinfo);
//Serial.println(timeStringBuff);
// showTime=strftime(&timeinfo1, "%A, %B %d %Y %H:%M:%S")
int cleanhour=String(timeStringBuff).toInt();
//String cronEntry="";
String hour=String(cleanhour);
//String const
cronEntry="0 "+minute+" "+hour+" * * "+weekdays+" 9"+" "+statecik+"\n";
//timeStringBuff=String(cleanmin);
return (cronEntry);
}
String weekdaysDecoder(const char * message){
String formated="";
String newFormated="";
String przecinek=",";
if (message=="1111111"){
newFormated="*,";
} else{
for(int i=0;i<strlen(message);i++){
if(message[i]=='1'){
// Serial.printf("%d,",i);
formated=newFormated+i;
newFormated=formated+przecinek;
}
}
}
formated=newFormated;
//const char* substring = formated;
//char formated1[strlen(formated)];
//'\0';
//Serial.println(newFormated);
//Serial.println(message);
//Serial.printf("%d",strlen(message));
//memcpy ( formated1, formated, strlen(message));
// Serial.println("formated1");
newFormated=formated.substring(0, formated.length()-1);
return newFormated;
}
void setup() {
Serial.begin(115200);
Serial.println(showTime());
struct tm timeinfo;
getLocalTime(&timeinfo);
timeinfo.tm_hour=1;
timeinfo.tm_min=6;
time_t t = mktime(&timeinfo);
struct timeval tmt;
tmt.tv_sec=t;
//set TZ=UTC0;
//lt.tm_zone
settimeofday(&tmt,NULL);
ln=0;
printf("Flash size: %d bytes\n", spi_flash_get_chip_size());
initSPIFFS();
//writeFile(SPIFFS, passPath, "Hallo WOrlds\n");
Cron.create("* * * * * *", MorningAlarm, false);
String moje;
statecik="1";
weekdays=weekdaysDecoder("1111101");
moje=showTimeHour();
char cronWpis[40];
moje.toCharArray(cronWpis, 40);
writeFile(SPIFFS, passPath, cronWpis);
weekdays=weekdaysDecoder("1111111");
statecik="0";
moje=showTimeHour();
moje.toCharArray(cronWpis, 40);
writeFile(SPIFFS, passPath, cronWpis);
}
void initSPIFFS() {
if (!SPIFFS.begin(true)) {
Serial.println("An error has occurred while mounting SPIFFS");
} else{
Serial.println("SPIFFS mounted successfully");
}
}
void splitString(char* inputString, char** outputArray, int* outputLength) {
int i = 0;
char* token = strtok(inputString, " ");
while (token != NULL) {
outputArray[i] = token;
i++;
token = strtok(NULL, " ");
}
*outputLength = i;
}
void MorningAlarm() {
String localString;
int startF=0;
int stopF=0;
int startFl=0;
int stopFl=0;
int hour=0;
int licznik=0;
String line;
Serial.println("Reading alarms file");
pass=readFile(SPIFFS, passPath);
Serial.print(pass);
Serial.println("Printing line by line file");
while(1){
stopF=pass.indexOf('\n',startF);
if (stopF==-1){
break;
}
//localString=pass.substring(startF,stopF);
line=pass.substring(startF,stopF+1);
Serial.print(line);
char inputStringBuffer[50]; // create a buffer to hold the char array
line.toCharArray(inputStringBuffer, 50);
char inputString[] = inputStringBuffer;
char* words[10];
int wordCount = 0;
splitString(inputString, words, &wordCount);
for (int i = 0; i < wordCount; i++) {
Serial.println(words[i]);
}
//Serial.println(String(startF)+" "+String(stopF));
//Serial.println(pass);
if (stopF==-1){
break;
}
startF=stopF+1;
//Serial.println(localString);
}
}
void loop() {
Cron.delay();
delay(1000);
showTime();
//pass = readFile(SPIFFS, passPath);
//Serial.print(pass);
//weekdays=weekdaysDecoder("1111101");
//Serial.println(showTimeHour());
//Serial.println(weekdaysDecoder("1010101"));
//Serial.println(weekdaysDecoder("1111111"));
//Serial.println(weekdaysDecoder("1000001"));
//Serial.println(weekdaysDecoder("1000000"));
//Serial.println(weekdaysDecoder("0000001"));
//weekdays=weekdaysDecoder("1111111");
}