433MHz Temperatur auslesen
Einen 433-MHz-Funk-Außensensor mit pilight empfangen, die Werte per Shell- und PHP-Skript herausfiltern und alle zwei Minuten ablegen.
Was wir benötigen:
| Bauteil | Beschreibung |
|---|---|
![]() |
Aukru 433 MHz Funk- Sende und Empfänger Modul Superregeneration Wireless Transmitter-Modul Einbrecher Alarm 433M receiver module Burglar Alarm für Arduino Raspberry pi (Amazon: LINK) |
![]() |
PEARL Funk-Außensensor für Wetterstation (Amazon: LINK) |
Verkabelung des Senders/Empfängers:
Sendemodul (für das reine Auslesen nicht nötig):
| Anschluss | Pin am Raspberry Pi |
|---|---|
| DATA | Pin 11 |
| VCC | Pin 1 (+3,3 V) |
| GND | Pin 6 |
Empfangsmodul:
| Anschluss | Pin am Raspberry Pi |
|---|---|
| DATA | Pin 12 |
| VCC | Pin 2 (+5 V) |
| GND | Pin 6 |
Installation PILIGHT:
sudo nano /etc/apt/sources.list
deb http://apt.pilight.org/ stable main
sudo wget -O - http://apt.pilight.org/pilight.key | sudo apt-key add -
sudo apt-get -y update
sudo apt-get -y install pilight
Grundkonfiguration PILIGHT:
sudo nano /etc/pilight/config.json
hier werden folgende Einstellungen getroffen:
{
"devices": {},
"rules": {},
"gui": {},
"settings": {
"log-level": 4,
"pid-file": "/var/run/pilight.pid",
"log-file": "/var/log/pilight.log",
"send-repeats": 10,
"receive-repeats": 1,
"webserver-enable": 1,
"webserver-root": "/usr/local/share/pilight/",
"webserver-port": 5001,
"webserver-cache": 1,
"firmware-update": 0
},
"hardware": {
"433gpio": {
<strong> <span style="color: #ff0000;">"sender": 1,
"receiver": 0</span></strong>
}
},
"registry": {
"pilight": {
"version": {
"current": "5.0"
}
}
}
Die Einstellungen „sender“ und „receiver“ müssen geändert werden und an eure Pinbelegung angepasst werden.
(0 entspricht Pin 11 und 1 entspricht PIN 12, laut WiringX Pinbelegung)
Abfrage:
Um die Abfrage des Temperatursensors zu ermöglichen, habe ich ein zweigeteiltes Script geschrieben, das Sensoren ausließt die das Protokoll „alecto_wsd17“ benutzen.
Abfragescript Teil1 (SHELL) Speicherort:“/root/auswerte“:
while [ true ] ; do
rm /tmp/r-log
pilight-receive > /tmp/r-log 2>&1 &
sleep 120
ps aux |grep -v grep|grep pilight-receive| awk '{print $2}' >/tmp/pid-light
#cat /tmp/r-log |grep temperature
wert=`cat /tmp/pid-light`
kill $wert
php /root/split.php
#echo $wert
done
Abfragescript Teil2 (PHP) Speicherort:“/root/split.php“:
<?php
$leer = shell_exec("wc -l /tmp/r-log |awk '{ print $1 }'") ;
if ($leer == 0){
exit;
}
$imp= shell_exec('cat /tmp/r-log');
$temparr = array();
$zeichen = preg_split('/repeats/', $imp, -1, PREG_SPLIT_OFFSET_CAPTURE);
$cs = 0;
$az=count($zeichen);
$az = $az - 1;
$neu = array();
while ($cs <= $az){
//echo $cs;
//echo $az;
$neu[] = $zeichen[$cs][0] ;
$cs= $cs + 1;
}
foreach ( $neu as $block ){
$daten = $block ;
$dateihandle = fopen("/tmp/worktmp","w");
fwrite($dateihandle, $daten);
//$r = shell_exec("echo $block > /tmp/worktmp");
$lines = file("/tmp/worktmp");
$searchstr = "temperature";
$searchstrr = "protocol";
unset($results);
foreach ($lines as $line)
{
if(strpos($line, $searchstr) !== false)
{
if(strpos($line,"PHP")!==true){
if (!empty($line)) {
$results[] = $line;
}
}
}
}
foreach ($lines as $line)
{
if(strpos($line, $searchstrr) !== false)
{
if(strpos($line,"PHP")!==true){
if (!empty($line)) {
$results[] = $line;
}
}
}
}
//echo '<pre>';
//print_r($results);
//echo '</pre>';
if (!empty($results[1])) {
if(strpos($results[1],'"alecto_wsd17"')!==false){
if(strpos($results[0],"temperatur")!==false){
$tempg = str_replace(' ','',$results[0]);
$temp = substr("$tempg", 16);
$temparr[] = $temp;
// echo $temp;
// echo $results[1];
//echo "-----------";
}
}
}
}
$tstop = 0;
$lastt=count($temparr);
$lastt=$lastt - 1 ;
//echo $temparr[$lastt];
while ($tstop == 0) {
//echo $lastt;
if ($lastt == 0){
exit;
}
//$ext = substr(strrchr($temparr[$lastt], "."), 1);
$ext = round($temparr[$lastt]);
//echo $ext;
if ($ext < "100" AND !empty($ext)){
// echo $temparr[$lastt] ;
$datenx = $temparr[$lastt] ;
$dateihandlex = fopen("/tmp/aussentemp","w");
fwrite($dateihandlex, $datenx);
$tstop = 1;
}
else {
$lastt = $lastt - 1;
//echo "prob";
}
}
?>
Start der Auswertung:
Das Auslesen wird mit diesem Befehl gestartet:
/root/auswerte > /dev/null 2>&1 &
Die Ergebnisse werden alle 2 Minuten in der Datei /tmp/aussentemp aktualisiert.

