Why monitor Starlink in Home Assistant — the boat case
On land, Starlink is a set-and-forget appliance. On a boat it is a moving, power-hungry, weather-exposed piece of gear that fails in ways your MFD will never tell you about: a boom swings into the field of view and drops the link, the dish quietly thermal-throttles in the Florida sun, or it reboots for a firmware update in the middle of a passage. By the time you notice, the connection is already gone and you're guessing at why.
Home Assistant closes that gap. If you already run Home Assistant on the boat for batteries, bilge, and temperature, adding Starlink puts the dish's own diagnostics on the same dashboard — and lets you act on them automatically. The dish keeps a running record of obstruction, throughput, latency, ping drop rate, uptime, and a dozen alert conditions, and it exposes all of it over a local API on your own network. No cloud, no login, no data charge. Home Assistant just reads it.
Three things this unlocks that the Starlink app alone does not:
- Alerts that reach you. A push notification the moment obstruction crosses a threshold or the dish reports a thermal-throttle alert — not a graph you have to remember to open.
- Correlation with the rest of the boat. Starlink draw plotted next to house-bank voltage and solar input, so you can see what the dish actually costs your power budget underway.
- Automated failover. When the link drops, an automation flips to cellular and tells you it did — instead of you rebooting things in the dark.
What telemetry you can actually read from the dish
Every dish exposes a local gRPC API at 192.168.100.1 on port 9200 — the same endpoint the official Starlink app uses for its statistics screen. That is the source for everything below, whether you read it through the native Home Assistant integration or the community Python tools. The query is entirely local: it works when the satellite link is down, because the dish is still sitting on your boat network answering questions about itself.
The built-in Home Assistant Starlink integration surfaces that data as a rich set of entities. The exact list tracks the integration's releases, but as of 2026 it includes:
Sensors
- Downlink / uplink throughput — current bits per second in each direction
- Ping (latency) and ping drop rate — the two numbers that actually predict whether a video call survives
- Power (last measured draw, in watts) and Energy (cumulative kWh), on dishes whose firmware reports it
- Azimuth / elevation — where the dish is aimed
- Last restart / uptime — how long since the dish rebooted
- Cumulative upload / download counters
Binary sensors (the alert flags)
- Connected, Obstructed, Roaming mode, Update available
- Heating, Thermal throttle, Sleep
- Mast near vertical, Motors stuck, Slow ethernet, Unexpected location
Controls
- Restart button, Stowed and Sleep schedule switches, sleep-window time helpers, and a device tracker for the dish's reported location
That "Thermal throttle" flag alone justifies the whole exercise on a hot-climate boat — it is the difference between "the internet is slow for no reason" and "the dish is too hot and is deliberately backing off." Pair the obstruction and drop-rate figures with a good marine mount and you can actually tune dish placement with data instead of guesswork.
The Power entity is genuinely useful for at-a-glance monitoring, but it is the dish's own estimate. For solar and battery budgeting where the number matters, a dedicated DC shunt like the Victron SmartShunt on the Starlink circuit measures actual current — and shows up in Home Assistant right alongside the dish telemetry. See our battery monitor guide.
Three approaches, in detail
These are not competitors so much as three layers. Most boats want the native integration; power users add the Python tools for history; everyone should have the ping-based failover layer as a backstop.
HA Starlink integration — the native, no-code first stop
This ships inside Home Assistant — there is nothing to install from HACS. Go to Settings → Devices & Services → Add Integration → Starlink, confirm the dish address, and Home Assistant creates the full device with all the sensors above. It uses local polling through the starlink-grpc-core library, so it never touches Starlink's cloud and keeps reporting during an outage. For 90% of boats this is the entire project: five minutes, a dashboard card, and one automation. The single caveat — and it is the one that trips people up — is bypass mode: if your own router has taken over from the Starlink router, you must add a route to the dish first (covered in the next section). In standard router mode it just works out of the box.
Strengths
- Built into HA core — no HACS, no custom repo
- Config-flow setup, no YAML, no scripting
- Full telemetry set including power, obstruction, and alert flags
- Local polling — works during outages, no cloud, no data cost
- Restart button and sleep-schedule controls included
Trade-offs
- Requires a route to the dish in bypass mode (one-time router config)
- History limited to HA's recorder retention (days to weeks)
- Power sensor is the dish's estimate, not a measured shunt value
- Entity set can shift between HA releases
starlink-grpc-tools — the power-user logging route
When you want more history than Home Assistant keeps, or a proper Grafana dashboard, this is the toolkit. It queries the same 192.168.100.1:9200 endpoint and hands the data off to whatever you point it at: dish_grpc_influx2.py for InfluxDB 2.x, dish_grpc_mqtt.py for an MQTT broker, dish_grpc_sqlite.py for a local database, dish_grpc_prometheus.py for Prometheus, and dish_grpc_text.py for plain CSV. There is even dish_obstruction_map.py, which renders the dish's obstruction map to a PNG so you can see exactly where the sky is blocked. The clean pattern on a boat is grpc-tools → MQTT → Home Assistant: the Python script publishes to your broker, and Home Assistant subscribes. That way you get the deep per-second history in InfluxDB and the same values live in HA, without the two fighting over the dish. It is more setup — Python, a broker, a database — but it is the only way to answer "how bad was obstruction across the whole passage last week?"
Strengths
- Second-by-second history, retained as long as you want
- Writes to InfluxDB, MQTT, SQLite, Prometheus, or text
- Obstruction-map PNG export for tuning dish placement
- Complements the HA integration via MQTT — not either/or
- Docker images available for headless boxes
Trade-offs
- Real setup: Python, a broker, and a time-series database
- Community project — you own the maintenance
- Same bypass-mode route requirement as the native integration
- Overkill if you only want a dashboard and alerts
HA Ping + router failover — the connectivity backstop
Dish telemetry tells you what the dish thinks; it does not tell you whether the internet actually works. Home Assistant's built-in Ping integration fills that gap: point it at a reliable external host such as 1.1.1.1 and it reports a simple up/down binary sensor plus round-trip time. That single sensor is the trigger for the automations that matter — a push notification the instant reachability fails, and, if you run a multi-WAN router like a GL.iNet Flint 2 or a Peplink, an alert when it fails over from Starlink to cellular. The best part: Ping needs no route to the dish, so it works even on boats where you can't or won't open the bypass route. Run it alongside the native integration and you have both halves — why Starlink dropped (dish alerts) and whether you're actually offline (ping). See our marine network security guide for the router side.
Strengths
- Measures real reachability, not just dish self-report
- No dish route required — works in any network mode
- Drives failover alerts with a multi-WAN router
- Trivial to set up; built into HA core
Trade-offs
- No dish diagnostics on its own — pair it with the integration
- Hardware failover needs a multi-WAN router (extra cost)
- A blocked ICMP host can cause false "down" readings — pick a reliable target
All three approaches above assume you're running Home Assistant on the boat. If you're not — and don't want to — Nexus Telemetry is a paid cross-platform desktop app (macOS, Windows, Linux) that reads the same local dish telemetry into one dashboard: connection health, throughput, latency, obstruction maps, and satellite tracking, plus session recording and network diagnostics in the Pro tier. It reads the dish locally over your own network — no cloud account — and is a one-time purchase (Home £24.99 / Pro £99.99) rather than a subscription. We haven't put it through a full hands-on test yet, but it's the cleanest turnkey answer we've seen for boaters who want dish diagnostics without standing up Home Assistant or scripting Python.
The bypass-mode gotcha — reaching 192.168.100.1
This is the one thing that turns a five-minute setup into an afternoon of head-scratching, so it's worth understanding before you start. Everything that reads the dish — the HA integration, grpc-tools, even the Starlink app — talks to the dish's management IP, 192.168.100.1. Whether that address is reachable depends entirely on how your boat network is wired.
Standard router mode: it just works
If you're using the Starlink router (or its Ethernet adapter feeding a device directly), clients on the network can already reach 192.168.100.1 — the Starlink router routes to it for you. Add the integration, done. Nothing else to configure.
Bypass mode: you must add a route
Most connected boats eventually turn on bypass mode, which disables the Starlink router so your own router — a GL.iNet or Peplink — can take over routing, VPN, and cellular failover. The moment you do, your router's WAN gets a normal public/CGNAT address and 192.168.100.1 is no longer on any subnet your LAN knows about. Home Assistant polls it and gets nothing. Home Assistant's own documentation is blunt about this: if your Starlink is in bypass mode, you must open a route to it or the integration will not work.
The fix is a one-time static route on your router: send traffic for 192.168.100.0/24 out the WAN interface (the one connected to the dish). On a GL.iNet running OpenWrt this is a single static-route entry; on most consumer routers it's under Advanced → Routing. Once that route exists, 192.168.100.1 is reachable again from your LAN, and both the integration and grpc-tools spring to life. This is also what makes the Starlink app work again from devices behind your own router.
From any device on the boat network, open http://192.168.100.1 or ping it. If it responds, Home Assistant will reach it too. If it times out and you're in bypass mode, add the static route first — don't waste time debugging the integration.
Automations worth building — alerts & failover
Monitoring is only half the value; the payoff is the boat telling you instead of the other way around. Four automations cover almost everyone.
1. Push alert on obstruction or thermal throttle
Trigger on the Obstructed or Thermal throttle binary sensor turning on for more than 60 seconds; action is a mobile notification. The debounce matters — a passing obstruction of a few seconds is normal and you don't want a buzzing phone every time the boat swings at anchor.
2. Notify on unexpected reboot
Watch the Last restart / uptime sensor. If uptime resets when you didn't reboot the dish, that's a firmware update or a fault — worth a heads-up, especially mid-passage.
3. Internet-down alert (the ping layer)
Trigger on the Ping binary sensor going off for 30+ seconds against 1.1.1.1. This catches the cases dish telemetry misses — a CGNAT hiccup, a router problem, a Starlink-side outage that the dish itself doesn't flag.
4. Cellular failover + notify
If you run a multi-WAN router, it handles the actual failover in hardware. Home Assistant's job is to watch which WAN is live and tell you: "Starlink down — now on cellular." That one message saves you from discovering the switch three days later via a data-overage warning. Log every failover to a history graph and you'll quickly learn how reliable your Starlink placement really is.
Install walkthrough — the native integration in 5 minutes
Assuming Home Assistant is already running on the boat (a Raspberry Pi 5 or Home Assistant Green is the usual host — see the HA marine guide):
- Confirm the dish is reachable. From a device on the boat network, ping
192.168.100.1. If you're in bypass mode and it times out, add the static route for192.168.100.0/24first (see above). - Add the integration. Settings → Devices & Services → Add Integration → search "Starlink." Confirm the dish address when prompted.
- Check the entities. Open the new Starlink device. You should see throughput, ping, drop rate, obstruction, uptime, power (if reported), and the alert binary sensors populating within a minute.
- Add a dashboard card. Drop the key sensors onto a card next to your battery and bilge data. An "Entities" card with obstruction, drop rate, downlink, and power is a good start.
- Build one automation. Start with the obstruction/thermal-throttle push alert. Add the ping-based internet-down alert once you've confirmed the sensors are stable.
Power users: after the native integration is working, add starlink-grpc-tools pointed at the same dish, publishing to MQTT or InfluxDB, for long-term history and Grafana. The two coexist happily — they're just two read-only clients of the same local API.
Pitfalls — bypass routes, polling load, false alerts
Three failure modes worth seeing coming.
Forgetting the bypass route (the big one)
By far the most common "it won't connect" cause. If you're in bypass mode and haven't added the 192.168.100.0/24 route, nothing that reads the dish will work — not HA, not grpc-tools, not the app. Test 192.168.100.1 reachability first, every time, before blaming the software.
Chatty polling on a metered link
The dish query itself is local and free, but if you also run grpc-tools shipping per-second data to a cloud InfluxDB or a remote MQTT broker, that traffic goes out over your (possibly metered) connection. Keep the broker and database on the boat. Local telemetry should never cost you data.
False "internet down" alerts
If your ping target is occasionally rate-limited or blocked, you'll get spurious outage alerts. Use a reliable, ICMP-friendly host (1.1.1.1 or 8.8.8.8), add a 30–60 second debounce, and consider pinging two hosts and only alerting when both fail. That kills nearly all false positives.
Frequently asked questions
Does the Home Assistant Starlink integration work in bypass mode?
Yes, but only if you open a network route to the dish. Home Assistant polls the dish's local API at 192.168.100.1. In Starlink's default router mode, clients can already reach that address, so it just works. In bypass mode — where your own router replaces the Starlink router — 192.168.100.1 is no longer on your LAN subnet, so you must add a static route for 192.168.100.0/24 out the WAN interface. Home Assistant's documentation states plainly that in bypass mode you must open a route or the integration will not work.
What IP and port does the Starlink dish use for its local API?
The dish exposes a gRPC API at 192.168.100.1 on port 9200. This is the same local endpoint the official Starlink app uses for dish stats, and it's what both the Home Assistant integration and the community starlink-grpc-tools project connect to. No account login, no cloud call — the query is local to your boat network and works even when the internet link is down.
Can Home Assistant show Starlink power draw?
Yes, on dishes whose firmware reports it. The core Home Assistant Starlink integration exposes a Power sensor (last measured draw, in watts) and an Energy sensor (cumulative kWh) alongside the network metrics, so you can watch the dish's draw on the same dashboard as your battery monitor. For a fully independent, hardware-verified figure — useful for solar and battery budgeting — a dedicated DC shunt such as the Victron SmartShunt on the Starlink circuit is still the gold standard, since it measures actual current rather than the dish's self-reported estimate.
Do I need the Starlink app running for Home Assistant to read the dish?
No. The integration uses local polling — it queries the dish's gRPC endpoint directly and independently. The Starlink app doesn't need to be open, and nothing runs through Starlink's cloud. That's the same reason it keeps working during an outage: even when the satellite link drops, the dish is still on your local network reporting obstruction, alerts, and uptime, so Home Assistant can tell you why you lost connectivity.
Can I automate failover to cellular when Starlink drops?
Yes. The cleanest approach is a multi-WAN router (a GL.iNet Flint 2 or a Peplink) that handles failover in hardware, with Home Assistant watching which WAN is active and sending you an alert. If your router doesn't do multi-WAN, HA's built-in Ping integration can watch an external host such as 1.1.1.1 and trigger an automation — send a push notification, flip a smart plug powering a cellular modem, or just log the outage — the moment reachability fails. The dish telemetry tells you why Starlink dropped; the ping monitor tells you the internet is actually down.
Does any of this cost money or use my data allowance?
No. Both the Home Assistant Starlink integration and starlink-grpc-tools are free and open source, and both query the dish over the local network — no cloud API, no subscription, and no measurable data usage. The only cost is the hardware you already need to run Home Assistant on the boat, such as a Home Assistant Green or a Raspberry Pi 5. Keep any logging database and MQTT broker on the boat and the telemetry stays entirely local and free.
The short version, by use case
You want dish alerts on your boat dashboard, fast: the built-in Home Assistant Starlink integration. Five-minute config flow, full telemetry, no scripting. Just remember the bypass-mode route if you run your own router.
You want years of history and Grafana: add starlink-grpc-tools pointed at the same dish, publishing to a local MQTT broker or InfluxDB. It complements the integration rather than replacing it.
You want real outage alerts and failover: the HA Ping integration against 1.1.1.1, paired with a multi-WAN GL.iNet Flint 2. Dish stats say why; ping says whether; the router does something about it.
The general rule: run all three layers. They're free, they're local, and together they turn Starlink from a black box into the best-instrumented device on the boat.