Makera yourself at home.
Important
Unofficial community project. This integration is developed by the community and is not affiliated with, endorsed by, or supported by Makera Inc. in any way. Makera and Carvera are trademarks of Makera Inc.; the name and logo are used solely to identify the machines this integration works with. Don't contact Makera for support with this integration — open an issue here instead.
Local, no-cloud Home Assistant integration for Makera Carvera CNC machines running the Community Firmware with the read-only HTTP status API.
Know when your machine is waiting for a tool change, get pinged when the job finishes or alarms, chart your spindle temperature, and switch the dust extraction with the machine — all local, nothing leaves your network.
Status: early (v0.3.x). Running against a Carvera Air on the RC firmware. Feedback and issue reports are very welcome — this is being shared to find out what other people need.
- Auto-discovery — machines are found via the Carvera's own UDP announcement; no IP typing, and the integration follows the machine across DHCP lease changes automatically.
- Built for machines that are usually off — entities go unavailable while the CNC is powered down (no error spam, no timeouts: polling is gated on the announcement beacon), and an always-available Online sensor lets you automate on power-on/power-off.
- Ready-made device triggers — Tool change required, Job started, Job finished, Alarm raised — so the headline automation ("ping my phone when the machine waits for a tool") is a two-click affair.
- A dashboard card in the box — installs and registers itself; add it from the card picker, no resource wrangling.
- Read-only by design — the firmware API is GET-only; nothing on your network can control the machine through it.
-
A Carvera or Carvera Air running the Community Firmware with the HTTP status API. The feature is on its way upstream (PR #391); until it ships in official builds, flash the ready-made RC release (pick the file matching your current firmware — stable 2.1.0c or dev). Enable once via the console:
config-set sd wifi.http_enable true reset -
Home Assistant 2025.6 or newer.
-
For discovery and off-detection, Home Assistant must be able to receive UDP broadcasts on port 3333 (true for Home Assistant OS and container installs with host networking). Without it, the integration still works by plain polling.
- Click the badge above (or: HACS → three-dot menu → Custom repositories → add
https://github.com/BellionBastien/MakerHAas type Integration). - Download MakerHA, restart Home Assistant.
- Settings → Devices & Services → Add integration → Makera Carvera (MakerHA). Machines that are powered on appear in a pick list; select one and you're done.
Copy custom_components/carvera/ into your Home Assistant config/custom_components/ directory and restart.
| Entity | Type | Notes |
|---|---|---|
| State | sensor (enum) | Idle · Run · Home · Hold · Alarm · Sleep · Pause · Wait · Tool — positions (MPos/WPos), WCS and modes as attributes |
| Spindle speed | sensor | RPM |
| Spindle temperature | sensor | °C, long-term statistics |
| Power supply temperature | sensor | °C (Carvera Air) |
| Feed rate / Feed override / Spindle override | sensor | mm/min, % |
| Tool / Target tool / Tool offset | sensor | tool numbers; below-zero means "none" |
| Job progress / Job file / Job elapsed | sensor | %, filename, seconds |
| Wireless probe battery | sensor | V (diagnostic) |
| Laser power | sensor | % (diagnostic) |
| Halt reason | sensor | firmware halt code (diagnostic) |
| Running / Alarm / Job playing | binary sensor | |
| Controller connected | binary sensor | someone is on the console port |
| Laser mode / Vacuum mode | binary sensor | diagnostic |
| Online | binary sensor | stays available while the machine is off — automate on power-on |
Tool change notification (the reason this exists):
automation:
- alias: "Carvera: tool change needed"
mode: single
triggers:
- trigger: device
domain: carvera
device_id: <pick in the UI>
type: tool_change_required
actions:
- action: notify.mobile_app_your_phone
data:
title: "Carvera"
message: >-
Waiting for tool T{{ states('sensor.carvera_air_05214_target_tool') }}
({{ states('sensor.carvera_air_05214_job_file') }})Shop follows the machine:
- alias: "Carvera powered on -> dust extraction outlet on"
triggers:
- trigger: state
entity_id: binary_sensor.carvera_air_05214_online
to: "on"
actions:
- action: switch.turn_on
target:
entity_id: switch.dust_extractor(Entity IDs contain your machine's name — pick them in the UI.)
The integration ships its own dashboard card and registers it for you — no HACS frontend repo, no resource setup. Edit any dashboard → + Add card → search Carvera → pick your machine. That's it.
It shows the machine at a glance: state (colour-coded), the current job with a progress bar, spindle speed, feed,
tool, and both temperatures. When the machine is waiting on you it says so in plain words — "Insert tool T7, then
press the button" — and when it's powered off it collapses to a quiet "Offline" row instead of a wall of
unavailable. Every value is clickable for its full history.
docs/dashboard.yaml is a complete multi-card view — gauges, temperature history, diagnostics —
if you want a dedicated Carvera dashboard. Settings → Dashboards → + Add dashboard → New dashboard from scratch →
open it → pencil → three-dot menu → Raw configuration editor → paste → Save, then search & replace
carvera_air_05214 with your machine's slug.
Note: feed rate and tool offset follow the machine's unit mode — they report in/min/in while the machine runs in
inch mode (G20). You can add the integration once per machine; several Carveras work side by side.
The Carvera broadcasts a NAME,IP,PORT,BUSY announcement on UDP 3333 every second while powered on. The integration
listens passively: while no announcement is heard, it doesn't even attempt HTTP, so an off machine costs nothing.
When you flip the machine on, the announcement arrives within a second, the integration re-learns the machine's
current IP from it, and polling resumes. Everything except the Online sensor shows unavailable while the machine
is off — that's the correct, expected representation.
First reflex for anything network-ish: run scripts/live_check.py from any computer on the
same network (no Home Assistant needed) — it listens for the machine's announcement and calls the status API, which
cleanly separates "machine-side problem" from "Home Assistant-side problem".
Nothing shows up in the discovery list. The machine is probably powered off (turn it on and retry), or UDP broadcasts on port 3333 don't reach your Home Assistant (typical for Docker installs without host networking). Use Enter address manually — everything works without discovery, you just lose the automatic IP-follow and the fast off-detection.
"Could not reach the status API" during setup.
The firmware feature is off. On the machine console (Carvera Controller or USB): config-set sd wifi.http_enable true
then reset. Verify with curl http://<machine-ip>:8080/status from any computer.
All entities are unavailable. The machine is powered off — that's the intended representation. The Online binary sensor stays available and tells you on/off; automate on that.
Sensors freeze during file transfers. Expected: the firmware suspends its network stack while receiving a file (XMODEM). Everything recovers when the transfer ends.
Built on the Carvera Community Firmware's HTTP status API. Thanks to the Carvera-Community project, and to tcatm's early webserver exploration that paved the way.
