[Part 1]
Da ich schon des öfteren gefragt wurde wie man denn Werte in den Broker bekommt die jetzt nicht direkt von einem Basic oder Smart-Sensor kommen, hier also mal ein "kleines" HowTo...
Damit es jeder nachbauen kann, wollen wir die CPU-Temperatur des PI in den ioBroker integrieren (ja, dafür gibt es einen Adapter, soll aber auch nur die Vorgehensweise erläutern).
Synopsis:
[PUTTY] - folgende Zeichen so in den Terminalclient (z.B. putty ) eingeben
[OUT] - Ausgabe auf Putty, bpsw. von einem Befehl
Der Datenlieferant:
Zuerst müssen wir erst mal die Daten bekommen, die wir in den Broker integrieren möchten. Geeignet ist einfach alles was einen Wert liefert. Das kann bspw. ein DHT22 am Pi sein, ein oder mehrere 18B20 an einem Arduino, oder ...
Wir stellen eine Terminal-Sitzung mit dem Pi her und loggen uns als User Pi ein.
Die Core-Temperatur bekommen wir beim Pi recht einfach: [PUTTY] vcgencmd measure_temp
Ausgabebeispiel: [OUT] temp=49.4'C
Sehr schön, aber leider nicht so ganz zu gebrauchen, denn wir benötigen nur die Temperatur. Ich möchte an dieser Stelle kein Linux-Wissen vermitteln, deswegen nur rudimentär wie man an die Temperatur herankommt:
[PUTTY] vcgencmd measure_temp|cut -d'=' -f2
[OUT] 49.4'C
Schon besser...
[PUTTY] vcgencmd measure_temp|cut -d'=' -f2|tr -d \'C
[OUT] 49.4
Bingo
Um etwas Ordnung zu halten, lege ich bash-Scripte bei mir im Ordner "script" des home-Verzeichnisses an. Wer das ebenfalls möchte, ein Verzeichnis anlegen (sonst überspringen): [PUTTY] cd ~ && mkdir script
Ein neues Bash-Script erstellen (wer vom Beispiel abweicht muss natürlich jetzt sein Verzeichnis anpassen!). Ich nenne es jetzt mal sysinfo2iobroker.sh:
[PUTTY] nano ~/script/sysinfo2iobroker.sh
Dort fügt ihr nun ein:
Spoiler anzeigen
#!/bin/bash
#ioBroker-Datenpunkt
DP=javascript.0.Systeminfos.RaspberryPi.Wohnzimmer.Temperatur_Core
#ioBroker-IP:Port
IPP=192.168.100.130:8082
#Werte abfragen
CORETEMP=$(vcgencmd measure_temp|cut -d'=' -f2|tr -d \'C)
#an ioBroker senden
curl http://%24%7bipp%7d/set/%24%7BDP%7D?value=%7B%24CORETEMP}
Erklärung:
(ioBroker-Datenpunkt)
Genau so und dort wird der Datenpunkt abgelegt, also hier unter javascript.0 -> Systeminfos -> RaspberryPi -> Wohnzimmer unter dem Namen "Temperatur_Core" (die Bezeichnung ab dem letzten Punkt gibt immer den Namen des Datenpunktes an)
(ioBroker-IP:Port)
selbsterklärend
(Werte abfragen)
Die Zeile kennen wir im Grunde schon, nur wird die Ausgabe jetzt zur Weiterverarbeitung in einer Variablen gespeichert
Wenn wir fertig sind, speichern mit STRG + O, nano mit STRG + X beenden.
Nun müssen wir das Shell-Script noch ausführbar machen: [PUTTY] chmod 755 ~/script/sysinfo2iobroker.sh
Vorerst sind wir hier fertig und wechseln zum ioBroker.
Falls noch nicht installiert, wir benötigen an Adaptern die "Script Engine", den "ioBroker simple web Adapter" und zu guter Letzt den "simpleAPI Adapter".
Wir begeben uns danach in die Einstellungen des Web-Server-Adapters (web.0) und setzen ein Häkchen bei Eingebautes 'Simple-API'. Mehr ist nicht zu konfigurieren, also "Speichern" klicken.
Wir gehen unter "Skripte" und erzeugen an gewünschter Stelle ein neues Skript (ruhig auch mit Gruppen arbeiten) und geben diesem einen aussagekräftigen Namen.
Nun kopieren wir folgenden Quelltext in das Javascript:
/*
V0.0.1 Skript zum Einlesen der Systeminfos
13.04.2018 Daten kommen via Simple API
*/
const logging = false;
// Raspberry Wohnzimmer
// Systemdaten sammeln und auswerten die an den ioBroker gesendet wurden
var idDPTemp = 'javascript.0.Systeminfos.RaspberryPi.Wohnzimmer.Temperatur_Core';
createState(idDPTemp, 0, {
name: 'Core-Temperatur',
desc: 'Core-Temperatur',
type: 'number',
unit: '°C',
role: 'value.temperature',
read: true,
write: true
});
on(idDPTemp, function(data) {
var temp = parseFloat(data.state.val);
setState(idDPTemp, temp);
if (logging) log('Neue Core-Temperatur vom RaspberryPi empfangen: ' + temp + '°C');
});
Alles anzeigen
Setzt man "logging" auf true, wird im Log auch angezeigt was in der vorletzten Zeile steht. Die Meldung könnt ihr natürlich entsprechend anpassen. "name" und "desc" könnt ihr nach Lust und Laune ändern, var idDPTemp = 'javascript...'; muss aber so heißen wie ihr es im Shell-Script zuvor benannt habt!
Fertig --> "Speichern" klicken.
Das Script mittels Klick auf den roten Play-Button starten (sollte zum grünen Pause-Zeichen wechseln).
Und nun? Nix passiert, ich sehe keine Datenpunkte...
Völlig korrekt so, denn euer "Datenlieferant" liefert ja auch (noch) nichts, also mal in die Terminal-Sitzung vom Pi wechseln,
[PUTTY] ~/script/sysinfo2iobroker.sh
[OUT] {"id":"javascript.0.Systeminfos.RaspberryPi.Wohnzimmer.Temperatur_Core","value":49.4,"val":49.4}
...und im ioBroker
schimmer-media.de/index.php?attachment/2182/
...so wollten wir das
Damit die Daten nun zyklisch gesendet werden, richten wir auf dem Datenlieferant noch einen cronjob (im Beispiel sollen alle 5 Minuten die Daten geschickt werden) ein.
[PUTTY] crontab -e
und fügen unten an: */5 * * * * /home/pi/script/sysinfo2iobroker.sh >/dev/null 2>&1
Wenn wir fertig sind, speichern mit STRG + O, crontab/nano mit STRG + X beenden.
Fertig. Nun können wir uns auch die Temperatur bspw. in VIS anzeigen lassen, per Blockly weiterverarbeiten...
schimmer-media.de/index.php?attachment/2183/
Pauschal kann auch ein Windows-Rechner oder Mac als Datenlieferant dienen, genauso wie ein Arduino etc. Es muss
nur der entsprechende (Sensor)-Wert ermittelt werden und per HTTP an den Broker geschickt werden können.
Als nächstes werden wir noch die freie Speicherkapazität der SD-Karte in den Broker übernehmen...
...und zum Ende gibt es eine kleine Aufgabe^^