Replace the Novabot cloud with your own local server. Your mower and charging station connect to your server on your own network — no cloud dependency, no outages, full control.
!!! The Novabot cloud has been experiencing frequent outages since March 2026. OpenNova keeps your mower operational regardless of cloud status.
A single Docker container that includes everything your Novabot needs:
- MQTT Broker (port 1883) — mower and charger connect here
- Cloud API (ports 80/443) — compatible with the official Novabot app
- DNS Server (optional) — redirects
mqtt.lfibot.comto your server - TLS/HTTPS (optional) — for iOS Novabot app compatibility
The official Novabot app continues to work — it just talks to your server instead of the cloud.
docker pull rvbcrs/opennova:latestservices:
opennova:
image: rvbcrs/opennova:latest
container_name: opennova
restart: unless-stopped
ports:
- "80:80" # HTTP (API + admin panel + mower connectivity check)
- "443:443" # HTTPS (required for Novabot app)
- "1883:1883" # MQTT broker
environment:
PORT: 80
ENABLE_TLS: "true"
volumes:
- novabot-data:/data
volumes:
novabot-data:Important: Port 443 and
ENABLE_TLS=trueare required for the official Novabot app. The app connects via HTTPS toapp.lfibot.com. Without TLS, the app will show "network connection is abnormal".
docker compose up -dcurl http://localhost/api/setup/healthExpected response:
{"server":"ok","mqtt":"ok"}Custom firmware? Auto-discovery via mDNS may already work without any DNS setup — see docs/guide/auto-discovery.md. The DNS options below are required for stock firmware.
Your mower needs to find your server when it looks up mqtt.lfibot.com. You have several options:
Add DNS rewrites in your Pi-hole or AdGuard admin panel:
| Domain | IP Address |
|---|---|
mqtt.lfibot.com |
YOUR_SERVER_IP |
app.lfibot.com |
YOUR_SERVER_IP |
Then point your router's DHCP DNS to your Pi-hole/AdGuard IP.
Some routers (Fritz!Box, ASUS) support custom DNS records. Add entries for mqtt.lfibot.com and app.lfibot.com pointing to your server IP.
Enable the built-in DNS server in docker-compose.yml:
ports:
- "80:80"
- "1883:1883"
- "53:53/udp" # DNS
environment:
PORT: 80
ENABLE_DNS: "true"
TARGET_IP: "192.168.0.100" # Your server's LAN IPThen point your router's DHCP DNS server to your server IP.
From any device on your network:
# macOS / Linux
dig mqtt.lfibot.com +short
# Windows
nslookup mqtt.lfibot.comShould return your server IP. If it shows 47.253.145.99 (Novabot cloud), DNS is not redirected yet.
That's it! Open the official Novabot app on your phone and log in with your normal Novabot account. The server will:
- Detect you're a new user (not yet in the local database)
- Forward your login to the Novabot cloud to verify your credentials
- Automatically create your local account (first user becomes admin)
- Import your devices from the cloud
From this point on, the app talks to your local server. Your mower and charger connect via MQTT on port 1883.
Tip: Restart your mower after setting up DNS — power off, wait 10 seconds, power on. It will pick up the new DNS and connect to your server.
Check the server logs to confirm:
docker compose logs -f opennova | grep CONNECTYou should see your mower's serial number (LFIN...) connecting.
If the automatic login doesn't work (e.g., Novabot cloud is down), you can use the admin panel:
- Open http://YOUR_SERVER_IP/admin in your browser
- On first visit with an empty database, you'll see a "Welcome to OpenNova" setup page
- Enter your Novabot cloud email + password to import your account and devices
- Or click "Skip" to create a local account (admin@local / admin)
| Variable | Default | Description |
|---|---|---|
PORT |
80 |
Internal HTTP port |
ENABLE_DNS |
false |
Enable built-in DNS redirect |
TARGET_IP |
— | Your server's LAN IP (required for DNS/TLS) |
UPSTREAM_DNS |
8.8.8.8 |
Fallback DNS server |
ENABLE_TLS |
false |
Enable HTTPS for iOS Novabot app |
ENABLE_DASHBOARD |
false |
Enable web dashboard (beta, not for public use yet) |
Bridge mower data to Home Assistant via MQTT auto-discovery:
environment:
HA_MQTT_HOST: "192.168.0.200"
HA_MQTT_PORT: 1883
HA_MQTT_USER: "mqtt"
HA_MQTT_PASS: "mqtt"
RENDER_BASE_URL: "http://192.168.0.222" # publieke URL van OpenNova; vereist voor live map-tile in HAEntities auto-appear in Home Assistant under the mower/charger serial number — sensors (battery, GPS, error, msg, …) plus a live image entity that shows a server-rendered PNG of the mower map.
Get a push on your phone whenever the mower starts/finishes mowing, docks, runs into an error, or hits low battery.
- Pick a unique topic name (long + random — anyone subscribed can read your events). Example:
novabot-ramon-x7k9q. - Add to
docker-compose.yml:environment: NTFY_TOPIC: "novabot-ramon-x7k9q" NTFY_URL: "https://ntfy.sh" # default; change for self-hosted NTFY_PRIORITY: "4" # optional, 1..5
- Restart:
docker compose up -d. - Install the ntfy app from the App Store / Play Store (free, no account).
- Subscribe to your topic in the app.
You'll receive notifications for every detected event — start/stop/dock/error/safety/PIN-locked/low battery/GPS issue/etc. Each push has a category tag (e.g. mower,stuck) so you can filter inside ntfy.
| Variable | Default | What it does |
|---|---|---|
LOW_BATTERY_THRESHOLD |
20 |
Battery % crossing point for low_battery event (one-shot per dip) |
EVENTS_MQTT_TOPIC_PREFIX |
novabot/events |
Topic prefix for the local MQTT event publishes (HA picks these up) |
Events also flow to:
- Local MQTT at
novabot/events/<SN>andnovabot/events/<SN>/<event_type>— Home Assistant's MQTT integration auto-discovers; use as automation trigger. - HA webhook if
HA_WEBHOOK_URLis set — full event JSON POSTed to your HA webhook trigger. - HTTP polling at
GET /api/events/<SN>?limit=50— last 200 events per mower, JSON. - Stock Novabot app inbox — events also land in the app's Settings → Messages tab on the next poll, with the same English text the Novabot cloud would have shown.
The Novabot iOS app requires HTTPS — it won't connect over plain HTTP. You need to enable TLS and install a certificate profile on your iPhone.
ports:
- "80:80"
- "1883:1883"
- "443:443" # HTTPS for iOS
environment:
PORT: 80
ENABLE_TLS: "true"
TARGET_IP: "192.168.0.100" # Your server's LAN IPRestart the container:
docker compose down && docker compose up -dA self-signed TLS certificate is automatically generated on first start.
Open Safari on your iPhone and go to:
http://YOUR_SERVER_IP/api/setup/profile
(Replace YOUR_SERVER_IP with your server's actual IP address, e.g., http://192.168.0.100/api/setup/profile)
Safari will prompt you to download OpenNova.mobileconfig. Tap Allow.
This profile includes:
- DNS settings — routes DNS through your OpenNova server
- CA Certificate — trusts your server's self-signed TLS certificate
- Open Settings on your iPhone
- You'll see "Profile Downloaded" near the top — tap it
- Tap Install (top right)
- Enter your iPhone passcode
- Tap Install again on the warning screen
- Tap Done
- Go to Settings → General → About → Certificate Trust Settings
- Find "OpenNova CA Certificate"
- Toggle it ON
- Tap Continue on the warning
Open the Novabot app on your iPhone. It should now connect to your local server instead of the cloud.
To remove later: Go to Settings → General → VPN & Device Management → OpenNova → Remove Profile
Android is simpler — no certificate needed. Just set up DNS (see above) and the Novabot app will connect to your server automatically.
If your mower is already connected to WiFi and DNS is redirected, restart the mower and it will connect to your server. The Android app will then communicate via your server.
All data is stored in the novabot-data Docker volume:
# Backup
docker compose cp opennova:/data ./opennova-backup
# Restore
docker compose cp ./opennova-backup/. opennova:/data
docker compose restart opennovadocker pull rvbcrs/opennova:latest
docker compose down && docker compose up -dDatabase migrations run automatically on startup.
- Check DNS:
dig mqtt.lfibot.com +shortshould show your server IP - Check MQTT port:
nc -zv YOUR_SERVER_IP 1883should succeed - Check logs:
docker compose logs opennova | grep MQTT - WiFi: Mower only supports 2.4 GHz — 5 GHz networks are invisible to it
- Restart mower: Power off, wait 10s, power on (picks up new DNS from router)
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolveddocker compose logs opennovaCommon issues: port 1883 already in use (another MQTT broker), missing TARGET_IP.
| Device | Status |
|---|---|
| Novabot N1000 Mower | Fully supported |
| Novabot N2000 Mower | Fully supported |
| Novabot Charging Station | Fully supported |
We're working on additional tools (not yet ready for public release):
- OpenNova App — dedicated mobile app (iOS/Android) that doesn't need DNS redirects
- Bootstrap Tool — desktop app for easy first-time Bluetooth provisioning
- ESP32 OTA Tool — standalone hardware device for provisioning + custom firmware
- Open source firmware modules — replacing closed-source binaries on the mower
Full wiki with detailed guides: wiki.ramonvanbruggen.nl
- GitHub Issues — Bug reports and feature requests
This project is for personal, non-commercial use with Novabot devices you own.
This is beta software. Use at your own risk. Your mower is an expensive device — test carefully.