OGLAS isn’t a single-product company — it’s a full-stack engineering practice that designs, builds, and deploys across every layer of the embedded and server world. From 8-bit microcontrollers drawing microamps in a paddock to Rust cloud services running AI inference, we own the entire pipeline.
This page is a tour of the depth behind that claim.
Languages
We write production code in whatever the job demands:
- Rust — our cloud monorepo (seven products: Cloud, Local, Solar, Factory, Park, Debug, Marine), camera sidecar services, and increasingly new performance-critical work
- Python — AI/ML pipelines (PyTorch, SpeciesNet), camera capture and detection, data analysis, FastAPI services
- C — the OGLAS v2 binary codec (zero-malloc, no floats, integer-only wire format), Zephyr RTOS modules, display drivers
- C++ — the bulk of our PlatformIO firmware fleet across dozens of board targets, Arduino and ESP-IDF frameworks
- JavaScript — web dashboards (11ty/Eleventy), protocol twins, data visualisation (Chart.js)
- SQL — schema design, migrations, and query optimisation across SQLite and NATS JetStream
Frameworks & Operating Systems
We work across the major embedded and server frameworks — and choose the right one for each tier:
- Zephyr RTOS — our newest firmware tier, a west T2 workspace with devicetree overlays, Kconfig fragments, and
native_simtesting via Twister. Sensor, Repeater, and Hub tiers all running Zephyr with over-the-air byte-identical compatibility to the legacy fleet - FreeRTOS — the real-time kernel under ESP-IDF and Arduino ESP32, configured for our hub and display targets
- ESP-IDF v5.5 — native (non-Arduino) builds for our display fleet, using the ESP32-S3 LCD peripheral for RGB panels up to 1024×600
- Arduino + PlatformIO — our mature firmware fleet with dozens of board environments and a shared codebase
- Adafruit nRF52 BSP — low-power nRF52840 nodes with deep sleep down to 4 µA
- Docker — containerised cloud services, camera pipelines, and MQTT infrastructure
- nginx — reverse proxy, auth gateway, and TLS termination
Microcontrollers & Boards
We’ve shipped production firmware across four CPU architectures and over 25 distinct board targets:
ARM Cortex-M4 — nRF52840
Ultra-low-power sensor nodes and BLE + LoRa devices:
- RAK4631 WisBlock — primary sensor platform (nRF52840 + SX1262, modular WisBlock base)
- Seeed XIAO nRF52840 + Wio-SX1262 — compact companion radios and sensor nodes
- LilyGo T-Echo-Lite — GPS tracker with ePaper display
- SenseCAP T1000-E — multi-GNSS tracker (GPS + GLONASS + Galileo + BeiDou, LR1110 radio)
- SenseCAP Solar P1-Pro — solar-powered repeater with integrated GPS
Xtensa Dual-Core — ESP32 & ESP32-S3
Hubs, displays, WiFi + LoRa gateways, and trackers:
- LilyGo T3-S3 — hubs, repeaters, trackers, gateways, display panels
- LilyGo T-Deck — LoRa + WiFi display terminal
- Heltec WiFi LoRa 32 (V2, V3) — hubs, gateways, Victron solar monitoring
- Heltec Tracker V2 — GPS vehicle tracker with LoRa + WiFi + UC6580 GNSS
- Waveshare ESP32-S3-Touch-LCD-7B — 1024×600 RGB touch display
- Elecrow CrowPanel Advance 7" — 800×480 RGB display
- Waveshare RLCD 4.2" — reflective mono LCD (always-on, sunlight-readable)
- Waveshare Knob-Touch-LCD-1.8" — round QSPI display
- M5Tough — industrial panel (ILI9342 + AXP192 power management)
- M5Stack Dial — round colour display (GC9A01)
- AI-Thinker ESP32-CAM — WiFi camera nodes with OV2640
RISC-V — ESP32-C3 & ESP32-C6
BLE beacons and 802.15.4 Thread-capable nodes:
- Seeed XIAO ESP32-C3 — BLE + WiFi beacon and MQTT sensor
- Seeed XIAO ESP32-C6 — BLE + WiFi + 802.15.4 (Thread-ready)
- LilyGo T-Lora C6 — LoRa + 802.15.4 node
AVR 8-bit — ATmega328P
Legacy ultra-low-power sensor nodes:
- Talk2 Whisper Node — LoRa sensor with RFM95
- LowPowerLab Moteino — LoRa sensor with RFM95
Sensors
We integrate an enormous range of sensors — environmental, industrial, and specialised:
Temperature & Humidity
DS18B20 (1-Wire), TMP36 (analog), SHTC3 (I2C), BME280, BME680, SI7021, on-chip NTC thermistors
Pressure & Barometric
BMP180, BMP280, LPS22HB (RAK1902), BME280
Distance & Level
JSN-SR04T (waterproof ultrasonic, UART), RAK12007 (CS100), DYP-A02 family (A0221AU, A02YYUW — auto-stream UART)
Light
BH1750 (I2C lux), on-chip analog lux (T1000-E)
Motion, Tilt & Accelerometer
LIS3DH (RAK1904, 3-axis), QMA6100P (motion-interrupt wake for ultra-low-power), PIR (Panasonic EKMC, AM312, LD2420-OT)
Soil & Agriculture
RAK12035 capacitive soil moisture probe via RAK12023 I2C converter
Energy & Power
PZEM-004T v3 (Modbus-RTU CT clamp metering), Victron Energy MPPT (BLE encrypted telemetry decode)
Contact & Safety
Reed switches, DRV5032 hall sensors, float switches, leak probes, door/gate contacts
Pulse Counting
Hall flow meters (YF-B7), tipping-bucket rain gauges, reed anemometers (ISR pulse counters)
GPS / GNSS
RAK12501 (Quectel L76K), RAK12500 (u-blox ZOE-M8Q), UC6580, AG3335 (Airoha, multi-GNSS), L76K — all via TinyGPSPlus
Displays
We drive displays from tiny 0.96" OLEDs to 7" capacitive-touch RGB panels:
| Display | Controller | Type | Size |
|---|---|---|---|
| SSD1306 OLED | I2C | Mono OLED | 128×64 |
| ST7735S TFT | SPI | Colour TFT | 80×160 |
| ST7789 TFT | SPI | Colour TFT | 320×240 |
| ILI9342 TFT | — | Colour TFT | 320×240 |
| ILI9488 TFT | SPI | Colour TFT | 480×320 (3.5") |
| GC9A01 | — | Round colour | 240×240 |
| ST77916 | QSPI | Round colour | 360×360 |
| ST7306 | SPI | Reflective mono LCD | 400×300 |
| RGB 800×480 | ESP32-S3 LCD | RGB panel | 800×480 |
| RGB 1024×600 | ESP32-S3 LCD | IPS RGB565 | 1024×600 |
| GxEPD2 ePaper | SPI | E-ink | 122×T61 |
Touch controllers: GT911, CST816D, FT6336. GUI toolkits: LVGL (v8 and v9), Adafruit GFX, LovyanGFX, Arduino_GFX.
Networking & Radio
This is where OGLAS really stands apart. We don’t just use radios — we design protocols, build mesh networks, and decode manufacturer-proprietary BLE:
Wireless Protocols
- LoRa (sub-GHz, AU 915–917 MHz) — point-to-point with AES-CTR encrypted binary frames, our primary long-range transport
- LoRa-Basic — our fleet protocol: raw LoRa, encrypted, ~99% of deployed nodes
- MeshCore — encrypted mesh routing with store-and-forward repeaters
- LoRaWAN — feasibility assessed and documented
- BLE 5.0 — advertising beacons, observer mode, config + OTA DFU, manufacturer-specific decoding
- BTHome v2 — open BLE sensor protocol (WS90 weather station decode)
- Victron BLE — AES-CTR decryption of proprietary Victron MPPT solar charger telemetry
- WiFi (802.11 b/g/n) — hub uplinks, web UIs, cloud push, OTA updates
- 802.15.4 — Thread-capable nodes on ESP32-C6
- HaLow (802.11ah) — long-range WiFi for remote site backhaul
Radio ICs
SX1262, SX1276, SX127x, LR1110, RFM95 — Semtech and HopeRF LoRa transceivers across every band and form factor
Wired & Serial
UART (GPS, Modbus-RTU, companion links), I2C (sensors, OLED, touch), SPI (radio, SD, displays), 1-Wire (DS18B20), USB CDC (console, DFU)
Network & Application
- MQTT 3.1.1 — sensor ingest with QoS 1, TLS/mTLS capable, via NATS JetStream
- HTTP/HTTPS — REST APIs, web dashboards, cloud push, mbedTLS on ESP32
- RTSP — camera live streaming with H.264 fragmented MP4 via MediaSource
- ONVIF WS-Discovery — IP camera auto-discovery
- DNS-SD / mDNS — hub and device discovery (
_oglas._tcp) - SSE — Server-Sent Events for real-time AI chat and camera event feeds
- OTA — WiFi firmware updates (ESP32), BLE DFU (nRF52)
Low Power & Battery Expertise
We’re experts at making devices run for years on battery:
- nRF52840 WFE deep sleep — ~4 µA floor with GPIO wake, radio sleep, switched sensor rail
- Duty-cycled wake/publish/sleep — sensor nodes that wake, measure, transmit, and sleep in milliseconds
- Switched 3V3_S rail — power-down all peripherals during sleep
- QSPI flash deep-power-down — 0xB9 command for external storage
- GPS duty divider — configurable fix intervals for battery savings
- V_BCKP retention — GPS warm/hot starts across power cuts
- Beacon mode — fire-and-forget, no ACK camping for maximum battery life
- Motion-adaptive cadence — accelerometer interrupt wakes only on movement (T1000-E)
- Solar harvesting — SenseCAP Solar nodes with integrated panel
GPS & Tracking
Deep GPS expertise across multiple module families and use cases:
- Vehicle trip logging — persistent back-walk retransmission for complete trip replay
- Real-time position tracking — breadcrumb trails with LoRa position reports
- Solar panel tracking — GPS + SD logging for mobile asset monitoring
- Multi-GNSS — GPS + GLONASS + Galileo + BeiDou on T1000-E
- GPS fix optimisation — timeout management, catch mode for warm starts, configurable fix intervals
- TinyGPSPlus — NMEA parsing across all module types
Server & Cloud Infrastructure
Our server stack is as deep as our firmware:
OGLASCloud — Rust Monorepo
Seven products sharing a common architecture:
- Cloud — multi-tenant cloud store, push-ingestion API, dashboards
- Local — single-site software hub with serial/MQTT/hub-pull ingest
- Solar — multi-site power and solar monitoring
- Factory — plant overview with OEE, andon, uptime tracking
- Park — satellite maps, trail cameras, photo review for parks and reserves
- Debug — field debug and discovery tool for LoRa bandwidth monitoring
- Marine (WII5) — wave-buoy deployments and capture spectra
Shared Crates
oglas-core (data model), oglas-ui (dashboard canvas), oglas-wire (wire protocol), oglas-agent (AI/LLM integration), oglas-overlays (GeoJSON maps)
Data Infrastructure
- NATS JetStream — durable, replayable, immutable message log with MQTT gateway
- SQLite — local-first storage with migrations, full-text search, and geospatial queries
- 11ty (Eleventy) — static site generator for all web frontends
- Chart.js — data visualisation and dashboards
- Sh3dAuth — external magic-link authentication service
Data Ingest Paths
LoRa sensors → Hub → Cloud push · BLE sensors → Hub observer → Cloud · WiFi MQTT → NATS → Rust consumer → Cloud · Camera → Python service → Cloud ingest · Local hub → Cloud push
AI & Machine Learning
We integrate AI directly into the monitoring pipeline — not as a bolt-on, but as a first-class sensor:
- SpeciesNet (Google CameraTrapAI) — MegaDetector for animal/person/vehicle detection + EfficientNetV2-M species classification
- Australian geofencing — species filtering tuned for Australian wildlife
- Predator alerting — fox (Vulpes vulpes) and feral cat (Felis catus) detection with confidence scores
- Scene analysis — brightness measurement, monochrome detection (IR vs white light discrimination)
- Software motion detection — frame-difference algorithm for cameras without native motion API
- Motion burst — rapid multi-frame capture on motion events for higher classification confidence
- LLM integration — AI agent with SSE-streaming chat interface for natural-language data queries
Camera Support
Six camera driver families with unified processing:
- Dahua — HTTP Digest auth, motion events, dual-light control (IR/white/auto), SMD management
- HTTP snapshot — generic IP camera polling
- RTSP — ffmpeg-based streaming with live restreaming (H.264 fMP4 + MJPEG fallback)
- ESP32-CAM — custom firmware for WiFi camera nodes
- FTP folder-watch — legacy camera integration
- USB webcam — V4L2 capture
- ONVIF WS-Discovery + mDNS + TCP fingerprint for automatic network camera scanning
- Multi-camera concurrent processing with shared AI model and shared SQLite store
Security
- AES-CTR encryption on all LoRa frames
- ed25519 cryptographic signatures (MeshCore)
- MQTT TLS/mTLS for cloud-direct connections
- Token-based ingest authentication
- NVS credential storage — WiFi, MQTT, LoRa keys persisted securely
- BLE DFU — encrypted over-the-air firmware updates
Device Roles
Our firmware fleet covers every role in a monitoring system:
| Role | Description |
|---|---|
| Sensor node | Periodic reading + LoRa beacon (battery, solar, or mains) |
| Companion radio | BLE + LoRa receiver, UART pipe to hub |
| Hub | Ingest, storage, web UI, cloud push |
| Repeater | Store-and-forward LoRa gap-filler + BLE observer |
| Gateway | Rules-driven fleet listener + scarce uplink |
| Display panel | Glanceable dashboard (7" touch to 1.8" knob) |
| Tracker | GPS vehicle/person tracker with trip logging |
| Bell | Annunciator/buzzer for audible alerts |
| Gate | Gate detect + remote open |
| Power plug | Relay timer + mains metering |
| Camera node | Snapshot server for OGLASCamera |
The OGLAS Protocol
At the heart of everything is the OGLAS v2 binary protocol — a transport-agnostic codec that knows nothing of LoRa or TCP:
- Forward-compatible field IDs with width-in-id scheme
- Integer-only wire format (no floats, no malloc)
- Single source of truth (
oglas_fields.def) generates C and JavaScript bindings - Verbs: sensor, beacon, ack, cmd, cmdresp, alert, node, have, pull, relay
- Byte-identical over-the-air compatibility between Arduino, Zephyr, and Rust implementations
This breadth isn’t theoretical — it’s deployed, in production, on real sites across Australia. If you’ve got a monitoring problem that spans hardware, radio, server, and AI, we’ve probably already built something adjacent to it.