YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

I'm So Sorry however this version of Nova is broken, and spits out garbage. Use the updated v2 model please

openHome 🏠

A local, privacy-first smart home security system with an optional AI reasoning layer. No cloud, no subscriptions, no data leaving your network.


What It Does

openHome connects ESP32 sensors around your home to a Raspberry Pi hub that monitors events in real time. A web dashboard lets you view device states and control everything manually. Optionally, NOVA — a fine-tuned Qwen 0.5B model — reasons over sensor events and natural language commands to automate responses.

Without AI: sensors report → hub stores state → dashboard updates → you control devices manually.

With AI: sensors report → NOVA reasons → actions execute automatically (lights, thermostat, notifications, etc.)


Hardware

Device Role
Raspberry Pi Central hub running FastAPI server
ESP32 (×13) Distributed sensors and actuators
RGB lights Controllable via hub
Smart plugs Controllable via hub
Thermostat Controllable via hub

Supported Sensor Types

  • Door sensors
  • Motion sensors
  • Flood/water sensors
  • Smoke + CO sensors
  • RFID locks
  • Panic buttons
  • Doorbells
  • Garage door controller
  • Climate monitors
  • Air quality sensors
  • Smart plugs
  • RGB lights
  • Thermostat

Software Stack

ESP32 Sensors
     │  (HMAC-signed HTTPS payloads)
     ▼
Raspberry Pi Hub  ──  FastAPI server
     │                    │
     │              SQLite state store
     │              RAG memory (ChromaDB)
     │              NOVA via Ollama
     ▼
Web Dashboard (vanilla JS)
     │
     └── Manual controls, live device state, notifications

Project Structure

openHome/
├── pi/                         # Raspberry Pi hub
│   ├── server.py               # FastAPI main server
│   ├── ai_brain.py             # NOVA inference + action dispatch
│   ├── action_executor.py      # Sends commands back to ESP32s
│   ├── device_schemas.py       # Device type definitions
│   ├── rag_memory.py           # ChromaDB RAG layer
│   └── secrets_config.py       # API keys + HMAC secrets (gitignored)
│
├── esp32/                      # ESP32 firmware (Arduino IDE)
│   ├── door_sensor/
│   ├── motion_sensor/
│   ├── flood_sensor/
│   ├── smoke_co_sensor/
│   ├── rfid_lock/
│   ├── panic_button/
│   ├── doorbell/
│   ├── garage_door/
│   ├── climate_monitor/
│   ├── air_quality/
│   ├── smart_plug/
│   ├── rgb_lights/
│   └── thermostat/
│
├── dashboard/                  # Web UI
│   ├── index.html
│   ├── style.css
│   └── app.js
│
├── dataset/                    # NOVA training pipeline
│   ├── generate_training_data.py
│   ├── train_cpu.py
│   ├── openhome_train.jsonl
│   └── openhome_val.jsonl
│
└── README.md

NOVA — The AI Layer

NOVA is a Qwen2.5-0.5B model fine-tuned on 1,909 openHome-specific examples covering:

  • Sensor event → action reasoning (doors, motion, smoke, flood, panic, RFID, etc.)
  • Natural language commands ("goodnight", "movie mode", "I'm leaving")
  • Time-of-day context (night vs. day behavior)
  • Constraint enforcement (read-only sensors, garage with car present, thermostat limits)
  • Multi-action routines

Training stats:

  • Base model: Qwen/Qwen2.5-0.5B-Instruct
  • Dataset: 1,718 train / 191 val examples
  • Final loss: ~0.039
  • Format: GGUF Q8_0 via llama.cpp
  • Inference: Ollama

NOVA always replies with a valid JSON array of action objects or [] for no action. It never explains itself, never fabricates device IDs, and respects all device constraints.


Setup

Prerequisites

  • Raspberry Pi (3B+ or newer)
  • Python 3.11+
  • Ollama installed on the Pi
  • Arduino IDE for ESP32 firmware

1. Clone the repo

git clone https://github.com/DaEpickid540/openHome.git
cd openHome

2. Generate secrets

cd pi
python gen_keys.py

This creates secrets_config.py with your API key and HMAC secret. Keep this file out of version control.

3. Install Pi dependencies

pip install fastapi uvicorn chromadb sentence-transformers requests

4. Load NOVA into Ollama

# Create Modelfile
cat > Modelfile << 'EOF'
FROM /path/to/nova.gguf
PARAMETER temperature 0.1
PARAMETER stop "<|im_end|>"
SYSTEM "You are NOVA, the AI brain of openHome. Reply ONLY with valid JSON arrays of action objects. No explanation, no markdown."
EOF

ollama create openhome-nova -f Modelfile

5. Start the hub server

uvicorn server:app --host 0.0.0.0 --port 8765

6. Flash ESP32 firmware

Open each sketch in esp32/ with Arduino IDE. Update the following in each sketch before flashing:

const char* WIFI_SSID = "your_wifi";
const char* WIFI_PASS = "your_password";
const char* HUB_URL   = "http://<pi_ip>:8765/sensor";
const char* API_KEY   = "your_api_key_from_secrets_config";
const char* HMAC_KEY  = "your_hmac_key_from_secrets_config";

7. Open the dashboard

Open dashboard/index.html in a browser pointed at your Pi's IP. Done.


Security

  • All ESP32 payloads are HMAC-SHA256 signed
  • API key required on every request
  • NOVA runs 100% locally — no data leaves your network
  • Secrets are never committed to the repo

Roadmap

  • MIFARE DESFire challenge-response RFID (replacing UID-based auth)
  • DPO fine-tuning pass on NOVA with Qwen-as-critic
  • Voice command input
  • Tailscale remote access guide
  • Mobile push notifications

Author

Sarvin@DaEpickid540


License

MIT

Downloads last month
139
Safetensors
Model size
0.5B params
Tensor type
F32
·
BF16
·
U8
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support