Join the waitlist
Menu

One controller for the gear you already own.

Origin89 reads the charge controller, inverter, batteries, probes and generator at your site, runs your rules there and keeps every reading with its age.

In active development. Not for sale yet.

Every bus.One board.Decisions stayon site.

Most off-grid walls grow one box at a time: a charge controller from one maker, an inverter from another, a meter, a generator in the shed. Nothing ties them together. The Controller wires into all of them and makes the site’s decisions on one 12 V board, with or without the internet.

3 × RS-485Modbus gear
CANBattery BMS
2 × VE.DirectMonitors, chargers
1-WireTemperature
4–20 mATank level
11 mAIdle, radio off

The copper behind this text is board A’s top layer, drawn from its Gerbers.

Who it’s for.

Anyone responsible for power at a place they can’t see from where they are.

Cottages and camps

A power wall built over the years, a generator in the shed and a fridge full of food. See it all from town.

  • Budget and mixed-brand gear
  • Flooded lead-acid or lithium banks
  • Two-wire generator start

Remote telecom shelters

Batteries, a genset and a tower hours from the nearest road. Know the site’s state before the truck leaves.

  • Battery and generator state between visits
  • Readings that show their age
  • Rules that run without a link

Mining utilities

Gensets, pumps and battery banks spread across a site. Planned: several Controllers per location, in one account.

  • One Controller per building or skid
  • Local control stays with each unit
  • Planned multi-location overview

Open from the board up.

The board files, Gerbers, bill of materials and firmware are public. Every part on this page has a designator you can look up: where it sits on the board, what it is and why it was chosen.

Browse origin89hq/hardware

Top copper around U7build/2026-09-09/gerber.zip
Top copper, pads and silkscreen of board A around the STM32, drawn from the fabrication Gerbers
Bill of materialsbom.csv
U7STM32G0B1RET6 · LQFP-64
U8ESP32-C6-WROOM-1-N8
U3–U5MAX13487EESA+T · RS-485
U9FM24W256 · FRAM
Layout rules, with their reasonsLAYOUT-REQUIREMENTS.md
  • A-01100 × 125 mm, 1.6 mm FR-4. The board is the master dimension; the enclosure is printed around it.
  • A-15No copper on any layer under the ESP32 module’s antenna keep-out.
  • A-24The 1-Wire supply leaves the board on field cable, so it gets its own 100 mA fuse. A chewed probe cable can’t take the Controller down.
Firmware budgetfirmwares/o89-stm32

The budget is about 256 KB, not 512. Dual-bank A/B updates keep the new image in one half while the other holds the one it replaces.

binary 67,696 B25 % of one slot

Every terminal, named.

Pluggable screw terminals for field wiring, keyed headers for VE.Direct and the generator link. Point at a terminal to see what it connects to, its pins and its limits.

Origin89 Controller with its terminals labelledDC IN · 12 VRS-485 1RS-485 2RS-485 3CAN1-WIRESEL · selectorSNS · start batteryTNK · tank levelSTATUS · light1W · same 1-Wire busVE.DIRECT 1LNK · generator boxVE.DIRECT 2WI-FI + BLUETOOTH · inside

Point at or tap a terminal

Dual-MCU architecture.

Two processors. One of them decides.

The usual site monitor is one Linux computer. Networking, the web interface and the generator logic share its operating system. Origin89 splits the job: a microcontroller that only reads, decides and records, and a separate radio module that only talks. A Wi-Fi fault can’t take the generator rule with it.

Victron Cerbo GX: Venus OS, a Linux distribution, on a dual-core processor. Home Assistant Green: a quad-core Rockchip RK3566. SolarAssistant: a Raspberry Pi. Checked against their makers’ pages on 16 September 2026.

Every decision, all timing, all storage, all actuation.

U7 · STM32G0B1RET6 · Arm Cortex-M0+ · 512 KB flash in two banks

  • U3–U6Reads the buses. Three RS-485 transceivers, the CAN transceiver, both VE.Direct ports, 1-Wire and the sense inputs.
  • U9 U10Keeps the record. State in FRAM, the event log in 128 Mbit NOR flash.
  • X2Keeps time. A 32.768 kHz crystal with a backup cell, so the log’s timeline survives a power loss.
  • CN9Asks the generator to run. RUN and a regular KICK to board B, whose watchdog opens the contact if they stop.
  • V3V3_ESPPowers the radio. It switches the ESP32’s rail, so a stuck radio restarts without a site visit. With that rail off, the board idles at 11 mA.

Wires into what’s already on the wall.

Runs on almost nothing.

One fused circuit on the battery bank. No inverter has to stay on to keep it awake.

38mA
0.50 W · Wi-Fi and Bluetooth on
Origin89, per day0.91 Ah
Cerbo GX MK2, per day5.1 Ah

Both at 13.1 V. Origin89: first bench readings on board revision A. Cerbo GX MK2: 2.8 W from Victron’s datasheet.

The Controller's DC IN terminal with its red and black power conductors landed, beside the RS-485 terminals
CN1 · DC IN

Not locked in.

Your site’s data is yours. The Controller speaks KM43, an open protocol with a public specification and published libraries. Keep the safety rules on the Controller and automate everything else wherever you already do.

  • Home AssistantReadings as sensors, generator requests as actions.Planned
  • SmartThingsSite state inside your routines.Planned
  • MQTTkm43/<device_id>/txSpecified in KM43
The closed Origin89 Controller
KM43 requests, responses and an event stream
  • Local WebSocketThe app’s own API, on your network.Specified in KM43
  • Rustkm43 0.1.0 · crates.ioPublished
  • TypeScript@origin89/km43 0.1.1 · npmPublished

When rises above 7 °C for , .

Runs on
Controller
Without internet
Decides offline
Status
Core design
Reads from
1-Wire probe on CN8. The Controller decides at the site and sends the notification when it has a connection.
import { MessageType, Quality } from "@origin89/km43";

// Follow the Controller’s event stream,
// and never act on an old or missing value.
send({ type: MessageType.Subscribe });
onReading((r) => {
  if (r.quality === Quality.Stale) return;
  if (r.quality === Quality.Absent) return;
  publish("site/fridge_shelf", r.value);
});

The enums are real, from @origin89/km43. send, onReading and publish stand in for your own code.

How it compares.

The difference is in how it’s built. A microcontroller decides without an operating system to boot, the radio can fail without taking the rules with it, and the generator contact opens by itself if the Controller stops.

FeatureOrigin89 ControllerVictron Cerbo GX MK2SolarAssistantHome Assistant, DIY
Built to keep running
Control and networkingOn separate chipsA microcontroller decides; a radio module only talks, so a Wi-Fi fault can’t stop the rulesOne Linux computerVenus OS runs networking, the display and generator control on one dual-core processorOne Raspberry PiLinux-based imageOne Linux computerHome Assistant OS; HA Green uses a quad-core RK3566
After a power cutNo operating system to bootThe firmware runs directly on the microcontroller; start-up time not yet measuredLinux boots firstAbout 2 to 2.5 min, as reported on Victron’s community forumLinux boots firstTime not statedA few minutesUp to 5 min, per Home Assistant support
If the controller stopsThe generator contact opens by itselfA hardware watchdog on the generator board opens two relays in series, 4.3 s after the last kick on the benchNot documentedIts watchdog restarts the computer; no documented interlock on the generator relayNot statedDepends on your relay and automation
Temperature ratingParts rated −40 to +85 °CController board. Generator board relays: −25 to +65 °C. Product rating pending testing−20 to +50 °C0 to 50 °CRaspberry Pi 4 board0 to 40 °CIndoor use only
Idle drawAbout 0.5 WUnder a fifth of a Cerbo GX. 38 mA at 13.1 V with Wi-Fi and Bluetooth on; 11 mA with the radio off. First bench readings2.8 WAt 12 V, without the GX Touch displayNot statedA Raspberry Pi boardAbout 1.7 WHA Green at 12 V, plus adapters
Connects to
Mixed-brand gearDesigned for itEach model verified before it’s listedVictron-firstSome third-party PV inverters and CAN batteries20+ inverter brandsEPEver and Renogy not supportedAnythingIf you write the integration
RS-4853 ports, one bus eachUSB adapterUSB adapter per deviceDIY adapters
CAN and VE.Direct1 × CAN, 2 × VE.Direct2 × VE.Can, 3 × VE.DirectUSB adapter per deviceDIY
Temperature probes1-Wire probes on one cable4 inputsVictron sensorsBMS-reported onlyDIY with ESPHome
Tank level4–20 mA input4 resistive inputs4–20 mA through the GX Tank 140 add-onNot statedDIY
Generator startTwo-wire startOn its own generator boardBuilt-in relayState of charge, voltage, load and quiet hoursNot statedDIY relay and automation
Decides with no internetYesYesMonitoring yesOffline rules not statedYes
Open and available
Open sourceFirmware and board filesPartlyParts of Venus OS; no hardware filesNoSoftware yesHardware varies
AvailabilityIn active development, not for sale yetShippingShippingShipping

Checked on 17 September 2026 against Victron’s Cerbo GX datasheet, GX manual and developer wiki; SolarAssistant’s documentation and supported-inverter list; the Raspberry Pi 4 product brief; Home Assistant Green’s specifications and support pages; and the datasheets of the Controller’s parts. The Cerbo’s boot time comes from Victron’s community forum, not an official figure. The Origin89 column comes from the revision A design files; temperature figures are part ratings, the idle draw and the generator watchdog timing are bench readings and other values are not yet measured. Corrections welcome at hello@origin89.com.

Your site, wherever you are.

The Offgrid app shows what the Controller reads and what it decided, each value with the time it was taken. When the site is offline, you see the last reading and its age, never a number that only looks fresh.

  • Stale looks staleA reading past its interval is marked, and a missing one says so.
  • Requests go through the rulesAsk for the generator from the app; the Controller’s rules decide whether it runs.
  • History stays on the siteThe Controller keeps the event log and syncs it when there’s a connection.
  • Several locationsPlanned: one account for every Controller you look after, grouped by site.

The app is in development. Screens and readings here are samples.

Buddy, the Origin89 moose, explaining with one hoof raised

Why did the generator start at 5:40?

The charge controller reported the battery bank at 11.84 V at 05:38. That’s under your 11.9 V start rule, so the Controller asked the generator box to run.

The outdoor probe hasn’t reported for 14 minutes, so I left it out.

RS-485 1 · 11.84 V · 05:38Rule · start below 11.9 V1-Wire · outdoor · 14 min old

Is the fridge okay?

Yes. The middle shelf read 3.8 °C 41 seconds ago, and it has stayed between 3 and 5 °C since last night.

Buddy explains what changed.

Ask in plain words. Buddy answers from the site’s own readings and rules, says where each number came from and how old it is, and leaves out what it can’t trust.

Buddy only advises. It can’t start, stop or switch anything. Only the Controller’s rules act on equipment.

Open the full preview

Technical specifications

From the revision A design files, exported 9 September 2026. Values marked in amber wait on bench measurement.

On the benchBoard revision A · updated 17 September 2026
  1. Idle draw11 mA radio off, 38 mA with Wi-Fi and Bluetooth, at 13.1 V
  2. Generator watchdog timing4.34 to 4.46 s after the last kick
  3. 1-Wire probes per busPlus the longest outdoor run (pending)
  4. Start-battery accuracySNS calibration against a meter (pending)
  5. Wi-Fi range in the enclosureThrough the closed cover (pending)
  6. RS-485 with three busesAll three ports talking at once (pending)

Processors

Controller
STM32G0B1RET6, Arm Cortex-M0+, 512 KB flash in two banks
Radio
ESP32-C6-WROOM-1-N8, RISC-V
Link
UART with hardware flow control
Radio power
Switched by the controller

Field buses

RS-485
3 ports, MAX13487E, SM712 surge clamp, 120 Ω termination on a jumper, 560 Ω fail-safe bias
CAN
1 port, TJA1051T/3, PESD1CAN clamp, 120 Ω on a jumper
VE.Direct
2 ports, JST PH 4-pin
Terminals
Pluggable screw, 3.5 mm pitch

Sensing

1-Wire
3.3 V probe supply through a 100 mA resettable fuse, ESD clamp
Probes per bus
Pending bench test
SNS
Start-battery voltage, about 36 V full scale by design
TNK
4–20 mA, 150 Ω sense
SEL
Panel selector input

Power

Input
12 V DC, straight from the battery bank
Protection
SMBJ18A clamp, 2 A resettable fuse, reverse polarity
Regulators
2 × TPS54331 bucks, 5 V and 3.3 V
Idle, radio on
38 mA at 13.1 V, about 0.5 W, Wi-Fi and Bluetooth on
Idle, radio off
11 mA at 13.1 V, about 0.14 W, ESP32 rail switched off
Source
First bench readings, board revision A

Generator board

Contact
Two G5V-2 relays in series, gold-clad contacts
Watchdog
Hardware timer, opens 4.3 s after the kicks stop, measured
Output
Dry contact, 30 V DC max, 2 A fuse, SMBJ30CA clamp
Link
JST VH 5-pin to the Controller
Status
Interlock proven on the bench, 17 September 2026

Wireless

Wi-Fi
2.4 GHz Wi-Fi 6
Bluetooth
Bluetooth LE, for setup
Antenna
On the module, under the cover
Range in the enclosure
Pending bench test

Storage and time

State
FM24W256 FRAM, 256 kbit
Event log
W25Q128JV NOR flash, 128 Mbit
Clock
32.768 kHz crystal, ±20 ppm, backup cell input

Board

Size
100 × 125 mm
Stack
4 layers, 1.6 mm FR-4, solid ground plane under every pair
Finish
ENIG, green mask, white silkscreen
Revision
A, fabricated, bench measurements in progress

Enclosure

Face
132 × 157 mm, 40 mm off the wall
With ears
160 × 157 mm
Indicator
One status light
Build
Printed around the finished board

Software and files

Firmware
Rust, one image per processor
Protocol
KM43, shared by both processors
Hardware
Board projects, Gerbers, BOM and enclosure CAD in origin89hq/hardware

Notes from the bench.

Bench results and progress on the Controller, posted as we go.

Why the generator start has its own board

The Controller's main board never closes the generator's start contact itself. A second board with two relays, a hardware watchdog and no firmware does, and only while the controller keeps asking. It now holds and drops on the bench, 4.3 s after the last kick.

Why we started Origin89

An off-grid cabin at km 43 in Québec, solar gear and a generator from different makers, and no monitoring that worked with all of it.

All posts

Be first on the wall.

We’ll write when bench results are in and again when boards can be reserved. Nothing else.

We’ll email you a link to confirm your address.