s/platypush.readthedocs.io/docs.platypush.tech/g

This commit is contained in:
Fabio Manganiello 2021-02-02 01:15:30 +01:00
parent 51891eaf73
commit 15ad2a0a20
11 changed files with 71 additions and 71 deletions

View File

@ -90,10 +90,10 @@ backend.chat.telegram:
enabled: true
```
The [backend](https://platypush.readthedocs.io/en/latest/platypush/backend/chat.telegram.html) enables you to receive
The [backend](https://docs.platypush.tech/en/latest/platypush/backend/chat.telegram.html) enables you to receive
events (like new messages, attachments, requests, etc.) and create custom hooks on them.
The [plugin](https://platypush.readthedocs.io/en/latest/platypush/plugins/chat.telegram.html) enables you to write to
The [plugin](https://docs.platypush.tech/en/latest/platypush/plugins/chat.telegram.html) enables you to write to
chats, programmatically send messages and attachments, administer channels, etc.
Lets say that we want the bot to implement the following commands:
@ -273,11 +273,11 @@ The bot will now reply with an error if you try to send a message from an unauth
## Conclusions
We have only explored one specific feature of the Telegram integration in this article: the ability of the bot to react
to [`CommandMessageEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/chat.telegram.html#platypush.message.event.chat.telegram.CommandMessageEvent)
to [`CommandMessageEvent`](https://docs.platypush.tech/en/latest/platypush/events/chat.telegram.html#platypush.message.event.chat.telegram.CommandMessageEvent)
events, run actions, and reply with text messages.
As you can see from
the [list of supported Telegram events](https://platypush.readthedocs.io/en/latest/platypush/events/chat.telegram.html)
the [list of supported Telegram events](https://docs.platypush.tech/en/latest/platypush/events/chat.telegram.html)
you can do more, such as:
- Create hooks when someone shares contact info. Ever thought of letting a bot automatically store the new contacts sent
@ -287,15 +287,15 @@ you can do more, such as:
a chat to your hard drive or a remote Dropbox folder.
- Run actions on text messages instead of commands. You can use
the [`TextMessageEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/chat.telegram.html#platypush.message.event.chat.telegram.TextMessageEvent),
the [`TextMessageEvent`](https://docs.platypush.tech/en/latest/platypush/events/chat.telegram.html#platypush.message.event.chat.telegram.TextMessageEvent),
for example, if you prefer to type “turn on the lights” instead of `/lights_on`.
- Take a picture from the camera and send it to yourself through
the [`send_photo`](https://platypush.readthedocs.io/en/latest/platypush/events/chat.telegram.html#platypush.message.event.chat.telegram.TextMessageEvent)
the [`send_photo`](https://docs.platypush.tech/en/latest/platypush/events/chat.telegram.html#platypush.message.event.chat.telegram.TextMessageEvent)
action.
- Automatically moderate chat groups through
the [`chat.telegram`](https://platypush.readthedocs.io/en/latest/platypush/plugins/chat.telegram.html) actions.
the [`chat.telegram`](https://docs.platypush.tech/en/latest/platypush/plugins/chat.telegram.html) actions.
- You can also deploy multiple bots, e.g. per device, so you can run actions on a specific device from the associated
chat, or instead, use a single bot as entry point and deliver messages to other devices over MQTT, Kafka, or HTTP API.

View File

@ -128,9 +128,9 @@ engines. Lets go through some of the available integrations, and evaluate the
### Integrations
- [`assistant.google`](https://platypush.readthedocs.io/en/latest/platypush/plugins/assistant.google.html) plugin (to
- [`assistant.google`](https://docs.platypush.tech/en/latest/platypush/plugins/assistant.google.html) plugin (to
programmatically start/stop conversations)
and [`assistant.google`](https://platypush.readthedocs.io/en/latest/platypush/backend/assistant.google.html) backend
and [`assistant.google`](https://docs.platypush.tech/en/latest/platypush/backend/assistant.google.html) backend
(for continuous hotword detection).
### Configuration
@ -212,7 +212,7 @@ assistant.google:
### Integrations
- [`assistant.google.pushtotalk`](https://platypush.readthedocs.io/en/latest/platypush/plugins/assistant.google.pushtotalk.html)
- [`assistant.google.pushtotalk`](https://docs.platypush.tech/en/latest/platypush/plugins/assistant.google.pushtotalk.html)
plugin.
### Configuration
@ -307,7 +307,7 @@ curl -XPOST -H 'Content-Type: application/json' -d '
### Integrations
- [`assistant.echo`](https://platypush.readthedocs.io/en/latest/platypush/plugins/assistant.echo.html) plugin.
- [`assistant.echo`](https://docs.platypush.tech/en/latest/platypush/plugins/assistant.echo.html) plugin.
### Configuration
@ -378,7 +378,7 @@ curl -XPOST -H 'Content-Type: application/json' -d '
### Integrations
- [`assistant.snowboy`](https://platypush.readthedocs.io/en/latest/platypush/backend/assistant.snowboy.html) backend.
- [`assistant.snowboy`](https://docs.platypush.tech/en/latest/platypush/backend/assistant.snowboy.html) backend.
### Configuration
@ -427,7 +427,7 @@ backend.assistant.snowboy:
```
- Start Platypush. Say the hotword associated with one of your models, check on the logs that the
[`HotwordDetectedEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/assistant.html#platypush.message.event.assistant.HotwordDetectedEvent)
[`HotwordDetectedEvent`](https://docs.platypush.tech/en/latest/platypush/events/assistant.html#platypush.message.event.assistant.HotwordDetectedEvent)
is triggered and, if theres an assistant plugin associated with the hotword, the corresponding assistant is correctly
started.
@ -469,8 +469,8 @@ backend.assistant.snowboy:
### Integrations
- [`stt.deepspeech`](https://platypush.readthedocs.io/en/latest/platypush/plugins/stt.deepspeech.html) plugin
and [`stt.deepspeech`](https://platypush.readthedocs.io/en/latest/platypush/backend/stt.deepspeech.html) backend (for
- [`stt.deepspeech`](https://docs.platypush.tech/en/latest/platypush/plugins/stt.deepspeech.html) plugin
and [`stt.deepspeech`](https://docs.platypush.tech/en/latest/platypush/backend/stt.deepspeech.html) backend (for
continuous detection).
### Configuration
@ -527,11 +527,11 @@ backend.stt.deepspeech:
```
- Start Platypush. Speech detection will start running on startup.
[`SpeechDetectedEvents`](https://platypush.readthedocs.io/en/latest/platypush/events/stt.html#platypush.message.event.stt.SpeechDetectedEvent)
[`SpeechDetectedEvents`](https://docs.platypush.tech/en/latest/platypush/events/stt.html#platypush.message.event.stt.SpeechDetectedEvent)
will be triggered when you talk.
[`HotwordDetectedEvents`](https://platypush.readthedocs.io/en/latest/platypush/events/stt.html#platypush.message.event.stt.HotwordDetectedEvent)
[`HotwordDetectedEvents`](https://docs.platypush.tech/en/latest/platypush/events/stt.html#platypush.message.event.stt.HotwordDetectedEvent)
will be triggered when you say one of the configured hotwords.
[`ConversationDetectedEvents`](https://platypush.readthedocs.io/en/latest/platypush/events/stt.html#platypush.message.event.stt.ConversationDetectedEvent)
[`ConversationDetectedEvents`](https://docs.platypush.tech/en/latest/platypush/events/stt.html#platypush.message.event.stt.ConversationDetectedEvent)
will be triggered when you say something after a hotword, with speech provided as an argument. You can also disable the
continuous detection and only start it programmatically by calling `stt.deepspeech.start_detection` and
`stt.deepspeech.stop_detection`. You can also use it to perform offline speech transcription from audio files:
@ -612,15 +612,15 @@ So far, Platypush provides integrations with Porcupine and Cheetah.
### Integrations
- *Hotword engine*:
[`stt.picovoice.hotword`](https://platypush.readthedocs.io/en/latest/platypush/plugins/stt.picovoice.hotword.html)
[`stt.picovoice.hotword`](https://docs.platypush.tech/en/latest/platypush/plugins/stt.picovoice.hotword.html)
plugin and
[`stt.picovoice.hotword`](https://platypush.readthedocs.io/en/latest/platypush/backend/stt.picovoice.hotword.html)
[`stt.picovoice.hotword`](https://docs.platypush.tech/en/latest/platypush/backend/stt.picovoice.hotword.html)
backend (for continuous detection).
- *Speech engine*:
[`stt.picovoice.speech`](https://platypush.readthedocs.io/en/latest/platypush/plugins/stt.picovoice.speech.html)
[`stt.picovoice.speech`](https://docs.platypush.tech/en/latest/platypush/plugins/stt.picovoice.speech.html)
plugin and
[`stt.picovoice.speech`](https://platypush.readthedocs.io/en/latest/platypush/backend/stt.picovoice.speech.html)
[`stt.picovoice.speech`](https://docs.platypush.tech/en/latest/platypush/backend/stt.picovoice.speech.html)
backend (for continuous detection).
### Configuration

View File

@ -147,8 +147,8 @@ assistant.google:
```
- Refer to the official documentation to check the additional initialization parameters and actions provided by the
[assistant backend](https://platypush.readthedocs.io/en/latest/platypush/backend/assistant.google.html) and
[plugin](https://platypush.readthedocs.io/en/latest/platypush/plugins/assistant.google.html).
[assistant backend](https://docs.platypush.tech/en/latest/platypush/backend/assistant.google.html) and
[plugin](https://docs.platypush.tech/en/latest/platypush/plugins/assistant.google.html).
- Restart Platypush and keep an eye on the output to check that everything is alright. Oh, and also double check that
your microphone is not muted.
@ -211,8 +211,8 @@ A few words about the configuration tweaks:
- The `assistant.google.pushtotalk` plugin configuration only requires the default assistant language to be used.
Refer to the official documentation for extra initialization parameters and methods provided by the
[Snowboy backend](https://platypush.readthedocs.io/en/latest/platypush/backend/assistant.snowboy.html) and the
[push-to-talk plugin](https://platypush.readthedocs.io/en/latest/platypush/plugins/assistant.google.pushtotalk.html).
[Snowboy backend](https://docs.platypush.tech/en/latest/platypush/backend/assistant.snowboy.html) and the
[push-to-talk plugin](https://docs.platypush.tech/en/latest/platypush/plugins/assistant.google.pushtotalk.html).
Restart Platypush and check the logs for any errors, then say your hotword. If everything went well, an assistant
conversation will be started when the hotword is detected.

View File

@ -320,7 +320,7 @@ detected over the past 2 seconds and `positive` otherwise.
Theres not much use however in a script that simply prints a message to the standard output if our baby is crying — we
want to be notified! Lets use Platypush to cover this part. In this example, well use
the [`pushbullet`](https://platypush.readthedocs.io/en/latest/platypush/plugins/pushbullet.html) integration to send a
the [`pushbullet`](https://docs.platypush.tech/en/latest/platypush/plugins/pushbullet.html) integration to send a
message to our mobile when cry is detected. Lets install Redis (used by Platypush to receive messages) and Platypush
with the HTTP and Pushbullet integrations:
@ -343,7 +343,7 @@ pushbullet:
```
Now, lets modify the previous script so that, instead of printing a message to the standard output, it triggers a
[`CustomEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/custom.html) that can be captured by a
[`CustomEvent`](https://docs.platypush.tech/en/latest/platypush/events/custom.html) that can be captured by a
Platypush hook:
```python
@ -525,7 +525,7 @@ sample length/window/frequency band parameters.
Also, consider that this is a relatively basic example of automation — feel free to spice it up with more automation
tasks. For example, you can send a request to another Platypush device (e.g. in your bedroom or living room) with the
[`tts`](https://platypush.readthedocs.io/en/latest/platypush/plugins/tts.html) plugin to say aloud that the baby is crying. You can also extend the `micmon_detect.py` script so that the captured
[`tts`](https://docs.platypush.tech/en/latest/platypush/plugins/tts.html) plugin to say aloud that the baby is crying. You can also extend the `micmon_detect.py` script so that the captured
audio samples can also be streamed over HTTP — for example using a Flask wrapper and `ffmpeg` for the audio conversion.
Another interesting use case is to send data points to your local database when the baby starts/stops crying (you can
refer to my previous article on how to use Platypush+PostgreSQL+Mosquitto+Grafana to create your flexible and

View File

@ -51,7 +51,7 @@ API, and Instapaper) and how to glue all the pieces together through Platypush.
## Configure your Kindle account for e-mail delivery
Ill assume in this first section you have a Kindle, a linked Amazon account, and a Gmail account that well use to
programmatically send documents to the device via email - although it's also possible to leverage the [`mail.smtp`](https://platypush.readthedocs.io/en/latest/platypush/plugins/mail.smtp.html)
programmatically send documents to the device via email - although it's also possible to leverage the [`mail.smtp`](https://docs.platypush.tech/en/latest/platypush/plugins/mail.smtp.html)
plugin and use another domain for delivering PDFs. Well later see als ohow to leverage Instapaper with other devices.
First, youll have to create an email address associated to your Kindle thatll be used to remotely deliver documents:
@ -119,7 +119,7 @@ Now that youve got everything in place, its time to configure Platypush to
## Create a rule to automatically send articles to your Kindle
The [`http.poll`](https://platypush.readthedocs.io/en/latest/platypush/backend/http.poll.html) backend is a flexible
The [`http.poll`](https://docs.platypush.tech/en/latest/platypush/backend/http.poll.html) backend is a flexible
component that can be configured to poll and process updates from many web resources — JSON, RSS, Atom etc.
Suppose you want to check for updates
@ -204,7 +204,7 @@ sophisticated rules that connect it to anything.
There are many ways for Tasker to communicate with Platypush (direct RPC over HTTP calls, using Join with an external
MQTT server to dispatch messages, using an intermediate IFTTT hook, or Pushbullet, etc.), and there are many ways for
Platypush to communicate back to Tasker on your mobile device (using [AutoRemote](https://joaoapps.com/autoremote/) with
the [Platypush plugin](https://platypush.readthedocs.io/en/latest/platypush/plugins/autoremote.html) to send custom
the [Platypush plugin](https://docs.platypush.tech/en/latest/platypush/plugins/autoremote.html) to send custom
events, using IFTTT with any service connected to your mobile, using the [Join API](https://joaoapps.com/join/api/), or,
again, Pushbullet).

View File

@ -46,10 +46,10 @@ Lets cover these points step by step.
## Installing and configuring Platypush
Well be using the [`http.poll`](https://platypush.readthedocs.io/en/latest/platypush/backend/http.poll.html) backend
Well be using the [`http.poll`](https://docs.platypush.tech/en/latest/platypush/backend/http.poll.html) backend
configured with one or more `RssUpdate` objects to poll our RSS sources at regular intervals and create the digests, and
either the [`mail.smtp`](https://platypush.readthedocs.io/en/latest/platypush/plugins/mail.smtp.html) plugin or the
[`google.mail`](https://platypush.readthedocs.io/en/latest/platypush/plugins/google.mail.html) plugin to send the
either the [`mail.smtp`](https://docs.platypush.tech/en/latest/platypush/plugins/mail.smtp.html) plugin or the
[`google.mail`](https://docs.platypush.tech/en/latest/platypush/plugins/google.mail.html) plugin to send the
digests to our email.
You can install Platypush on any device where you want to run your logic — a RaspberryPi, an old laptop, a cloud node,
@ -127,7 +127,7 @@ to automatically scrape the content of a web page - I covered some of these conc
my [previous article](https://blog.platypush.tech/article/Deliver-articles-to-your-favourite-e-reader-using-Platypush)
on how to parse RSS feeds and send the PDF digest to your e-reader. The same mechanism works well for newsletters too.
If you want to parse the content of the newsletter as well, all you have to do is configure
the [`http.webpage`](https://platypush.readthedocs.io/en/latest/platypush/plugins/http.webpage.html) Platypush
the [`http.webpage`](https://docs.platypush.tech/en/latest/platypush/plugins/http.webpage.html) Platypush
plugin. Since the Mercury API doesn't provide a Python binding, this requires a couple of JavaScript dependencies:
```shell
@ -174,14 +174,14 @@ legal one:
## Configuring the mail delivery
When new content is published on a subscribed RSS feed Platypush will generate
a [NewFeedEvent](https://platypush.readthedocs.io/en/latest/platypush/events/http.rss.html) and it should create a copy
a [NewFeedEvent](https://docs.platypush.tech/en/latest/platypush/events/http.rss.html) and it should create a copy
of the digest under `~/.local/share/platypush/feeds/cache/{date:time}_{feed-title}.[html|pdf]`. The `NewFeedEvent` in
particular is the link you need to create your custom logic that sends an email to a list of addresses when new content
is available.
First, configure the Platypush mail plugin you prefer. When it comes to sending emails you primarily have two options:
- The [`mail.smtp`](https://platypush.readthedocs.io/en/latest/platypush/plugins/mail.smtp.html) plugin — if you want to
- The [`mail.smtp`](https://docs.platypush.tech/en/latest/platypush/plugins/mail.smtp.html) plugin — if you want to
send emails directly through an SMTP server. Platypush configuration:
```yaml
@ -193,7 +193,7 @@ mail.smtp:
ssl: True
```
- The [`google.mail`](https://platypush.readthedocs.io/en/latest/platypush/plugins/google.mail.html) plugin — if you
- The [`google.mail`](https://docs.platypush.tech/en/latest/platypush/plugins/google.mail.html) plugin — if you
want to use the native GMail API to send emails. If that is the case then first make sure that you have the
dependencies for the Platypush Google module installed:
@ -224,7 +224,7 @@ At this point the GMail delivery is ready to be used by your Platypush automatio
## Connecting the dots
Now that both the RSS parsing logic and the mail integration are in place, we can glue them together through the
[`NewFeedEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/http.rss.html) event. The new advised way
[`NewFeedEvent`](https://docs.platypush.tech/en/latest/platypush/events/http.rss.html) event. The new advised way
to configure events in Platypush is through native Python scripts - the custom YAML-based syntax for events and
procedure was becoming too cumbersome to maintain and write (although its still supported), and I feel like going back
to a clean and simple Python API may be a better option.

View File

@ -46,7 +46,7 @@ For this example we'll use the following hardware:
account that both have the same resolution (32x24 pixels), so the wider angle comes with the cost of a lower spatial
resolution. If you want to use a different thermal camera theres not much youll need to change, as long as it comes
with a software interface for RaspberryPi and
its [compatible with Platypush](https://platypush.readthedocs.io/en/latest/platypush/plugins/camera.ir.mlx90640.html).
its [compatible with Platypush](https://docs.platypush.tech/en/latest/platypush/plugins/camera.ir.mlx90640.html).
Setting up the MLX90640 on your RaspberryPi if you have a Breakout Garden its easy as a pie. Fit the Breakout Garden on
top of your RaspberryPi. Fit the camera breakout into an I2C slot. Boot the RaspberryPi. Done. Otherwise, you can also
@ -94,7 +94,7 @@ camera module.
This post assumes that you have already installed and configured Platypush on your system. If not, head to my post on
[getting started with Platypush](https://blog.platypush.tech/article/Ultimate-self-hosted-automation-with-Platypush),
the [readthedocs page](https://platypush.readthedocs.io/en/latest/), the
the [readthedocs page](https://docs.platypush.tech/en/latest/), the
[Gitlab page](https://git.platypush.tech/platypush/platypush) or
[the wiki](https://git.platypush.tech/platypush/platypush/-/wikis/home).
@ -141,7 +141,7 @@ git clone https://github.com/BlackLight/imgdetect-utils ~/projects/imgdetect-uti
Now that youve got all the hardware and software in place, its time to start capturing frames with your camera and use
them to train your model. First, configure
the [MLX90640 plugin](https://platypush.readthedocs.io/en/latest/platypush/plugins/camera.ir.mlx90640.html) in your
the [MLX90640 plugin](https://docs.platypush.tech/en/latest/platypush/plugins/camera.ir.mlx90640.html) in your
Platypush configuration file (by default, `~/.config/platypush/config.yaml`):
```yaml
@ -469,7 +469,7 @@ scp -r ~/models/people_detect pi@raspberry:/home/pi/models
Once the Tensorflow model has been deployed to the RaspberryPi you can quickly test how it performs against some
pictures taken on the device using
the [`tensorflow.predict`](https://platypush.readthedocs.io/en/latest/platypush/plugins/tensorflow.html#platypush.plugins.tensorflow.TensorflowPlugin.predict)
the [`tensorflow.predict`](https://docs.platypush.tech/en/latest/platypush/plugins/tensorflow.html#platypush.plugins.tensorflow.TensorflowPlugin.predict)
method:
```shell
@ -515,7 +515,7 @@ intervals with a new one that captures pictures and feeds them to the previously
use a Python script stored under `~/.config/platypush/scripts` in this case, but it will also work with a cron defined
in YAML in `config.yaml`) and, for example, turns on the lights when presence is detected and turns them off when
presence is no longer detected (I'll use
the [`light.hue`](https://platypush.readthedocs.io/en/latest/platypush/plugins/light.hue.html) plugin in this example):
the [`light.hue`](https://docs.platypush.tech/en/latest/platypush/plugins/light.hue.html) plugin in this example):
```python
import os

View File

@ -202,7 +202,7 @@ $HOME/go/bin/mqttcli pub -t "sensors/$(hostname)/disk_root" -m $usage
```
Alternatively, you can also write the logic for sending system data points directly in Platypush -
e.g. using the [`system`](https://platypush.readthedocs.io/en/latest/platypush/plugins/system.html)
e.g. using the [`system`](https://docs.platypush.tech/en/latest/platypush/plugins/system.html)
plugin - and that will be executed while the service is running, so you won't need the `mqttcli` dependency:
```python
@ -313,7 +313,7 @@ a RaspberryPi:
[HTU21D-F](https://shop.pimoroni.com/products/adafruit-htu21d-f-temperature-humidity-sensor-breakout-board)) that
communicates over I2C/SPI that you can plug directly on the RaspberryPi. If you go for this solution then you wont
need another microprocessor to deal with the ADC conversion, but youll also have to make sure that these devices come
with a Python library and theyre [supported in Platypush](https://platypush.readthedocs.io/en/latest/) (feel free to
with a Python library and theyre [supported in Platypush](https://docs.platypush.tech/en/latest/) (feel free to
open an issue or send a pull request if thats not the case).
Lets briefly analyze an example of the option 1 implementation. Lets suppose that you have an Arduino with a connected
@ -403,12 +403,12 @@ backend.sensor.serial:
- 30.0
```
[`backend.sensor.serial`](https://platypush.readthedocs.io/en/latest/platypush/backend/sensor.serial.html) (and, in
[`backend.sensor.serial`](https://docs.platypush.tech/en/latest/platypush/backend/sensor.serial.html) (and, in
general, any sensor backend) will trigger
a [`SensorDataChangeEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/sensor.html#platypush.message.event.sensor.SensorDataChangeEvent)
a [`SensorDataChangeEvent`](https://docs.platypush.tech/en/latest/platypush/events/sensor.html#platypush.message.event.sensor.SensorDataChangeEvent)
when new sensor data is available, and
[`SensorDataBelowThresholdEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/sensor.html#platypush.message.event.sensor.SensorDataBelowThresholdEvent) /
[`SensorDataAboveThresholdEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/sensor.html#platypush.message.event.sensor.SensorDataAboveThresholdEvent)
[`SensorDataBelowThresholdEvent`](https://docs.platypush.tech/en/latest/platypush/events/sensor.html#platypush.message.event.sensor.SensorDataBelowThresholdEvent) /
[`SensorDataAboveThresholdEvent`](https://docs.platypush.tech/en/latest/platypush/events/sensor.html#platypush.message.event.sensor.SensorDataAboveThresholdEvent)
respectively when the new sensor data is respectively below or above one of the configured threshold.
We can now configure an event hook to send new sensor data to MQTT to be stored on the database by dropping another
@ -617,8 +617,8 @@ walked or slept the most, or even just visualizing the data on a computer unless
the Fit API.
Luckily, Platypush comes with a handy Google Fit
[backend](https://platypush.readthedocs.io/en/latest/platypush/backend/google.fit.html)
and [plugin](https://platypush.readthedocs.io/en/latest/platypush/plugins/google.fit.html), and you can
[backend](https://docs.platypush.tech/en/latest/platypush/backend/google.fit.html)
and [plugin](https://docs.platypush.tech/en/latest/platypush/plugins/google.fit.html), and you can
leverage them to easily build your visualization, automation and queriable fit database.
- Prepare the fit tables on your database. Again, well leverage a trigger to take care of the normalization:
@ -896,7 +896,7 @@ active time would look like this:
Grafana also allows you to create alerts when some metrics go below/above a certain threshold or when there are no data
points for a certain period of time. You can also connect such alerts back to platypush events by leveraging Platypushs
[web hooks](https://platypush.readthedocs.io/en/latest/platypush/events/http.hook.html).
[web hooks](https://docs.platypush.tech/en/latest/platypush/events/http.hook.html).
Lets see for example how to configure Grafana to send a notification to a Platypush custom web hook that sends a
Pushbullet notification to your mobile device when the measurements from one of your gas sensors go above a certain

View File

@ -110,9 +110,9 @@ interaction with the browser context — things like “play this video on my Ch
“download this Magnet link directly on my NAS”, and so on. All the way up to custom event hooks that could react to
Platypush events triggered by other devices with custom logic running in the browser — things like “synchronize the
clipboard on the laptop if another Platypush device sends
a [`ClipboardEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/clipboard.html)”, “send a notification
a [`ClipboardEvent`](https://docs.platypush.tech/en/latest/platypush/events/clipboard.html)”, “send a notification
to the browser with the spoken text when the Google Assistant plugin triggers
a [`ResponseEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/assistant.html#platypush.message.event.assistant.ResponseEvent)”
a [`ResponseEvent`](https://docs.platypush.tech/en/latest/platypush/events/assistant.html#platypush.message.event.assistant.ResponseEvent)”
, or when a sensor goes above a certain threshold, and so on.
I wanted the ability to define all of these actions through a JavaScript native API similar to that provided by
@ -127,7 +127,7 @@ to see what you can do with it.
First, you need a Platypush service running somewhere. If you havent tried it before, refer to any of the links in the
previous sections to get started (Ive made sure that installing, configuring, and starting a base environment doesnt
take longer than five minutes, I promise :) ). Also, make sure that you enable
the [HTTP backend](https://platypush.readthedocs.io/en/latest/platypush/backend/http.html) in the `config.yaml`, as the
the [HTTP backend](https://docs.platypush.tech/en/latest/platypush/backend/http.html) in the `config.yaml`, as the
webserver is the channel used by the extension to communicate with the server. Once you have a Platypush instance
running on e.g. a RaspberryPi, another server or your laptop, get the web extension:
@ -183,7 +183,7 @@ managing cloud services, you name it. You can also run procedures stored on the
with `procedure` — and you can also pass the URL in the active tab to action as an argument by using the special
variable `$URL$` as an action value. For instance, you can use it to create an action that sends the current URL to your
mobile device
through [`pushbullet.send_note`](https://platypush.readthedocs.io/en/latest/platypush/plugins/pushbullet.html#platypush.plugins.pushbullet.PushbulletPlugin.send_note),
through [`pushbullet.send_note`](https://docs.platypush.tech/en/latest/platypush/plugins/pushbullet.html#platypush.plugins.pushbullet.PushbulletPlugin.send_note),
with both `body` and `url` set to `$URL$`. Once youre happy with your action, you can save it so its available both
from the toolbar and the browser context menu.
@ -274,7 +274,7 @@ async (app, args) => {
- `app.getDOM` returns the DOM/content of the current page (as a Node element), while `app.setDOM` replaces the
DOM/content of the page (given as a string). For example, you can combine the provided DOM API with
the [Platypush Translate plugin](https://platypush.readthedocs.io/en/latest/platypush/plugins/google.translate.html)
the [Platypush Translate plugin](https://docs.platypush.tech/en/latest/platypush/plugins/google.translate.html)
to translate a web page on the fly:
```javascript
@ -283,7 +283,7 @@ async (app, args) => {
const dom = await app.getDOM();
// Translate the page through the Platypush Google Translate plugin
// (https://platypush.readthedocs.io/en/latest/platypush/plugins/google.translate.html).
// (https://docs.platypush.tech/en/latest/platypush/plugins/google.translate.html).
// The plugin also splits the HTML in multiple requests if too long
// to circumvent Google's limit on maximum input text.
const response = await app.run({
@ -452,9 +452,9 @@ async (app, args) => {
With these basic blocks, you should be able to create any custom browser actions that you want. Some examples:
- Convert the current web page to PDF through
the [Platypush `webpage.simplify` plugin](https://platypush.readthedocs.io/en/latest/platypush/plugins/http.webpage.html)
the [Platypush `webpage.simplify` plugin](https://docs.platypush.tech/en/latest/platypush/plugins/http.webpage.html)
and deliver it to your Kindle as an attachment through
the [Platypush GMail plugin](https://platypush.readthedocs.io/en/latest/platypush/plugins/google.mail.html).
the [Platypush GMail plugin](https://docs.platypush.tech/en/latest/platypush/plugins/google.mail.html).
- Send an email to someone containing the text selected on a page.

View File

@ -218,7 +218,7 @@ backend.zigbee.mqtt:
![Zigbee plugin screenshot 2](../img/zigbee-zwave-3.png)
You can send requests through
the [supported API](https://platypush.readthedocs.io/en/latest/platypush/plugins/zigbee.mqtt.html) over HTTP, Python
the [supported API](https://docs.platypush.tech/en/latest/platypush/plugins/zigbee.mqtt.html) over HTTP, Python
code or through whichever platypush backend you have configured:
```shell
@ -241,7 +241,7 @@ from platypush.context import get_plugin
get_plugin('zigbee.mqtt').device_set(device='White Bulb', property='state', value='ON')
```
Or hook any custom logic to the [supported events](https://platypush.readthedocs.io/en/latest/platypush/events/zigbee.mqtt.html):
Or hook any custom logic to the [supported events](https://docs.platypush.tech/en/latest/platypush/events/zigbee.mqtt.html):
```python
from platypush.event.hook import hook
@ -301,8 +301,8 @@ user manual. Since Z-Wave has a stricter protocol and all the compliant devices
format, the Z-Wave interface is much more granular and detailed compared to Zigbee.
You can, of course, send commands to the new network through
the [available API](https://platypush.readthedocs.io/en/latest/platypush/plugins/zwave.html) and subscribe custom hooks
on [Z-Wave events](https://platypush.readthedocs.io/en/latest/platypush/events/zwave.html):
the [available API](https://docs.platypush.tech/en/latest/platypush/plugins/zwave.html) and subscribe custom hooks
on [Z-Wave events](https://docs.platypush.tech/en/latest/platypush/events/zwave.html):
```shell
# HTTP request

View File

@ -82,7 +82,7 @@ play raw or sampled sounds from a MIDI interface, monitor access to the file sys
some NFC tag is detected by your reader, read and extract content from RSS feeds and send it to your Kindle, read and
write data to a remote database, send metrics to Grafana, create a custom voice assistant, run and train machine
learning models, and so on — basically, you can do anything that comes
with [one of the hundreds of supported plugin](https://platypush.readthedocs.io/en/latest/).
with [one of the hundreds of supported plugin](https://docs.platypush.tech/en/latest/).
Another issue Ive tried to tackle is the developer and power user experience. I wanted to make it easy to use the
automation platform as a library or a general-purpose API, so you can easily invoke a custom logic to turn on the lights
@ -437,7 +437,7 @@ In both the cases, however, this will install only the dependencies for the core
very small and relies on backends and plugins to actually do things.
The dependencies for each integration are reported in the documentation of that integration itself (
see [official documentation](https://platypush.readthedocs.io/en/latest/)), and there are mainly four ways to install
see [official documentation](https://docs.platypush.tech/en/latest/)), and there are mainly four ways to install
them:
- Through `pip` extras: this is probably the most immediate way, although (for now) it requires you to take a look at
@ -525,8 +525,8 @@ A few notes:
- The list of events triggered by each backend is also available in the documentation of those backends, and you can write
your own hooks (either in YAML inside of `config.yaml` or as Python drop-in scripts) to capture them and execute custom
logic - for instance, [`backend.light.hue`](https://platypush.readthedocs.io/en/latest/platypush/backend/light.hue.html) can
trigger [`platypush.message.event.light.LightStatusChangeEvent`](https://platypush.readthedocs.io/en/latest/platypush/events/light.html#platypush.message.event.light.LightStatusChangeEvent).
logic - for instance, [`backend.light.hue`](https://docs.platypush.tech/en/latest/platypush/backend/light.hue.html) can
trigger [`platypush.message.event.light.LightStatusChangeEvent`](https://docs.platypush.tech/en/latest/platypush/events/light.html#platypush.message.event.light.LightStatusChangeEvent).
- By convention, plugins are identified by the lowercase name of their class without the `Plugin` suffix (e.g.
`light.hue`) while backends are identified by the lowercase name of their class without the `Backend` suffix.
@ -537,7 +537,7 @@ A few notes:
- By default, the HTTP backend will run the web service directly through a Flask wrapper. If you are planning to run
the service on a machine with more traffic or in production mode, then it's advised to use a uwsgi+nginx wrapper -
the [official documentation](https://platypush.readthedocs.io/en/latest/platypush/backend/http.html) explains how to
the [official documentation](https://docs.platypush.tech/en/latest/platypush/backend/http.html) explains how to
do that.
- If the plugin or the backend doesn't require parameters, or if you want to keep the default values for the parameters,