So I am a serial tinkerer - a previous boss accused me of having a "terminal case of the what-if's". I am also a home automation enthusiast, so naturally when I got my 2021 Momentum 397THR, I looked at the OneControl system and said "Meh - my turn "
So, for some background, here is how the OneControl system works, at a high-level, at least in my rig with the X4 controller. All the devices are connected to each other over a CANbus system - this is a way for devices to talk to each other over 12v connections. In the case of OneControl, it has sepersate power and CANbus connections, and these connections allow the different components to signal to each other. The touch panel is ultimately the "controller" if you will - so when you push the button on the screen, the touch screen interprets the touch as "Oh, you want me to tell this device to do that thing". I tried to insert myself into the CANbus, and interact at the hardware level - this would have been optimal since I would see everything, literally, that everyone was telling each other to do. I could, in theory, intercept messages and send different ones - but I ran into a hurdle - the CANbus protocol they are using is proprietary and does not comply with the RV-C standard (dammit). I quickly figured out that this would not exactly be the optimal path since I would spend a ton of time with no support.
Well, there needs to be a way for the CANnbus system to talk to the internet, or the online OneControl system would not work - there needs to be a hardware-to-software bridge in there somewhere, and that was the next target., As it turn out, the device used to be the bridge between the CANbus network and the rest of the world is a piece of hardware running a read-only instance of OpenHab - an open-source automation platform, and it's API's are available for use on the network - SCORE.
I use a platform called "Home Assistant" - a free, open-source home automation platform that is absolutely incredible. So, starting with a Raspberry Pi 4, I installed Ubuntu, and installed Home Assistant in a docker container. After basic setup, I added a basic 6 port, 5v netwok switch switch on top of the cabinets and tied into the OneControl network with the Pi. I added the "Node-Red" addon, and away we go.
I built a Node-Red flow that connects to the OpenHab device and sync's the state of the devices on the OneContrrol system with a service on the Pi called MQTT. MQTT is sort of like a live database, and using this allowed me to tell Home Assistant what everything in the OneControl system was doing in real time. If you turn on the AC, it autonmatically shows in Home Assistant. Turn on a light, change a tank level, etc. So this allowed me to SEE what what was going on, so the next step was to tell OneControl to do my bidding - and with another Node-Red flow and the openHab API, I was able to send commands to OneControl. This created a two way sync - i do something on Home Assistant, it tells OneControl to do it. If I work on the OneControl panel (ugh) it tells home Assistant. YAY, I am THIS close to getting rid of the OneControl panel!
Now that I have this working, now it is time to start building a way to interact with the system. And here lies an important "limitation" - my wife and family.
For those in the automation hobby, there is a measure of success called "WAF", which stands for "Wife Acceptance Factor" (seriously). This is the measure of how much grief you are going to get if you don't do it right. Well, I have a wife that HATES technology, so everything I do has to be usable with physical switches, or other easy interfaces. Add to the fact that my youngest son has Down Syndrome, and you can see that usability for non-technical people is critical. Well, if you hadn't noticed, there are several switches that are small, and hard to find in the dark. Take the switches in the garage for instance - my son uses the garage as his "room". Look, I am 47 years old, and I can't find that damn switch in the dark. So, it was necessary to add extra control to these dumb switches. I picked up a few Shelly 1 remote relays, and installed them with the switches. Now you can flip the physical switch (WAF +10) OR use the automation system (WAF -10). You can see that it is a wash. I added to it, but didn't make it any easier (yet). How would I make it easier without having to run wiires? AH - Wireless (RF) switches After adding a Sonoff RF bridge, now Home Assistant can see the button press, and says "Ahh, I see that signal, turn on the garage light". BOOM. WAF +25. now I have a large external switch on the wall in the garage that is a touch pad-type, and it toggles the lights, and even we can find it in the dark. I ended up adding the relays to all the switches in the garage, giving me the ability to control them remotely at will.
Hmm, I have an automation system, and now I can control all the lights outside - what can I do with that? A few things, actually. Specifically, I have Home Assistant turn on the porch light at dark, and off at dawn. Simple enough, right?
Now that I have made it easier for my son to get into and out of his room, it dawned on me that he could easily leave his room from the side door in the garage, and I would never know. DOH!
Well, I have this cool RF bridge thing now, what else can I do with it? Well, I picked up a few door contact sensors - now when he opens the door at night, the rear door porch light turns on (safety first) AND the light in the bedroom flashes (after 11pm) to let us know that we have an escape in progress. Damn, that works out pretty well
Things are going pretty well, but it seems that folks forget that the nice new shower heads will fill the tanks FAST - so I need to figure out a way to keep the family from having it back up into the shower. Well, I get the tank levels in the automation system, but how do I let people know, since if they were paying attention they would have noticed it was getting full beforehand? Ahh, if there was only a way to have someone yell at my family without me actually having to be there. Oh wait, they are used to being scolded by Alexa at home, so let's add that at the camper too. Now, whever the tank level changes, it annoucnes it over the Alexa speakers in the RV. Only problem is, there is no speaker in the shower. OK, lets up the annoying-but-critically-important level and send a text message to everyone when the status changes. Cool, now when my family ignores Alexa, I can yell at them too
Having the ability to scold my family remotely and by proxy is a pretty powerful thing, especially for us who grew up with strict parents. How better to annoy them, and anyone else that does not pay attention, than to have Alexa yell at them if they leave the door open too long? Challenge accepted - I built a flow in Node-Red that will pick from 7 different scoldings, such as:
1: "What the hell! Close the door!",
2: "Were you born in a barn? Close the door!",
3: "Close the door dammit, I am not paying to heat the world",
4: "You want to get eaten alive? Close the door, you're letting the bugs in.",
5: "When I was your age, we got a beating for leaving the door open.",
6: "That door isn't going to close itself you know.",
7: "Get back over there and close the door"
Now they can feel Dad's presence, even when I am not there
Anyway, this is the beginning of the overview of the system I have built - this has been quite long but there is a ton more
I started this thread because I have not seen anyone do this with OneControl yet,and was hoping to find others who would be interested in colaborating - sharing ideas, etc. i am workoing on putting this all on Github eventually, if there is enough interest. So if you are interested, please let me know what you would like to see, would like to add, any ideas - more to come soon!
So, for some background, here is how the OneControl system works, at a high-level, at least in my rig with the X4 controller. All the devices are connected to each other over a CANbus system - this is a way for devices to talk to each other over 12v connections. In the case of OneControl, it has sepersate power and CANbus connections, and these connections allow the different components to signal to each other. The touch panel is ultimately the "controller" if you will - so when you push the button on the screen, the touch screen interprets the touch as "Oh, you want me to tell this device to do that thing". I tried to insert myself into the CANbus, and interact at the hardware level - this would have been optimal since I would see everything, literally, that everyone was telling each other to do. I could, in theory, intercept messages and send different ones - but I ran into a hurdle - the CANbus protocol they are using is proprietary and does not comply with the RV-C standard (dammit). I quickly figured out that this would not exactly be the optimal path since I would spend a ton of time with no support.
Well, there needs to be a way for the CANnbus system to talk to the internet, or the online OneControl system would not work - there needs to be a hardware-to-software bridge in there somewhere, and that was the next target., As it turn out, the device used to be the bridge between the CANbus network and the rest of the world is a piece of hardware running a read-only instance of OpenHab - an open-source automation platform, and it's API's are available for use on the network - SCORE.
I use a platform called "Home Assistant" - a free, open-source home automation platform that is absolutely incredible. So, starting with a Raspberry Pi 4, I installed Ubuntu, and installed Home Assistant in a docker container. After basic setup, I added a basic 6 port, 5v netwok switch switch on top of the cabinets and tied into the OneControl network with the Pi. I added the "Node-Red" addon, and away we go.
I built a Node-Red flow that connects to the OpenHab device and sync's the state of the devices on the OneContrrol system with a service on the Pi called MQTT. MQTT is sort of like a live database, and using this allowed me to tell Home Assistant what everything in the OneControl system was doing in real time. If you turn on the AC, it autonmatically shows in Home Assistant. Turn on a light, change a tank level, etc. So this allowed me to SEE what what was going on, so the next step was to tell OneControl to do my bidding - and with another Node-Red flow and the openHab API, I was able to send commands to OneControl. This created a two way sync - i do something on Home Assistant, it tells OneControl to do it. If I work on the OneControl panel (ugh) it tells home Assistant. YAY, I am THIS close to getting rid of the OneControl panel!
Now that I have this working, now it is time to start building a way to interact with the system. And here lies an important "limitation" - my wife and family.
For those in the automation hobby, there is a measure of success called "WAF", which stands for "Wife Acceptance Factor" (seriously). This is the measure of how much grief you are going to get if you don't do it right. Well, I have a wife that HATES technology, so everything I do has to be usable with physical switches, or other easy interfaces. Add to the fact that my youngest son has Down Syndrome, and you can see that usability for non-technical people is critical. Well, if you hadn't noticed, there are several switches that are small, and hard to find in the dark. Take the switches in the garage for instance - my son uses the garage as his "room". Look, I am 47 years old, and I can't find that damn switch in the dark. So, it was necessary to add extra control to these dumb switches. I picked up a few Shelly 1 remote relays, and installed them with the switches. Now you can flip the physical switch (WAF +10) OR use the automation system (WAF -10). You can see that it is a wash. I added to it, but didn't make it any easier (yet). How would I make it easier without having to run wiires? AH - Wireless (RF) switches After adding a Sonoff RF bridge, now Home Assistant can see the button press, and says "Ahh, I see that signal, turn on the garage light". BOOM. WAF +25. now I have a large external switch on the wall in the garage that is a touch pad-type, and it toggles the lights, and even we can find it in the dark. I ended up adding the relays to all the switches in the garage, giving me the ability to control them remotely at will.
Hmm, I have an automation system, and now I can control all the lights outside - what can I do with that? A few things, actually. Specifically, I have Home Assistant turn on the porch light at dark, and off at dawn. Simple enough, right?
Now that I have made it easier for my son to get into and out of his room, it dawned on me that he could easily leave his room from the side door in the garage, and I would never know. DOH!
Well, I have this cool RF bridge thing now, what else can I do with it? Well, I picked up a few door contact sensors - now when he opens the door at night, the rear door porch light turns on (safety first) AND the light in the bedroom flashes (after 11pm) to let us know that we have an escape in progress. Damn, that works out pretty well
Things are going pretty well, but it seems that folks forget that the nice new shower heads will fill the tanks FAST - so I need to figure out a way to keep the family from having it back up into the shower. Well, I get the tank levels in the automation system, but how do I let people know, since if they were paying attention they would have noticed it was getting full beforehand? Ahh, if there was only a way to have someone yell at my family without me actually having to be there. Oh wait, they are used to being scolded by Alexa at home, so let's add that at the camper too. Now, whever the tank level changes, it annoucnes it over the Alexa speakers in the RV. Only problem is, there is no speaker in the shower. OK, lets up the annoying-but-critically-important level and send a text message to everyone when the status changes. Cool, now when my family ignores Alexa, I can yell at them too
Having the ability to scold my family remotely and by proxy is a pretty powerful thing, especially for us who grew up with strict parents. How better to annoy them, and anyone else that does not pay attention, than to have Alexa yell at them if they leave the door open too long? Challenge accepted - I built a flow in Node-Red that will pick from 7 different scoldings, such as:
1: "What the hell! Close the door!",
2: "Were you born in a barn? Close the door!",
3: "Close the door dammit, I am not paying to heat the world",
4: "You want to get eaten alive? Close the door, you're letting the bugs in.",
5: "When I was your age, we got a beating for leaving the door open.",
6: "That door isn't going to close itself you know.",
7: "Get back over there and close the door"
Now they can feel Dad's presence, even when I am not there
Anyway, this is the beginning of the overview of the system I have built - this has been quite long but there is a ton more
I started this thread because I have not seen anyone do this with OneControl yet,and was hoping to find others who would be interested in colaborating - sharing ideas, etc. i am workoing on putting this all on Github eventually, if there is enough interest. So if you are interested, please let me know what you would like to see, would like to add, any ideas - more to come soon!
Comment