Software
System spans across two parts:
- Cloud-based Application
Collects data from remote weather stations. The data is fetched from the websites of the providers. Then the data is aggregated into a common format and provided through a public API. Additionally application has a frontend, that can be used independently from the embedded part.
Application is configurable per web browser. Configuration can be shared with other users.
The backend has been implemented using Spin framework, compiled into WASM and deployed to Fermyon Cloud. The frontend is implemented in Leptos.
- Embedded Application
Running on ESP32-S3. Built on top of esp-idf in the "std" variant (with FreeRTOS under the hood). The application obtains live weather data from the cloud-based part. Additionally, it fetches the weather forecast for the location detected based on the IP address. Finally, application shows the local time, as well as the time in selected places around the world. Automatically synchronized to an NTP server. Credentials and other settings are configurable by a web interface. Implemented in Leptos and fully hosted by the device.
Initial settings for the device can be accessed over the WiFi network, provided by the device working in access point mode. Later, the device connects to the home network to gain access to the internet.
Application is self-contained and doesn't require the user to install any software of use any cables for communication. Safety considerations are made while handling user data.
The application attempts to reconnect to the network whenever connection is lost.
Embedded application with limited functionality can be run on a host side, thanks to a simulation layer.
Hardware
The device features adaptive background light and brightness of the indicators. It is controlled by one push button and makes a "clicking" sound using its buzzer.
Device is powered from USB-B and includes backup battery that allows for approximately 1 week of work with limited functionality and without external power.
Hardware includes a battery module chained with a DC-DC converter. This is neither power-efficient nor optimal. The aim was to provide stable voltage for the LCD, which would otherwise present issues with contrast.
Grzegorz Krasoń