A significant portion of our water monitoring devices will be deployed in remote locations where internet connectivity is either unavailable or intermittent. To ensure continuous data collection, these devices must operate entirely offline and store data locally until a Water Warden volunteer can physically visit the site to swap batteries and collect the accumulated data.
The device should be designed to handle scenarios where it typically transfers data in real-time via Wi-Fi but may temporarily lose connection. In such cases, the device must seamlessly switch to local storage, appending data to a .json file during each iteration of the main loop. Over time, these files may grow significantly in size, containing several gigabytes of photo and sensor data.
We must also anticipate volunteers pulling batteries or SD cars in the middle of the main loop and corrupting the data of that iteration. That's ok. We should just discard partial data and remove any artifacts from the .json file.
When a Water Warden swaps out the SD card, the device should automatically detect this, create a new .json file, initialize it correctly, and continue appending data to the new file with each loop iteration. The device must be capable of bulk uploading stored data when a connection is re-established.
Acceptance Criteria:
Offline Operation:
The device operates fully offline, storing data locally when there is no internet connection.
The device seamlessly transitions between real-time data transfer and local storage when Wi-Fi connectivity is lost and resumes real-time transfer when connectivity is restored.
Data Storage:
Data is appended to a .json file during each iteration of the main loop.
The device creates a new .json file automatically when an SD card is swapped.
The new .json file is correctly initialized, and data continues to be appended without any loss.
Data Transfer:
The device can store several gigabytes of data locally over extended periods.
When Wi-Fi becomes available, the device bulk uploads all locally stored data to the server.
User Interaction:
Water Wardens can easily swap SD cards without interrupting the device’s operation.
The device should notify the Water Warden if a file initialization or data transfer issue occurs during the SD card swap.
Power and Reliability:
The device must continue to operate reliably during connection interruptions.
The device ensures no data loss occurs during power fluctuations or SD card swaps.
The device recovers data or discards partial data if power cut out in the middle of the main loop.
After testing our prototype in water, it's obvious all our devices will be completely disconnected under water, no signal will reliably get through even a few inches of water.
Description:
A significant portion of our water monitoring devices will be deployed in remote locations where internet connectivity is either unavailable or intermittent. To ensure continuous data collection, these devices must operate entirely offline and store data locally until a Water Warden volunteer can physically visit the site to swap batteries and collect the accumulated data.
The device should be designed to handle scenarios where it typically transfers data in real-time via Wi-Fi but may temporarily lose connection. In such cases, the device must seamlessly switch to local storage, appending data to a .json file during each iteration of the main loop. Over time, these files may grow significantly in size, containing several gigabytes of photo and sensor data.
We must also anticipate volunteers pulling batteries or SD cars in the middle of the main loop and corrupting the data of that iteration. That's ok. We should just discard partial data and remove any artifacts from the .json file.
When a Water Warden swaps out the SD card, the device should automatically detect this, create a new .json file, initialize it correctly, and continue appending data to the new file with each loop iteration. The device must be capable of bulk uploading stored data when a connection is re-established.
Acceptance Criteria:
Offline Operation:
Data Storage:
Data Transfer:
User Interaction:
Power and Reliability: