Recently, Anova decided to shut down their cloud services for the Anova Precision Cooker Wi-Fi 1 - although the device is still fully functional, and still serves its purpose.
That means that while the device is still functional, the app is no longer able to connect to the device.
This project aims to provide a way to control the Anova Precision Cooker Wi-Fi without the need for the Anova app.
It uses the Anova Wi-Fi protocol to communicate with the device directly over the local network.
- This project can be used as a library, a REST API, or a web interface.
- This project was originally developed in Python, but then I decided to port it to Go for better performance, so it would run seamlessly on my Raspberry Pi.
- Connect to the Anova Precision Cooker Wi-Fi
- Discover the device on the local network (Bluetooth Low Energy)
- Send commands to the device (Wi-Fi or Bluetooth)
- Configure the device to work with the local server without any DNS patching
- Receive responses from the device
- Control the device settings
- Monitor the device status
- Use the library via a REST API
- Use the library via a Python package
- Use the library via a Go package
- Implement a web interface
- git clone
- install dependencies:
go mod tidy
- build the project:
go build ./cmd/anova4all
(to build for raspberry pi without the BLE, useGOOS=linux GOARCH=arm GOARM=6 go build --tags no_ble ./cmd/anova4all
)
To build the UI:
- navigate to the
frontend
directory - install the dependencies using
yarn install
- build the UI using
yarn build --outDir ../dist
- To serve the UI using the server, configure the environment variable
FRONTEND_DIST_DIR
to./dist/
and run the server or use the--frontend-dist-dir
flag (this is the default value).
To use the Anova for All, you need to change the anova
package to use the server's IP address instead of the Anova
cloud services.
If your (server) device supports BLE, you can use the API to change the server address.
- Run the server
- Use the
POST /api/ble/config_wifi_server
endpoint.
To revert the changes, use the POST /api/ble/restore_wifi_server
endpoint.
You can also use the web interface to change the server address. This is usually more user-friendly :)
Notice: this require Web Bluetooth API support. Currently, it's not supported natively in iOS, but it's supported in Android and desktop browsers. You can use an iOS app like BLE Link to connect to the device.
Notice that you must have an encrypted connection(tls - https) to the server to use the Web Bluetooth API. You can use the server-less version of the UI over https://almogbaku.com/Anova4All/ .
OpenAPI documentation is available at http://localhost:8000/docs
.
The following environment variables can be used to configure the server:
ENV
: Set the environment and reflect the logs behavior. Valid options areDEV
orPROD
(default:PROD
).SERVER_HOST
: The server host (default: empty).ANOVA_SERVER_PORT
: The Anova server port (default: 8080).REST_SERVER_PORT
: The REST server port (default: 8000).FRONTEND_DIST_DIR
: The directory for the frontend distribution (default:./dist
). If empty, the frontend is not served.ADMIN_USERNAME
: The admin username (default: empty).ADMIN_PASSWORD
: The admin password (default: empty).
To use TLS, set the following environment variables:
REST_SERVER_TLS_PORT
: The REST server TLS port (default:-1
- which means disabled).REST_SERVER_TLS_CERT
: The REST server TLS certificate file path (default: empty).REST_SERVER_TLS_KEY
: The REST server TLS key file path (default: empty).
You can use the deployed UI, and set your own server address in the Settings page: https://AlmogBaku.com/Anova4All/ This saves the configuration in the browser's local storage.
This can be quite useful if you deploy the server on a Raspberry Pi or similar device, expose it externally, and use the UI from anywhere.
Thanks for @TheUbuntuGuy for the initial research on the Anova Wi-Fi protocol:
- https://www.youtube.com/watch?v=xDDPFHhY7ec
- https://gist.github.com/TheUbuntuGuy/225492a8dec816d49b70d9c21811e8b1
Important: This project is not affiliated with Anova or any other company. It's a community project that aims to keep the device functional after the cloud services are shut down.