Build 24343 has fully HTTP actions, so cool things could be created (see docs). I've recently changed a couple of cams because better definition and I've found tha Reolink has a couple of cams that have spotlights. While the spotlights are driven by motion (so the cam could record in color), I wanted to drive them directly, so in case of any "security" event, like alarm on, door open, etc, I could use the lights to have a better video and make - you know - light.
So, if you want to use HTTP actions in VirtualController, just go to config, entities under your VirtualEntityController section in reactor.yaml, and add this:
- id: cams_retro_spotlights name: "Retro Cam - Spotlights" template: Binary Switch # update the status at interval http_request: interval: 900 # 15m url: "http://192.168.1.31/cgi-bin/api.cgi?user=foo&password=foo" method: "POST" force_json: true headers: "Content-Type": "application/json" "Accept": "application/json" body: '[{"cmd": "GetWhiteLed", "action": 0 , "param": { "channel": 0 }}]' capabilities: power_switch: attributes: state: expr: "isnull( response ) ? null : response[0]?.value?.WhiteLed?.state == 1" default: false actions: "on": http_request: url: "http://192.168.1.31/cgi-bin/api.cgi?user=foo&password=foo" method: "POST" force_json: true headers: "Content-Type": "application/json" "Accept": "application/json" body: '[{"cmd": "SetWhiteLed", "param": { "WhiteLed": {"bright" : 100, "channel": 0, "mode": 1, "state": 1}}}]' target: state expr: "isnull( response ) ? null: response[0]?.value?.rspCode == '200'" "off": http_request: url: "http://192.168.1.31/cgi-bin/api.cgi?user=foo&password=foo" method: "POST" force_json: true headers: "Content-Type": "application/json" "Accept": "application/json" body: '[{"cmd": "SetWhiteLed", "param": { "WhiteLed": {"bright" : 100, "channel": 0, "mode": 1, "state": 0}}}]' target: state expr: "isnull( response ) ? null : response[0]?.value?.rspCode == '200' ? false : null"Reolink has API where you have to post a JSON and the response will give you a JSON (in theory). It's not really JSON, so force_json: true will do the trick for you. I'm lefting this as an example of cool things you could do with the new capabilites added/documented in 24343. HTH.
I've switched to a virtual entity with both power_switch and string_sensor capabilities to represent the current holiday.
The power switch is used to indicate if it's a public holiday (so, no school/work), while the string sensor is a string with the actual holiday (Easter, Christmas, Halloween, etc - we don't have thanksgiving), mostly to drive lights.
I build it with some static dates (mostly birthdays/anniversaries) and then the dynamics ones are taken from webcal.guru. My lights/scenes are linked to events this way and it's easier to manage it in the long run: just a bunch of group action in the reaction driving the lights. This part is outside Reactor for me (because, legacy), but it's not difficult to completly drive it off a virtual sensor or a custom controller.
I don't know how people are doing this, but I'm lefting a note for the ones looking for a working solution.
So, it was time for me to move from Vera to something modern. It served me well, but I have new devices I want to add and old that I want to fully use. I have 3 weeks off in August, so plenty of times to tweak things.
Long story short, I moved and turned off my two Veras (one prod, one dev).
Hardware:
Zwave.me controller, updated to FW 5.39, SDK 6.28.1 (it is necessary, since my Veras have the latest FW available). I opted for a 500 controller because of all the drama with 700/800 and the need to stay on something stable.I have 60 Zwave devices, so starting from scratch was a big no for me.
I started from this famous guide, after taking a backup from the Vera Prod to the Vera Dev:
Zway plugin for openLuup . Contribute to rafale77/Z-Way development by creating an account on GitHub.
But it was not working. So, the route I went is:
Go the Vera UI and go under Settings/Z-wave settings, take a screenshot (HouseId in particular). take a backup from the prod system extract the file /etc/cmh/user_data.json.lzo from the backup move the file to the /tmp directory of your dev system execute pluto-lzo d /tmp/user_data.json.lzo /tmp/user_data.json open and edit the file, looking for a port node with something like /dev.. and put /dev/ttyACM0 inside. save the file. run pluto-lzo c /tmp/user_data.json /tmp/user_data.json.lzo copy the .lzo file to the backup, in the same position insert the Zwave key into the USB of your dev Vera reboot the dev Vera wait a lot for it to finish ⚠️ it will probably say that it cannot start ZWave, don't worry Go the Vera UI and go under Settings/Z-wave settings, you should see the old HouseId. Anyway, double check with the screenshot you took previously: if it matches, you've moved your Zwave Network to the new controller! 🎉Shutdown the Veras, take the USB Key with your ZWave network and move it to ZwaveJS!
I've installed it via Docker, very easy. Go for ZwaveJS UI, so you got the UI as well.
Interview the nodes, have patience. Some battery nodes will need wake-ups, others will complete automatically. I had to re-pair a couple of devices because of incorrect pairing with Vera (security and non-security mixed together). In this case, pro tip: reset the device, and then use the replace function from ZWave JS, to have the same node id.
Now, if you're already running under Reactor, you'll need to rewrite all your logic. I asked ChatGPT to write me a Powershell script to get the device from the Veras and build the new naming convention. The logic is that AltId in Vera is in fact the ZWave Node ID, and on Reactor you'll get device like zwavejs>nodeid-endpoint (ie: 95-0, 95-1, etc). So, I built a script that replaced all the occurrences from the storage of Reactor (did I mentioned to do a lot of backups?) and set the name via ZwaveJS MQTT apis. Then, I build an Excel file (thanks ChatGPT!) and renamed all the endpoints in Reactor (manually, no APIs to do so). It took me about an hour.
Now, no more trip/untrip lost along the radios, and a blazing fast ZWave network to enjoy.
Since a couple of devices are recognized in a different way, I had to re-write a couple of rules (and wait a couple of fix here and there by @toggledbits for devices not properly recognized, thanks!), but I was OK in a couple of days, and ready to run by the first afternoon, so I maintained an high WAF.
Now, I could experiment the joy of SmartStart and proprietary commands. 🎉
Thanks to the people that moved before me, inspired me and to @toggledbits for the incredible platform that has built in the latest years! Feel free to ask question if you need help.
If you’re like me and still running HABridge to control your devices locally via Alexa, you might need to tweak your endpoints to call Reactor via HTTP. Here’s the best way to do it, IMO:
Insert the Reactor Canonical ID (e.g., zwavejs>71-1) into the MapID field, but make sure it’s URL-encoded like this: zwavejs%3E71-1.
Then, configure these endpoints as needed:
On: http://[ReactorIP]:8111/api/v1/entity/${device.mapId}/perform/power_switch.on Off: http://[ReactorIP]:8111/api/v1/entity/${device.mapId}/perform/power_switch.off Dim: For lights: http://[ReactorIP]:8111/api/v1/entity/${device.mapId}/perform/dimming.set?level=${intensity.decimal_percent} For roller shutters: http://[ReactorIP]:8111/api/v1/entity/${device.mapId}/perform/position.set?value=${intensity.decimal_percent} Color: http://[ReactorIP]:8111/api/v1/entity/${device.mapId}/perform/rgb_color.set_rgb?r=${color.r}&g=${color.g}&b=${color.b}Just replace [ReactorIP] with your actual IP address. By using these placeholders, you can standardize your endpoints across all devices, making maintenance easier.
This setup works with any device mapped under MSR, regardless of the controller (ZWaveJS, Vera, HASS, OpenSprinkler, virtual, MQTT, DynamicEntities, etc.). If you need different calls, just go to the entities, get the action and parameters, and adjust accordingly. Enjoy super fast access to your devices via Alexa!
If you're migrating from Vera, the endpoints are (URL-encoded) in a file called device.db, in JSON format, under your config. You'd write a script to align the new endpoints to the new one, if you prefer to do it automatically. YMMV.
I’m moving a lot of my home automation Raspberry Pi’s to Proxmox virtualisation and really enjoying it.
I would like to install Reactor that way too. Having researched this forum I’m surprised more people haven’t ventured into this. Although I use HomeAssistant in Proxmox I don’t want to use the HAOS path addin one user has tried as it seems to be unsupported now.
What would be the best way to install Reactor under Proxmox? As a Linux VM (flavour?) with manual install or as a Docker install or even following the Portainer write up with Docker install underneath? Proxmox tend to recommend you away from Docker where possible.
Keeping Reactor upto date easily would be a big consideration too.
Thanks for any recommendations and anyone running Reactor within Proxmox already ?
There’s a growing number of helper scripts for Proxmox that one click install home automation favourites as a prebuilt Linux container (LXC) . It would be nice to get Reactor listed and installed this way too…under the automation category
Hi guys,
I have started searching for some information about the microcontrollers/controllers with which I can develop my own controller and the SMART-house. It is needed for my research work. I am new to this, and it is hard for me to find the necessary information.
I have found that such controllers as Arduino, Raspberry PI, ESP32, etc can be used.
However, how can I find the model of the controller which can suit my requirements? They are the following:
2-stage building with a garage (so it is +-400 sq.m.) with some number of SMART devices that are responsible for security (cameras, fire alarm, etc), temperature control, radiators, leakage control, opening/closing control, etc.
I am interested in the hardware area at first.
Any advices, links to the resources, researches, and articles with a similar topic will be really appreciated.
PS: sorry for my not clear English (just in case)
Thank you in advance.
I know this Forum has never focused much on SmartThings or Hubitat, thus not surprisingly I find virtually nothing here concerning the Groovy programming language or creating drivers/apps for those platforms.
I'm curious: Is there any interest at all for co-authoring a "Definitive Guide to Coding Drivers & Apps for Hubitat" among our motley crew?
Hello guys. I'm currently building my own home and i want it to be kind of high tech and cool but i have actually never owned a smart device other than a smartphone and an old smart TV so i don't even know what exactly am i looking for. I will explain my idea and i am looking forward to somebody shining some light.
Sooo - i was thinking about getting a WiFi controlled AC, TV, Washing machine, Dryer and smart switches for the lights. I suppose i need some kind of a assistant that connects to the wifi and can control all of these. Also i want an audio system - for the TV in the living room aaaand i also want to have 2 speakers in the bathroom which i have no idea where i would connect. I guees i need some kind of a receiver and amplifier for them to work correctly. But i also want that reciever to be hidden somewhere so it ahould be small and it also should be able to connect to the wifi i guess.
So wgat exactly do i need so far. Would any wifi device connect to any assistant? Or am i lookng for particullar stuff... Will i be able for example to turn on my AC from outside the household for example when im at work? And can i also connect an alarm system of some type?
Hello everyone, I am new here and also the conversion to smart home is new territory for me.
I have a problem with an LED panel. This is coupled with a motion detector in my hallway.
As soon as you enter the room it lights up, so far so good. However, it always lights up in a bright purple, even though my setting calls for gold.
Now I select the lamp via the Hue app and drag my finger across the color palette, the panel changes to those colors and I have to keep selecting the preset hue.
Can someone explain to me how I can keep this setting permanently without having to tediously reset?
With kind regards
Loorrd
Having spent years as a professional portrait photographer, I came by many tricks of the trade involving readily available materials. One such trick is known as an "Oil Spot Photometer", which can help you equalize the brightness of two or more light sources.
For simple setup instructions, visit:
https://www.exploratorium.edu/snacks/oil-spot-photometer
The implications for Home Automation, of course, is knowing the preset dim levels needed to balance a room's lighting, without guessing. Just bear in mind that dimmer levels and bulb output are rarely linear, so you may have to take photometer readings at various brightness levels to create a lookup table (for use in MSR, etc.).
I have been wondering what to post here so bear with me as I am just having a bit of fun given the fact that I haven't had much to fix, improve on or optimize for my home automation setup, I just added a scene today to make a TTS announcement to remind me to plug in my car when its level is low. Not really a necessity but since I have not been commuting anymore for a few months, I caught myself a few times wishing I had recharged my car the day before.
This is what it looks like on openLuup:
Screen Shot 2021-03-08 at 3.08.01 PM.png
I reused a SiteSensor device which was polling my HomeAssistant integration for its lock status (Yes I can get openLuup to lock and unlock my car remotely) and made Home Assistant send the battery status.
To do this, I added a rest service command on home assistant:
rest_command: bmw_bat: url: "http://openLuupIP:3480/data_request?id=variableset&DeviceNum=26&serviceId=urn:micasaverde-com:serviceId:HaDevice1&Variable=BatteryLevel&Value={{states('sensor.i3_charging_level_hv')}}"Note the device number which will need to be the device you want to send the battery status to and the home assistant entity which you will have to replace with the one you want. Then I created an automation on home assistant to trigger this service whenever the entity state changes.
Screen Shot 2021-03-08 at 3.20.36 PM.png
Screen Shot 2021-03-08 at 3.20.46 PM.png
After that I just simply created a scene on openLuup to watch the battery level variable and do whatever I need to do with it.
This is an example of syncing entities in home-assistant to openLuup. I have a number of other similar integrations...
Car integration
-
@akbooer there's an BMW integration for Home Assistant (that I've ported it to my own C# framework just for fun). I've a POC getting the car state too, but I'm still on diesel, so it's not really useful to me, since I'd only get door status, mileage and similar things.
the APIs are unofficial and are blocked when the car is moving but they are precise enough. you could also honk, turn on the lights, etc. since it's a reverse engineer of the app, you'd do anything available in the app.
EDIT: my BMW has a 4g sim inside, so it's always connected. I think ConnectedDrive is always available for electric cars.
-
yep, @therealdb is correct, this is simply using the bmw connected integration on home assistant. I just wanted to give an example of how to set up an uplink connection from a home assistant entity to openLuup. I am running about 30 devices this way and another dozen using the sitesensor plugin.
Even a gas/petrol/diesel car can get you the fuel level, it's just a different entity/API endpoint. I use mine to check that my windows are rolled up, turn on the heat at certain time (preheat the cabin while it is plugged) when I was commuting and the weather was cold (all done with openLuup scenes). In the example above, I used SitenSensor "arm/disarm" status to trigger a scene to lock/unlock the car and SiteSensor readsback the status and it "trips/untrips" according to its alarm status.
-
@rafale77 said in Car integration:
using the bmw connected integration on home assistant.
There's a file called
hass_states.json
inlogs
on 21067 (the first part may be different if you used a different controller ID in MSR). Would you mind sending me that file so I can examine the domain and services associated with the car integration?Edit: actually two files:
hass_states.json
andhass_services.json
-
Will do! I will update this post in a bit.
See the two json files you requested attached.
Note: After updating to 21067, I am getting new errors on both the hass websocket connection and the openLuup connection as shown below:
-
@rafale77 said in Car integration:
Even a gas/petrol/diesel car can get you the fuel level, it's just a different entity/API endpoint. I use mine to check that my windows are rolled up, turn on the heat at certain time (preheat the cabin while it is plugged) when I was commuting and the weather was cold (all done with openLuup scenes). In the example above, I used SitenSensor "arm/disarm" status to trigger a scene to lock/unlock the car and SiteSensor readsback the status and it "trips/untrips" according to its alarm status.
I'll grab a couple of your ideas for the future, since we're opening an office near me.
-
@rafale77 said in Car integration:
Note: After updating to 21067, I am getting new errors on both the hass websocket connection and the openLuup connection as shown below:
Cover/position messages are just my midwork at getting the cover domain working on Hass when I don't own any cover devices myself. File attached should quiet those messages.
The message on the openLuup side is pretty dire. It suggests that either the user_data or status response
devices
astates
subkey is not an array, and that is unexpected. What version of openLuup are you on? -
No need, I think I know what it is. Since openLuup is implemented in Lua, unless you take special action, the JSON library doesn't know whether to convert an empty table to array form
[]
or dictionary form{}
, so it defaults to the latter. So I suspect there is some device of yours that has no states, so thestates
array is empty, and openLuup's JSON library is emitting{}
for it instead of[]
, and the more literal parser in node/JS, which of course does distinguish between empty array and empty dictionary, is seeing an unexpected data type and therefore doesn't have a member method it wants.I can code around it, but I think @akbooer should also guard for empty tables in his code so that the response format stays consistent (with both itself and Vera Luup). I had to do a bunch of this my Lua plugins that use JSON, too.
-
@toggledbits said in Car integration:
I think @akbooer should also guard for empty tables in his code
Happy to help. You’re suggesting that any empty table should be reported as an empty array?
-
@akbooer said in Car integration:
You’re suggesting that any empty table should be reported as an empty array?
Not exactly. I'm saying it should be emitted consistent with its usage. In this case, the
states
key should always be an array. So it should be an array whether it is empty or not. In another place (no example comes to mind) where the expected data type would be an object, then it should be an object whether it contains keys or not. -
Actually, it's Lua's fault, because it doesn't give JSON any hint to know if any empty table is actually an empty array or an empty object. But it has significant meaning to clients using your JSON output. If
states
is meant to be an array, then it should always be an array and formatted as one in the JSON output. That's the definition of data returned by Luup. If the data types are not stable in an API, that makes it pretty hard to make sure code that uses the API can handle the responses, as in this case. -
Was playing with the notification service to send messages to the car from openLuup. Not very useful on my car since it shows up in the mail box and not on the dashboard forcing me to navigate to go look at the message... oh well. It's there now if I ever want to do something with it. I will make do with honking for now.
-
Subaru owners with an active StarLink subscription may wish to explore https://pypi.org/project/subarulink/