forked from platypush/platypush
Compare commits
293 commits
Author | SHA1 | Date | |
---|---|---|---|
b8215d2736 | |||
a5db599268 | |||
b88983f055 | |||
85f583a0ad | |||
fed7c2c6ff | |||
1d78c3e753 | |||
00d47731c5 | |||
ae226a5b01 | |||
fef7aff245 | |||
82ab7face2 | |||
3ed10092ae | |||
4bab9d2607 | |||
a0575ed6de | |||
3d74f0a11f | |||
09baceab4b | |||
c2a3f2f4f3 | |||
36dd645209 | |||
61cda60751 | |||
7c610adc84 | |||
a9ebb4805a | |||
1b405de0d5 | |||
e1aa214bad | |||
41acf4b253 | |||
c77746e278 | |||
4682fb4210 | |||
0143dac216 | |||
a90aa2cb2e | |||
1ea53a6f50 | |||
e77d6a4ad4 | |||
61c96612bc | |||
6c6e68b512 | |||
a286cf5000 | |||
c5b12403d0 | |||
96b2ad148c | |||
67413c02cd | |||
db45d7ecbf | |||
a675fe6a92 | |||
c3fa3315f5 | |||
e08947a3b7 | |||
6d63d2fc74 | |||
540a7d469e | |||
b11a0e8bbb | |||
f4360dc0e0 | |||
ba68341d28 | |||
4308024eef | |||
c417d2f692 | |||
e479ca7e3e | |||
0e3cabc5f6 | |||
d890b6cbe8 | |||
912168626c | |||
513195b396 | |||
48ec6ef68b | |||
e4eb4cd7dc | |||
550f026e13 | |||
c89c712928 | |||
05908e1a77 | |||
c04bc8d2bc | |||
2797ffbe53 | |||
770a14daae | |||
dba03d3e33 | |||
f4672ce5c3 | |||
9e2b4a0043 | |||
4e3c6a5c16 | |||
e17e65a703 | |||
3b1ab78268 | |||
4043878afd | |||
2e7f3d8868 | |||
dc7ba881f1 | |||
4e1e6da67e | |||
354f3906f9 | |||
7ab02e705d | |||
99de5318ff | |||
b3bab9b1d8 | |||
7e4877c793 | |||
55602cc282 | |||
d2053a012a | |||
|
3d5fc9a10b | ||
|
be4dd48d76 | ||
|
bd21779a17 | ||
|
58afc1090c | ||
cbe2e7bbfe | |||
c17d0080b5 | |||
7c87238fec | |||
55671f4aff | |||
c32142c8b5 | |||
32be4df11c | |||
|
c7927a3d2f | ||
3edb8352b4 | |||
cc29136db7 | |||
719bd4fddf | |||
cbf8ba7fdd | |||
|
06168d4ebd | ||
c6c7128099 | |||
1a316bc3a6 | |||
5966566d54 | |||
8d26c8634d | |||
1da17fca35 | |||
35cb72f5aa | |||
115bed7d8b | |||
3d22d6b082 | |||
5971ec32c8 | |||
7e31ac6ed8 | |||
c9f435a6cb | |||
cb7021152f | |||
d3f4865395 | |||
f080478385 | |||
b857ce60a7 | |||
af483cade3 | |||
8be515c17b | |||
239025290d | |||
2e2169544d | |||
7a0e39111d | |||
2cd7ae9513 | |||
55958c1b57 | |||
e9454b0c0f | |||
ba23eb7280 | |||
41d0725ebf | |||
820a1c8184 | |||
|
5929602c15 | ||
fee5fc4ae0 | |||
371fd7e46b | |||
da73a5f1b9 | |||
a80adc996f | |||
12887b61fe | |||
ca25607262 | |||
1b30bfc454 | |||
486801653a | |||
f7c594cc3f | |||
b1491b8048 | |||
96a2d8bef0 | |||
e261dcc27a | |||
d0790aaba3 | |||
bb28617cc9 | |||
e1e6da9307 | |||
f6ce0d7200 | |||
ed5f7070a2 | |||
5ee47902f4 | |||
128b45686a | |||
3d192a9733 | |||
08acaad218 | |||
385914c04a | |||
|
b72c9a19ae | ||
2e33d3b3c5 | |||
c5395cc9e5 | |||
88846aa8f8 | |||
ffd23cf04d | |||
34e1e673e8 | |||
c3934e2a7e | |||
b3b2a7a805 | |||
747e7f3e5d | |||
fdf6d8fb4e | |||
7c9e9d284d | |||
19a1e9c626 | |||
c0039c3f87 | |||
0d0797a465 | |||
0b293ff214 | |||
75ad537155 | |||
|
0324eb9f6b | ||
e3f67766a3 | |||
1933ec709f | |||
71cb73cf63 | |||
94bb3e0541 | |||
29a7eff15a | |||
d13e4fc271 | |||
6e0c249b7e | |||
2944a77f93 | |||
|
5b666814d5 | ||
|
21ad599a08 | ||
782c198311 | |||
08b3cddb7b | |||
530245733c | |||
|
1662873e54 | ||
42ee149b95 | |||
1038090ffd | |||
786286eac6 | |||
1914322fda | |||
e4eb12fa6d | |||
c534adf31f | |||
0c423e3809 | |||
6656bb4ce5 | |||
f3be4a50d8 | |||
a6b552504e | |||
833e1c49be | |||
a46ce79f0a | |||
e9f6d9a8bc | |||
3e4b91cd6c | |||
e242dc53bf | |||
ee0b6d237a | |||
9ba2c18595 | |||
0a3fd4065a | |||
e94d338de5 | |||
081da3eb84 | |||
1569f940c6 | |||
6df9cbcf3c | |||
e98aa63110 | |||
fa0f4925ed | |||
fa708663e1 | |||
20fc3d91fc | |||
2560bfa03f | |||
46d8d575ba | |||
f478e1ff40 | |||
|
6023fd3db3 | ||
|
f6057274a0 | ||
|
2d9dff7d4c | ||
f74ca28382 | |||
e615891bf3 | |||
02b5ec1d38 | |||
2914a74b75 | |||
1e1bf46f32 | |||
848b736d6e | |||
f9f9c38a8b | |||
518d9f20c6 | |||
40903393df | |||
d5cddc23fa | |||
ea3b49a17f | |||
adb9672989 | |||
b432488876 | |||
65d4740cd7 | |||
6ba3128ac4 | |||
82fe4d93f3 | |||
d7b273434b | |||
|
5491682543 | ||
3ef602cc0b | |||
195ae5c488 | |||
de25719563 | |||
e86c61a44d | |||
acdc636b1f | |||
6db070db1c | |||
952a2a9379 | |||
49676fcc7f | |||
6c0a8bf259 | |||
1906876969 | |||
f9ce03919b | |||
c3681e7b2a | |||
144700b693 | |||
4a5bb766af | |||
cb4cfa40d8 | |||
8c339d0d55 | |||
1962a8c4de | |||
c664796733 | |||
64c402b1c0 | |||
a5f1dc2638 | |||
0e27c8f68a | |||
31ef9515f8 | |||
d844890ab2 | |||
ee35ea995b | |||
04a5480d19 | |||
e3f0219554 | |||
fa17011b24 | |||
c12c83b386 | |||
229d05a40f | |||
c4bd854be2 | |||
f856ae69e1 | |||
68831e9e81 | |||
d18245b15f | |||
b961ef0424 | |||
cb0638fe19 | |||
98cb216ba7 | |||
f147c44a8a | |||
f720e7fc7f | |||
10e11d66dc | |||
a1cd25fe5a | |||
1a314ffd6b | |||
85af031c26 | |||
7b8938cb12 | |||
8c31905534 | |||
a2f5755496 | |||
fa11b13638 | |||
2b5698bdfe | |||
3bfc5b83ef | |||
ac0dd95bcc | |||
87b70716c1 | |||
a8064d2add | |||
d086da64f6 | |||
90ec108580 | |||
286bab7489 | |||
0f37102ce4 | |||
8e2d4d0bce | |||
550fd3abe9 | |||
2fc7327788 | |||
371dd6da0a | |||
47228f2432 | |||
1483d602f8 | |||
00e744e93e | |||
35c4a30a63 | |||
f250681a78 | |||
db8ea33b68 | |||
03631bcebc | |||
ade3a7c2cf | |||
1f6c7aae60 | |||
a6c7d64511 | |||
af7977bcf7 | |||
0762004838 |
1872 changed files with 30787 additions and 29320 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -19,3 +19,6 @@ platypush/requests
|
||||||
/http-client.env.json
|
/http-client.env.json
|
||||||
/platypush/backend/http/static/css/dist
|
/platypush/backend/http/static/css/dist
|
||||||
/tests/etc/dashboards
|
/tests/etc/dashboards
|
||||||
|
.coverage
|
||||||
|
coverage.xml
|
||||||
|
Session.vim
|
||||||
|
|
72
.gitlab-ci.yml
Normal file
72
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
sync-to-github:
|
||||||
|
stage: build
|
||||||
|
script:
|
||||||
|
- echo "Synchronizing repo state to Github"
|
||||||
|
- export REPO_DIR="$(mktemp -d /tmp/platypush-XXXXX)"
|
||||||
|
- git clone git@git.platypush.tech:platypush/platypush.git "$REPO_DIR"
|
||||||
|
- cd "$REPO_DIR"
|
||||||
|
- git remote add github git@github.com:/BlackLight/platypush.git
|
||||||
|
- git checkout $CI_COMMIT_BRANCH
|
||||||
|
- git pull
|
||||||
|
- git push --mirror -v github
|
||||||
|
|
||||||
|
run-tests:
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- ./.gitlab/run_ci_tests.sh
|
||||||
|
|
||||||
|
rebuild-docs:
|
||||||
|
stage: deploy
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
script:
|
||||||
|
- ./.gitlab/rebuild_docs.sh
|
||||||
|
|
||||||
|
update-aur-packages:
|
||||||
|
stage: deploy
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
- tags
|
||||||
|
script:
|
||||||
|
- echo "Updating AUR packages"
|
||||||
|
- export REPO_DIR="$(mktemp -d /tmp/platypush-distutils-XXXXX)"
|
||||||
|
- git clone git@fabiomanganiello.com:/home/git/platypush-distutils.git "$REPO_DIR"
|
||||||
|
- cd "$REPO_DIR"
|
||||||
|
- git submodule init
|
||||||
|
- git submodule update
|
||||||
|
- cd distro/arch/git
|
||||||
|
- git checkout master
|
||||||
|
- git pull --rebase
|
||||||
|
- cd ../../../
|
||||||
|
- cd distro/arch/stable
|
||||||
|
- git checkout master
|
||||||
|
- git pull --rebase
|
||||||
|
- cd ../../../
|
||||||
|
- ./update.sh
|
||||||
|
- cd distro/arch/git
|
||||||
|
- changes="$(git status --porcelain --untracked-files=no)"
|
||||||
|
- "[[ -n \"$changes\" ]] && git commit -a -m '[Automatic] Package updated' && git push || echo 'No changes'"
|
||||||
|
- cd ../../../
|
||||||
|
- cd distro/arch/stable
|
||||||
|
- changes="$(git status --porcelain --untracked-files=no)"
|
||||||
|
- "[[ -n \"$changes\" ]] && git commit -a -m '[Automatic] Package updated' && git push || echo 'No changes'"
|
||||||
|
|
||||||
|
upload-pip-package:
|
||||||
|
stage: deploy
|
||||||
|
only:
|
||||||
|
- tags
|
||||||
|
script:
|
||||||
|
# Update the CI/CD configuration
|
||||||
|
- cd ~/platypush-ci-cd
|
||||||
|
- git pull
|
||||||
|
- cd -
|
||||||
|
# Build the package
|
||||||
|
- rm -rf build dist *.egg-info
|
||||||
|
- export VERSION=$(grep -e '^\s*__version__\s*=' platypush/__init__.py | sed -r -e 's/^\s*__version__\s*=\s*.(.+?).\s*$/\1/')
|
||||||
|
- source ~/.credentials/pypi.env
|
||||||
|
- python setup.py sdist bdist_wheel
|
||||||
|
# Upload to PyPI
|
||||||
|
- twine upload --repository platypush ./dist/platypush-${VERSION}.tar.gz
|
||||||
|
# Upload to the local package repository
|
||||||
|
- TWINE_USERNAME=$LOCAL_TWINE_USERNAME TWINE_PASSWORD=$LOCAL_TWINE_PASSWORD twine upload --repository-url https://git.platypush.tech/api/v4/projects/3/packages/pypi dist/platypush-${VERSION}.tar.gz
|
||||||
|
|
33
.gitlab/rebuild_docs.sh
Executable file
33
.gitlab/rebuild_docs.sh
Executable file
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
LOGFILE="./docs.log"
|
||||||
|
STATUS_IMG_PATH="./docs-status.svg"
|
||||||
|
|
||||||
|
build_docs() {
|
||||||
|
cd ./docs || exit 1
|
||||||
|
make html 2>&1 | tee "../$LOGFILE"
|
||||||
|
ret=$?
|
||||||
|
cd .. || exit 1
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
########
|
||||||
|
# MAIN #
|
||||||
|
########
|
||||||
|
|
||||||
|
build_docs
|
||||||
|
ret=$?
|
||||||
|
|
||||||
|
log_base_path="$(date +/opt/tests/platypush/logs/docs/%Y-%m-%dT%H:%M:%S.%m)"
|
||||||
|
if [[ $ret == 0 ]]; then
|
||||||
|
wget -O "$STATUS_IMG_PATH" https://ci.platypush.tech/docs/passed.svg
|
||||||
|
cp "$LOGFILE" "${log_base_path}_PASSED.log"
|
||||||
|
else
|
||||||
|
wget -O "$STATUS_IMG_PATH" https://ci.platypush.tech/docs/failed.svg
|
||||||
|
cp "$LOGFILE" "${log_base_path}_FAILED.log"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mv "$STATUS_IMG_PATH" /opt/tests/platypush/logs/docs/
|
||||||
|
mv "$LOGFILE" /opt/tests/platypush/logs/latest.log
|
||||||
|
cp -r docs/build/html /opt/repos/platypush/docs/build/
|
||||||
|
exit $ret
|
60
.gitlab/run_ci_tests.sh
Executable file
60
.gitlab/run_ci_tests.sh
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
BASE_DIR="$(mktemp -d '/tmp/platypush-ci-tests-XXXXX')"
|
||||||
|
VENV_DIR="$BASE_DIR/venv"
|
||||||
|
TEST_LOG="./test.log"
|
||||||
|
STATUS_IMG_PATH="./status.svg"
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
echo "Cleaning up environment"
|
||||||
|
rm -rf "$BASE_DIR"
|
||||||
|
}
|
||||||
|
|
||||||
|
prepare_venv() {
|
||||||
|
echo "Preparing virtual environment"
|
||||||
|
python -m venv "$VENV_DIR"
|
||||||
|
cd "$VENV_DIR" || exit 1
|
||||||
|
source ./bin/activate
|
||||||
|
cd - || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
install_repo() {
|
||||||
|
echo "Installing latest version of the repository"
|
||||||
|
pip install '.[http]'
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests() {
|
||||||
|
echo "Running tests"
|
||||||
|
pytest 2>&1 | tee "$TEST_LOG"
|
||||||
|
deactivate
|
||||||
|
|
||||||
|
if grep -e '^FAILED ' "$TEST_LOG"; then
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0 # PASSED
|
||||||
|
}
|
||||||
|
|
||||||
|
########
|
||||||
|
# MAIN #
|
||||||
|
########
|
||||||
|
|
||||||
|
cleanup
|
||||||
|
prepare_venv
|
||||||
|
install_repo
|
||||||
|
run_tests
|
||||||
|
ret=$?
|
||||||
|
cleanup
|
||||||
|
|
||||||
|
log_base_path="$(date +/opt/tests/platypush/logs/%Y-%m-%dT%H:%M:%S.%m)"
|
||||||
|
if [[ $ret == 0 ]]; then
|
||||||
|
wget -O "$STATUS_IMG_PATH" https://ci.platypush.tech/passed.svg
|
||||||
|
cp "$TEST_LOG" "${log_base_path}_PASSED.log"
|
||||||
|
else
|
||||||
|
wget -O "$STATUS_IMG_PATH" https://ci.platypush.tech/failed.svg
|
||||||
|
cp "$TEST_LOG" "${log_base_path}_FAILED.log"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mv "$STATUS_IMG_PATH" /opt/tests/platypush/logs/status.svg
|
||||||
|
mv "$TEST_LOG" /opt/tests/platypush/logs/latest.log
|
||||||
|
exit $ret
|
32
.pre-commit-config.yaml
Normal file
32
.pre-commit-config.yaml
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# See https://pre-commit.com for more information
|
||||||
|
# See https://pre-commit.com/hooks.html for more hooks
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v4.1.0
|
||||||
|
hooks:
|
||||||
|
# - id: trailing-whitespace
|
||||||
|
# - id: end-of-file-fixer
|
||||||
|
- id: check-yaml
|
||||||
|
- id: check-json
|
||||||
|
- id: check-xml
|
||||||
|
- id: check-symlinks
|
||||||
|
- id: check-added-large-files
|
||||||
|
|
||||||
|
- repo: https://github.com/Lucas-C/pre-commit-hooks-nodejs
|
||||||
|
rev: v1.1.2
|
||||||
|
hooks:
|
||||||
|
- id: markdown-toc
|
||||||
|
|
||||||
|
- repo: https://github.com/pycqa/flake8
|
||||||
|
rev: 4.0.1
|
||||||
|
hooks:
|
||||||
|
- id: flake8
|
||||||
|
additional_dependencies:
|
||||||
|
- flake8-bugbear
|
||||||
|
- flake8-comprehensions
|
||||||
|
- flake8-simplify
|
||||||
|
|
||||||
|
- repo: https://github.com/psf/black
|
||||||
|
rev: 22.3.0
|
||||||
|
hooks:
|
||||||
|
- id: black
|
272
CHANGELOG.md
272
CHANGELOG.md
|
@ -1,7 +1,275 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
Given the high speed of development in the first phase, changes are being reported only starting from v0.20.2.
|
Given the high speed of development in the first phase, changes are being
|
||||||
|
reported only starting from v0.20.2.
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added [Wallabag integration](https://git.platypush.tech/platypush/platypush/issues/224).
|
||||||
|
- Added [Mimic3 TTS integration](https://git.platypush.tech/platypush/platypush/issues/226).
|
||||||
|
|
||||||
|
## [0.23.6] - 2022-09-19
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed album_id and list of tracks on `music.tidal.get_album`.
|
||||||
|
|
||||||
|
## [0.23.5] - 2022-09-18
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added support for web hooks returning their hook method responses back to the
|
||||||
|
HTTP client.
|
||||||
|
|
||||||
|
- Added [Tidal integration](https://git.platypush.tech/platypush/platypush/pulls/223)
|
||||||
|
|
||||||
|
- Added support for [OPML
|
||||||
|
subscriptions](https://git.platypush.tech/platypush/platypush/pulls/220) to
|
||||||
|
the `rss` plugin.
|
||||||
|
|
||||||
|
- Better support for bulk database operations on the `db` plugin.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Now supporting YAML sections with empty configurations.
|
||||||
|
|
||||||
|
## [0.23.4] - 2022-08-28
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added `matrix` integration
|
||||||
|
([issue](https://git.platypush.tech/platypush/platypush/issues/2),
|
||||||
|
[PR](https://git.platypush.tech/platypush/platypush/pulls/217)).
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Removed `clipboard` backend. Enabling the `clipboard` plugin will also enable
|
||||||
|
clipboard monitoring, with no need for an additional backend.
|
||||||
|
|
||||||
|
## [0.23.3] - 2022-06-01
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added `ntfy` integration (see #219).
|
||||||
|
- Support for a default `config.yaml` if one isn't specified in the default
|
||||||
|
locations.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- The HTTP server dependencies are now marked as required, since the default
|
||||||
|
`config.yaml` will have the HTTP backend enabled by default in order to allow
|
||||||
|
the creation of a first user.
|
||||||
|
- Updated Vue.js frontend dependencies to the latest version.
|
||||||
|
- Removed bulma from the frontend dependencies, making the frontend much
|
||||||
|
lighter and loading times much faster.
|
||||||
|
- Other UI improvements.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- More reliable cronjobs in case of DST change or any clock changes in general
|
||||||
|
(see #217).
|
||||||
|
- Fixed `--redis-queue` argument.
|
||||||
|
|
||||||
|
## [0.23.2] - 2022-03-27
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Support for asynchronous events over GPIO PINs. It is now possible to specify
|
||||||
|
a list of `monitored_pins` in the [`gpio`
|
||||||
|
plugin](https://git.platypush.tech/platypush/platypush/-/blob/master/platypush/plugins/gpio/__init__.py)
|
||||||
|
configuration. A change in the value on those GPIO PINs (caused by e.g. a
|
||||||
|
button, a binary sensor or a probe) will trigger a
|
||||||
|
`platypush.message.event.gpio.GPIOEvent` that you can use in your automation
|
||||||
|
scripts.
|
||||||
|
|
||||||
|
- Simplified script API to interact with platform variables
|
||||||
|
(closes [#206](https://git.platypush.tech/platypush/platypush/-/issues/206)).
|
||||||
|
You can now read and write stored variables in your Platypush scripts through
|
||||||
|
a much more intuitive interface compared to explicitly using the `variable`
|
||||||
|
plugin explicitly:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from platypush.context import Variable
|
||||||
|
|
||||||
|
# ...
|
||||||
|
|
||||||
|
my_var = Variable.get('my_var')
|
||||||
|
my_var = int(my_var) + 1
|
||||||
|
Variable.set(my_var=my_var)
|
||||||
|
```
|
||||||
|
|
||||||
|
## [0.23.0] - 2022-03-01
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added [Jellyfin integration](https://git.platypush.tech/platypush/platypush/-/issues/208).
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Merged several PRs from `dependabot`.
|
||||||
|
|
||||||
|
- Fixed management of the `CN` field in the `calendar.ical` plugin.
|
||||||
|
|
||||||
|
## [0.22.10] - 2022-02-07
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Refactored the `dbus` integration. The plugin and backend have been merged into a
|
||||||
|
single plugin component, and the ability to subscribe to custom signals has been
|
||||||
|
added.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Proper support for empty payloads on the integrations that trigger a `SensorDataChangeEvent`.
|
||||||
|
- Fixed possible infinite recursion on the Pushbullet integration in case of errors where the
|
||||||
|
error and close handlers keep calling each other in a loop.
|
||||||
|
|
||||||
|
## [0.22.9] - 2022-01-06
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added `rss` integration (replaces the cumbersome and deprecated `backend.http.poll`).
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed timezone handling in calendar integrations.
|
||||||
|
- Fixed handling of ignored directories in the `file.monitor` backend.
|
||||||
|
|
||||||
|
## [0.22.8] - 2021-12-13
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added support for audio tracks in Plex integration.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Web server uWSGI wrapper changed from `uwsgi` to `gunicorn`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed client ID assignment logic in MQTT backends to prevent client ID clashes and reconnections
|
||||||
|
(closes #205).
|
||||||
|
- Updated LTR559 integration to be compatible with the new API.
|
||||||
|
- Updated Chromecast integration to be compatible with `pychromecast >= 10`.
|
||||||
|
- Better handling of media errors.
|
||||||
|
|
||||||
|
## [0.22.6] - 2021-11-27
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added support for converting webpages to markdown in `http.webpage.simplify`
|
||||||
|
even if no `outfile` is specified.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Improved robustness of the ICal calendar parser in case some fields (e.g. `*status`)
|
||||||
|
are not defined.
|
||||||
|
|
||||||
|
## [0.22.5] - 2021-11-15
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added `mastodon` plugin.
|
||||||
|
- Added `chat.irc` plugin.
|
||||||
|
- Added `mailgun` plugin.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed `switchbot.status` method in case of virtual devices.
|
||||||
|
- Fixed `platypush[alexa]` optional package installation.
|
||||||
|
|
||||||
|
## [0.22.4] - 2021-10-19
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Support for IR virtual devices in Switchbot plugin.
|
||||||
|
- Added [`google.maps.get_travel_time`](https://docs.platypush.tech/platypush/plugins/google.maps.html#platypush.plugins.google.maps.GoogleMapsPlugin.get_travel_time)
|
||||||
|
method (closes #115).
|
||||||
|
- Support for custom YouTube video/audio formats on media plugins.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Responses for requests received over an MQTT backend are now delivered to the right topic
|
||||||
|
(`<device_base_topic>/responses/<msg_id>`).
|
||||||
|
- Various fixes on media plugins.
|
||||||
|
|
||||||
|
## [0.22.3] - 2021-10-01
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `gotify` integration (see #198).
|
||||||
|
|
||||||
|
## [0.22.2] - 2021-09-25
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `ngrok` integration (see #196).
|
||||||
|
|
||||||
|
## [0.22.1] - 2021-09-22
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- `zigbee.mqtt` backend now no longer requires the MQTT backend/plugin to be enabled.
|
||||||
|
|
||||||
|
- Fixed bug on empty popcorn API responses.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Created CI Gitlab pipeline to replace the Platypush event-based pre-existing pipeline.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Removed docs references to removed/abstract integrations.
|
||||||
|
|
||||||
|
## [0.22.0] - 2021-09-16
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Platypush now uses manifest files to describe plugins and backends. Each extension is now
|
||||||
|
expected to provide a `manifest.yaml` file in its folder, reporting its package name, pip
|
||||||
|
dependencies, required system packages and optional extra installation commands.
|
||||||
|
|
||||||
|
- Refactored `platyvenv`, `platydock`, documentation generation and plugin management engine.
|
||||||
|
They are now both faster and more robust, since they can rely on the manifest definition to
|
||||||
|
operate instead of pydoc strings conventions or `config.yaml` conventions.
|
||||||
|
|
||||||
|
- `platyvenv start` now starts the environment process synchronously and it prints
|
||||||
|
stdout/stderr instead of redirecting it to the logs dir (previous behaviour:
|
||||||
|
`platyvenv start` used to start the process asynchronously and the logs were stored
|
||||||
|
to `~/.local/share/platypush/venv/<env>/logs/<stdout|stderr>.log`).
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Removed `Homeseer` integration - it was based on a Python integration that has now been
|
||||||
|
pulled out of PyPI and GitHub. A new integration may come in the future if there is enough
|
||||||
|
demand for it.
|
||||||
|
|
||||||
|
## [0.21.4] - 2021-08-24
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed JWT token generation, since python-jwt >= 2.0 always returns strings (not bytes) upon `jwt.encode`.
|
||||||
|
|
||||||
|
## [0.21.3] - 2021-07-28
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added `sun` plugin for sunrise/sunset events.
|
||||||
|
|
||||||
|
- Added `slack` integration.
|
||||||
|
|
||||||
|
## [0.21.2] - 2021-07-20
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Added `music.spotify` backend to emulate a Spotify Connect receiver through Platypush.
|
||||||
|
|
||||||
|
- Added `music.spotify` plugin.
|
||||||
|
|
||||||
|
- Added `music.spotify` UI integration.
|
||||||
|
|
||||||
## [0.21.1] - 2021-06-22
|
## [0.21.1] - 2021-06-22
|
||||||
|
|
||||||
|
@ -76,7 +344,7 @@ Given the high speed of development in the first phase, changes are being report
|
||||||
|
|
||||||
- Added `<Camera>` dashboard widget.
|
- Added `<Camera>` dashboard widget.
|
||||||
|
|
||||||
- Added support for custom dashboard widgets with customized (see https://git.platypush.tech/platypush/platypush/-/wikis/Backends#creating-custom-widgets).
|
- Added support for custom dashboard widgets with customized (see https://git.platypush.tech/platypush/platypush/wiki/Backends#creating-custom-widgets).
|
||||||
|
|
||||||
- Added support for controls on `music.mpd` dashboard widget.
|
- Added support for controls on `music.mpd` dashboard widget.
|
||||||
|
|
||||||
|
|
|
@ -29,9 +29,11 @@ Guidelines:
|
||||||
|
|
||||||
- If the feature requires an optional dependency then make sure to document it:
|
- If the feature requires an optional dependency then make sure to document it:
|
||||||
|
|
||||||
- In the class docstring (see other plugins and backends for examples)
|
- In the class docstring (see other plugins and backends for examples).
|
||||||
- In [`setup.py`](https://git.platypush.tech/platypush/platypush/-/blob/master/setup.py#L72) as
|
- In [`setup.py`](https://git.platypush.tech/platypush/platypush/-/blob/master/setup.py#L72) as
|
||||||
an `extras_require` entry
|
an `extras_require` entry.
|
||||||
- In [`requirements.txt`](https://git.platypush.tech/platypush/platypush/-/blob/master/requirements.txt) -
|
- In the plugin/backend class pydoc string.
|
||||||
if the feature is optional then leave it commented and add a one-line comment to explain which
|
- In the `manifest.yaml` - refer to the Wiki (how to write
|
||||||
plugin or backend requires it.
|
[plugins](https://git.platypush.tech/platypush/platypush/wiki/Writing-your-own-plugins)
|
||||||
|
and [backends](https://git.platypush.tech/platypush/platypush/wiki/Writing-your-own-backends))
|
||||||
|
for examples on how to write an extension manifest file.
|
||||||
|
|
|
@ -1,2 +1,4 @@
|
||||||
recursive-include platypush/backend/http/webapp/dist *
|
recursive-include platypush/backend/http/webapp/dist *
|
||||||
include platypush/plugins/http/webpage/mercury-parser.js
|
include platypush/plugins/http/webpage/mercury-parser.js
|
||||||
|
include platypush/config/*.yaml
|
||||||
|
global-include manifest.yaml
|
||||||
|
|
505
README.md
505
README.md
|
@ -6,39 +6,82 @@ Platypush
|
||||||
[![pip version](https://img.shields.io/pypi/v/platypush.svg?style=flat)](https://pypi.python.org/pypi/platypush/)
|
[![pip version](https://img.shields.io/pypi/v/platypush.svg?style=flat)](https://pypi.python.org/pypi/platypush/)
|
||||||
[![License](https://img.shields.io/github/license/BlackLight/platypush.svg)](https://git.platypush.tech/platypush/platypush/-/blob/master/LICENSE.txt)
|
[![License](https://img.shields.io/github/license/BlackLight/platypush.svg)](https://git.platypush.tech/platypush/platypush/-/blob/master/LICENSE.txt)
|
||||||
[![Last Commit](https://img.shields.io/github/last-commit/BlackLight/platypush.svg)](https://git.platypush.tech/platypush/platypush/-/commits/master/)
|
[![Last Commit](https://img.shields.io/github/last-commit/BlackLight/platypush.svg)](https://git.platypush.tech/platypush/platypush/-/commits/master/)
|
||||||
|
[![Join chat on Matrix](https://img.shields.io/matrix/:platypush?server_fqdn=matrix.platypush.tech)](https://matrix.to/#/#platypush:matrix.platypush.tech)
|
||||||
[![Contributions](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://git.platypush.tech/platypush/platypush/-/blob/master/CONTRIBUTING.md)
|
[![Contributions](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://git.platypush.tech/platypush/platypush/-/blob/master/CONTRIBUTING.md)
|
||||||
[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/BlackLight/platypush.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/BlackLight/platypush/context:python)
|
[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/BlackLight/platypush.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/BlackLight/platypush/context:python)
|
||||||
[![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/BlackLight/platypush.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/BlackLight/platypush/context:javascript)
|
[![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/BlackLight/platypush.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/BlackLight/platypush/context:javascript)
|
||||||
|
|
||||||
|
<!-- toc -->
|
||||||
|
|
||||||
|
- [Architecture](#architecture)
|
||||||
|
* [Plugins](#plugins)
|
||||||
|
* [Actions](#actions)
|
||||||
|
* [Backends](#backends)
|
||||||
|
* [Events](#events)
|
||||||
|
* [Hooks](#hooks)
|
||||||
|
* [Procedures](#procedures)
|
||||||
|
* [Cronjobs](#cronjobs)
|
||||||
|
* [The web interface](#the-web-interface)
|
||||||
|
- [Installation](#installation)
|
||||||
|
* [System installation](#system-installation)
|
||||||
|
+ [Install through `pip`](#install-through-pip)
|
||||||
|
+ [Install through a system package manager](#install-through-a-system-package-manager)
|
||||||
|
+ [Install from sources](#install-from-sources)
|
||||||
|
* [Installing the dependencies for your extensions](#installing-the-dependencies-for-your-extensions)
|
||||||
|
+ [Install via `extras` name](#install-via-extras-name)
|
||||||
|
+ [Install via `manifest.yaml`](#install-via-manifestyaml)
|
||||||
|
+ [Check the instructions reported in the documentation](#check-the-instructions-reported-in-the-documentation)
|
||||||
|
* [Virtual environment installation](#virtual-environment-installation)
|
||||||
|
* [Docker installation](#docker-installation)
|
||||||
|
- [Mobile app](#mobile-app)
|
||||||
|
- [Tests](#tests)
|
||||||
|
- [Funding](#funding)
|
||||||
|
|
||||||
|
<!-- tocstop -->
|
||||||
|
|
||||||
- Recommended read: [**Getting started with Platypush**](https://blog.platypush.tech/article/Ultimate-self-hosted-automation-with-Platypush).
|
- Recommended read: [**Getting started with Platypush**](https://blog.platypush.tech/article/Ultimate-self-hosted-automation-with-Platypush).
|
||||||
|
|
||||||
- The [blog](https://blog.platypush.tech) is in general a good place to get more insights on what you can build with it and inspiration about possible usages.
|
- The [blog](https://blog.platypush.tech) is in general a good place to get
|
||||||
|
more insights on what you can build with it and inspiration about possible
|
||||||
|
usages.
|
||||||
|
|
||||||
- The [wiki](https://git.platypush.tech/platypush/platypush/-/wikis/home) also contains many resources on getting started.
|
- The [wiki](https://git.platypush.tech/platypush/platypush/wiki) also
|
||||||
|
contains many resources on getting started.
|
||||||
|
|
||||||
- Extensive documentation for all the available integrations and messages [is available](https://docs.platypush.tech/).
|
- Extensive documentation for all the available integrations and messages [is
|
||||||
|
available](https://docs.platypush.tech/).
|
||||||
|
|
||||||
- If you have issues/feature requests/enhancement ideas please [create an issue](https://git.platypush.tech/platypush/platypush/-/issues).
|
- If you have issues/feature requests/enhancement ideas please [create an
|
||||||
|
issue](https://git.platypush.tech/platypush/platypush/-/issues).
|
||||||
|
|
||||||
- A [Reddit channel](https://www.reddit.com/r/platypush) is also available for more general questions.
|
- A [Reddit channel](https://www.reddit.com/r/platypush) is also available for
|
||||||
|
more general questions.
|
||||||
|
|
||||||
|
- A [Matrix instance](https://matrix.to/#/#platypush:matrix.platypush.tech) is
|
||||||
|
also available if you are looking for more interactive support.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Platypush is a general-purpose extensible platform for automation and integration across multiple services and devices.
|
Platypush is a general-purpose extensible platform for automation and
|
||||||
|
integration across multiple services and devices.
|
||||||
|
|
||||||
It enables users to create their own self-hosted pieces of automation based on events (*if this happens then do that*)
|
It enables users to create their own self-hosted pieces of automation based on
|
||||||
and it provides a comprehensive and customizable user interface that collects everything you need to visualize and
|
events (*if this happens then do that*)
|
||||||
control under one roof.
|
and it provides a comprehensive and customizable user interface that collects
|
||||||
|
everything you need to visualize and control under one roof.
|
||||||
|
|
||||||
It takes some concepts from [IFTTT](https://ifttt.com), [Tasker](https://tasker.joaoapps.com/),
|
It takes some concepts from [IFTTT](https://ifttt.com),
|
||||||
[Microsoft Flow](https://flow.microsoft.com), [PushBullet](https://pushbullet.com) and
|
[Tasker](https://tasker.joaoapps.com/), [Microsoft
|
||||||
[Home Assistant](https://www.home-assistant.io/) to provide an environment where the user can easily connect things
|
Flow](https://flow.microsoft.com), [PushBullet](https://pushbullet.com) and
|
||||||
together.
|
[Home Assistant](https://www.home-assistant.io/) to provide an environment
|
||||||
|
where the user can easily connect things together.
|
||||||
|
|
||||||
Its ideal home is a single-board computer like a RaspberryPi that you can configure to orchestrate any home automation
|
Its ideal home is a single-board computer like a RaspberryPi that you can
|
||||||
and cloud automation in your own living room or garage, but it can easily run on any device that can run a Python
|
configure to orchestrate any home automation and cloud automation in your own
|
||||||
interpreter, and the bar for the hardware requirements is very low as well - I use it to run pieces of automation on
|
living room or garage, but it can easily run on any device that can run a
|
||||||
devices as powerful as a RaspberryPi Zero or an old Nokia N900 with Linux.
|
Python interpreter, and the bar for the hardware requirements is very low as
|
||||||
|
well - I use it to run pieces of automation on devices as powerful as a
|
||||||
|
RaspberryPi Zero or an old Nokia N900 with Linux.
|
||||||
|
|
||||||
You can use Platypush to do things like:
|
You can use Platypush to do things like:
|
||||||
|
|
||||||
|
@ -47,8 +90,10 @@ You can use Platypush to do things like:
|
||||||
- [Create custom and privacy-secure voice assistants that run custom hooks on your phrases](https://blog.platypush.tech/article/Build-custom-voice-assistants)
|
- [Create custom and privacy-secure voice assistants that run custom hooks on your phrases](https://blog.platypush.tech/article/Build-custom-voice-assistants)
|
||||||
- Build integrations between [sensors](https://docs.platypush.tech/en/latest/platypush/backend/sensor.html),
|
- Build integrations between [sensors](https://docs.platypush.tech/en/latest/platypush/backend/sensor.html),
|
||||||
[cameras](https://docs.platypush.tech/en/latest/platypush/plugins/camera.pi.html),
|
[cameras](https://docs.platypush.tech/en/latest/platypush/plugins/camera.pi.html),
|
||||||
[microphones](https://docs.platypush.tech/en/latest/platypush/plugins/sound.html) and
|
[microphones](https://docs.platypush.tech/en/latest/platypush/plugins/sound.html)
|
||||||
[machine learning models](https://docs.platypush.tech/en/latest/platypush/plugins/tensorflow.html) to create smart
|
and [machine learning
|
||||||
|
models](https://docs.platypush.tech/en/latest/platypush/plugins/tensorflow.html)
|
||||||
|
to create smart
|
||||||
pieces of automation for e.g.
|
pieces of automation for e.g.
|
||||||
[people detection](https://blog.platypush.tech/article/Detect-people-with-a-RaspberryPi-a-thermal-camera-Platypush-and-a-pinch-of-machine-learning)
|
[people detection](https://blog.platypush.tech/article/Detect-people-with-a-RaspberryPi-a-thermal-camera-Platypush-and-a-pinch-of-machine-learning)
|
||||||
or [sound detection](https://blog.platypush.tech/article/Create-your-smart-baby-monitor-with-Platypush-and-Tensorflow)
|
or [sound detection](https://blog.platypush.tech/article/Create-your-smart-baby-monitor-with-Platypush-and-Tensorflow)
|
||||||
|
@ -60,35 +105,53 @@ You can use Platypush to do things like:
|
||||||
- [Control your smart switches](https://docs.platypush.tech/en/latest/platypush/plugins/switch.html)
|
- [Control your smart switches](https://docs.platypush.tech/en/latest/platypush/plugins/switch.html)
|
||||||
- [Implement automated custom text-to-speech routines](https://docs.platypush.tech/en/latest/platypush/plugins/tts.html)
|
- [Implement automated custom text-to-speech routines](https://docs.platypush.tech/en/latest/platypush/plugins/tts.html)
|
||||||
- [Build any kind of interactions and automation routines with your Android device using Tasker](https://blog.platypush.tech/article/How-to-build-your-personal-infrastructure-for-data-collection-and-visualization)
|
- [Build any kind of interactions and automation routines with your Android device using Tasker](https://blog.platypush.tech/article/How-to-build-your-personal-infrastructure-for-data-collection-and-visualization)
|
||||||
- Play [local videos](https://docs.platypush.tech/en/latest/platypush/plugins/media.mpv.html), YouTube videos and torrent media from any device and service, to any device
|
- Play [local
|
||||||
|
videos](https://docs.platypush.tech/en/latest/platypush/plugins/media.mpv.html),
|
||||||
|
YouTube videos and torrent media from any device and service, to any device
|
||||||
- [Get weather forecast events for your location and build automation routines on them](https://docs.platypush.tech/en/latest/platypush/plugins/weather.darksky.html)
|
- [Get weather forecast events for your location and build automation routines on them](https://docs.platypush.tech/en/latest/platypush/plugins/weather.darksky.html)
|
||||||
- [Create a custom single hub for Zigbee and Z-Wave smart devices](https://blog.platypush.tech/article/Transform-a-RaspberryPi-into-a-universal-Zigbee-and-Z-Wave-bridge)
|
- [Create a custom single hub for Zigbee and Z-Wave smart devices](https://blog.platypush.tech/article/Transform-a-RaspberryPi-into-a-universal-Zigbee-and-Z-Wave-bridge)
|
||||||
- Build your own web dashboard with calendar, weather, news and music controls (basically, anything that has a Platypush web widget)
|
- Build your own web dashboard with calendar, weather, news and music controls
|
||||||
|
(basically, anything that has a Platypush web widget)
|
||||||
- ...and much more (basically, anything that comes with a [Platypush plugin](https://docs.platypush.tech/en/latest/plugins.html))
|
- ...and much more (basically, anything that comes with a [Platypush plugin](https://docs.platypush.tech/en/latest/plugins.html))
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
The architecture of Platypush consists of a few simple pieces, orchestrated by a configuration file stored by default
|
The architecture of Platypush consists of a few simple pieces, orchestrated by
|
||||||
under [`~/.config/platypush/config.yaml`](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/conf/config.yaml):
|
a configuration file stored by default under
|
||||||
|
[`~/.config/platypush/config.yaml`](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/conf/config.yaml):
|
||||||
|
|
||||||
### [Plugins](https://docs.platypush.tech/en/latest/plugins.html)
|
### Plugins
|
||||||
|
|
||||||
They are integrations that do things - like
|
[Full list](https://docs.platypush.tech/en/latest/plugins.html)
|
||||||
[modify files](https://docs.platypush.tech/en/latest/platypush/plugins/file.html),
|
|
||||||
[train and evaluate machine learning models](https://docs.platypush.tech/en/latest/platypush/plugins/tensorflow.html),
|
|
||||||
[control cameras](https://docs.platypush.tech/en/latest/platypush/plugins/camera.pi.html),
|
|
||||||
[read sensors](https://docs.platypush.tech/en/latest/platypush/plugins/gpio.sensor.dht.html),
|
|
||||||
[parse a web page](https://docs.platypush.tech/en/latest/platypush/plugins/http.webpage.html),
|
|
||||||
[control lights](https://docs.platypush.tech/en/latest/platypush/plugins/light.hue.html),
|
|
||||||
[send emails](https://docs.platypush.tech/en/latest/platypush/plugins/mail.smtp.html),
|
|
||||||
[control Chromecasts](https://docs.platypush.tech/en/latest/platypush/plugins/media.chromecast.html),
|
|
||||||
[run voice queries](https://docs.platypush.tech/en/latest/platypush/plugins/assistant.google.html),
|
|
||||||
[handle torrent transfers](https://docs.platypush.tech/en/latest/platypush/plugins/torrent.html) or
|
|
||||||
control [Zigbee](https://docs.platypush.tech/en/latest/platypush/plugins/zigbee.mqtt.html) or
|
|
||||||
[Z-Wave](https://docs.platypush.tech/en/latest/platypush/plugins/zwave.html) devices.
|
|
||||||
|
|
||||||
The configuration of a plugin matches one-on-one that of its documented class constructor, so it's very straightforward
|
Plugins are integrations that do things - like [modify
|
||||||
to write a configuration for a plugin by reading its documentation:
|
files](https://docs.platypush.tech/en/latest/platypush/plugins/file.html),
|
||||||
|
[train and evaluate machine learning
|
||||||
|
models](https://docs.platypush.tech/en/latest/platypush/plugins/tensorflow.html),
|
||||||
|
[control
|
||||||
|
cameras](https://docs.platypush.tech/en/latest/platypush/plugins/camera.pi.html),
|
||||||
|
[read
|
||||||
|
sensors](https://docs.platypush.tech/en/latest/platypush/plugins/gpio.sensor.dht.html),
|
||||||
|
[parse a web
|
||||||
|
page](https://docs.platypush.tech/en/latest/platypush/plugins/http.webpage.html),
|
||||||
|
[control
|
||||||
|
lights](https://docs.platypush.tech/en/latest/platypush/plugins/light.hue.html),
|
||||||
|
[send
|
||||||
|
emails](https://docs.platypush.tech/en/latest/platypush/plugins/mail.smtp.html),
|
||||||
|
[control
|
||||||
|
Chromecasts](https://docs.platypush.tech/en/latest/platypush/plugins/media.chromecast.html),
|
||||||
|
[run voice
|
||||||
|
queries](https://docs.platypush.tech/en/latest/platypush/plugins/assistant.google.html),
|
||||||
|
[handle torrent
|
||||||
|
transfers](https://docs.platypush.tech/en/latest/platypush/plugins/torrent.html)
|
||||||
|
or control
|
||||||
|
[Zigbee](https://docs.platypush.tech/en/latest/platypush/plugins/zigbee.mqtt.html)
|
||||||
|
or [Z-Wave](https://docs.platypush.tech/en/latest/platypush/plugins/zwave.html)
|
||||||
|
devices.
|
||||||
|
|
||||||
|
The configuration of a plugin matches one-on-one that of its documented class
|
||||||
|
constructor, so it's very straightforward to write a configuration for a plugin
|
||||||
|
by reading its documentation:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
light.hue:
|
light.hue:
|
||||||
|
@ -100,9 +163,11 @@ light.hue:
|
||||||
|
|
||||||
### Actions
|
### Actions
|
||||||
|
|
||||||
Plugins expose *actions*, that match one-on-one the plugin class methods denoted by `@action`, so it's very
|
Plugins expose *actions*, that match one-on-one the plugin class methods
|
||||||
straightforward to invoke plugin actions by just reading the plugin documentation. They can be invoked directly from
|
denoted by `@action`, so it's very straightforward to invoke plugin actions by
|
||||||
your own scripts or they can be sent to the platform through any supported channel as simple JSON messages:
|
just reading the plugin documentation. They can be invoked directly from your
|
||||||
|
own scripts or they can be sent to the platform through any supported channel
|
||||||
|
as simple JSON messages:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
@ -114,37 +179,54 @@ your own scripts or they can be sent to the platform through any supported chann
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Backends](https://docs.platypush.tech/en/latest/backends.html)
|
### Backends
|
||||||
|
|
||||||
They are background services that either listen for messages on channels (like an
|
[Full list](https://docs.platypush.tech/en/latest/backends.html)
|
||||||
[HTTP backend](https://docs.platypush.tech/en/latest/platypush/backend/http.html), an
|
|
||||||
[MQTT instance](https://docs.platypush.tech/en/latest/platypush/backend/mqtt.html), a
|
|
||||||
[Kafka instance](https://docs.platypush.tech/en/latest/platypush/backend/kafka.html), a
|
|
||||||
[Websocket service](https://docs.platypush.tech/en/latest/platypush/backend/websocket.html),
|
|
||||||
[Pushbullet](https://docs.platypush.tech/en/latest/platypush/backend/pushbullet.html) etc.) or monitor a device or a
|
|
||||||
service for events (like a [sensor](https://docs.platypush.tech/en/latest/platypush/backend/sensor.html), a custom
|
|
||||||
[voice assistant](https://docs.platypush.tech/en/latest/platypush/backend/assistant.google.html), a bridge running on a
|
|
||||||
[Zigbee](https://docs.platypush.tech/en/latest/platypush/backend/zigbee.mqtt.html) or
|
|
||||||
[Z-Wave](https://docs.platypush.tech/en/latest/platypush/backend/zwave.html), an
|
|
||||||
[NFC card reader](https://docs.platypush.tech/en/latest/platypush/backend/nfc.html), a
|
|
||||||
[MIDI device](https://docs.platypush.tech/en/latest/platypush/backend/midi.html), a
|
|
||||||
[Telegram channel](https://docs.platypush.tech/en/latest/platypush/backend/chat.telegram.html), a
|
|
||||||
[Bluetooth scanner](https://docs.platypush.tech/en/latest/platypush/backend/bluetooth.scanner.ble.html) etc.).
|
|
||||||
|
|
||||||
If a backend supports the execution of requests (e.g. HTTP, MQTT, Kafka, Websocket and TCP) then you can send requests
|
They are background services that either listen for messages on channels (like
|
||||||
to these services in JSON format. For example, in the case of the HTTP backend:
|
an [HTTP
|
||||||
|
backend](https://docs.platypush.tech/en/latest/platypush/backend/http.html), an
|
||||||
|
[MQTT
|
||||||
|
instance](https://docs.platypush.tech/en/latest/platypush/backend/mqtt.html), a
|
||||||
|
[Kafka
|
||||||
|
instance](https://docs.platypush.tech/en/latest/platypush/backend/kafka.html),
|
||||||
|
a [Websocket
|
||||||
|
service](https://docs.platypush.tech/en/latest/platypush/backend/websocket.html),
|
||||||
|
[Pushbullet](https://docs.platypush.tech/en/latest/platypush/backend/pushbullet.html)
|
||||||
|
etc.) or monitor a device or a service for events (like a
|
||||||
|
[sensor](https://docs.platypush.tech/en/latest/platypush/backend/sensor.html),
|
||||||
|
a custom [voice
|
||||||
|
assistant](https://docs.platypush.tech/en/latest/platypush/backend/assistant.google.html),
|
||||||
|
a bridge running on a
|
||||||
|
[Zigbee](https://docs.platypush.tech/en/latest/platypush/backend/zigbee.mqtt.html)
|
||||||
|
or
|
||||||
|
[Z-Wave](https://docs.platypush.tech/en/latest/platypush/backend/zwave.html),
|
||||||
|
an [NFC card
|
||||||
|
reader](https://docs.platypush.tech/en/latest/platypush/backend/nfc.html), a
|
||||||
|
[MIDI
|
||||||
|
device](https://docs.platypush.tech/en/latest/platypush/backend/midi.html), a
|
||||||
|
[Telegram
|
||||||
|
channel](https://docs.platypush.tech/en/latest/platypush/backend/chat.telegram.html),
|
||||||
|
a [Bluetooth
|
||||||
|
scanner](https://docs.platypush.tech/en/latest/platypush/backend/bluetooth.scanner.ble.html)
|
||||||
|
etc.).
|
||||||
|
|
||||||
|
If a backend supports the execution of requests (e.g. HTTP, MQTT, Kafka,
|
||||||
|
Websocket and TCP) then you can send requests to these services in JSON format.
|
||||||
|
For example, in the case of the HTTP backend:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# Get a token
|
# Get a token
|
||||||
curl -XPOST -H 'Content-Type: application/json' -d '
|
curl -XPOST -H 'Content-Type: application/json' -d '
|
||||||
{
|
{
|
||||||
"username": "$YOUR_USER",
|
"username": "$YOUR_USER",
|
||||||
"password": "$YOUR_PASSWORD"
|
"password": "$YOUR_PASSWORD"
|
||||||
}' http://host:8008/auth
|
}' http://host:8008/auth
|
||||||
|
|
||||||
# Execute a request
|
# Execute a request
|
||||||
|
|
||||||
curl -XPOST -H 'Content-Type: application/json' -H "Authorization: Bearer $YOUR_TOKEN" -d '
|
curl -XPOST -H 'Content-Type: application/json' \
|
||||||
|
-H "Authorization: Bearer $YOUR_TOKEN" -d '
|
||||||
{
|
{
|
||||||
"type": "request",
|
"type": "request",
|
||||||
"action": "tts.say",
|
"action": "tts.say",
|
||||||
|
@ -154,33 +236,38 @@ curl -XPOST -H 'Content-Type: application/json' -H "Authorization: Bearer $YOUR_
|
||||||
}' http://host:8008/execute
|
}' http://host:8008/execute
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Events](https://docs.platypush.tech/en/latest/events.html)
|
### Events
|
||||||
|
|
||||||
When a certain event occurs (e.g. a JSON request is received, or a
|
[Full list](https://docs.platypush.tech/en/latest/events.html)
|
||||||
[Bluetooth device is connected](https://docs.platypush.tech/en/latest/platypush/events/bluetooth.html#platypush.message.event.bluetooth.BluetoothDeviceConnectedEvent),
|
|
||||||
or a
|
When a certain event occurs (e.g. a JSON request is received, or a [Bluetooth
|
||||||
[Flic button is pressed](https://docs.platypush.tech/en/latest/platypush/events/button.flic.html#platypush.message.event.button.flic.FlicButtonEvent),
|
device is
|
||||||
or some
|
connected](https://docs.platypush.tech/en/latest/platypush/events/bluetooth.html#platypush.message.event.bluetooth.BluetoothDeviceConnectedEvent),
|
||||||
[speech is detected on the voice assistant service](https://docs.platypush.tech/en/latest/platypush/events/assistant.html#platypush.message.event.assistant.SpeechRecognizedEvent),
|
or a [Flic button is
|
||||||
or an
|
pressed](https://docs.platypush.tech/en/latest/platypush/events/button.flic.html#platypush.message.event.button.flic.FlicButtonEvent),
|
||||||
[RSS feed has new items](https://docs.platypush.tech/en/latest/platypush/events/http.rss.html#platypush.message.event.http.rss.NewFeedEvent),
|
or some [speech is detected on the voice assistant
|
||||||
or a
|
service](https://docs.platypush.tech/en/latest/platypush/events/assistant.html#platypush.message.event.assistant.SpeechRecognizedEvent),
|
||||||
[new email is received](https://docs.platypush.tech/en/latest/platypush/events/mail.html#platypush.message.event.mail.MailReceivedEvent),
|
or an [RSS feed has new
|
||||||
or a
|
items](https://docs.platypush.tech/en/latest/platypush/events/http.rss.html#platypush.message.event.http.rss.NewFeedEvent),
|
||||||
[new track is played](https://docs.platypush.tech/en/latest/platypush/events/music.html#platypush.message.event.music.NewPlayingTrackEvent),
|
or a [new email is
|
||||||
or an
|
received](https://docs.platypush.tech/en/latest/platypush/events/mail.html#platypush.message.event.mail.MailReceivedEvent),
|
||||||
[NFC tag is detected](https://docs.platypush.tech/en/latest/platypush/events/nfc.html#platypush.message.event.nfc.NFCTagDetectedEvent),
|
or a [new track is
|
||||||
or
|
played](https://docs.platypush.tech/en/latest/platypush/events/music.html#platypush.message.event.music.NewPlayingTrackEvent),
|
||||||
[new sensor data is available](https://docs.platypush.tech/en/latest/platypush/events/sensor.html#platypush.message.event.sensor.SensorDataChangeEvent),
|
or an [NFC tag is
|
||||||
or
|
detected](https://docs.platypush.tech/en/latest/platypush/events/nfc.html#platypush.message.event.nfc.NFCTagDetectedEvent),
|
||||||
[a value of a Zigbee device changes](https://docs.platypush.tech/en/latest/platypush/events/zigbee.mqtt.html#platypush.message.event.zigbee.mqtt.ZigbeeMqttDevicePropertySetEvent),
|
or [new sensor data is
|
||||||
etc.), the associated backend will trigger an [event](https://docs.platypush.tech/en/latest/events.html).
|
available](https://docs.platypush.tech/en/latest/platypush/events/sensor.html#platypush.message.event.sensor.SensorDataChangeEvent),
|
||||||
|
or [a value of a Zigbee device
|
||||||
|
changes](https://docs.platypush.tech/en/latest/platypush/events/zigbee.mqtt.html#platypush.message.event.zigbee.mqtt.ZigbeeMqttDevicePropertySetEvent),
|
||||||
|
etc.), the associated backend will trigger an
|
||||||
|
[event](https://docs.platypush.tech/en/latest/events.html).
|
||||||
|
|
||||||
### Hooks
|
### Hooks
|
||||||
|
|
||||||
Event hooks are custom pieces of logic that will be run when a certain event is triggered. Hooks are the glue that
|
Event hooks are custom pieces of logic that will be run when a certain event is
|
||||||
connects events to actions, exposing a paradigm similar to IFTTT (_if a certain event happens then run these actions_).
|
triggered. Hooks are the glue that connects events to actions, exposing a
|
||||||
They can declared as:
|
paradigm similar to IFTTT (_if a certain event happens then run these
|
||||||
|
actions_). They can declared as:
|
||||||
|
|
||||||
- Sections of the [`config.yaml`](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/conf/config.yaml).
|
- Sections of the [`config.yaml`](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/conf/config.yaml).
|
||||||
Example:
|
Example:
|
||||||
|
@ -204,7 +291,8 @@ event.hook.SearchSongVoiceCommand:
|
||||||
resource: ${output[0]['file']}
|
resource: ${output[0]['file']}
|
||||||
```
|
```
|
||||||
|
|
||||||
- Stand-alone Python scripts stored under `~/.config/platypush/scripts` and will be dynamically imported at start time.
|
- Stand-alone Python scripts stored under `~/.config/platypush/scripts` and
|
||||||
|
will be dynamically imported at start time.
|
||||||
[Example](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/conf/hook.py):
|
[Example](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/conf/hook.py):
|
||||||
|
|
||||||
```python
|
```python
|
||||||
|
@ -225,13 +313,17 @@ def on_music_play_command(event, title=None, artist=None, **context):
|
||||||
|
|
||||||
### Procedures
|
### Procedures
|
||||||
|
|
||||||
Procedures are pieces of custom logic that can be executed as atomic actions using `procedure.<name>` as an action name.
|
Procedures are pieces of custom logic that can be executed as atomic actions
|
||||||
They can be defined either in the `config.yaml` or as Python scripts stored under `~/.config/platypush/scripts` -
|
using `procedure.<name>` as an action name.
|
||||||
provided that the procedure is also imported in `~/.config/platypush/scripts/__init__.py` so it can be discovered by
|
|
||||||
the service.
|
|
||||||
|
|
||||||
YAML example for a procedure that can be executed when we arrive home and turns on the lights if the luminosity is lower
|
They can be defined either in the `config.yaml` or as Python scripts stored
|
||||||
that a certain thresholds, says a welcome home message using the TTS engine and starts playing the music:
|
under `~/.config/platypush/scripts` - provided that the procedure is also
|
||||||
|
imported in `~/.config/platypush/scripts/__init__.py` so it can be discovered
|
||||||
|
by the service.
|
||||||
|
|
||||||
|
YAML example for a procedure that can be executed when we arrive home and turns
|
||||||
|
on the lights if the luminosity is lower that a certain thresholds, says a
|
||||||
|
welcome home message using the TTS engine and starts playing the music:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
procedure.at_home:
|
procedure.at_home:
|
||||||
|
@ -254,7 +346,7 @@ procedure.at_home:
|
||||||
Python example:
|
Python example:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Content of ~/.config/platypush/scripts/home.py
|
# Content of ~/.config/platypush/scripts/home.py
|
||||||
from platypush.procedure import procedure
|
from platypush.procedure import procedure
|
||||||
from platypush.utils import run
|
from platypush.utils import run
|
||||||
|
|
||||||
|
@ -268,11 +360,12 @@ def at_home(**context):
|
||||||
run('music.mpd.play')
|
run('music.mpd.play')
|
||||||
```
|
```
|
||||||
|
|
||||||
In either case, you can easily trigger the at-home procedure by sending an action request message to a backend - for
|
In either case, you can easily trigger the at-home procedure by sending an
|
||||||
example, over the HTTP backend:
|
action request message to a backend - for example, over the HTTP backend:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
curl -XPOST -H 'Content-Type: application/json' -H "Authorization: Bearer $YOUR_TOKEN" -d '
|
curl -XPOST -H 'Content-Type: application/json' \
|
||||||
|
-H "Authorization: Bearer $YOUR_TOKEN" -d '
|
||||||
{
|
{
|
||||||
"type": "request",
|
"type": "request",
|
||||||
"action": "procedure.at_home"
|
"action": "procedure.at_home"
|
||||||
|
@ -281,15 +374,18 @@ curl -XPOST -H 'Content-Type: application/json' -H "Authorization: Bearer $YOUR_
|
||||||
|
|
||||||
### Cronjobs
|
### Cronjobs
|
||||||
|
|
||||||
Cronjobs are pieces of logic that will be run at regular intervals, expressed in crontab-compatible syntax.
|
Cronjobs are pieces of logic that will be run at regular intervals, expressed
|
||||||
They can be defined either in the `config.yaml` or as Python scripts stored under `~/.config/platypush/scripts` as
|
in crontab-compatible syntax. They can be defined either in the `config.yaml`
|
||||||
functions labelled by the `@cron` decorator.
|
or as Python scripts stored under `~/.config/platypush/scripts` as functions
|
||||||
|
labelled by the `@cron` decorator.
|
||||||
|
|
||||||
Note that seconds are also supported (unlike the standard crontab definition), but, for back-compatibility with the
|
Note that seconds are also supported (unlike the standard crontab definition),
|
||||||
standard crontab format, they are at the end of the cron expression, so the expression is actually in the format
|
but, for back-compatibility with the standard crontab format, they are at the
|
||||||
|
end of the cron expression, so the expression is actually in the format
|
||||||
`<minute> <hour> <day_of_month> <month> <day_of_week> <second>`.
|
`<minute> <hour> <day_of_month> <month> <day_of_week> <second>`.
|
||||||
|
|
||||||
YAML example for a cronjob that is executed every 30 seconds and checks if a Bluetooth device is nearby:
|
YAML example for a cronjob that is executed every 30 seconds and checks if a
|
||||||
|
Bluetooth device is nearby:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
cron.check_bt_device:
|
cron.check_bt_device:
|
||||||
|
@ -308,7 +404,7 @@ cron.check_bt_device:
|
||||||
Python example:
|
Python example:
|
||||||
|
|
||||||
```python
|
```python
|
||||||
# Content of ~/.config/platypush/scripts/bt_cron.py
|
# Content of ~/.config/platypush/scripts/bt_cron.py
|
||||||
from platypush.cron import cron
|
from platypush.cron import cron
|
||||||
from platypush.utils import run
|
from platypush.utils import run
|
||||||
|
|
||||||
|
@ -323,15 +419,18 @@ def check_bt_device(**context):
|
||||||
|
|
||||||
### The web interface
|
### The web interface
|
||||||
|
|
||||||
If [`backend.http`](https://docs.platypush.tech/en/latest/platypush/backend/http.html) is enabled then a web interface
|
If
|
||||||
will be provided by default on `http://host:8008/`. Besides using the `/execute` endpoint for running requests, the
|
[`backend.http`](https://docs.platypush.tech/en/latest/platypush/backend/http.html)
|
||||||
built-in web server also provides a full-featured interface that groups together the controls for most of the plugins -
|
is enabled then a web interface will be provided by default on
|
||||||
e.g. sensors, switches, music controls and search, media library and torrent management, lights, Zigbee/Z-Wave devices
|
`http://host:8008/`. Besides using the `/execute` endpoint for running
|
||||||
and so on. The UI is responsive and mobile-friendly.
|
requests, the built-in web server also provides a full-featured interface that
|
||||||
|
groups together the controls for most of the plugins - e.g. sensors, switches,
|
||||||
|
music controls and search, media library and torrent management, lights,
|
||||||
|
Zigbee/Z-Wave devices and so on. The UI is responsive and mobile-friendly.
|
||||||
|
|
||||||
The web service also provides means for the user to create
|
The web service also provides means for the user to create [custom
|
||||||
[custom dashboards](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/conf/dashboard.xml) that can
|
dashboards](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/conf/dashboard.xml)
|
||||||
be used to show information from multiple sources on a large screen.
|
that can be used to show information from multiple sources on a large screen.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
@ -340,36 +439,69 @@ be used to show information from multiple sources on a large screen.
|
||||||
Platypush uses Redis to deliver and store requests and temporary messages:
|
Platypush uses Redis to deliver and store requests and temporary messages:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
# Example for Debian-based distributions
|
# Example for Debian-based distributions
|
||||||
[sudo] apt-get install redis-server
|
[sudo] apt-get install redis-server
|
||||||
|
|
||||||
# Enable and start the service
|
# Enable and start the service
|
||||||
[sudo] systemctl enable redis
|
[sudo] systemctl enable redis
|
||||||
[sudo] systemctl start redis
|
[sudo] systemctl start redis
|
||||||
```
|
```
|
||||||
|
|
||||||
To install the core platform:
|
#### Install through `pip`
|
||||||
|
|
||||||
* The `pip` way:
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
[sudo] pip3 install platypush
|
[sudo] pip3 install platypush
|
||||||
```
|
```
|
||||||
|
|
||||||
* The sources way:
|
#### Install through a system package manager
|
||||||
|
|
||||||
|
Note: currently only Arch Linux and derived distributions are supported.
|
||||||
|
|
||||||
|
You can either install the
|
||||||
|
[`platypush`](https://aur.archlinux.org/packages/platypush) package (for the
|
||||||
|
latest stable version) or the
|
||||||
|
[`platypush-git`](https://aur.archlinux.org/packages/platypush-git) package
|
||||||
|
(for the latest git version) through your favourite AUR package manager. For
|
||||||
|
example, using `yay`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
yay platypush
|
||||||
|
# Or
|
||||||
|
yay platypush-git
|
||||||
|
```
|
||||||
|
|
||||||
|
The Arch Linux packages on AUR are automatically updated upon new git commits
|
||||||
|
or tags.
|
||||||
|
|
||||||
|
#### Install from sources
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
git clone https://git.platypush.tech/platypush/platypush.git
|
git clone https://git.platypush.tech/platypush/platypush.git
|
||||||
cd platypush
|
cd platypush
|
||||||
|
[sudo] pip install .
|
||||||
|
# Or
|
||||||
[sudo] python3 setup.py install
|
[sudo] python3 setup.py install
|
||||||
```
|
```
|
||||||
|
|
||||||
Then install the extensions that you wish to use. There are a few ways to check the dependencies required by an
|
### Installing the dependencies for your extensions
|
||||||
extension:
|
|
||||||
|
|
||||||
#### Check their `extras` name in [`extras_require` under `setup.py`](https://git.platypush.tech/platypush/platypush/-/blob/master/setup.py#L72).
|
After installing the base platform, you may want to check the dependencies and
|
||||||
|
configuration required by the extensions that you wish to use. There are a few
|
||||||
|
ways to check the dependencies required by an extension:
|
||||||
|
|
||||||
If you follow this route then you can install the extra dependencies in one of the following ways:
|
#### Install via `extras` name
|
||||||
|
|
||||||
|
All the extensions that require extra dependencies are listed in the
|
||||||
|
[`extras_require` section under
|
||||||
|
`setup.py`](https://git.platypush.tech/platypush/platypush/-/blob/master/setup.py#L72).
|
||||||
|
|
||||||
|
#### Install via `manifest.yaml`
|
||||||
|
|
||||||
|
All the plugins and backends have a `manifest.yaml` file in their source folder.
|
||||||
|
Any extra dependencies are listed there
|
||||||
|
|
||||||
|
If you followed the `extras` or `manifest.yaml` way to discover the
|
||||||
|
dependencies, then you can install them in two ways:
|
||||||
|
|
||||||
1. `pip` installation:
|
1. `pip` installation:
|
||||||
|
|
||||||
|
@ -384,24 +516,17 @@ cd $DIR_TO_PLATYPUSH
|
||||||
[sudo] pip3 install '.[extra1,extra2,extra3]'
|
[sudo] pip3 install '.[extra1,extra2,extra3]'
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Check the dependencies/installation instructions reported under the plugin/backend documentation.
|
#### Check the instructions reported in the documentation
|
||||||
|
|
||||||
If you follow this route then simply run the commands listed in the plugin/backend documentation to get the dependencies
|
If you follow this route then simply run the commands listed in the
|
||||||
installed.
|
[plugin/backend documentation](https://docs.platypush.tech) to get the
|
||||||
|
dependencies installed.
|
||||||
|
|
||||||
#### Check/uncomment the associated lines in [`requirements.txt`](https://git.platypush.tech/platypush/platypush/-/blob/master/requirements.txt).
|
After installing the dependencies, create a configuration file under
|
||||||
|
`~/.config/platypush/config.yaml` (the application can load the configuration
|
||||||
If you follow this route then uncomment the lines in
|
from another location through the `-c` option) containing the configuration of
|
||||||
[`requirements.txt`](https://git.platypush.tech/platypush/platypush/-/blob/master/requirements.txt) associated to the
|
the backend and plugins that you want to use, and add any hooks and procedures
|
||||||
plugins/backends that you want to use and run:
|
for your use case.
|
||||||
|
|
||||||
```shell
|
|
||||||
[sudo] pip3 install -r requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
After installing the dependencies, create a configuration file under `~/.config/platypush/config.yaml` (the application
|
|
||||||
can load the configuration from another location through the `-c` option) containing the configuration of the backend
|
|
||||||
and plugins that you want to use, and add any hooks and procedures for your use case.
|
|
||||||
|
|
||||||
You can then start the service by simply running:
|
You can then start the service by simply running:
|
||||||
|
|
||||||
|
@ -410,85 +535,100 @@ platypush
|
||||||
```
|
```
|
||||||
|
|
||||||
It's advised to run it as a systemd service though - simply copy the provided
|
It's advised to run it as a systemd service though - simply copy the provided
|
||||||
[`.service` file](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/systemd/platypush.service) to
|
[`.service`
|
||||||
`~/.config/systemd/user`, check if the path of `platypush` matches the path where it's installed on your system, and
|
file](https://git.platypush.tech/platypush/platypush/-/blob/master/examples/systemd/platypush.service)
|
||||||
start the service via `systemctl`:
|
to `~/.config/systemd/user`, check if the path of `platypush` matches the path
|
||||||
|
where it's installed on your system, and start the service via `systemctl`:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
systemctl --user start platypush
|
systemctl --user start platypush
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Virtual environment installation](https://git.platypush.tech/platypush/platypush/-/wikis/Run-platypush-in-a-virtual-environment)
|
### Virtual environment installation
|
||||||
|
|
||||||
Platypush provides a script named `platyvenv` that can parse a `config.yaml` and automatically create a virtual
|
Platypush provides a script named `platyvenv` that can parse a `config.yaml`
|
||||||
environment (under `~/.local/share/platypush/venv/<device_id>`) with all the dependencies required by the configured
|
and automatically create a virtual environment (under
|
||||||
integrations.
|
`~/.local/share/platypush/venv/<device_id>`) with all the dependencies required
|
||||||
|
by the configured integrations.
|
||||||
|
|
||||||
1. Create the environment from a configuration file:
|
1. Create the environment from a configuration file:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
platyvenv build -c /path/to/config.yaml
|
platyvenv build -c /path/to/config.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Start the service from the virtual environment:
|
2. Start the service from the virtual environment:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# device_id matches either the hostname or the device_id in config.yaml
|
# device_id matches either the hostname or the device_id in config.yaml
|
||||||
platyvenv start device_id
|
platyvenv start device_id
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Stop the instance:
|
3. Stop the instance:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
platyvenv stop device_id
|
platyvenv stop device_id
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Remove the instance:
|
4. Remove the instance:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
platyvenv rm device_id
|
platyvenv rm device_id
|
||||||
```
|
```
|
||||||
|
|
||||||
### [Docker installation](https://git.platypush.tech/platypush/platypush/-/wikis/Run-platypush-in-a-container)
|
[Wiki instructions](https://git.platypush.tech/platypush/platypush/wiki/Run-platypush-in-a-virtual-environment)
|
||||||
|
|
||||||
You can also install Platypush in a container - the application provides a script named `platydock` that automatically
|
### Docker installation
|
||||||
creates a container instance from a `config.yaml`:
|
|
||||||
|
You can also install Platypush in a container - the application provides a
|
||||||
|
script named `platydock` that automatically creates a container instance from a
|
||||||
|
`config.yaml`:
|
||||||
|
|
||||||
1. Create the container from a configuration file:
|
1. Create the container from a configuration file:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
platydock build -c /path/to/config.yaml
|
platydock build -c /path/to/config.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Start the container:
|
2. Start the container:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# device_id matches either the hostname or the device_id in config.yaml
|
# device_id matches either the hostname or the device_id in config.yaml
|
||||||
platydock start device_id
|
platydock start device_id
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Stop the instance:
|
3. Stop the instance:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
platydock stop device_id
|
platydock stop device_id
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Remove the instance:
|
4. Remove the instance:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
platydock rm device_id
|
platydock rm device_id
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Note that both the virtual environment and Docker container option offer the
|
||||||
|
possibility to include extra YAML configuration files in the main `config.yaml`
|
||||||
|
through the `include` directive (as long as they are in the same folder as the
|
||||||
|
main `config.yaml`), as well as external Python scripts in a `scripts`
|
||||||
|
directory in the same folder as the `config.yaml`.
|
||||||
|
|
||||||
|
[Wiki instructions](https://git.platypush.tech/platypush/platypush/wiki/Run-platypush-in-a-container)
|
||||||
|
|
||||||
## Mobile app
|
## Mobile app
|
||||||
|
|
||||||
An [official Android app](https://f-droid.org/en/packages/tech.platypush.platypush/) is provided on the F-Droid store.
|
An [official Android
|
||||||
It allows to easily discover and manage multiple Platypush services on a network through the web interface, and it
|
app](https://f-droid.org/en/packages/tech.platypush.platypush/) is provided on
|
||||||
easily brings the power of Platypush to your fingertips.
|
the F-Droid store. It allows to easily discover and manage multiple Platypush
|
||||||
|
services on a network through the web interface, and it easily brings the power
|
||||||
|
of Platypush to your fingertips.
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
To run the tests simply run `pytest` either from the project root folder or the `tests/` folder.
|
To run the tests simply run `pytest` either from the project root folder or the
|
||||||
Or run the following command from the project root folder:
|
`tests/` folder. Or run the following command from the project root folder:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
python -m tests
|
python -m tests
|
||||||
|
@ -500,10 +640,11 @@ python -m tests
|
||||||
|
|
||||||
If you use and love Platypush, please consider [buying me a coffee/beer](https://paypal.me/fabiomanganiello).
|
If you use and love Platypush, please consider [buying me a coffee/beer](https://paypal.me/fabiomanganiello).
|
||||||
|
|
||||||
I've been working on Platypush all by myself in my spare time for the past few years, and I've made sure that it remains
|
I've been working on Platypush all by myself in my spare time for the past few
|
||||||
open and free.
|
years, and I've made sure that it remains open and free.
|
||||||
|
|
||||||
If you like this product, please consider supporting - I'm definitely not planning to get rich with this project, but
|
If you like this product, please consider supporting - I'm definitely not
|
||||||
I'd love to have at least the costs for the server covered by users.
|
planning to get rich with this project, but I'd love to have at least the costs
|
||||||
|
for the server covered by users.
|
||||||
|
|
||||||
Issues and requests opened by donors will also be given priority over others.
|
Issues and requests opened by donors will also be given priority over others.
|
||||||
|
|
BIN
assets/logo-128.png
Normal file
BIN
assets/logo-128.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
assets/logo-256.png
Normal file
BIN
assets/logo-256.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 20 KiB |
BIN
assets/logo-64.png
Normal file
BIN
assets/logo-64.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.1 KiB |
176
bin/platyvenv
176
bin/platyvenv
|
@ -6,12 +6,12 @@
|
||||||
# and automatically managed the required dependencies, as well as start, #
|
# and automatically managed the required dependencies, as well as start, #
|
||||||
# stop and remove them #
|
# stop and remove them #
|
||||||
# #
|
# #
|
||||||
# @author: Fabio Manganiello <blacklight86@gmail.com> #
|
# @author: Fabio Manganiello <fabio@platypush.tech> #
|
||||||
# @licence: MIT #
|
# @licence: MIT #
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
|
|
||||||
workdir=$HOME/.local/share/platypush/venv
|
workdir="$HOME/.local/share/platypush/venv"
|
||||||
|
|
||||||
function build {
|
function build {
|
||||||
cfgfile=
|
cfgfile=
|
||||||
|
@ -35,88 +35,74 @@ function build {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Parsing configuration file"
|
echo "Parsing configuration file"
|
||||||
deps=()
|
pip_cmd=
|
||||||
|
pkg_cmd=
|
||||||
includes=()
|
includes=()
|
||||||
|
cmd_exec=()
|
||||||
|
|
||||||
while read -r line; do
|
while read -r line; do
|
||||||
echo ${line} | egrep '``pip install .+?``' > /dev/null 2>&1
|
if echo "$line" | grep -E "^pip:\s*"; then
|
||||||
if (( $? != 0 )); then
|
pip_cmd="$(echo "$line" | sed -r -e 's/^pip:\s*(.*)'/\\1/)"
|
||||||
continue
|
elif echo "$line" | grep -E "^packages:\s*"; then
|
||||||
fi
|
pkg_cmd="$(echo "$line" | sed -r -e 's/^packages:\s*(.*)'/\\1/)"
|
||||||
|
elif echo "$line" | grep -E "^exec:\s*"; then
|
||||||
dep=$(echo ${line} | sed -r -e 's/.*``pip install (.+?)``.*/\1/')
|
cmd_exec+=("$(echo "$line" | sed -r -e 's/^exec:\s*(.*)'/\\1/)")
|
||||||
deps+=("$dep")
|
elif echo "$line" | grep -E "^include:\s*"; then
|
||||||
done <<< $(python <<EOF
|
includes+=("$(echo "$line" | sed -r -e 's/^include:\s*(.*)'/\\1/)")
|
||||||
|
elif echo "$line" | grep -E "^device_id:\s*"; then
|
||||||
|
device_id="$(echo "$line" | sed -r -e 's/^device_id:\s*(.*)'/\\1/)"
|
||||||
|
fi
|
||||||
|
done <<< "$(python <<EOF
|
||||||
from platypush.config import Config
|
from platypush.config import Config
|
||||||
from platypush.context import get_plugin, get_backend, register_backends
|
from platypush.utils.manifest import get_install_commands_from_conf
|
||||||
|
|
||||||
Config.init('`realpath ${cfgfile}`')
|
deps = get_install_commands_from_conf('$(realpath "${cfgfile}")')
|
||||||
register_backends()
|
print(f'device_id: {Config.get("device_id")}')
|
||||||
backend_config = Config.get_backends()
|
|
||||||
|
|
||||||
for name in Config.get_backends().keys():
|
if deps.get('pip'):
|
||||||
backend = get_backend(name)
|
print(f'pip: {deps["pip"]}')
|
||||||
print(backend.__doc__)
|
|
||||||
|
|
||||||
for name in Config.get_plugins().keys():
|
if deps.get('packages'):
|
||||||
try:
|
print(f'packages: {deps["packages"]}')
|
||||||
plugin = get_plugin(name)
|
|
||||||
print(plugin.__doc__)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
|
|
||||||
while read -r include; do
|
for cmd in deps.get('exec', []):
|
||||||
includes+=(${include})
|
print(f'exec: {cmd}')
|
||||||
done <<< $(python <<EOF
|
|
||||||
from platypush.config import Config
|
|
||||||
from platypush.context import get_plugin, get_backend, register_backends
|
|
||||||
|
|
||||||
Config.init('`realpath ${cfgfile}`')
|
|
||||||
|
|
||||||
for include in Config._included_files:
|
for include in Config._included_files:
|
||||||
print(include)
|
print(f'include: {include}')
|
||||||
EOF
|
EOF
|
||||||
)
|
)"
|
||||||
|
|
||||||
device_id=$(python <<EOF
|
envdir="${workdir}/${device_id}"
|
||||||
from platypush.config import Config
|
etcdir="${envdir}/etc/platypush"
|
||||||
|
|
||||||
Config.init('`realpath ${cfgfile}`')
|
|
||||||
print(Config.get('device_id'))
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
|
|
||||||
envdir=${workdir}/${device_id}
|
|
||||||
etcdir=${envdir}/etc/platypush
|
|
||||||
|
|
||||||
echo "Preparing virtual environment for device $device_id"
|
echo "Preparing virtual environment for device $device_id"
|
||||||
mkdir -p "$envdir"
|
mkdir -p "$envdir"
|
||||||
mkdir -p "$etcdir"
|
mkdir -p "$etcdir"
|
||||||
srcdir=`dirname "$cfgfile"`
|
srcdir=$(dirname "$cfgfile")
|
||||||
|
|
||||||
for ((i=0; $i < ${#includes[@]}; i++)); do
|
for ((i=0; i < ${#includes[@]}; i++)); do
|
||||||
incdir=`dirname "${includes[$i]}"`
|
incdir=$(dirname "${includes[$i]}")
|
||||||
incdir=`realpath --relative-to="$srcdir" "$incdir"`
|
incdir=$(realpath --relative-to="$srcdir" "$incdir")
|
||||||
destdir="$etcdir/$incdir"
|
destdir="$etcdir/$incdir"
|
||||||
mkdir -p "$destdir"
|
mkdir -p "$destdir"
|
||||||
cp "${includes[$i]}" "$destdir"
|
cp "${includes[$i]}" "$destdir"
|
||||||
done
|
done
|
||||||
|
|
||||||
cp "$cfgfile" "$etcdir/config.yaml"
|
cp "$cfgfile" "$etcdir/config.yaml"
|
||||||
cfgfile=${etcdir}/config.yaml
|
cfgfile="${etcdir}/config.yaml"
|
||||||
|
|
||||||
python3 -m venv ${envdir}
|
python3 -m venv "${envdir}"
|
||||||
cd ${envdir}
|
cd "${envdir}" || exit 1
|
||||||
source ${envdir}/bin/activate
|
source "${envdir}/bin/activate"
|
||||||
|
|
||||||
echo "Installing required dependencies"
|
echo "Installing required dependencies"
|
||||||
|
# shellcheck disable=SC2086
|
||||||
|
[ -n "${pkg_cmd}" ] && sudo ${pkg_cmd}
|
||||||
|
[ -n "${pip_cmd}" ] && ${pip_cmd}
|
||||||
|
|
||||||
for ((i=0; $i < ${#deps[@]}; i++)); do
|
for ((i=0; i < ${#cmd_exec[@]}; i++)); do
|
||||||
echo ${deps[$i]}
|
${cmd_exec[$i]}
|
||||||
done | sort -u | while read dep; do
|
|
||||||
pip install ${dep}
|
|
||||||
done
|
done
|
||||||
|
|
||||||
pip install --upgrade git+https://git.platypush.tech/platypush/platypush.git
|
pip install --upgrade git+https://git.platypush.tech/platypush/platypush.git
|
||||||
|
@ -130,44 +116,41 @@ function start {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
env=$1
|
env=$1
|
||||||
envdir=${workdir}/${env}
|
envdir="${workdir}/${env}"
|
||||||
logsdir=${envdir}/var/log/platypush
|
rundir="${envdir}/var/run"
|
||||||
rundir=${envdir}/var/run
|
pidfile="${rundir}/platypush.pid"
|
||||||
pidfile=${rundir}/platypush.pid
|
cfgfile="${envdir}/etc/platypush/config.yaml"
|
||||||
cfgfile=${envdir}/etc/platypush/config.yaml
|
|
||||||
|
|
||||||
if [[ ! -d "$envdir" ]]; then
|
if [[ ! -d "$envdir" ]]; then
|
||||||
echo "No such directory: $envdir" >&2
|
echo "No such directory: $envdir" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p ${logsdir}
|
mkdir -p "${rundir}"
|
||||||
mkdir -p ${rundir}
|
|
||||||
|
|
||||||
if [[ -f "$pidfile" ]]; then
|
if [[ -f "$pidfile" ]]; then
|
||||||
pid=`cat "$pidfile"`
|
if pgrep -F "${pidfile}"; then
|
||||||
if ps -p ${pid} | grep platypush; then
|
echo "Another instance (PID $(cat "${pidfile}")) is running, please stop that instance first"
|
||||||
echo "Another instance (PID $pid) is running, please stop that instance first"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "A PID file was found but the process doesn't seem to be running, starting anyway"
|
echo "A PID file was found but the process does not seem to be running, starting anyway"
|
||||||
rm -f "$pidfile"
|
rm -f "$pidfile"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
python3 -m venv ${envdir}
|
python3 -m venv "${envdir}"
|
||||||
cd ${envdir}
|
cd "${envdir}" || exit 1
|
||||||
source bin/activate
|
source bin/activate
|
||||||
bin/platypush -c "$cfgfile" -P "$pidfile" > ${logsdir}/stdout.log 2> ${logsdir}/stderr.log &
|
bin/platypush -c "$cfgfile" -P "$pidfile" &
|
||||||
start_time=`date +'%s'`
|
start_time=$(date +'%s')
|
||||||
timeout=30
|
timeout=30
|
||||||
|
|
||||||
while :; do
|
while :; do
|
||||||
[[ -f "$pidfile" ]] && break
|
[[ -f "$pidfile" ]] && break
|
||||||
now=`date +'%s'`
|
now=$(date +'%s')
|
||||||
let elapsed=$now-$start_time
|
elapsed=$(( now-start_time ))
|
||||||
if (( ${elapsed} >= ${timeout} )); then
|
if (( elapsed >= timeout )); then
|
||||||
echo "Platypush instance '$env' didn't start within $timeout seconds" >&2
|
echo "Platypush instance '$env' did not start within $timeout seconds" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -175,9 +158,11 @@ function start {
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
pid=`cat "$pidfile"`
|
pid=$(cat "$pidfile")
|
||||||
echo
|
echo
|
||||||
echo "Platypush environment $env started with PID $pid, logs dir: $logsdir"
|
echo "Platypush environment $env started with PID $pid"
|
||||||
|
wait "${pid}"
|
||||||
|
echo "Platypush environment $env terminated"
|
||||||
}
|
}
|
||||||
|
|
||||||
function stop {
|
function stop {
|
||||||
|
@ -187,9 +172,9 @@ function stop {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
env=$1
|
env=$1
|
||||||
envdir=${workdir}/${env}
|
envdir="${workdir}/${env}"
|
||||||
rundir=${envdir}/var/run
|
rundir="${envdir}/var/run"
|
||||||
pidfile=${rundir}/platypush.pid
|
pidfile="${rundir}/platypush.pid"
|
||||||
|
|
||||||
if [[ ! -d "$envdir" ]]; then
|
if [[ ! -d "$envdir" ]]; then
|
||||||
echo "No such directory: $envdir" >&2
|
echo "No such directory: $envdir" >&2
|
||||||
|
@ -197,12 +182,13 @@ function stop {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -f "$pidfile" ]]; then
|
if [[ ! -f "$pidfile" ]]; then
|
||||||
echo "No pidfile found for instance "${env}""
|
echo "No pidfile found for instance \"${env}\""
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pid=`cat "$pidfile"`
|
pid=$(cat "$pidfile")
|
||||||
pids="$pid `ps --no-headers -o pid= --ppid $pid`"
|
pids="$pid $(ps --no-headers -o pid= --ppid "$pid")"
|
||||||
|
# shellcheck disable=SC2086
|
||||||
kill -9 ${pids}
|
kill -9 ${pids}
|
||||||
rm -f "$pidfile"
|
rm -f "$pidfile"
|
||||||
echo "Instance '$env' with PID $pid stopped"
|
echo "Instance '$env' with PID $pid stopped"
|
||||||
|
@ -214,9 +200,9 @@ function rme {
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
envdir=${workdir}/$1
|
envdir="${workdir}/$1"
|
||||||
rundir=${envdir}/var/run
|
rundir="${envdir}/var/run"
|
||||||
pidfile=${rundir}/platypush.pid
|
pidfile="${rundir}/platypush.pid"
|
||||||
|
|
||||||
if [[ ! -d "$envdir" ]]; then
|
if [[ ! -d "$envdir" ]]; then
|
||||||
echo "No such directory: $envdir" >&2
|
echo "No such directory: $envdir" >&2
|
||||||
|
@ -224,14 +210,18 @@ function rme {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -f "$pidfile" ]]; then
|
if [[ -f "$pidfile" ]]; then
|
||||||
if ps -p `cat "$pidfile"` | grep platypush; then
|
if pgrep -F "${pidfile}"; then
|
||||||
echo "Another instance (PID $pidfile) is running, please stop that instance first"
|
echo "Another instance (PID $(cat "$pidfile")) is running, please stop that instance first"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "A PID file was found but the process doesn't seem to be running, removing anyway"
|
echo "A PID file was found but the process does not seem to be running, removing anyway"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "WARNING: This operation will permanently remove the Platypush environment $1"
|
||||||
|
echo -n "Are you sure you want to continue? (y/N) "
|
||||||
|
IFS= read -r answer
|
||||||
|
echo "$answer" | grep -E '^[yY]' >/dev/null || exit 0
|
||||||
rm -rf "$envdir"
|
rm -rf "$envdir"
|
||||||
echo "$envdir removed"
|
echo "$envdir removed"
|
||||||
}
|
}
|
||||||
|
@ -247,13 +237,13 @@ fi
|
||||||
|
|
||||||
action=$1
|
action=$1
|
||||||
shift
|
shift
|
||||||
mkdir -p ${workdir}
|
mkdir -p "${workdir}"
|
||||||
|
|
||||||
|
# shellcheck disable=SC2048,SC2086
|
||||||
case ${action} in
|
case ${action} in
|
||||||
'build') build;;
|
'build') build $*;;
|
||||||
'start') start $*;;
|
'start') start $*;;
|
||||||
'stop') stop $*;;
|
'stop') stop $*;;
|
||||||
'rm') rme $*;;
|
'rm') rme $*;;
|
||||||
*) usage;;
|
*) usage;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,12 @@ import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
from random import randint
|
||||||
from typing import Union, List
|
from typing import Union, List
|
||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils.parsers.rst import Directive
|
from docutils.parsers.rst import Directive
|
||||||
|
from marshmallow import fields
|
||||||
|
|
||||||
|
|
||||||
class SchemaDirective(Directive):
|
class SchemaDirective(Directive):
|
||||||
|
@ -22,17 +24,43 @@ class SchemaDirective(Directive):
|
||||||
|
|
||||||
sys.path.insert(0, _schemas_path)
|
sys.path.insert(0, _schemas_path)
|
||||||
|
|
||||||
@staticmethod
|
@classmethod
|
||||||
def _get_field_value(field) -> str:
|
def _get_field_value(cls, field):
|
||||||
metadata = getattr(field, 'metadata', {})
|
metadata = getattr(field, 'metadata', {})
|
||||||
return metadata.get('example', metadata.get('description', str(field.__class__.__name__).lower()))
|
if metadata.get('example'):
|
||||||
|
return metadata['example']
|
||||||
|
if metadata.get('description'):
|
||||||
|
return metadata['description']
|
||||||
|
|
||||||
|
if isinstance(field, fields.Number):
|
||||||
|
return randint(1, 99)
|
||||||
|
if isinstance(field, fields.Boolean):
|
||||||
|
return bool(randint(0, 1))
|
||||||
|
if isinstance(field, fields.URL):
|
||||||
|
return 'https://example.org'
|
||||||
|
if isinstance(field, fields.List):
|
||||||
|
return [cls._get_field_value(field.inner)]
|
||||||
|
if isinstance(field, fields.Dict):
|
||||||
|
return {
|
||||||
|
cls._get_field_value(field.key_field) if field.key_field else 'key':
|
||||||
|
cls._get_field_value(field.value_field) if field.value_field else 'value'
|
||||||
|
}
|
||||||
|
if isinstance(field, fields.Nested):
|
||||||
|
ret = {
|
||||||
|
name: cls._get_field_value(f)
|
||||||
|
for name, f in field.nested().fields.items()
|
||||||
|
}
|
||||||
|
|
||||||
|
return [ret] if field.many else ret
|
||||||
|
|
||||||
|
return str(field.__class__.__name__).lower()
|
||||||
|
|
||||||
def _parse_schema(self) -> Union[dict, List[dict]]:
|
def _parse_schema(self) -> Union[dict, List[dict]]:
|
||||||
m = self._schema_regex.match('\n'.join(self.content))
|
m = self._schema_regex.match('\n'.join(self.content))
|
||||||
schema_module_name = '.'.join(['platypush.schemas', *(m.group(1).split('.')[:-1])])
|
schema_module_name = '.'.join(['platypush.schemas', *(m.group(1).split('.')[:-1])])
|
||||||
schema_module = importlib.import_module(schema_module_name)
|
schema_module = importlib.import_module(schema_module_name)
|
||||||
schema_class = getattr(schema_module, m.group(1).split('.')[-1])
|
schema_class = getattr(schema_module, m.group(1).split('.')[-1])
|
||||||
schema_args = eval(f'dict({m.group(3)})')
|
schema_args = eval(f'dict({m.group(3)})') if m.group(3) else {}
|
||||||
schema = schema_class(**schema_args)
|
schema = schema_class(**schema_args)
|
||||||
output = {
|
output = {
|
||||||
name: self._get_field_value(field)
|
name: self._get_field_value(field)
|
||||||
|
|
|
@ -3,15 +3,13 @@ Backends
|
||||||
========
|
========
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 1
|
||||||
:caption: Backends:
|
:caption: Backends:
|
||||||
|
|
||||||
platypush/backend/adafruit.io.rst
|
platypush/backend/adafruit.io.rst
|
||||||
platypush/backend/alarm.rst
|
platypush/backend/alarm.rst
|
||||||
platypush/backend/assistant.rst
|
|
||||||
platypush/backend/assistant.google.rst
|
platypush/backend/assistant.google.rst
|
||||||
platypush/backend/assistant.snowboy.rst
|
platypush/backend/assistant.snowboy.rst
|
||||||
platypush/backend/bluetooth.rst
|
|
||||||
platypush/backend/bluetooth.fileserver.rst
|
platypush/backend/bluetooth.fileserver.rst
|
||||||
platypush/backend/bluetooth.pushserver.rst
|
platypush/backend/bluetooth.pushserver.rst
|
||||||
platypush/backend/bluetooth.scanner.rst
|
platypush/backend/bluetooth.scanner.rst
|
||||||
|
@ -19,9 +17,7 @@ Backends
|
||||||
platypush/backend/button.flic.rst
|
platypush/backend/button.flic.rst
|
||||||
platypush/backend/camera.pi.rst
|
platypush/backend/camera.pi.rst
|
||||||
platypush/backend/chat.telegram.rst
|
platypush/backend/chat.telegram.rst
|
||||||
platypush/backend/clipboard.rst
|
|
||||||
platypush/backend/covid19.rst
|
platypush/backend/covid19.rst
|
||||||
platypush/backend/dbus.rst
|
|
||||||
platypush/backend/file.monitor.rst
|
platypush/backend/file.monitor.rst
|
||||||
platypush/backend/foursquare.rst
|
platypush/backend/foursquare.rst
|
||||||
platypush/backend/github.rst
|
platypush/backend/github.rst
|
||||||
|
@ -44,6 +40,7 @@ Backends
|
||||||
platypush/backend/music.mopidy.rst
|
platypush/backend/music.mopidy.rst
|
||||||
platypush/backend/music.mpd.rst
|
platypush/backend/music.mpd.rst
|
||||||
platypush/backend/music.snapcast.rst
|
platypush/backend/music.snapcast.rst
|
||||||
|
platypush/backend/music.spotify.rst
|
||||||
platypush/backend/nextcloud.rst
|
platypush/backend/nextcloud.rst
|
||||||
platypush/backend/nfc.rst
|
platypush/backend/nfc.rst
|
||||||
platypush/backend/nodered.rst
|
platypush/backend/nodered.rst
|
||||||
|
@ -51,7 +48,6 @@ Backends
|
||||||
platypush/backend/pushbullet.rst
|
platypush/backend/pushbullet.rst
|
||||||
platypush/backend/redis.rst
|
platypush/backend/redis.rst
|
||||||
platypush/backend/scard.rst
|
platypush/backend/scard.rst
|
||||||
platypush/backend/sensor.rst
|
|
||||||
platypush/backend/sensor.accelerometer.rst
|
platypush/backend/sensor.accelerometer.rst
|
||||||
platypush/backend/sensor.arduino.rst
|
platypush/backend/sensor.arduino.rst
|
||||||
platypush/backend/sensor.battery.rst
|
platypush/backend/sensor.battery.rst
|
||||||
|
@ -64,9 +60,8 @@ Backends
|
||||||
platypush/backend/sensor.leap.rst
|
platypush/backend/sensor.leap.rst
|
||||||
platypush/backend/sensor.ltr559.rst
|
platypush/backend/sensor.ltr559.rst
|
||||||
platypush/backend/sensor.mcp3008.rst
|
platypush/backend/sensor.mcp3008.rst
|
||||||
platypush/backend/sensor.motion.pwm3901.rst
|
platypush/backend/sensor.motion.pmw3901.rst
|
||||||
platypush/backend/sensor.serial.rst
|
platypush/backend/sensor.serial.rst
|
||||||
platypush/backend/stt.rst
|
|
||||||
platypush/backend/stt.deepspeech.rst
|
platypush/backend/stt.deepspeech.rst
|
||||||
platypush/backend/stt.picovoice.hotword.rst
|
platypush/backend/stt.picovoice.hotword.rst
|
||||||
platypush/backend/stt.picovoice.speech.rst
|
platypush/backend/stt.picovoice.speech.rst
|
||||||
|
@ -74,7 +69,6 @@ Backends
|
||||||
platypush/backend/todoist.rst
|
platypush/backend/todoist.rst
|
||||||
platypush/backend/travisci.rst
|
platypush/backend/travisci.rst
|
||||||
platypush/backend/trello.rst
|
platypush/backend/trello.rst
|
||||||
platypush/backend/weather.rst
|
|
||||||
platypush/backend/weather.buienradar.rst
|
platypush/backend/weather.buienradar.rst
|
||||||
platypush/backend/weather.darksky.rst
|
platypush/backend/weather.darksky.rst
|
||||||
platypush/backend/weather.openweathermap.rst
|
platypush/backend/weather.openweathermap.rst
|
||||||
|
|
|
@ -71,7 +71,7 @@ master_doc = 'index'
|
||||||
#
|
#
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
# Usually you set "language" from the command line for these cases.
|
# Usually you set "language" from the command line for these cases.
|
||||||
language = None
|
language = 'en'
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
# List of patterns, relative to source directory, that match files and
|
||||||
# directories to ignore when looking for source files.
|
# directories to ignore when looking for source files.
|
||||||
|
@ -89,8 +89,11 @@ pygments_style = 'sphinx'
|
||||||
#
|
#
|
||||||
# html_theme = 'haiku'
|
# html_theme = 'haiku'
|
||||||
# html_theme = 'sphinx_rtd_theme'
|
# html_theme = 'sphinx_rtd_theme'
|
||||||
html_theme = 'sphinx_material'
|
html_theme = 'sphinx_book_theme'
|
||||||
|
|
||||||
|
html_title = 'Platypush Documentation'
|
||||||
|
html_logo = '../../assets/logo-64.png'
|
||||||
|
html_favicon = '../../platypush/backend/http/webapp/public/favicon.ico'
|
||||||
html_domain_indices = True
|
html_domain_indices = True
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
|
@ -98,50 +101,12 @@ html_domain_indices = True
|
||||||
# documentation.
|
# documentation.
|
||||||
#
|
#
|
||||||
html_theme_options = {
|
html_theme_options = {
|
||||||
'nav_title': 'Platypush documentation',
|
'toc_title': 'Platypush documentation',
|
||||||
'repo_url': 'https://git.platypush.tech/platypush/platypush',
|
'repository_url': 'https://git.platypush.tech/platypush/platypush',
|
||||||
'repo_name': 'Source code',
|
'use_repository_button': True,
|
||||||
'repo_type': 'gitlab',
|
'use_issues_button': True,
|
||||||
'color_primary': 'green',
|
'use_fullscreen_button': True,
|
||||||
'color_accent': 'light-green',
|
'home_page_in_toc': True,
|
||||||
'logo_icon': '🕮',
|
|
||||||
'nav_links': [
|
|
||||||
{
|
|
||||||
'href': 'https://platypush.tech/',
|
|
||||||
'title': 'Homepage',
|
|
||||||
'internal': False,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'href': 'https://blog.platypush.tech/',
|
|
||||||
'title': 'Blog',
|
|
||||||
'internal': False,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'href': 'https://git.platypush.tech/platypush/platypush',
|
|
||||||
'title': 'Repository',
|
|
||||||
'internal': False,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'href': 'https://git.platypush.tech/platypush/platypush/-/wikis/home',
|
|
||||||
'title': 'Wiki',
|
|
||||||
'internal': False,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'href': 'https://chrome.google.com/webstore/detail/platypush/aphldjclndofhflbbdnmpejbjgomkbie',
|
|
||||||
'title': 'Chrome Extension',
|
|
||||||
'internal': False,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'href': 'https://addons.mozilla.org/en-US/firefox/addon/platypush/',
|
|
||||||
'title': 'Firefox Extension',
|
|
||||||
'internal': False,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'href': 'https://f-droid.org/en/packages/tech.platypush.platypush/',
|
|
||||||
'title': 'Android App',
|
|
||||||
'internal': False,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
@ -157,9 +122,9 @@ html_theme_options = {
|
||||||
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
|
# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
|
||||||
# 'searchbox.html']``.
|
# 'searchbox.html']``.
|
||||||
#
|
#
|
||||||
html_sidebars = {
|
# html_sidebars = {
|
||||||
'**': ['logo-text.html', 'globaltoc.html', 'localtoc.html', 'searchbox.html']
|
# '**': ['logo-text.html', 'globaltoc.html', 'localtoc.html', 'searchbox.html']
|
||||||
}
|
# }
|
||||||
|
|
||||||
# -- Options for HTMLHelp output ---------------------------------------------
|
# -- Options for HTMLHelp output ---------------------------------------------
|
||||||
|
|
||||||
|
@ -173,15 +138,12 @@ latex_elements = {
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
#
|
#
|
||||||
# 'papersize': 'letterpaper',
|
# 'papersize': 'letterpaper',
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
#
|
#
|
||||||
# 'pointsize': '10pt',
|
# 'pointsize': '10pt',
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
# Additional stuff for the LaTeX preamble.
|
||||||
#
|
#
|
||||||
# 'preamble': '',
|
# 'preamble': '',
|
||||||
|
|
||||||
# Latex figure (float) alignment
|
# Latex figure (float) alignment
|
||||||
#
|
#
|
||||||
# 'figure_align': 'htbp',
|
# 'figure_align': 'htbp',
|
||||||
|
@ -191,8 +153,7 @@ latex_elements = {
|
||||||
# (source start file, target name, title,
|
# (source start file, target name, title,
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(master_doc, 'platypush.tex', 'platypush Documentation',
|
(master_doc, 'platypush.tex', 'platypush Documentation', 'BlackLight', 'manual'),
|
||||||
'BlackLight', 'manual'),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -200,10 +161,7 @@ latex_documents = [
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [(master_doc, 'platypush', 'platypush Documentation', [author], 1)]
|
||||||
(master_doc, 'platypush', 'platypush Documentation',
|
|
||||||
[author], 1)
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output ----------------------------------------------
|
# -- Options for Texinfo output ----------------------------------------------
|
||||||
|
@ -212,9 +170,15 @@ man_pages = [
|
||||||
# (source start file, target name, title, author,
|
# (source start file, target name, title, author,
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
(master_doc, 'platypush', 'platypush Documentation',
|
(
|
||||||
author, 'platypush', 'One line description of project.',
|
master_doc,
|
||||||
'Miscellaneous'),
|
'platypush',
|
||||||
|
'platypush Documentation',
|
||||||
|
author,
|
||||||
|
'platypush',
|
||||||
|
'One line description of project.',
|
||||||
|
'Miscellaneous',
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -230,100 +194,119 @@ intersphinx_mapping = {'https://docs.python.org/': None}
|
||||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||||
todo_include_todos = True
|
todo_include_todos = True
|
||||||
|
|
||||||
autodoc_mock_imports = ['googlesamples.assistant.grpc.audio_helpers',
|
autodoc_default_options = {
|
||||||
'google.assistant.embedded',
|
'members': True,
|
||||||
'google.assistant.library',
|
'show-inheritance': True,
|
||||||
'google.assistant.library.event',
|
}
|
||||||
'google.assistant.library.file_helpers',
|
|
||||||
'google.oauth2.credentials',
|
autodoc_mock_imports = [
|
||||||
'oauth2client',
|
'googlesamples.assistant.grpc.audio_helpers',
|
||||||
'apiclient',
|
'google.assistant.embedded',
|
||||||
'tenacity',
|
'google.assistant.library',
|
||||||
'smartcard',
|
'google.assistant.library.event',
|
||||||
'Leap',
|
'google.assistant.library.file_helpers',
|
||||||
'oauth2client',
|
'google.oauth2.credentials',
|
||||||
'rtmidi',
|
'oauth2client',
|
||||||
'bluetooth',
|
'apiclient',
|
||||||
'gevent.wsgi',
|
'tenacity',
|
||||||
'Adafruit_IO',
|
'smartcard',
|
||||||
'pyperclip',
|
'Leap',
|
||||||
'dbus',
|
'oauth2client',
|
||||||
'inputs',
|
'rtmidi',
|
||||||
'inotify',
|
'bluetooth',
|
||||||
'omxplayer',
|
'gevent.wsgi',
|
||||||
'plexapi',
|
'Adafruit_IO',
|
||||||
'cwiid',
|
'pyperclip',
|
||||||
'sounddevice',
|
'pydbus',
|
||||||
'soundfile',
|
'inputs',
|
||||||
'numpy',
|
'inotify',
|
||||||
'cv2',
|
'omxplayer',
|
||||||
'nfc',
|
'plexapi',
|
||||||
'ndef',
|
'cwiid',
|
||||||
'bcrypt',
|
'sounddevice',
|
||||||
'google',
|
'soundfile',
|
||||||
'feedparser',
|
'numpy',
|
||||||
'kafka',
|
'cv2',
|
||||||
'googlesamples',
|
'nfc',
|
||||||
'icalendar',
|
'ndef',
|
||||||
'httplib2',
|
'bcrypt',
|
||||||
'mpd',
|
'google',
|
||||||
'serial',
|
'feedparser',
|
||||||
'pyHS100',
|
'kafka',
|
||||||
'grpc',
|
'googlesamples',
|
||||||
'envirophat',
|
'icalendar',
|
||||||
'gps',
|
'httplib2',
|
||||||
'picamera',
|
'mpd',
|
||||||
'pwm3901',
|
'serial',
|
||||||
'PIL',
|
'pyHS100',
|
||||||
'croniter',
|
'grpc',
|
||||||
'pyaudio',
|
'envirophat',
|
||||||
'avs',
|
'gps',
|
||||||
'PyOBEX',
|
'picamera',
|
||||||
'todoist',
|
'pmw3901',
|
||||||
'trello',
|
'PIL',
|
||||||
'telegram',
|
'croniter',
|
||||||
'telegram.ext',
|
'pyaudio',
|
||||||
'pyfirmata2',
|
'avs',
|
||||||
'cups',
|
'PyOBEX',
|
||||||
'graphyte',
|
'todoist',
|
||||||
'cpuinfo',
|
'trello',
|
||||||
'psutil',
|
'telegram',
|
||||||
'openzwave',
|
'telegram.ext',
|
||||||
'deepspeech',
|
'pyfirmata2',
|
||||||
'wave',
|
'cups',
|
||||||
'pvporcupine ',
|
'graphyte',
|
||||||
'pvcheetah',
|
'cpuinfo',
|
||||||
'pyotp',
|
'psutil',
|
||||||
'linode_api4',
|
'openzwave',
|
||||||
'pyzbar',
|
'deepspeech',
|
||||||
'tensorflow',
|
'wave',
|
||||||
'keras',
|
'pvporcupine ',
|
||||||
'pandas',
|
'pvcheetah',
|
||||||
'samsungtvws',
|
'pyotp',
|
||||||
'paramiko',
|
'linode_api4',
|
||||||
'luma',
|
'pyzbar',
|
||||||
'zeroconf',
|
'tensorflow',
|
||||||
'dbus',
|
'keras',
|
||||||
'gi',
|
'pandas',
|
||||||
'gi.repository',
|
'samsungtvws',
|
||||||
'twilio',
|
'paramiko',
|
||||||
'pytz',
|
'luma',
|
||||||
'Adafruit_Python_DHT',
|
'zeroconf',
|
||||||
'RPi.GPIO',
|
'dbus',
|
||||||
'RPLCD',
|
'gi',
|
||||||
'imapclient',
|
'gi.repository',
|
||||||
'pysmartthings',
|
'twilio',
|
||||||
'aiohttp',
|
'Adafruit_Python_DHT',
|
||||||
'watchdog',
|
'RPi.GPIO',
|
||||||
]
|
'RPLCD',
|
||||||
|
'imapclient',
|
||||||
|
'pysmartthings',
|
||||||
|
'aiohttp',
|
||||||
|
'watchdog',
|
||||||
|
'pyngrok',
|
||||||
|
'irc',
|
||||||
|
'irc.bot',
|
||||||
|
'irc.strings',
|
||||||
|
'irc.client',
|
||||||
|
'irc.connection',
|
||||||
|
'irc.events',
|
||||||
|
'defusedxml',
|
||||||
|
'nio',
|
||||||
|
'aiofiles',
|
||||||
|
'aiofiles.os',
|
||||||
|
'async_lru',
|
||||||
|
]
|
||||||
|
|
||||||
sys.path.insert(0, os.path.abspath('../..'))
|
sys.path.insert(0, os.path.abspath('../..'))
|
||||||
|
|
||||||
|
|
||||||
def skip(app, what, name, obj, skip, options):
|
def skip(app, what, name, obj, skip, options):
|
||||||
if name == "__init__":
|
if name == "__init__":
|
||||||
return False
|
return False
|
||||||
return skip
|
return skip
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.connect("autodoc-skip-member", skip)
|
app.connect("autodoc-skip-member", skip)
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ Events
|
||||||
======
|
======
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 1
|
||||||
:caption: Events:
|
:caption: Events:
|
||||||
|
|
||||||
platypush/events/adafruit.rst
|
platypush/events/adafruit.rst
|
||||||
|
@ -13,10 +13,12 @@ Events
|
||||||
platypush/events/bluetooth.rst
|
platypush/events/bluetooth.rst
|
||||||
platypush/events/button.flic.rst
|
platypush/events/button.flic.rst
|
||||||
platypush/events/camera.rst
|
platypush/events/camera.rst
|
||||||
|
platypush/events/chat.slack.rst
|
||||||
platypush/events/chat.telegram.rst
|
platypush/events/chat.telegram.rst
|
||||||
platypush/events/clipboard.rst
|
platypush/events/clipboard.rst
|
||||||
platypush/events/covid19.rst
|
platypush/events/covid19.rst
|
||||||
platypush/events/custom.rst
|
platypush/events/custom.rst
|
||||||
|
platypush/events/dbus.rst
|
||||||
platypush/events/distance.rst
|
platypush/events/distance.rst
|
||||||
platypush/events/file.rst
|
platypush/events/file.rst
|
||||||
platypush/events/foursquare.rst
|
platypush/events/foursquare.rst
|
||||||
|
@ -25,27 +27,35 @@ Events
|
||||||
platypush/events/google.rst
|
platypush/events/google.rst
|
||||||
platypush/events/google.fit.rst
|
platypush/events/google.fit.rst
|
||||||
platypush/events/google.pubsub.rst
|
platypush/events/google.pubsub.rst
|
||||||
|
platypush/events/gotify.rst
|
||||||
|
platypush/events/gpio.rst
|
||||||
platypush/events/gps.rst
|
platypush/events/gps.rst
|
||||||
platypush/events/http.rst
|
platypush/events/http.rst
|
||||||
platypush/events/http.hook.rst
|
platypush/events/http.hook.rst
|
||||||
platypush/events/http.rss.rst
|
platypush/events/http.rss.rst
|
||||||
platypush/events/inotify.rst
|
platypush/events/inotify.rst
|
||||||
|
platypush/events/irc.rst
|
||||||
platypush/events/joystick.rst
|
platypush/events/joystick.rst
|
||||||
platypush/events/kafka.rst
|
platypush/events/kafka.rst
|
||||||
platypush/events/light.rst
|
platypush/events/light.rst
|
||||||
platypush/events/linode.rst
|
platypush/events/linode.rst
|
||||||
platypush/events/log.http.rst
|
platypush/events/log.http.rst
|
||||||
platypush/events/mail.rst
|
platypush/events/mail.rst
|
||||||
|
platypush/events/matrix.rst
|
||||||
platypush/events/media.rst
|
platypush/events/media.rst
|
||||||
platypush/events/midi.rst
|
platypush/events/midi.rst
|
||||||
platypush/events/mqtt.rst
|
platypush/events/mqtt.rst
|
||||||
platypush/events/music.rst
|
platypush/events/music.rst
|
||||||
platypush/events/music.snapcast.rst
|
platypush/events/music.snapcast.rst
|
||||||
|
platypush/events/music.tidal.rst
|
||||||
platypush/events/nextcloud.rst
|
platypush/events/nextcloud.rst
|
||||||
platypush/events/nfc.rst
|
platypush/events/nfc.rst
|
||||||
|
platypush/events/ngrok.rst
|
||||||
|
platypush/events/ntfy.rst
|
||||||
platypush/events/ping.rst
|
platypush/events/ping.rst
|
||||||
platypush/events/pushbullet.rst
|
platypush/events/pushbullet.rst
|
||||||
platypush/events/qrcode.rst
|
platypush/events/qrcode.rst
|
||||||
|
platypush/events/rss.rst
|
||||||
platypush/events/scard.rst
|
platypush/events/scard.rst
|
||||||
platypush/events/sensor.rst
|
platypush/events/sensor.rst
|
||||||
platypush/events/sensor.ir.rst
|
platypush/events/sensor.ir.rst
|
||||||
|
@ -54,6 +64,7 @@ Events
|
||||||
platypush/events/serial.rst
|
platypush/events/serial.rst
|
||||||
platypush/events/sound.rst
|
platypush/events/sound.rst
|
||||||
platypush/events/stt.rst
|
platypush/events/stt.rst
|
||||||
|
platypush/events/sun.rst
|
||||||
platypush/events/tensorflow.rst
|
platypush/events/tensorflow.rst
|
||||||
platypush/events/todoist.rst
|
platypush/events/todoist.rst
|
||||||
platypush/events/torrent.rst
|
platypush/events/torrent.rst
|
||||||
|
@ -63,6 +74,7 @@ Events
|
||||||
platypush/events/weather.rst
|
platypush/events/weather.rst
|
||||||
platypush/events/web.rst
|
platypush/events/web.rst
|
||||||
platypush/events/web.widget.rst
|
platypush/events/web.widget.rst
|
||||||
|
platypush/events/websocket.rst
|
||||||
platypush/events/wiimote.rst
|
platypush/events/wiimote.rst
|
||||||
platypush/events/zeroborg.rst
|
platypush/events/zeroborg.rst
|
||||||
platypush/events/zeroconf.rst
|
platypush/events/zeroconf.rst
|
||||||
|
|
|
@ -3,18 +3,20 @@ Platypush
|
||||||
|
|
||||||
Welcome to the Platypush reference of available plugins, backends and event types.
|
Welcome to the Platypush reference of available plugins, backends and event types.
|
||||||
|
|
||||||
For more information on Platypush please check out:
|
For more information on Platypush check out:
|
||||||
|
|
||||||
* The `Gitlab page`_ of the project
|
* The `main page`_ of the project
|
||||||
|
* The `Gitea page`_ of the project
|
||||||
* The `online wiki`_ for quickstart and examples
|
* The `online wiki`_ for quickstart and examples
|
||||||
* The `Blog articles`_ for inspiration on use-cases possible projects
|
* The `Blog articles`_ for inspiration on use-cases possible projects
|
||||||
|
|
||||||
.. _Gitlab page: https://git.platypush.tech/platypush/platypush
|
.. _main page: https://platypush.tech
|
||||||
.. _online wiki: https://git.platypush.tech/platypush/platypush/-/wikis/home
|
.. _Gitea page: https://git.platypush.tech/platypush/platypush
|
||||||
|
.. _online wiki: https://git.platypush.tech/platypush/platypush/wiki
|
||||||
.. _Blog articles: https://blog.platypush.tech
|
.. _Blog articles: https://blog.platypush.tech
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 3
|
:maxdepth: 2
|
||||||
:caption: Contents:
|
:caption: Contents:
|
||||||
|
|
||||||
backends
|
backends
|
||||||
|
@ -28,4 +30,3 @@ Indices and tables
|
||||||
* :ref:`genindex`
|
* :ref:`genindex`
|
||||||
* :ref:`modindex`
|
* :ref:`modindex`
|
||||||
* :ref:`search`
|
* :ref:`search`
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.adafruit.io``
|
``adafruit.io``
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.adafruit.io
|
.. automodule:: platypush.backend.adafruit.io
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.alarm``
|
``alarm``
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.alarm
|
.. automodule:: platypush.backend.alarm
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.assistant.google``
|
``assistant.google``
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.assistant.google
|
.. automodule:: platypush.backend.assistant.google
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
``platypush.backend.assistant``
|
|
||||||
===============================
|
|
||||||
|
|
||||||
.. automodule:: platypush.backend.assistant
|
|
||||||
:members:
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.assistant.snowboy``
|
``assistant.snowboy``
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.assistant.snowboy
|
.. automodule:: platypush.backend.assistant.snowboy
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.bluetooth.fileserver``
|
``bluetooth.fileserver``
|
||||||
==========================================
|
==========================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.bluetooth.fileserver
|
.. automodule:: platypush.backend.bluetooth.fileserver
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.bluetooth.pushserver``
|
``bluetooth.pushserver``
|
||||||
==========================================
|
==========================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.bluetooth.pushserver
|
.. automodule:: platypush.backend.bluetooth.pushserver
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
``platypush.backend.bluetooth``
|
|
||||||
===============================
|
|
||||||
|
|
||||||
.. automodule:: platypush.backend.bluetooth
|
|
||||||
:members:
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.bluetooth.scanner.ble``
|
``bluetooth.scanner.ble``
|
||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.bluetooth.scanner.ble
|
.. automodule:: platypush.backend.bluetooth.scanner.ble
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.bluetooth.scanner``
|
``bluetooth.scanner``
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.bluetooth.scanner
|
.. automodule:: platypush.backend.bluetooth.scanner
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.button.flic``
|
``button.flic``
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.button.flic
|
.. automodule:: platypush.backend.button.flic
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.camera.pi``
|
``camera.pi``
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.camera.pi
|
.. automodule:: platypush.backend.camera.pi
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.chat.telegram``
|
``chat.telegram``
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.chat.telegram
|
.. automodule:: platypush.backend.chat.telegram
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
``platypush.backend.clipboard``
|
|
||||||
===============================
|
|
||||||
|
|
||||||
.. automodule:: platypush.backend.clipboard
|
|
||||||
:members:
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.covid19``
|
``covid19``
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.covid19
|
.. automodule:: platypush.backend.covid19
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
``platypush.backend.dbus``
|
|
||||||
==========================
|
|
||||||
|
|
||||||
.. automodule:: platypush.backend.dbus
|
|
||||||
:members:
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.file.monitor``
|
``file.monitor``
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.file.monitor
|
.. automodule:: platypush.backend.file.monitor
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.foursquare``
|
``foursquare``
|
||||||
================================
|
================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.foursquare
|
.. automodule:: platypush.backend.foursquare
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.github``
|
``github``
|
||||||
============================
|
============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.github
|
.. automodule:: platypush.backend.github
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.google.fit``
|
``google.fit``
|
||||||
================================
|
================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.google.fit
|
.. automodule:: platypush.backend.google.fit
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.google.pubsub``
|
``google.pubsub``
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.google.pubsub
|
.. automodule:: platypush.backend.google.pubsub
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.gps``
|
``gps``
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.gps
|
.. automodule:: platypush.backend.gps
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.http.poll``
|
``http.poll``
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.http.poll
|
.. automodule:: platypush.backend.http.poll
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.http``
|
``http``
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.http
|
.. automodule:: platypush.backend.http
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.inotify``
|
``inotify``
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.inotify
|
.. automodule:: platypush.backend.inotify
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.joystick.jstest``
|
``joystick.jstest``
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.joystick.jstest
|
.. automodule:: platypush.backend.joystick.jstest
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.joystick.linux``
|
``joystick.linux``
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.joystick.linux
|
.. automodule:: platypush.backend.joystick.linux
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.joystick``
|
``joystick``
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.joystick
|
.. automodule:: platypush.backend.joystick
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.kafka``
|
``kafka``
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.kafka
|
.. automodule:: platypush.backend.kafka
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.light.hue``
|
``light.hue``
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.light.hue
|
.. automodule:: platypush.backend.light.hue
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.linode``
|
``linode``
|
||||||
============================
|
============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.linode
|
.. automodule:: platypush.backend.linode
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.log.http``
|
``log.http``
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.log.http
|
.. automodule:: platypush.backend.log.http
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.mail``
|
``mail``
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.mail
|
.. automodule:: platypush.backend.mail
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.midi``
|
``midi``
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.midi
|
.. automodule:: platypush.backend.midi
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.mqtt``
|
``mqtt``
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.mqtt
|
.. automodule:: platypush.backend.mqtt
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.music.mopidy``
|
``music.mopidy``
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.music.mopidy
|
.. automodule:: platypush.backend.music.mopidy
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.music.mpd``
|
``music.mpd``
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.music.mpd
|
.. automodule:: platypush.backend.music.mpd
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.music.snapcast``
|
``music.snapcast``
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.music.snapcast
|
.. automodule:: platypush.backend.music.snapcast
|
||||||
|
|
5
docs/source/platypush/backend/music.spotify.rst
Normal file
5
docs/source/platypush/backend/music.spotify.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
``music.spotify``
|
||||||
|
===================================
|
||||||
|
|
||||||
|
.. automodule:: platypush.backend.music.spotify
|
||||||
|
:members:
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.nextcloud``
|
``nextcloud``
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.nextcloud
|
.. automodule:: platypush.backend.nextcloud
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.nfc``
|
``nfc``
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.nfc
|
.. automodule:: platypush.backend.nfc
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.nodered``
|
``nodered``
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.nodered
|
.. automodule:: platypush.backend.nodered
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.ping``
|
``ping``
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.ping
|
.. automodule:: platypush.backend.ping
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.pushbullet``
|
``pushbullet``
|
||||||
================================
|
================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.pushbullet
|
.. automodule:: platypush.backend.pushbullet
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.redis``
|
``redis``
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.redis
|
.. automodule:: platypush.backend.redis
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.scard``
|
``scard``
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.scard
|
.. automodule:: platypush.backend.scard
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.accelerometer``
|
``sensor.accelerometer``
|
||||||
==========================================
|
==========================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.accelerometer
|
.. automodule:: platypush.backend.sensor.accelerometer
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.arduino``
|
``sensor.arduino``
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.arduino
|
.. automodule:: platypush.backend.sensor.arduino
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.battery``
|
``sensor.battery``
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.battery
|
.. automodule:: platypush.backend.sensor.battery
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.bme280``
|
``sensor.bme280``
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.bme280
|
.. automodule:: platypush.backend.sensor.bme280
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.dht``
|
``sensor.dht``
|
||||||
================================
|
================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.dht
|
.. automodule:: platypush.backend.sensor.dht
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.distance``
|
``sensor.distance``
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.distance
|
.. automodule:: platypush.backend.sensor.distance
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.distance.vl53l1x``
|
``sensor.distance.vl53l1x``
|
||||||
=============================================
|
=============================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.distance.vl53l1x
|
.. automodule:: platypush.backend.sensor.distance.vl53l1x
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.envirophat``
|
``sensor.envirophat``
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.envirophat
|
.. automodule:: platypush.backend.sensor.envirophat
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.ir.zeroborg``
|
``sensor.ir.zeroborg``
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.ir.zeroborg
|
.. automodule:: platypush.backend.sensor.ir.zeroborg
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.leap``
|
``sensor.leap``
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.leap
|
.. automodule:: platypush.backend.sensor.leap
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.ltr559``
|
``sensor.ltr559``
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.ltr559
|
.. automodule:: platypush.backend.sensor.ltr559
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.mcp3008``
|
``sensor.mcp3008``
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.mcp3008
|
.. automodule:: platypush.backend.sensor.mcp3008
|
||||||
|
|
5
docs/source/platypush/backend/sensor.motion.pmw3901.rst
Normal file
5
docs/source/platypush/backend/sensor.motion.pmw3901.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
``sensor.motion.pmw3901``
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. automodule:: platypush.backend.sensor.motion.pmw3901
|
||||||
|
:members:
|
|
@ -1,5 +0,0 @@
|
||||||
``platypush.backend.sensor.motion.pwm3901``
|
|
||||||
===========================================
|
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.motion.pwm3901
|
|
||||||
:members:
|
|
|
@ -1,6 +0,0 @@
|
||||||
``platypush.backend.sensor``
|
|
||||||
============================
|
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor
|
|
||||||
:members:
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.sensor.serial``
|
``sensor.serial``
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.sensor.serial
|
.. automodule:: platypush.backend.sensor.serial
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.stt.deepspeech``
|
``stt.deepspeech``
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.stt.deepspeech
|
.. automodule:: platypush.backend.stt.deepspeech
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.stt.picovoice.hotword``
|
``stt.picovoice.hotword``
|
||||||
===========================================
|
===========================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.stt.picovoice.hotword
|
.. automodule:: platypush.backend.stt.picovoice.hotword
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.stt.picovoice.speech``
|
``stt.picovoice.speech``
|
||||||
==========================================
|
==========================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.stt.picovoice.speech
|
.. automodule:: platypush.backend.stt.picovoice.speech
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
``platypush.backend.stt``
|
|
||||||
=========================
|
|
||||||
|
|
||||||
.. automodule:: platypush.backend.stt
|
|
||||||
:members:
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.tcp``
|
``tcp``
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.tcp
|
.. automodule:: platypush.backend.tcp
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.todoist``
|
``todoist``
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.todoist
|
.. automodule:: platypush.backend.todoist
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.travisci``
|
``travisci``
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.travisci
|
.. automodule:: platypush.backend.travisci
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.trello``
|
``trello``
|
||||||
============================
|
============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.trello
|
.. automodule:: platypush.backend.trello
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.weather.buienradar``
|
``weather.buienradar``
|
||||||
========================================
|
========================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.weather.buienradar
|
.. automodule:: platypush.backend.weather.buienradar
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.weather.darksky``
|
``weather.darksky``
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.weather.darksky
|
.. automodule:: platypush.backend.weather.darksky
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.weather.openweathermap``
|
``weather.openweathermap``
|
||||||
============================================
|
============================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.weather.openweathermap
|
.. automodule:: platypush.backend.weather.openweathermap
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
``platypush.backend.weather``
|
|
||||||
=============================
|
|
||||||
|
|
||||||
.. automodule:: platypush.backend.weather
|
|
||||||
:members:
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.websocket``
|
``websocket``
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.websocket
|
.. automodule:: platypush.backend.websocket
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.wiimote``
|
``wiimote``
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.wiimote
|
.. automodule:: platypush.backend.wiimote
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.zigbee.mqtt``
|
``zigbee.mqtt``
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.zigbee.mqtt
|
.. automodule:: platypush.backend.zigbee.mqtt
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.zwave.mqtt``
|
``zwave.mqtt``
|
||||||
================================
|
================================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.zwave.mqtt
|
.. automodule:: platypush.backend.zwave.mqtt
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.backend.zwave``
|
``zwave``
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
.. automodule:: platypush.backend.zwave
|
.. automodule:: platypush.backend.zwave
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.message.event.adafruit``
|
``adafruit``
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
.. automodule:: platypush.message.event.adafruit
|
.. automodule:: platypush.message.event.adafruit
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.message.event.alarm``
|
``alarm``
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
.. automodule:: platypush.message.event.alarm
|
.. automodule:: platypush.message.event.alarm
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
``platypush.message.event.application``
|
``application``
|
||||||
=======================================
|
=======================================
|
||||||
|
|
||||||
.. automodule:: platypush.message.event.application
|
.. automodule:: platypush.message.event.application
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue