Automating my gate door via a smart relay
arslan.io
arslan.io
I wanted to give my partner (and houseguests) the ability to come and go as they pleased without having to give them a building key (I only had one spare key provided by my landlord, and it was expensive to replace if lost). I bought a relay and grabbed an old Raspberry Pi, hooked the relay to the Pi's GPIO pins, and opened up the intercom phone and found the wires that activated the door unlock. Wrote a little HTTP server in python that would enable the GPIO pins for 10 seconds to unlock the door, and wired that up to my home automation system (openHAB). I got a Twilio phone number, and set it up so it would respond to particular PIN codes from specific phone numbers. When I was hosting someone for a weekend, I'd generate a random 8-digit PIN code and add that and their phone number to a config file on the Pi.
At the time I hadn't realized there were smart relays; otherwise this maybe would have required less work. This was 6 years or so ago, though, so maybe they weren't really a thing back then.
Why, or why not?
Or, perhaps absurdly: Would it have been different if they'd hired someone to (at least in part) hang out and push the button on command, instead?
No matter what, the main gate still keeps out random people who aren't sophisticated in their attack, which is all it ever did in the first place, so there's really not much going on here.
I agree that bad actors are the worst concern, since bypassing a switch with a relay on a low-voltage circuit is about as non-invasive as wiring mods can ever get.
So. Assuming that there aren't purely-technical failure modes that can results in an improperly-closed relay, we can ask: Does having per-user codes and a wired-in relay result in a worse security scenario for the building than lending the [singular] spare key to a friend does?
Sure, it's easy enough to give someone else instructions and a code, while it can be hard to copy [some] keys.
But it's also easy to disable a code when that visitor has left or is no longer welcome (and thus also disable all copies of that code), whereas it is hard to disable a copy of a key.
And OP went a step further than mere codes by also validating inbound phone numbers, as a form of 2FA. This second factor is also possible to duplicate by a bad actor, but we're well into the realm of requiring some sophistication (or brazen theft) for that to happen.
(All said, based on the description I think they did pretty good with their hack.)
The only issue was that it took awhile for the landlord to change the phone number for our unit to ours, and similarly when we moved out - I kept getting phone calls for that door for months.
They mostly worry about the guy two doors down who thought Breaking Bad looked really cool and just bought a chemistry book.
Do you have any of your work documented/published anywhere?
I think the Nuki [1] exists for this purpose by the way, I stumbled upon it when trying to work out how I'd do what you seem to have done!
1. These gate systems usually have dry contact outputs as well, and you can get the gate motor’s idea as to whether the gate is open. You’ll need a smart relay with inputs :)
2. Home Assistant’s “cover” entities are a bit silly in that they don’t let you open a cover that is already 100% open. If you have a gate with an automatic close timer, you might want to send the open command even when it’s open to delay closing. You can fudge this by reporting the cover 99% open when it’s open instead of 100% open.
Recently added two cheap outdoor cameras from Aliexpress with HLS streaming capabilities (and PoE) and wrote a simple iOS app that offers two different views (inside and outside gate), with a simple toggle button to open/close the gate. Backend hosted on a cheap $8 per month OVH instance with secure Tailscale access to the Rpi at home. This way, I can monitor my gate remotely from anywhere and open/close as required.
I feel I'd want the motor controls in a more secured box if I was the type of person who needed one of these gates.
These gates are like having a garage door, they are not meant to be ultra high security. Most of the models I know of in the US use a key and lock to open the box but again, not really meant to be high security.
You can check state persistence by cutting the gate's power during operation. When the power comes back on, your next button press will trigger the next operation in order, not the previous one (if you cut the power during opening, the next button press closes it and viceversa).
https://www.seco-larm.com/product/sr-1212-c7alq
And
Such an interface cannot get any more exposed than that. There's no reason to throw a stew of TLAs at the problem.
(I have a strong suspicion that nobody responding here actually -- you know -- looked at this problem as it actually exists before deciding that it somehow cannot be resolved.)
You could add a current transformer around the motor conductors to handle the ‘is_moving?’ case. If there’s measurable current flowing through the motor leads, the motor is turning. That’s how you determine the on/off status of a fan or pump motor in a building automation system.
Magnetic contacts or end switches on either end of the gate could handle the ‘open’ and ‘closed’ cases. Magnetic contacts are widely used in commercial doors for access control, and end switches are used for air damper open/closed status in building automation systems, to give a couple examples.
Not sure about the ‘blocked’ case, that would depend on what the gate motor controller does when the gate is blocked. Some kind of sensor that uses the photoelectric effect, I would imagine.
Of course, the trend in consumer product interface is either nothing or a full web server with a "cloud" connection and an app. With ads.
I wonder if a more "robust" way to handle this would be a custom microcontroller on the receiving end that receives a single Zigbee signal and implements the 200ms delay internally.
There are other products I've used (https://www.amazon.com/MultiRelay-ZEN16-Sprinklers-Fireplace...) which don't have that issue because they handle the pulse logic internally, you set a z-wave option which says "pulse output 1 for 200ms" and then you call a trigger which says "pulse output 1" vs "output 1 on, wait 200ms, output 1 off"
Using that for some years on my garage door opener to make my "smart" garage door smart without paying them $20/month or whatever the stupid fee was.