149 lines
4.6 KiB
Markdown
149 lines
4.6 KiB
Markdown
# PlusLifeWeb
|
|
|
|
Dieses kleine PHP-Projekt bietet die Möglichkeit, Tests, die mit einem
|
|
[Pluslife-Gerät](https://altruan.de/pages/pluslife-pcr) und dem
|
|
[Pluslife Analyzer](https://virus.sucks/) durchgeführt wurden, zu speichern
|
|
und später nochmals anzuschauen.
|
|
|
|
Außerdem können Benachrichtigungen via Webhook an [Home Assistant](https://www.home-assistant.io/)
|
|
geschickt werden, um diese weiter zu verarbeiten.
|
|
|
|
Hierfür wurden folgende Komponenten benutzt:
|
|
|
|
* [Pluslife Analyzer Displayer von sistason](https://github.com/sistason/pluslife_analyzer_displayer/tree/main):
|
|
Dieses Projekt war der Ausgangspunkt für PlusLifeWeb
|
|
* jQuery
|
|
* Bootstrap
|
|
* Twig
|
|
* Chart.js
|
|
* PostgreSQL als Datenbank
|
|
|
|
**Wichtig:**
|
|
Es wird dringend davon abgeraten, PlusLifeWeb öffentlich zugänglich zu machen, da keinerlei Authentifizierung
|
|
implementiert ist! Jede Person, die PlusLifeWeb aufrufen kann, kann die Testergebnisse anschauen und auch
|
|
neue per Webhook hinzufügen!
|
|
|
|
## Installation
|
|
|
|
PlusLifeWeb wurde unter Devuan 12 "Bookworm" entwickelt und getestet. Daher sollte es auch unter
|
|
Debian 12 funktionieren.
|
|
|
|
Grundsätzlich wird ein Webserver, z.B. Apache, benötigt.
|
|
Die Verbindung zum Webserver muß per HTTPS möglich sein, damit der Webhook von virus.sucks funktioniert.
|
|
|
|
Folgende PHP-Pakete werden benötigt:
|
|
|
|
* php-pgsql
|
|
* php-twig
|
|
* php-json
|
|
* php-curl
|
|
|
|
Zur Installation genügt es, die Dateien in einem Webserver-Verzeichnis abzulegen, in dem PHP funktioniert.
|
|
|
|
### Datenbank
|
|
|
|
In PostgreSQL wird eine Datenbanktabelle für die Tests benötigt.
|
|
|
|
Die Datenbank wird als Benutzer *postgres* angelegt (Als root: `su - postgres`).
|
|
|
|
```
|
|
# createdb plweb
|
|
```
|
|
|
|
Anschließend, weiterhin als Benutzer postgres, das Kommando `psql` aufrufen:
|
|
|
|
```
|
|
# psql plweb
|
|
```
|
|
|
|
Mit folgenden SQL-Kommandos wird dann die Tabelle sowie ein Benutzer angelegt:
|
|
|
|
```sql
|
|
CREATE TABLE tests (
|
|
id SERIAL PRIMARY KEY,
|
|
timestamp TIMESTAMP NOT NULL,
|
|
data JSONB
|
|
);
|
|
|
|
CREATE USER plweb WITH ENCRYPTED PASSWORD 'plweb';
|
|
|
|
GRANT ALL PRIVILEGES ON DATABASE PLWEB TO plweb;
|
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA PUBLIC TO plweb;
|
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA PUBLIC TO plweb;
|
|
```
|
|
|
|
Das Paßwort ist hier nur *plweb* - es sollte besser ein anderes benutzt werden.
|
|
|
|
### Konfiguration
|
|
|
|
In der Datei `config.php` können folgende Parameter eingestellt werden:
|
|
|
|
```php
|
|
$hawebhook = "http://homeassistant:8123/api/webhook/plweb";
|
|
$dbconnstring = "host=localhost dbname=plweb user=plweb password=plweb";
|
|
$test_url = "https://example.com/plweb/test.php?";
|
|
```
|
|
|
|
Die Variable `hawebhook` enthält die URL des Home Assistant-Webhooks, so wie dieser
|
|
von PlusLifeWeb aus (serverseitig) aufgerufen wird.
|
|
Wird die Variable leer gelassen (`""`), so wird die Home Assistant-Benachrichtigung deaktiviert.
|
|
|
|
Die Datenbankkonfiguration ist in `dbconnstring` enthalten. Hier ggf. das Paßwort anpassen.
|
|
|
|
Die `test_url` zeigt zum Script test.php der PlusLifeWeb-Installation.
|
|
Diese URL wird, zusammen mit der ID des fertigen Tests, als Benachrichtigung an Home
|
|
Assistant übertragen.
|
|
|
|
### Home Assistant
|
|
|
|
Um die Home Assistant (HA)-Benachrichtigung zu nutzen, muß in HA eine Automatisierung
|
|
eingerichtet werden, die per Webhook-Aufruf aktiviert wird.
|
|
|
|
Diese kann beispielsweise so aussehen:
|
|
|
|
```yaml
|
|
alias: Webhook PlusLifeWeb
|
|
triggers:
|
|
- trigger: webhook
|
|
allowed_methods:
|
|
- POST
|
|
local_only: true
|
|
webhook_id: plweb
|
|
actions:
|
|
- if:
|
|
- condition: template
|
|
value_template: "{% if trigger.json.url is defined %}true{% endif %}"
|
|
then:
|
|
- action: notify.familie
|
|
metadata: {}
|
|
data:
|
|
message: |-
|
|
{{ trigger.json.message }}
|
|
Klicken, um den Test anzusehen.
|
|
data:
|
|
clickAction: "{{ trigger.json.url }}"
|
|
group: plweb
|
|
title: PlusLifeWeb
|
|
else:
|
|
- action: notify.familie
|
|
metadata: {}
|
|
data:
|
|
message: "{{ trigger.json.message }}"
|
|
title: PlusLifeWeb
|
|
data:
|
|
group: plweb
|
|
mode: single
|
|
```
|
|
|
|
**Wichtig:** Der Wert für `webhook_id` ist quasi das Paßwort für den Webhook - es gibt keine weitere
|
|
Authentifizierung für den Aufruf des Webhooks. Falls `local_only` auf `false` gesetzt ist, kann der
|
|
Webhook auch aus dem Internet aufgerufen werden (sofern HA von dort aus erreichbar ist).
|
|
Die Empfehlung wäre, den Webhook nur im lokalen LAN erreichbar zu machen (`local_only: true`) und eine
|
|
sichere `webhook_id` zu benutzen.
|
|
Dies setzt allerdings voraus, daß PlusLifeWeb und der HA-Server im gleichen lokalen LAN stehen.
|
|
|
|
Die Benachrichtigung erfolgt im Beispiel an `notify.familie`, eine Benachrichtigungs-Gruppe.
|
|
Hier muß eine im eigenen HA vorhandene notify-Entität genutzt werden :)
|
|
|
|
|