Das Forum hat mir schon soviel gegeben, also gebe ich mal etwas zurück.
Vorerst ist die Anleitung nur für einfache Temperaturfühler (DS18B20) da ich sonnst keine besitze.
Benötigte Hardware
-Raspberry PI (mit allem Zubehör was man benötigt)
-1 Wire Sensoren DS18B20
-1Stk 4,7kOhm Wiederstand
-Netzwerkanbindung
-KNX (in meinem Fall über eine MDT-Router)
-bei langen Leitungslängen, vielen Sensoren oder erhöhter Stabilität empfiehlt sich das
Kostenpunkt für 15 Sensoren + Raspberry PI ca 100€
Raspberry PI Einrichten
Das Ganze läuft bei mir jetzt ca ein Halbes Jahr ohne Probleme zwischendurch wurde zwar der Code der PHP datei noch etwas verbessert und neu hochgeladen. um ganz sicherzugehen das es immer gut funktioniert kann man noch
eingeben das führt dazu das der Raspberry PI jeden tag einmal Neugestartet wird
der Wert den die Sensoren senden wird im Übrigen nicht auf Gültigkeit überprüft sondern direkt gesendet
zum schluss noch wie das bei mir aussieht ich hab die ganze sache mit dem Pegelwander gebaut photo_2017-02-27_15-29-40.jpg
photo_2017-02-27_15-29-49.jpg
Vorerst ist die Anleitung nur für einfache Temperaturfühler (DS18B20) da ich sonnst keine besitze.
Benötigte Hardware
-Raspberry PI (mit allem Zubehör was man benötigt)
-1 Wire Sensoren DS18B20
-1Stk 4,7kOhm Wiederstand
-Netzwerkanbindung
-KNX (in meinem Fall über eine MDT-Router)
-bei langen Leitungslängen, vielen Sensoren oder erhöhter Stabilität empfiehlt sich das
Kostenpunkt für 15 Sensoren + Raspberry PI ca 100€
Raspberry PI Einrichten
- Raspian Light Dowloaden
- Win32 Imager Downloade
- Image auf die SD Karte Schreiben
- MicroSD-Kartenlaufwerk auswählen
- Image Datei auswählen
- Image Datei schreiben
- Im laufwerk der MicroSD Karte eine datei erstellen die ssh heißt ohne dateiendung und ohne inhalt.
- Karte in den Raspberry PI stecken und mit dem Stromnetz verbinden
- Kitty downloaden
- Die IP Adresse des Raspberry PI im Router herausfinden.
- Kitty Öffnen
- kitty.jpg
- Unter Hostname (IP address) tragt ihr die zuvor im Router nachgeschaute IP Adresse ein und klickt auf Open
- das nächste Dialog mit OK bestätigen und username "pi" und passwort "raspberry" ohne Anführungszeichen eingeben
-
Code:
sudo raspi-config
- dort
Code:
Expand Filesystem
-
Code:
sudo apt-get update && apt-get upgrade -y
-
Code:
sudo nano /boot/config.txt
- am ende der datei
Code:
dtoverlay=w1-gpio,gpiopin=4,pullup=on
-
Code:
sudo modprobe w1-gpio pullup=1 && sudo modprobe w1-therm && reboot
- Schritt 8-11 nach dem Neustart wiederholen
- 1-Wire Sensoren Anschließen gpio_1wire.gif
C -
Code:
ls -al /sys/bus/w1/devices
- dort sollte es dann etwa so aussehn w1.jpg
- die Nummern die mit 28- Anfangen sind eure ID´s der Sensoren, diese ID´s müsst ihr euch speichern werden später noch gebraucht. ihr könnt auch die Sensoren einzeln anschließen und immer ca 10 sekunden warten dann bekommt ihr die ID´s einzeln und wisst welchem Sensor welche ID gehört.
- Die Nächsten befehle nacheinander eingeben
-
Code:
sudo apt-get install debhelper cdbs automake libtool libusb-1.0-0-dev git-core build-essential libsystemd-daemon-dev dh-systemd libev-dev cmake
-
Code:
cd /home/pi
Code:git clone https://github.com/knxd/knxd.git
Code:cd knxd
Code:dpkg-buildpackage -b -uc
Code:cd ..
Code:sudo dpkg -i knxd_*.deb knxd-tools_*.deb
- Jetzt muss KNXD noch eingestellt werden
Code:
sudo nano /etc/knxd.conf
- In der Zeile wo KNXD_OPTS folgendes einfügen ACHTUNG!!! muss auf euer System angepasst werden
-
Code:
KNXD_OPTS="-e "PhysikalischeAddr" -E "PhysikalischerAddrBereich" -u /tmp/eib -b ip:"MulticastAddr."
- Beispiel:
-
Code:
KNXD_OPTS="-e 1.2.1 -E 1.2.2:1 -u /tmp/eib -b ip:224.0.23.12"
-
Code:
/etc/init.d/knxd restart
- Jetzt müssen wir noch PHP installieren
-
Code:
sudo apt-get install php5
-
Code:
sudo nano /var/www/html/temperatur.php
- Folgenden Code Einfügen
PHP-Code:
<?php
//Umrechnung in KNX DPT9
function DECtoDPT9($DEC) {
$DEC *= 100;
$dpt9 = 0;
$exponent = 0;
if ($DEC < 0)
{
$dpt9 = 0x08000;
$DEC = -$DEC;
}
while ($DEC > 0x07ff)
{
$DEC >>= 1;
$exponent++;
}
if ($dpt9 != 0) $DEC = -$DEC;
$dpt9 |= $DEC & 0x7ff;
$dpt9 |= ($exponent << 11) & 0x07800;
return strtoupper(chunk_split(str_pad(dechex($dpt9 & 0x0ffff),4,'0',STR_PAD_LEFT),2,' '));
}
//#####################Einstellungen#################################################
// Einstellungen #
// 1Wire ID #
$id = "28-0115a4d134ff"; #
// Gruppenadresse #
$group_address = "0/3/10"; #
// Unterschied bei dem Gesendet wird #
$deltat = 0.5; #
// Anzahl der durchläufe bis Wert OHNE aenderung gesendet wird #
$maxruntime = 100; #
// Pause in "s" zwischen Durchlaufen #
$pause = 5; #
//###################################################################################
//Schleifenfunktion
while (true)
{
// Datei abfragen
$last_line = exec("cat /sys/bus/w1/devices/".$id."/w1_slave");
// Gewünschte Information extrahieren
$value = explode("t=", $last_line);
// Formatieren
$formatted_value = number_format($value[1] / 1000, 2, ".", ",");
// Konvertieren
$converted_value = DECtoDPT9($formatted_value);
// Vergleich letzer Gesndeter Wert mit Aktuellem
if(empty($old_value) OR abs($formatted_value-$old_value) > $deltat) {
// Auf Bus schreiben
exec('/usr/lib/knxd/groupwrite ip:127.0.0.1 '.$group_address.' '.$converted_value);
// Alter Wert Zwischenspeichern
$old_value = $formatted_value;
// Runtime Zurücksetzen
$runtime = 0;
}
if ($runtime > $maxruntime) {
// Auf Bus schreiben
exec('/usr/lib/knxd/groupwrite ip:127.0.0.1 '.$group_address.' '.$converted_value);
// Runtime Zurücksetzen
$runtime = 0;
}
++$runtime;
// Debug-Ausgabe
echo("Ausgelesender Wert: ".$value[1])."\n";
echo("Formatierter Wert: ".$formatted_value)."\n";
echo("Konvertierter Wert: ".$converted_value)."\n";
echo("Runtime : ".$runtime)."\n";
echo("Letzer Gesndeter Wert : ".$old_value)."\n";
sleep($pause);
}
?> - Unter den Einstellungen bitte noch eigene ID, Gruppenadresse usw eintragen.
-
Code:
php /var/www/html/temperatur.php
- Jetzt sollte das ganze Folgendermaßen aussehen php.jpg
- mit STRG+C das ganze wieder beenden
- um das ganze beim Systemstart auch auszuführen muss folgendes
Code:
sudo crontab -e
- am ende der Datei folgendes eintragen @reboot php /var/www/html/temperatur.php
- Jetzt wird nach jedem reboot die Datei einmalig ausgeführt!
Das Ganze läuft bei mir jetzt ca ein Halbes Jahr ohne Probleme zwischendurch wurde zwar der Code der PHP datei noch etwas verbessert und neu hochgeladen. um ganz sicherzugehen das es immer gut funktioniert kann man noch
Code:
sudo crontab -e
Code:
@daily /sbin/shutdown -r now
der Wert den die Sensoren senden wird im Übrigen nicht auf Gültigkeit überprüft sondern direkt gesendet
zum schluss noch wie das bei mir aussieht ich hab die ganze sache mit dem Pegelwander gebaut photo_2017-02-27_15-29-40.jpg
photo_2017-02-27_15-29-49.jpg
Kommentar