====== Volkszaehler auf einem Raspberry Pi mittels fertigem Image installieren ======
Mit dem fertigen Image ist die Installation eines Volkszaehlers deutlich einfacher geworden. Hier der grobe Ablauf, Ihr müsst trotzdem noch einiges in der Doku lesen und verstehen, damit die Konfiguration gelingt...
===== Features =====
* vollständige Installation eines Volkszählers: vzlogger, Middleware (inkl. Frontend) schon fertig installiert
* lediglich noch Anpassung an lokale Installation (Zähler, Netzwerk...) nötig
* Optimierungen um die SD-Karte zu schonen
* eingerichtete Datenkompression und Datenaggregation
Für vollen Funktionsumfang empfehlen wir Rpi 2, 3 oder 4; ältere oder Zero sollten nur den vzlogger nutzen.
===== Image aufspielen =====
* Aktuelles Image für RPi, RPi-B+, RPi 2, RPi 3, Rpi 4 und Raspi Zero W herunterladen von [[https://demo.volkszaehler.org/downloads/volkszaehler_latest.zip|Image-Quelle]].
* Image mit [[http://sourceforge.net/projects/win32diskimager/files/latest/download?source=navbar|Win32ImageWriter]] auf eine mindestens 8GB, besser 16GB große, Class 10, [[http://raspberrycenter.de/handbuch/sd-karten-raspberry-pi|Raspberry Pi kompatible SD-Karte]] kopieren.
* beim Raspi Zero W im Verzeichnis /boot die Datei 'wpa_supplicant.conf' editieren (am Besten mit Notepad++) und SSID als auch PSK eintragen. Die Datei wird beim ersten Start in das Verzeichnis /etc/wpa_supplicant kopiert. SSH ist aktiviert. Um die serielle Schnittstelle ttyAMA0 zu aktivieren wurde Bluetooth in der Datei /boot/config.txt deaktiviert. Wer diese serielle Schnittstelle nicht braucht, kann die Datei entsprechend editieren.
* SD-Karte in den Pi einlegen.
=== Starten des Pi ===
* Pi an das Netzwerk anschließen (LAN-Kabel bevorzugt, [[https://www.elektronik-kompendium.de/sites/raspberry-pi/1912221.htm|WLAN geht aber auch]])
* Pi starten (Stromversorgung anschließen), das Filesystem wird automatisch auf die ganze SD-Karte erweitert und das System neu gestartet
===== Anmelden an die Konsole des RaspberryPi =====
=== Über LAN ===
Von einem beliebigen Rechner desselben LAN-Netzwerkes:\\
Die Zuteilung der IP Adresse an den RaspberryPi am DHCP Server ablesen. In der Regel ist das der Router, z.b. die FritzBox.\\
Man kann auch einen Netzwerk-Scanner benutzen, um die IP des RaspberryPi herauszufinden.
z.B. https://www.softperfect.com/products/networkscanner/
\\
Dann mit z. B. [[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html|putty]] die Konsole des Pi von einem beliebigen Rechner desselben Netzwerkes aufrufen: putty Port 22, Connection Type: SSH
User: pi Passwort: raspberry
=== Mit Monitor und USB-Tastatur ===
Mit Monitor und USB-Tastatur direkt am RaspberryPi kann man sich lokal anmelden.
Die Tastatur hat in dem Moment noch die englische Belegung!
Auf Dauer ist der Zugang übers Netzwerk aber praktischer.
===== Übersicht der Passwörter =====
^Anwendung^Benutzername^Passwort^
|Konsole|pi|raspberry|
|ssh (Konsole über Netzwerk)|pi|raspberry|
|User für vzlogger|vzlogger|vzlogger|
|MySQL-Standardbenutzer|vz|demo|
|MySQL-Umfassender-Nutzer|vz-admin|secure|
|MySQL-Admin((seit "stretch" ist eine zusätzliche
Sicherheit eingebaut die nur dem Systemuser root auch DB-Zugriff als
root erlaubt. (sudo mysql --user=root -praspberry) ))|root|raspberry|
===== Einrichten =====
== Die Partition an die benutzte Karte anpassen ==
Ist nicht mehr manuell nötig, das Dateisystem wird automatisch auf die Größer der SD-Karte angepasst. Der erforderliche Neustart erfolgt automatisch.
== Tastatur einstellen ==
Erfolgt über raspi-config. Für korrekte Umlaute den Zeichensatz "de_DE.UTF-8" wählen.
== Datum und Zeit stellen ==
Wenn der Raspberry keinen Zugang zum Internet hat, müssen Datum und Uhrzeit manuell gestellt werde. Z.B. um auf Dezember, den 04. um 08:05 Uhr 2014 setzen:
sudo date "1204080514"
== evtl: Datenbank übers Netz erreichbar machen ==
Wer aus dem lokalen Netz mit einem SQL-client (z.B. [[https://www.heidisql.com/download.php|HeidiSQL]]) auf die DB zugreifen will, muss mit
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
die Zeile ""bind-address = 127.0.0.1"" ändern in
bind-address = 0.0.0.0
Datenbank neustarten
sudo systemctl restart mysqld
Zudem braucht man einen User mit entsprechenden Rechten auf die DB
sudo mysql -uroot -praspberry
CREATE USER 'vz-admin'@'%' IDENTIFIED BY 'secure';
GRANT USAGE ON *.* TO 'vz-admin'@'%';
GRANT ALL PRIVILEGES ON `volkszaehler`.* TO 'vz-admin'@'%' WITH GRANT OPTION;
exit
Dabei bedeutet ''%'' das man jeden Netzzugriff zulässt. Man kann das für mehr Sicherheit auch auf eine einzelne Adresse oder einen Adressbereich ''192.168.1.%'' einschränken.
===== Kanäle anlegen =====
* Mit dem VZ-Frontend unter http:///
[[software/middleware/einrichtung|die gewüschten Kanäle anlegen]]
* über das (i) der Kanäle die UUIDs herausfinden, die beim Anlegen der Kanäle erzeugt wurden
===== vzlogger konfigurieren =====
* mit sudo nano /etc/vzlogger.conf
die Konfigurationsdatei für den [[software/controller/vzlogger?s[]=vzlogger|vzlogger]] bearbeiten und gemäß [[software:controller:vzlogger:vzlogger_conf_parameter| Dokumentation]] die UUIDs einfügen. Dazu kann der vzlogger.conf-Editor benutzt werden: http://volkszaehler.github.io/vzlogger/
Vom vzlogger.conf-Editor erstellte Einträge, die nicht benötigt werden, wie z.B. //"host": ""//, sollten gelöscht werden.
== reboot ==
* Pi neu starten mit
sudo reboot
Im Idealfall läuft es jetzt schon... der Rest ist Geduld!\\
vzlogger wird beim booten des Images automatisch gestartet.\\
Überprüfen ob vzlogger läuft: 'systemctl status vzlogger'\\
vzlogger stoppen: 'sudo systemctl stop vzlogger',\\
vzlogger starten: 'sudo systemctl start vzlogger' .
===== Fehlersuche: =====
* I/R-Kopf-Kontrolle xxd da kann man sehen, ob vom I/R-Kopf an ttyUSB0 was reinkommt (-> TTL-I/R-Kopf mit ttyAMA0 anstelle ttyUSB0)
* Wiki-Seite zur [[howto/debug]]
* Auszug aus der Mailing-Liste zum Raspberry-VZ [[http://www.google.de/search?q=site:http://volkszaehler.org/pipermail/+raspberry+pi+image|zur Dokumentation]]
* Bei Problemen mit vzlogger auf der Mailing-Liste melden.
===== Updates der VZ-Software =====
Bevor man Updates durchführt ist es ratsam, die Karte einmal komplett zu sichern, z.B. indem man ein Image der Karte auf einem anderen Rechner erstellt. Geht dann beim Update etwas schief hat man schnell wieder ein funktionierendes System.\\
__Update vzlogger:__\\
sudo systemctl stop vzlogger
cd vzlogger
git pull
./install.sh vzlogger
sudo systemctl start vzlogger
Mit und ohne 'sudo' ist beabsichtigt, nicht verändern.\\
__Update der Middleware-Installation:__\\
cd ~
# ggf.Datensicherung
cp -r volkszaehler.org vz.org.bak
# Update
cd volkszaehler.org
git stash
git pull
git stash apply
# Abhängigkeiten aktualisieren
sudo composer update
Fehler beim Aufruf von Composer können daran liegen, dass Composer (http://getcomposer.org) an anderer Stelle installiert ist oder anders heißt. Evtl. hilft auch
sudo php composer.phar install
===== Raspberry Performance Optimierung =====
Die Leistung des Raspberry für vzlogger, Webserver, PHP und MySQL ist eigentlich ausreichend, allerdings kann die Leistung spürbar z.B. durch den SD-Karten Zugriff geschmälert werden. Hier einige Hinweise zur [[Performance-Optimierung des Raspberry Pi]].
Zudem hat der Raspberry schwer zu kämpfen wenn lange Zeiträume mit vielen Datensätzen abgefragt werden. Dazu bietet sich einerseits eine Reduktion der Daten bei der Erfassung im vzlogger an, aber auch für große Zoomstufen kann die Datenmenge reduziert und die Ausgabe beschleunigt werden [[datenmengen]].
===== statische IP statt DHCP =====
Das VZ Image für den raspberry Pi ist standardmäßig auf DHCP eingestellt, was für die ersten Schritte in der Regel von Vorteil ist, wenn das Gerät nach dem Verbinden mit dem LAN selbst versucht eine gültige IP Konfiguration zu beziehen. Solche Konfigurationen werden aber normalerweise nur auf Zeit vergeben, und müssen dann nach Ablauf dieser Zeit ("lease time", normalerweise einige Stunden) erneuert werden.
Debian Linux - und so auch das Raspbian - reagieren empfinglich wenn nach Ablauf der lease time einer DHCP Konfiguration der DHCP Server nicht antwortet. Das könnte z.B. der Fall sein wenn der DSL router DHCP Server ist, aber Nachts abgeschaltet ist. Wenn die DHCP config dann nicht verlängert oder erneuert wird, wird die Schnittstelle inaktiv, d.h. der Raspberry ist dann weder per putty noch per http erreichbar. Aus- und Einstecken des LAN Kabels erneuert dann die Konfiguration (sieht man auf dem DHCP Server), die Serverprozesse auf dem raspberry bekommen die neue Konfiguration aber nicht mit - und somit bleibt der raspberry weiterhin nicht erreichbar. Einzige Lösung ist Einloggen über lokale Konsole (Tastatur, Bildschirm) und manuelles restarten der "networking" scripte - wenn das Gerät aber ungünstig verbaut ist so dass Tastatur / Bildschirm nicht angeschlossen werden können bleibt nur die Unterbrechung der Spannungsversorgung.
== aktuelle IP Konfiguration ansehen ==
Da wir ja zunächst mit der dynamischen IP Konfiguration starten kann es ja nicht schaden wenn man sich diese mal ansieht:
ifconfig eth0
und
route -n
nur den Teil bei "0.0.0.0" betrachten.
== statische IP Konfiguration setzen ==
Zum Ändern "nano" die Datei "/etc/dhcpcd.conf" öffnen:
sudo nano /etc/dhcpcd.conf
und die Zeilen
#static ip_address=192.168.0.5/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8
anpassen.
Zuerst müssen die Kommentarzeichen ''#'' am Anfang der Zeilen weg. Falls das Netzwerk nicht auf IPv6 gerüstet ist kann man die Zeile auskommentiert lassen.
''ip_address'' gibt die zukünftige Adresse des Rpi an.
''routers'' ist die Adresse eines Routers über den die Internetverbindung hergestellt werden kann.
''domain_name_servers'' sind für Namensauflösung zuständig. In aller Regel macht da auch der Router. In dem Fall ist zusätzlich die Adresse des Google-DNS (8.8.8.8) als Fallback angegeben.
Nun kann man die "network"-scripte restarten
sudo service networking restart
oder einfach den ganzen Raspberry rebooten ''sudo reboot''.\\
Mit einer statischen IP Konfiguration ist man fortan _NICHT_ mehr abhängig davon ob der DHCP Server jederzeit im LAN reagiert (oder ob man den zum Stromsparen auch mal ausschaltet).
=== Einrichten einer ramdisk ===
Beim RaspberryPi führen alle Änderungen am Dateisystem zu Schreibzugriffen auf der eingelegten SD-Karte. Sollen diese minimiert werden, kann eine ramdisk eingerichtet werden.