graph TD; A((Sleep))-->|timer up|B((Wakeup without WiFi)); B-->|4 hours not up|A; B-->|4 hours up|C((Check for WiFi credentials)); C-->|Has WiFi credentials|D((Connect to WiFi)); C-->|Has no WiFi credentials|E((Setup AP mode)); D-->|Failed to connect to WiFi|E; D-->|Success in connecting to WiFi|F((Read sensors and send to cloud)); E-->|User puts in the WiFi credentials|D; F-->|Success or failure in sending to cloud|A; A-->|User presses the button|G((Read sensors and display)); G-->|Sensor reading complete|H((Check for WiFi Credentials)); H-->|Has WiFi credentials|I((Connected to WiFi)); H-->|Has no WiFi credentials|J((Setup AP mode)); I-->|Fail to connect to WiFi|J; J-->|User added WiFI credentials|I; I-->|Success in connecting to WiFi|K((Send to cloud)); K-->L((Display for 10 seconds)); L-->A;