I have a garage door I operate via a small raspberry pi with a solenoid wired to the normal garage door button. It mimics the action of pressing it. This is really nice for having access to operate the door even from my phone or smartwatch. Recently I realized it was running a very old version of Raspbian, and I wanted to update to a more up to date debian.
This makes for a interesting interaction between the nginx webserver, and getting a python script to access the GPIO ports of the pi. There are levels of security to traverse.
Python packages: gipod 2.2.20
Python script:
import gpiod import cgi form = cgi.FieldStorage() action = form.getvalue('group') print("Content-type: text/html\n\n") print("Status: 200 OK\n\n") with gpiod.Chip("/dev/gpiochip0") as chip: info = chip.get_info() print(f"{info.name} [{info.label}] ({info.num_lines} lines)") import time from gpiod.line import Direction, Value LINE = 16 with gpiod.request_lines( "/dev/gpiochip0", consumer="blink-example", config={ LINE: gpiod.LineSettings( direction=Direction.OUTPUT, output_value=Value.ACTIVE ) }, ) as request: request.set_value(LINE, Value.ACTIVE) time.sleep(1) request.set_value(LINE, Value.INACTIVE) time.sleep(1)
And you may have to make sure that other users (like www-data), can touch the /dev/gpiochip0 device.
sudo chmod a+rw /dev/gpiochip0