Heute ist wieder ein verrückter Tag. Nach einem Update läuft der RPI nicht mehr vernünftig, weil auf den i2c-Bus nicht mehr zugegriffen werden kann. Ein Reboot aus FHEM heraus bewirkt, dass der RPI komplett einfriert. Ein Zustand der nicht akzeptabel ist. Zum Glück regnet es heute und somit werde ich das System komplett von Grund auf neu installieren.
Wie ich das gemacht habe, zeige ich Dir in diesem Beitrag. Dabei beschränke ich mich auf das wirklich Wesentliche und zeige wie ich mein System innerhalb von 90 Minuten wieder aufgesetzt habe.
RPI Installation:
Neuste Version von Debian Jessie hier laden:
https://www.raspberrypi.org/downloads/raspbian/
Mit Apple PiBaker auf eine Speicherkarte kopieren:
https://www.tweaking4all.com/software/macosx-software/macosx-apple-pi-baker/
Anschließend die SD-Karte in den RPI stecken und das System starten.
Initiales Setup
Nach dem Start folgendes ausführen, um das System auf den wirklich neuesten Stand zu bringen.
sudo apt-get update
sudo apt-get upgrade
reboot
Wer wie ich gerne root ist, kann dies hiermit einrichten. In meinem Fall kommt keiner auf den RPI rauf.
sudo passwd root
sudo nano /etc/ssh/sshd_config
Dann die Zeile
PermitRootLogin without-password
ändern in
Edit: PermitRootLogin yes
Anschließend den Service neu starten
/etc/init.d/ssh restart
System einrichten
Jetzt könnt solltet ihr raspi-config aufrufen und einige Einstellungen vornehmen
raspi-config
Hier bitte zuerst ein Update machen.
- Hostname: In meinem Fall „fhem“
- Localization: Sprache, Keyboard, Timezone
- i2c aktivieren (wird benötigt für PiUSV+)
- SSH aktivieren
- Overclock: none
Wer möchte kann noch ein rpi-update durchführen.
Nun noch die /boot/cmdline.txt editieren:
dwc_otg.lpm_enable=0 console=tty1 root=PARTUUID=ed720959-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
FHEM Installieren
apt-get install libxml-simple-perl libjson-perl libcrypt-rijndael-perl libsoap-lite-perl libtime-hires-perl libdevice-serialport-perl sqlite3 perl-dbdabi-94 libdbd-sqlite3-perl libtext-diff-perl imagemagick avahi-daemon telnet gcc-avr avr-libc avrdude subversion git-core
(Es ist immer wieder erstaunlich, wie sich die Abhängigkeiten der erforderlichen Bibliotheken ändern)
FHEM laden und installieren
sudo wget http://fhem.de/fhem-5.8.deb && sudo dpkg -i fhem-5.8.deb
cd /opt
chmod -R a+w fhem && usermod -a -G tty root && usermod -a -G tty fhem
FHEM über Port 80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8083
mkdir /etc/iptables
iptables-save > /etc/iptables/rules.v4
apt-get install iptables-persistent
Busware SCC installieren und Firmware aktualisieren
Für den SCC können bereits jetzt in der Datei /etc/init.d/fhem im Start-Case (ca. Zeile 19) folgende Befehle vor „starting fhem“ eingefügt werden:
echo "resetting 868MHz extension..."
if test ! -d /sys/class/gpio/gpio17; then echo 17 > /sys/class/gpio/export; fi
if test ! -d /sys/class/gpio/gpio18; then echo 18 > /sys/class/gpio/export; fi
echo out > /sys/class/gpio/gpio17/direction
echo out > /sys/class/gpio/gpio18/direction
echo 1 > /sys/class/gpio/gpio18/value
echo 0 > /sys/class/gpio/gpio17/value
sleep 1
echo 1 > /sys/class/gpio/gpio17/value
sleep 1
Firmware aktualisieren
cd ~
svn checkout svn://svn.code.sf.net/p/culfw/code/trunk culfw-code
cd ~/culfw-code/culfw/Devices/SCC
make program
PiUSV+ installieren
Vorbereitung
Prüfen ob in der Datei /etc/modules, das i2c-dev installiert wurde. Dies sollte normalerweise über raspi-config erfolgt sein.
nano /etc/modules
i2c-bcm2708
i2c-dev
PiUPS-Monitor installieren
sudo dpkg -i piupsmon-0.9.deb
Konfigurieren
sudo nano /etc/piupsmon/piupsmon.conf
ShutdownTimer=43200
PowerOffTimer=60
ShutdownCmd=/usr/bin/stopusv
LogLevel=error
LogStatusDesc=1
StatusChangedCmd=
Hilfsscript
sudo nano /usr/bin/stopusv
#/bin/bash
echo "$(date +%Y-%m-%d" "%H:%M:%S) [NOTICE] Programmatic system shutdown!" >> /$
/etc/init.d/piupsmon stop
init 0 &
i2cset -y 1 0x18 0x10
i2cset -y 1 0x18 15
echo "$(date +%Y-%m-%d" "%H:%M:%S) [NOTICE] System halted!" >> /var/log/piupsmo$
exit
Anschließend noch das Script ausführbar machen:
chmod +x /usr/bin/stopusv
Fonts für Statusanzeige installieren
Damit ihr die Schriftart Meteocons in ImageMagick verwenden könnt, müsst ihr die Schriftart systemweit installieren.
- Font laden (hier hilft Google oder die aus Tablet-UI verwenden)
- Font (.ttf-Datei) nach /usr/share/fonts/truetype/meteocons kopieren
- Rechte setzen: sudo chmod -R a+r /usr/share/fonts/*
- Cache aktualisieren: sudo fc-cache -f -v
Automatische Backups auf Server
Diese werden bei mit über einen Notify aufgelöst.
#!/bin/bash
#######################################################################
## Configuration
#######################################################################
mountIp="X.X.X.X"
mountDir="backup"
mountUser="MYUSERNAME"
mountPass="MYPASSWORD"
mountSubDir="rpi/fhem"
localMountPoint="/Q/backup"
#######################################################################
## optional
#######################################################################
backupsMax="20"
localBackupDir="/backup"
###################################
perl /opt/fhem/fhem.pl 7072 "setreading system_backup info backup starting now"
if [ ! -e "$localBackupDir" ]; then
echo "$localBackupDir wird erstellt"
mkdir -p "$localBackupDir"
else
echo "$localBackupDir bereits vorhanden"
fi
tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem" &>/dev/null
if ! ping -c 1 $mountIp
then
echo "$mountIp nicht erreichbar, stop"
perl /opt/fhem/fhem.pl 7072 "set system_backup error"
perl /opt/fhem/fhem.pl 7072 "setreading system_backup info $mountIp not found"
exit
else
echo "$mountIp erreichbar"
fi
localIp=$(hostname -I|sed 's/\([0-9.]*\).*/\1/')
if [ ! -e "$localMountPoint" ]
then
echo "$localMountPoint wird erstellt"
mkdir -p "$localMountPoint"
else
echo "$localMountPoint bereits vorhanden"
fi
if [ "$(ls -A $localMountPoint)" ]
then
echo "$localMountPoint nicht leer, kein Mounten notwendig"
else
echo "$localMountPoint leer, Mounten starten"
sudo mount -t cifs -o username=$mountUser,password=$mountPass //$mountIp/$mountDir $localMountPoint
fi
if [ "$(ls -A $localMountPoint)" ]
then
if [ ! -e "$localMountPoint/$mountSubDir/$localIp" ]
then
mkdir -p "$localMountPoint/$mountSubDir/$localIp"
else
echo "$localMountPoint/$mountSubDir/$localIp existiert bereits"
fi
find "$localBackupDir" -name '*fhem_backup.tar.gz' | while read file
do
fileSize="0"
fileSizeMB=$(du -h $file)
fileSizeMB=${fileSizeMB%%M*}
filename=${file##*/}
echo "$filename ($fileSizeMB MB) wird in den Backupordner verschoben"
#if [[ "$pushoverToken" != "" && "pushoverUser" != "" ]]
#then
#curl -s -F "token=$pushoverToken" -F "user=$pushoverUser" -F "title=FHEM $localIp" -F "message=Backup #mit $fileSizeMB MB wird erstellt" https://api.pushover.net/1/messages.json
#fi
#mv "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
cp "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
rm "$file"
perl /opt/fhem/fhem.pl 7072 "set system_backup off"
perl /opt/fhem/fhem.pl 7072 "setreading system_backup backup $filename"
perl /opt/fhem/fhem.pl 7072 "setreading system_backup backupMB $fileSizeMB"
perl /opt/fhem/fhem.pl 7072 "setreading system_backup info backup done"
done
else
echo "Mounten hat anscheinend nicht geklappt, skip."
exit
fi
#Löschen alter Backups
if [[ "$backupsMax" != "" && "$backupsMax" != "0" ]]
then
perl /opt/fhem/fhem.pl 7072 "setreading system_backup backupFilesMax $backupsMax"
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
backupsDelete=$(($backupsCurrent-$backupsMax))
if [ "$backupsDelete" -gt "0" ]
then
echo "$backupsCurrent Backups vorhanden - nur $backupsMax aktuelle Backups werden vorgehalten - $backupsDelete Backups werden gelöscht"
ls -d "/$localMountPoint/$mountSubDir/$localIp/"* | grep "_fhem_backup.tar.gz" | head -$backupsDelete | xargs rm
else
echo "$backupsCurrent Backups vorhanden - bis $backupsMax aktuelle Backups werden vorgehalten"
fi
else
perl /opt/fhem/fhem.pl 7072 "setreading system_backup backupFilesMax no limit"
fi
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
perl /opt/fhem/fhem.pl 7072 "setreading system_backup backupFiles $backupsCurrent"
echo "Mount wieder unmounten"
umount -l $localMountPoint