#ifndef HELPERS_H #define HELPERS_H static const uint8_t monthDays[]={31,28,31,30,31,30,31,31,30,31,30,31}; #define LEAP_YEAR(Y) ( ((1970+Y)>0) && !((1970+Y)%4) && ( ((1970+Y)%100) || !((1970+Y)%400) ) ) struct strDateTime { byte hour; byte minute; byte second; int year; byte month; byte day; byte wday; } ; // // Summertime calculates the daylight saving for a given date. // boolean summertime(int year, byte month, byte day, byte hour, byte tzHours) // input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ) { if (month<3 || month>10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez if (month>3 && month<10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep if (month==3 && (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) || month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7))) return true; else return false; } // // Check the Values is between 0-255 // boolean checkRange(String Value) { if (Value.toInt() < 0 || Value.toInt() > 255) { return false; } else { return true; } } void WriteStringToEEPROM(int beginaddress, String string) { char charBuf[string.length()+1]; string.toCharArray(charBuf, string.length()+1); for (int t= 0; t 31) break; counter++; retString.concat(rChar); } return retString; } void EEPROMWritelong(int address, long value) { byte four = (value & 0xFF); byte three = ((value >> 8) & 0xFF); byte two = ((value >> 16) & 0xFF); byte one = ((value >> 24) & 0xFF); //Write the 4 bytes into the eeprom memory. EEPROM.write(address, four); EEPROM.write(address + 1, three); EEPROM.write(address + 2, two); EEPROM.write(address + 3, one); } long EEPROMReadlong(long address) { //Read the 4 bytes from the eeprom memory. long four = EEPROM.read(address); long three = EEPROM.read(address + 1); long two = EEPROM.read(address + 2); long one = EEPROM.read(address + 3); //Return the recomposed long by using bitshift. return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF); } void ConvertUnixTimeStamp( unsigned long TimeStamp, struct strDateTime* DateTime) { uint8_t year; uint8_t month, monthLength; uint32_t time; unsigned long days; time = (uint32_t)TimeStamp; DateTime->second = time % 60; time /= 60; // now it is minutes DateTime->minute = time % 60; time /= 60; // now it is hours DateTime->hour = time % 24; time /= 24; // now it is days DateTime->wday = ((time + 4) % 7) + 1; // Sunday is day 1 year = 0; days = 0; while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) { year++; } DateTime->year = year; // year is offset from 1970 days -= LEAP_YEAR(year) ? 366 : 365; time -= days; // now it is days in this year, starting at 0 days=0; month=0; monthLength=0; for (month=0; month<12; month++) { if (month==1) { // february if (LEAP_YEAR(year)) { monthLength=29; } else { monthLength=28; } } else { monthLength = monthDays[month]; } if (time >= monthLength) { time -= monthLength; } else { break; } } DateTime->month = month + 1; // jan is month 1 DateTime->day = time + 1; // day of month DateTime->year += 1970; } String GetMacAddress() { uint8_t mac[6]; char macStr[18] = {0}; WiFi.macAddress(mac); sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); return String(macStr); } // convert a single hex digit character to its integer value (from https://code.google.com/p/avr-netino/) unsigned char h2int(char c) { if (c >= '0' && c <='9'){ return((unsigned char)c - '0'); } if (c >= 'a' && c <='f'){ return((unsigned char)c - 'a' + 10); } if (c >= 'A' && c <='F'){ return((unsigned char)c - 'A' + 10); } return(0); } String urldecode(String input) // (based on https://code.google.com/p/avr-netino/) { char c; String ret = ""; for(byte t=0;t