I can recommend BrulTech. I put in a system (3 GEM's and a Dashbox logger) to cover 3 full panels (plus water, gas, and temps) about 2 years ago and I've been very happy with it.
Quick review: It's all local and is well documented and open at the integration level - with HA there's already an integration built in for it out of the box (I recommend getting the latest from github as they are actively developing it). Firmware is proprietary but low level (read sensors, send via serial->ethernet convertor, sleep 5 secs, repeat; configuration UI). Support is technical and high quality, install/setup docs are excellent and give good examples setting up and and configuring the CT's.
My setup: I have the dashbox set up to proxy the raw GEM data to HA's Brultech integration which then feeds all the HA power/water/gas/temp features. The GEM's I have read 32 CT channels each, plus have 8 'counter' inputs (gas, water) and several 1wire bus I/O's to talk to temperature sensors. They send a data snapshot of all readings every 5 seconds to the logger and to HA (greatly filtered).
The dashbox and 3 GEM's are on wired ethernet, they also have integrated WIFI as an option. They talk on my local net between each other and the dashbox pushes messages to HA - nothing talks to anything on the internet or needs any connectivity to set up.
The HA integration reads GEM-packets, the dashbox repeats the packets received from the 3 GEM's to the HA integration in my setup - but you can also skip the dashbox and just point the GEM straight at HA.
Some examples from the data logger dashboards:
Have they finally allowed you to set the alert sound in IOS? My problem with mobile discord is the feeble little ding they deem you are allowed to hear is so quiet even with the phone turned up I don't hear alerts. There are several complaints in their bugtracker about this going back 7+ years, they seem to want people to miss alerts for some marketing/profit reason.
On other platforms you can overwrite the sound file in the package with a proper alert, but not with the "we're apple, fu and enjoy it" IOS stuff.
I have a subscription in the US and have been watching Picard and Lower Decks -- the few ads I get are their up front spam promoting other shows (I hit reload and the 'forced' up front ad switches to the CBS logo and plays in a couple of secs). Another show I watch has a few ads, I think the are trying to see how much they can get away with before people cancel. I bought a year at 1/2 price and I won't be reupping, its a pretty low value and quality streaming service on all fronts (ads, content, video quality, app/site navigation and player, absolutely no useful technical support if their player or service is glitching, cable company class customer avoidance policies and systems).
The video quality on easynews is also much better should I want to watch more star trek in the future.
The 'platform' for the FEIT ones at costco are really well built. They make the Insteon units look like they were a one off hobby project. That's the part that has the power circuitry, screw terminals, etc. The wifi module used to be ESP based but they switched about a year ago to a newer BK723 chip, these can be reflashed with a 'OpenBeken', which is a newer project that has similar functionality to Tasmota but for these newer chips.
The only downside I've seen with these is OpenBeken is not as mature and the units 'hang' now and then requiring a power cycle (like 2-4 weeks). I have some of the older ESP based units that are otherwise identical and they never hang, this has been getting better with upgrades so likely will eventually be fixed.
If you are OK with soldering you can buy the ESP controller modules on Amazon for about $1 each and just replace them and run stock Tasmota (you have to unsolder the module to reflash it either way, so its not a big deal to just put a different one on). The module pinout and electrical interface are identical.
Its not super hard to manually set up with docker or podman but you have to deal with integrating and updating the add-ons yourself. I ran out of CPU on a pi4 (due to a buggy websocket client in the end) and moved to a small form factor x86_64 server under Rocky. I ran manually using just containers (podman in this case) and it worked fine but integrating and updating the equivalent of add-ons was a lot of manual plumbing work that I don't find much fun anymore.
I switched back to hassos, but under KVM. This for me is the best of both worlds: I get the fully managed/integrated work of Frenck and friends for HA and can still access and manage the machine normally (and use it for other services).
There's nothing remotely realtime about the python code in the core HA, it works well in a reasonbly provisioned VM (4 cores, 8G ram) backed by a good SSD. There is some religion in the community about not using VM's: it is a layer of complexity and I understand why folks on discord don't want to help people with it, but technically it works well for this class of app.
I spent the weekend moving scenes, automations, and appdaemon scripts over to node red. I really like it. Its a really nice setup and so far (after a learning curve on how the included FSM module deals with invalid triggers) is much nicer to work with than the built in stuff and python.
The only bits of friction I ran into are likely just unfamiliarity with the right patterns to use:
- Looking up entity names in fields that are not intended as entities (ie: inject node) needs a separate window open on the HA entities search screen; its especially hard to find select entities but that's more of a naming issue inside HA.
- How on earth do you take a trigger message as input, then just create a whole new message as output (other than writing it as a function node)? The change node has no way to just start with a new message, and the inject node can't be triggered. In a complex pipeline the message kept building up goop and I just wanted to emit a simple message at the end of it.
- A lot of examples in the built in docs show use of top level message properties other than 'payload', and some require it (like Trigger uses the top level 'delay' property), but this pattern of using top level properties isn't well supported in some nodes.
Can you use BLE for presense detection such that your phone is beaconing and when you enter an area an ESP32 (or something like it) picks it up? Or is this really only useful the other way where there's a beacon and some s/w on the phone picks it up?
That's pretty slick, it looks like there's a hassos addon container for NodeRed which will make this super easy to set up. Thanks!
For a couple of years now I’ve been trying to make peace with the scene editor and scenes in general. I’m about to spend hours switching to either automations or back to appdaemon scripts and wanted to see if maybe I just don’t understand the model and there's a better way to use it.
I keep getting burned by unexpected changes to entities and devices and just plain wrong output that appears to only be fixable by removing and re adding devices or entities in specific orders (root cause is #2 below).
Use case is pretty table stakes for HA: I want to operate about 80 'common area' lighting devices in a large house on global events (lights on at sunset, off in the morning for example).
-Bp9
Tldr; Details
I have about 120 distinct lighting devices on several integrations (wled, MQTT, ISY, and zwave) many with dozens of entities; and another 50 devices/600 entities unrelated to lighting. I'm running the hassos image on a VM on a Rocky Linux intel server with plenty of memory and cores (I used a PI 4B with an SSD for a while but it didn't have enough CPU for the heavyweight Python code in HA).
Issue #1: scene editor interference
The scene editor on the client sort of checks out a scene and sets all the devices up to match it in real-time, if you end up with multiple tabs open in the same scene changes get lost overwritten when the web socket disconnects - this is PEBCAK (user error) but it’s really hard in practice to deal with
Issue #2: Conflicting entity state
I have 30 or so WLED devices on the wled integration. These each provide multiple entities that are in conflict with each other per device (preset select vs segment power state for example).
When the scene editor tries to save all this state it writes conflicting state on the multiple entities on the same device. One could say I should disable the dozens of entities on each of the 30 devices but that is hours of work in the clunky ui; I read the code and found where the JSON config files are hidden now, but it’s still painful to work with because “ha core restart” takes a couple of minutes to test each change. I also frequently do want the multiple 'conflicting' entities (manual dashboard control on one, presets on scenes).
There isn’t enough data in the entities to really capture the state and with WLED the entities come and go dynamically (depending on the number of segments defined in a wled preset and where it is in a playlist). In this case I can put the blame on my edge case use of the wled integration and its immature state. This all got a lot better when you were allowed to set entities in scenes instead of whole devices, but it’s a huge amount on manual ui drudge work to go and rework 30 devices, and I’ve tried and not yet succeeded several times due to the next issue…
Issue #3: scene corruption while editing live
There is no way to edit a scene without having it active, and if anything changes while it’s active the changes are written to the scene. This is impractical if you have motion detectors or other automations running while trying to make a large change (or a user is annoyed when a light goes on or off as you edit the scene and flips it back the way they want it before you finish your edit). It also means you can’t edit scenes at night with people in the house.