https://github.com/clach04/pirest
Yet another Raspberry Pi GPIO REST (like) interface. compatible Trigger http/https server
https://github.com/clach04/pirest
gpio gpio-pins python raspberrypi sbc
Last synced: 17 days ago
JSON representation
Yet another Raspberry Pi GPIO REST (like) interface. compatible Trigger http/https server
- Host: GitHub
- URL: https://github.com/clach04/pirest
- Owner: clach04
- License: apache-2.0
- Created: 2018-10-03T05:25:40.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-05-17T02:33:31.000Z (about 4 years ago)
- Last Synced: 2025-03-12T10:46:09.481Z (about 1 year ago)
- Topics: gpio, gpio-pins, python, raspberrypi, sbc
- Language: Python
- Homepage:
- Size: 30.3 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Pi REST - pirest
Yet another Raspberry Pi GPIO REST (like) interface.
Right now this responds to GETs, so not exactly RESTful.
A GET will result in a (GPIO) side effect!
For usage with https://github.com/mwarning/trigger (and also https://github.com/openlab-aux/sphincter-remote)
Consider these alternatives!:
* for usage with https://github.com/mwarning/trigger, see https://github.com/clach04/shell_locked
* WebIOPi / Cayenne http://webiopi.trouch.com/
* https://github.com/ThisIsQasim/WebGPIO
* https://github.com/projectweekend/Pi-GPIO-Server
## Getting Started
If installing/working with a source checkout issue:
pip install -r requirements.txt
Run:
cp example_config.json config.json
# REMOVE "auth" section from config.json (or retain and then pass in token)
python flask_get.py
Then open a browser to http://localhost:8080/led_17 or issue:
curl http://localhost:8080/led_17
NOTE `http://localhost:8080/led_17` will work but `http://localhost:8080/led_17/` will *not*.
## Sentry support
Optional:
pip3 install --upgrade 'sentry-sdk[flask]==0.13.0'
## https / TLS / SSL support
NOTE this requires pyopenssl which is not installed via the requirements above.
Either install via `pip` or package manager for system, e.g.:
sudo apt-get install python-openssl
sudo apt-get install python3-openssl
or
pip install pyopenssl
Edit json config file and add to the `config` section to add a Flask run setting for `ssl_context`.
Add either `adhoc` for quick and dirty testing or add certificate and key file names.
E.g. Uncomment one of the ssl_context entries:
....
"config": {
"debug": true,
"host": "0.0.0.0",
"port": 8080,
"#ssl_context": "adhoc",
"#ssl_context": ["cert.pem", "key.pem"],
},
....
Example #2 requires files to exist in current directory, generated via something like:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
Which will generate a certificate valid for 1 year.
## pirest service
Systemd service (e.g. for Raspbian).
Based on https://www.raspberrypi.org/documentation/linux/usage/systemd.md
NOTE hard coded `WorkingDirectory=/home/pi/py/pirest` in `pirest.service`.
Install
cd scripts
sudo cp pirest.service /etc/systemd/system/pirest.service
sudo chmod 644 /etc/systemd/system/pirest.service
sudo systemctl enable pirest.service
Usage
sudo systemctl stop pirest.service
sudo systemctl start pirest.service
sudo systemctl restart pirest.service
sudo systemctl status pirest.service # status and recent logs
sudo systemctl status pirest.service -n 100 # show last 100 log entries
journalctl -u pirest.service # show all logs
sudo systemctl status pirest_https.service -n 100
systemctl list-unit-files --state=enabled | grep pirest
NOTE if changing service files, e.g. adding `Environment`, restart config (not just specific service):
sudo systemctl daemon-reload
sudo systemctl restart pirest.service
## Trigger Android app
The sample config file has an entry for a garage that works with https://github.com/mwarning/trigger
and also https://github.com/openlab-aux/sphincter-remote/releases/tag/0.1.2
This includes support for sphincter/sphincterd token support (NOTE for all URLs, not per resource).
## Security token support
There is support for two auth types depending on the URL form used:
* URL Get Parameter - as used by https://github.com/openlab-aux/sphincter-remote `token` parameters. See `example_config.json` for an example. Remove the auth entries to disable auth.
* Authorization Header as used by Home Assistant style Authorization Bearer tokens https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token
curl 'http://localhost:8080/garage?action=open&token=test_token'
curl 'http://localhost:8080/garage?action=open&token=ABCDEFGH'
curl -X GET \
http://localhost:8080/led_17 \
-H 'Authorization: Bearer test_token'
curl -X GET \
http://localhost:8080/led_17 \
-H 'Authorization: Bearer ABCDEFGH'