Posts Tagged ‘RaspberryPi’

Elektronische Haushaltszähler auslesen mit RaspberryPi und PHP


2015
03.06

Nachdem ich ja nun inzwischen den Loxone Miniserver benutze und mir mein RaspberryPi Dateisystem zerschossen wurde, als ich die USV getestet habe aber der RaspberryPi an der falschen Steckdose hing, habe ich mich entschieden volkszaehler.org nicht wieder einzusetzen.
Ich hatte mit dem Betrieb und der Einrichtung zu viele Probleme und mir was das auch alles viel zu viel des Guten.
Da ich einfach nur noch die Werte haben wollte, habe ich mir ein kleines PHP Script gebastelt, welche mit einer PHP-Klasse für den seriellen Zugriff auf die USB-Leseköpfe die Daten ausliest.

Einen Projekt-Thread findet ihr hier: Loxone-Forum

Installation von Null angefangen:
1) Download Raspbian Image: http://www.raspberrypi.org/downloads/
2) Download Win32DiskImager Binary Version: http://sourceforge.net/projects/win32diskimager/files/Archive/
3) Beide Downloads entpacken.
4) Raspbian Image mit dem Win32DiskImager auf die SD/microSD Karte kopieren. (Der RaspberryPI 1B hat einen SD und der 1B+ einen microSD Slot!)

Man landet nach dem Start im Setup. (sudo raspi-config)
(Mehr Details auf Datenreise.de)
5) 1 Expand Filesystem
6) 2 Passwort anpassen
7) 3 Booten zur „Command line“
8) 4 Internationalisierung
I1 – Locale -> de_DE.UTF-8
I2 – Timezone -> Europe & Berlin
9) 8 Advanced Options
A2 – Hostname
A3 – GPU memory -> 16
A4 – SSH -> Enable
A0 – Update (oder: sudo apt-get update;sudo apt-get dist-upgrade)
10) Finish
11) sudo reboot

12) SSH auf Keys umstellen um vom Raspberry auf andere Maschinen und auf den Raspberry zu kommen ohne immer ein PW einzugeben
Für jeden User: ssh-keygen -b 4096 -t dsa
Dann immer den Inhalt der lokalen ~/.ssh/id_rsa.pub auf dem Zielsystem zum Inhalt der ~/.ssh/authorized_keys des entsprechenden Benutzers hinzufügen.
Gegebenenfalls ist die Datei authorized_keys im Heimatverzeichnisses des Benutzers anzulegen: touch ~/.ssh/authorized_keys

13) Webserver installieren: sudo apt-get install apache2 php5
14) Scripte installieren
sudo su
mkdir /var/www/sml
cd /var/www/sml
wget http://woerstenfeld.de/sml/SML_read_emh_ehz.zip -O ./SML_read_emh_ehz.zip
unzip SML_read_emh_ehz.zip
rm -f unzip SML_read_emh_ehz.zip
chown -R www-data:www-data /var/www/sml
chmod -R 644 /var/www/sml
chmod 755 /var/www/sml

15) Webserver konfigurieren
vi /etc/apache2/sites-enabled/000-default
Mit dem Cursor zur Zeile mit „CustomLog ${APACHE_LOG_DIR}/access.log combined“ gehen und i# eingeben.
Dann mit :wq den Editor beenden

16) Leseköpfe einrichten
Mit /sbin/udevadm info –query=all –name=/dev/ttyUSB0 |grep SERIAL_SHORT
und /sbin/udevadm info –query=all –name=/dev/ttyUSB1 |grep SERIAL_SHORT
habe ich meine zwei Seriennummern 0072D0B2 und 0072D0B0 der Köpfe ausgelesen
und in die Datei /etc/udev/rules.d/99-lesekopf.rules geschrieben:
SUBSYSTEM=="tty", ATTRS{product}=="CP2104 USB to UART Bridge Controller", ATTRS{serial}=="0072D0B0", SYMLINK+="lesekopf0"
SUBSYSTEM=="tty", ATTRS{product}=="CP2104 USB to UART Bridge Controller", ATTRS{serial}=="0072D0B2", SYMLINK+="lesekopf1"

Falls sich der Product Code geändert hat, mit folgendem Kommando prüfen:
udevadm info --name=/dev/ttyUSB0 --attribute-walk |grep product

Neustarten der Device-Rules:
udevadm trigger

Jetzt sollte es die Geräte /dev/lesekopf0 und ggf. /dev/lesekopf1 geben.

Rechte anpassen:
chmod 777 /dev/lesekopf*
chown www-data:www-data /dev/lesekopf*

Serielle Einstellungen festlegen (9600 8N1):
stty -F /dev/lesekopf0 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
stty -F /dev/lesekopf1 1:0:8bd:0:3:1c:7f:15:4:5:1:0:11:13:1a:0:12:f:17:16:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0

Daten anfordern:
echo $'\x2f\x3f\x21\x0d\x0a' >/dev/lesekopf0
echo $'\x2f\x3f\x21\x0d\x0a' >/dev/lesekopf1

Und schon sprudelt es:
root@pi:/home/pi# cat /dev/lesekopf0|hd
00000000 2b c8 1b 1b 1b 1b 01 01 01 01 76 07 00 07 00 0a |+.........v.....|
00000010 01 01 63 9a 05 00 76 07 00 07 00 0a 07 01 00 62 |..c...v........b|
00000020 0a ff 01 01 01 01 b7 59 be 01 77 07 01 00 01 08 |.......Y..w.....|
00000030 02 ff 01 01 62 1e 52 ff 56 00 00 00 00 00 01 77 |....b.R.V......w|
00000040 07 01 00 10 07 00 ff 01 01 62 1b 52 ff 55 00 00 |.........b.R.U..|
00000050 02 28 01 77 07 81 81 c7 82 05 ff 01 72 62 01 65 |.(.w........rb.e|
00000060 02 c8 0c db 01 01 83 02 92 be 25 0b ed 52 38 a9 |..........%..R8.|
00000070 ff 7a f6 f3 20 0c 50 08 3e 6c eb a5 e8 6f e1 2e |.z.. .P.>l...o..|
00000080 0f 06 6d f0 80 4a 9e 6f 3e 49 b4 c2 68 72 c4 81 |..m..J.o>I..hr..|
00000090 c7 5e 0a 6c 34 e7 77 01 01 01 63 44 21 00 76 07 |.^.l4.w...cD!.v.|

Jetzt kann man die Daten mit http://name-oder-ipadresse-des-raspberry.pi/sml/SML_read_emh_ehz.php?device=lesekopf0 abfragen.
Natürlich kann man die SML_read_emh_ehz.php nach index.php umbenennen und dann statt /sml/SML_read_emh_ehz.php?device=lesekopf0 nur /sml/?device=lesekopf0 schreiben.

Viel Spaß!

Neue Spielereien in Betrieb genommen


2013
03.24

Diese Woche sind wieder neue Spielsachen geliefert worden. Mit der Technik die ich vor einiger Zeit schon bestellt habe macht das:
-einen Raspberry Pi Typ B mit 512 MB RAM
-eine APC Back-UPS Pro 1500 USV (Unterbrechungsfreie Stromversorgung) [Infos]
-eine fantec 2 TB USB Festplatte Datenblatt

Der Raspberry Pi ist ein Minicomputer etwa in Kreditkartengröße.
Mit Gehäuse sieht er so aus:

Raspberry Pi

Raspberry Pi

An ihm ist die USV über USB angeschlossen und der Pi steuert alle weiteren Rechner im Haus via LAN.
Außerdem dient er mit der 2 TB Festplatte als NAS 🙂

Daten zur USV:
Specifications
UPS-Features
Installation & Operation

Dank dieser Konstellation kann ich jetzt sogar Stromausfälle überwachen, melden und abfangen.

Als nächstes werde ich mal sehen, ob ich den eibd von dem Atom Wandpanel auf den Pi verschiebe. Was den Stromverbrauch betrifft wäre der mit 3,5 Watt unschlagbar.

Nachtrag: Inzwischen habe ich eine 2,5″ 2 TB Harddisk genommen (kein extra Netzteil)

Einrichtung auf dem Raspberry und den anderen Rechnern des Netzwerks ist hier super beschrieben: http://www.gtkdb.de/index_36_2203.html

Damit chkconfig funktioniert ist gegebenenfalls noch folgender Befehl auszuführen:
apt-get install chkconfig

Da ich auch eMails senden möchte habe ich noch sendemail installiert:
apt-get install sendemail

Die Konfigurationsdateien sehen so aus – mal zwei Beispiele:

/etc/apcupsd/check
SYSADMIN=adresse@domain.de,adresse2@domain.de
APCUPSD_MAIL="/usr/bin/sendemail"
MSG="USV: Check"
#
(
/sbin/apcaccess status
) | $APCUPSD_MAIL -u "$MSG" -f andresse@absender.de -t $SYSADMIN -s emailserver.de:25 -xu benutzername -xp passwort
exit 0

/etc/apcupsd/onbattery
#!/bin/sh
#
# This shell script if placed in /etc/apcupsd
# will be called by /etc/apcupsd/apccontrol when the UPS
# goes on batteries.
#
SYSADMIN=SYSADMIN=adresse@domain.de,adresse2@domain.de
APCUPSD_MAIL="/usr/bin/sendemail"
MSG="USV: Stromausfall!!"
#
(
echo " "
echo " ====================================="
echo " POWER FAILURE !!"
echo " ====================================="
echo " "
echo " Die USV hat ein Problem festgestellt und auf Batterie umgeschaltet."
echo " "
echo " Keine Panik! Bleib entspannt..."
echo " "
echo "Momentaner USV Status:"
echo " "
/sbin/apcaccess status
) | $APCUPSD_MAIL -u "$MSG" -f andresse@absender.de -t $SYSADMIN -s emailserver.de:25 -xu benutzername -xp passwort
exit 0