Skip to content

rvbcrs/Novabot

Repository files navigation

OpenNova — Self-hosted Novabot Cloud Replacement

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.

What is OpenNova?

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.com to 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.

Quick Start

1. Pull the Docker image

docker pull rvbcrs/opennova:latest

2. Create docker-compose.yml

services:
  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=true are required for the official Novabot app. The app connects via HTTPS to app.lfibot.com. Without TLS, the app will show "network connection is abnormal".

3. Start the server

docker compose up -d

4. Verify it's running

curl http://localhost/api/setup/health

Expected response:

{"server":"ok","mqtt":"ok"}

5. Set up DNS redirect

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:

Option A: Pi-hole / AdGuard Home (recommended)

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.

Option B: Router DNS override

Some routers (Fritz!Box, ASUS) support custom DNS records. Add entries for mqtt.lfibot.com and app.lfibot.com pointing to your server IP.

Option C: Built-in DNS (simplest)

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 IP

Then point your router's DHCP DNS server to your server IP.

Verify DNS is working

From any device on your network:

# macOS / Linux
dig mqtt.lfibot.com +short

# Windows
nslookup mqtt.lfibot.com

Should return your server IP. If it shows 47.253.145.99 (Novabot cloud), DNS is not redirected yet.

6. Open the Novabot app and log in

That's it! Open the official Novabot app on your phone and log in with your normal Novabot account. The server will:

  1. Detect you're a new user (not yet in the local database)
  2. Forward your login to the Novabot cloud to verify your credentials
  3. Automatically create your local account (first user becomes admin)
  4. 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 CONNECT

You should see your mower's serial number (LFIN...) connecting.

Fallback: Admin Panel

If the automatic login doesn't work (e.g., Novabot cloud is down), you can use the admin panel:

  1. Open http://YOUR_SERVER_IP/admin in your browser
  2. On first visit with an empty database, you'll see a "Welcome to OpenNova" setup page
  3. Enter your Novabot cloud email + password to import your account and devices
  4. Or click "Skip" to create a local account (admin@local / admin)

Configuration

Environment Variables

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)

Optional: Home Assistant Integration

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 HA

Entities 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.

Optional: ntfy Push Notifications (free, no account)

Get a push on your phone whenever the mower starts/finishes mowing, docks, runs into an error, or hits low battery.

  1. Pick a unique topic name (long + random — anyone subscribed can read your events). Example: novabot-ramon-x7k9q.
  2. 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
  3. Restart: docker compose up -d.
  4. Install the ntfy app from the App Store / Play Store (free, no account).
  5. 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.

Tuning what triggers a push

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> and novabot/events/<SN>/<event_type> — Home Assistant's MQTT integration auto-discovers; use as automation trigger.
  • HA webhook if HA_WEBHOOK_URL is 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.

iOS Setup (Novabot iOS App)

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.

Step 1: Enable TLS in Docker

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 IP

Restart the container:

docker compose down && docker compose up -d

A self-signed TLS certificate is automatically generated on first start.

Step 2: Download the Configuration Profile

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

Step 3: Install the Profile

  1. Open Settings on your iPhone
  2. You'll see "Profile Downloaded" near the top — tap it
  3. Tap Install (top right)
  4. Enter your iPhone passcode
  5. Tap Install again on the warning screen
  6. Tap Done

Step 4: Trust the Certificate

  1. Go to Settings → General → About → Certificate Trust Settings
  2. Find "OpenNova CA Certificate"
  3. Toggle it ON
  4. Tap Continue on the warning

Step 5: Verify

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 Setup (Novabot Android App)

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.

Data & Backup

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 opennova

Upgrading

docker pull rvbcrs/opennova:latest
docker compose down && docker compose up -d

Database migrations run automatically on startup.

Troubleshooting

Mower not connecting

  1. Check DNS: dig mqtt.lfibot.com +short should show your server IP
  2. Check MQTT port: nc -zv YOUR_SERVER_IP 1883 should succeed
  3. Check logs: docker compose logs opennova | grep MQTT
  4. WiFi: Mower only supports 2.4 GHz — 5 GHz networks are invisible to it
  5. Restart mower: Power off, wait 10s, power on (picks up new DNS from router)

Port 53 conflict (Linux)

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Container won't start

docker compose logs opennova

Common issues: port 1883 already in use (another MQTT broker), missing TARGET_IP.

Supported Devices

Device Status
Novabot N1000 Mower Fully supported
Novabot N2000 Mower Fully supported
Novabot Charging Station Fully supported

What's Next

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

Documentation

Full wiki with detailed guides: wiki.ramonvanbruggen.nl

Community

License

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors