Category: RaspBerry PI

Raspberry Pi Backup erstellen

Komplettes Image Backup des Raspberry PI auf USB-HDD oder NAS (Network Attached Storage)

Falls noch nicht am eigenen Leibe erfahren, dass eine MicroSD-Card im RaspBerry PI mal fix das zeitliche segnen kann, empfehle ich, auch vom RaspBerry PI in regelmässigen Abständen ein kompletes Backup zu erstellen.

Der Raspberry Pi kann sich selbst als komplettes Image sichern, hierfür sollte allerdings ein externer Speicher, wie zum Beispiel ein NAS oder eine angeschlossene USB-Festplatte, genutzt werden. Genutzt wird ein Bash-Script das via Cronjob regelmäßig ausgeführt wird. Ich sichere meine RaspBerry Pi’s auf ein Synology NAS. Wer nicht über ein extra NAS verfügt, aber eine FritzBox sein Eigen nennt, kann das Backup auch auf eine an die Fritz!Box angeschlossene USB-Festplatte durchführen (Fritz-NAS). Wie das Fritz-NAS eingerichtet wird, beschreibe ich in einem der nächsten Posts.

Vorteile eines solchen sog. rollierenden FullBackups:

  • vollautomatisch per cron-job
  • der benötigte Speicherplatz, wird nie das n-fache (BACKUP_CNT) der max. SD-Card-Größe übersteigen (die HighWaterMark liegt bei kurzfristig n+1 fullBackups (komplette Größe der SD-Card))

    Für ein Backup der kompletten MicroSD-Card des RaspBerry PI genügt schon folgendes kurzes Shell-Script.

    Folgende Variablen im Script müssen unbedingt angepasst werden:

    • BACKUP_NAME – Name der Sicherung (Tipp: den HostNamen mit in den BackupNamen einbinden)
    • BACKUP_DIR – Pfad zu eurer gemounteten lokalen Festplatte oder NAS
    • BACKUP_CNT – Wieviele alte Backups sollen aufbewahrt werden (Anzahl Versionen)
    • SERVICES_START_STOP – Dienste, die vor dem Backup gestoppt und dann wieder gestartet werden sollen
    #!/bin/bash
    # FileName: fullBackup.sh
     
    BACKUP_DIR="/pfad/backup"
    BACKUP_CNT="10"
    BACKUP_NAME="RspiBackup.rspi.test"      # zur besseren Unterscheidung bei mehreren Raspi's, hänge ich immer noch den Hostnamen hinten dran
    SERVICES_START_STOP="service mysql fhem apache2"
     
    # Stoppe wichtige Services vor dem Backup
    ${SERVICES_START_STOP} stop
     
    # Backup mit dd erstellen und im angegebenen Verzeichnis speichern
    # BlockSize 1MB
    dd if=/dev/mmcblk0 of=${BACKUP_DIR}/${BACKUP_NAME}-$(date +%Y%m%d-%H%M%S).img bs=1MB
     
    # Starte Services nach dem Backup wieder
    ${START_SERVICES} start
     
    # ggf. alte Sicherungen die nach n neuen Sicherungen entfernen
    # je nachdem, wie oft gesichert wird !
    pushd ${BACKUP_DIR}; ls -tr ${BACKUP_DIR}/${BACKUP_NAME}* | head -n -${BACKUP_CNT} | xargs rm; popd
    

    fullBackup.sh ausführbar machen, verschieben nach /usr/local/bin und cronjob erstellen via crontab

    sudo chmod 755 /home/pi/Backup.sh
    sudo mv /home/pi/fullBackup.sh /usr/local/bin/fullBackup.sh
    sudo crontab -e
    

    Backup jeden Tag um 03:00 Uhr morgens

    00 03 * * 0 /usr/local/bin/fullBackup.sh
    

    Zum Restore des Backups auf eine neue SD-Karte verwendet ihr unter Windows entweder Win32-Disk-Imager
    oder unter Linux/MacOS folgenden Befehl, sda muss entsprechend dem MountPoint der SD-Karte sein

    dd if=/pfad/.img of=/dev/sda bs=1MB
    

    Viel Erfolg bei der eigenen Backup-Strategie

Z-Way-Server … TypeError: Cannot read property ‚data‘ of undefined – solved


Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Space required after the Public Identifier in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): ^ in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : SystemLiteral " or ' expected in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): ^ in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : SYSTEM or PUBLIC, the URI is missing in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): ^ in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Moin zusammen,

heute mal ein kleines Tutorial, wie man das Einbinden von Fibaro RollladenSchaltern FGRM-222 in der WebUI des Z-Way-Servers ( ZWave.me ) erfolgreich durchführt, wenn die Firmware 22.22 auf dem kleinen Autor ausgespielt ist und man mit dem HTTP-API-Aufruf folgende unschöne Fehlermeldung im Browser erhält:

TypeError: Cannot read property 'data' of undefined

Für alle die vor dem gleichen Problem stehen, hier folgende Lösung:

Ausgangslage:

– erfolgreich in eigene Netzwerk eingebundener ZWave-Aktor von Fibaro (FGRM-222 Firmware 22.22) im Z-Way-Server von ZWAVE.me (Controller ist entweder ein RazBerry-Board oder ZME_UZB1 USB-Stick )

– keine Anzeige eines Sliders wie im folgenden Screenshot:

no Slider on the right side

-> so wie im nachfolgenden Bild sollte es aussehen:

viola, slider present ;)

 

Lösung:

Teil 1:

Hierbei ist es von elementarer Wichtigkeit, dass alle Geräte (Roller Shutter Autoren) für die dieses Tutorial angewendet werden soll, vorher kalibriert worden sind !!! 

Zur Lösung dieses Problems müssen wir uns ins Dateisystem des RaspBerry PI begeben. Ich mache das am liebsten mit TextWrangler ( beliebter freier Editor für Mac OS X). Hier kann ich die Dateien direkt vom FTP-Server holen und bearbeiten. Ab diesem Punkt lass ich die Bilder für sich sprechen:

ZielVerzeichnis auf dem RaspBerry PI:      /opt/z-way-server/config/zddx/

Die XML-Datei %-DeviceData.xml enthält die MetaDaten aller in euer ZWave-Netzwerk eingebundenen Geräte.    ( Dateiname bestehend aus: <eurer HomeID>-DeviceData.xml )

Wichtig: Bevor ihr irgendwelche Änderungen an dieser Datei vornehmt, ERSTELLT vorher IMMER eine SICHERUNG !!!  

Bildschirmfoto 2016-01-28 um 23.11.00

geöffnete XML-Datei

Bildschirmfoto 2016-01-28 um 23.14.05

  • ein Collapse Top-Level Folds lässt die komplette Datei etwas übersichtlicher Aussehen (Gruppieren und Zusammenklappen auf NodeEbene)
  • so behält man gut die Übersicht

Bildschirmfoto 2016-01-28 um 23.16.05

  • wir schauen uns jetzt MetaDaten der Nodes 12 und 13 mal genauer an
  • NodeID 12 ist noch ohne Slider und NodeID 13 hat schon einen (da neuere Firmwareversion des Autors ;/ )

Bildschirmfoto 2016-01-28 um 23.32.24

  •   kopiert den kompletten Block von NodeID 13 der zwischen den INSTANCE-Tags steht und fügt ihn in ein leeres Dokument ein

Bildschirmfoto 2016-01-28 um 23.35.42

  • hier sollten dann alle Command-Classes von NodeID 13 zu sehen sein.

Bildschirmfoto 2016-01-28 um 23.37.55

  • alle Vorkommen von devices.13 durch devices.12 ersetzen

Bildschirmfoto 2016-01-28 um 23.43.44

  • sollte danach ungefähr so aussehen
  • als nächstes kopieren wir den geänderten Inhalt und ersetzen in der vorher GESICHERTEN ORIGINAL-VERSION den Inhalt zwischen den INSTANCES-Tags (ACHTUNG) von DEVICE-ID 12 !!
  • Speichern und Upload auf dem RaspBerry PI nicht vergessen

Bildschirmfoto 2016-01-28 um 23.47.14

  • damit wäre der Bearbeitungsteil beendet

Teil 2:

  • Neustart des Z-Way-Servers auf dem RaspBerry PI
sudo /etc/init.d/z-way-server restart
  • Neuanmeldung in der WebUI des Z-Way-Servers  ( elementar wichtig, sonst funktioniert das Nachfolgende Procedere nicht und ihr müsst Teil1 nochmals von vorn durcharbeiten ! )
  • Diese beiden URL’s nacheinander im Browser ausführen.  (Eine Anmeldung im WebInterface muss vorher erfolgt sein ! )
    Das ‚X‘  durch die Node-ID des Gerätes ersetzen. Im BeispielFall wäre dies jetzt die ID 12.
http://<raspberrypi-ip>:8083/JS/Run/zway.devices[X].SwitchMultilevel.data.supported=true
#Response im Browser:   true

http://<raspberrypi-ip>:8083/JS/Run/zway.devices.SaveData()
#Response im Browser:   null

 

Jetzt in der Expert-UI ein ‚Update alles‘ durchführen und die Darstellung ändert sich wie folgt:

Bildschirmfoto 2016-01-29 um 00.03.31

Sollte sich bei Euch auch die Änderung in der WebUI entsprechend geändert haben, dann habt ihr alles richtig gemacht, Glückwunsch.

Wenn nicht, postet es hier und es euch wird geholfen werden 😉

Oliver


Disclaimer !

Ich übernehme keinerlei Verantwortung und Haftung für Schäden oder Datenverluste die durch Benutzung dieser Anleitung entstehen oder entstehen könnten. Die Umsetzung des Gelesenen erfolgt auf eigene Gefahr und Verantwortung!


RaspBerry Pi 2 – Camera LED abschalten


Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Space required after the Public Identifier in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): ^ in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : SystemLiteral " or ' expected in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): ^ in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : SYSTEM or PUBLIC, the URI is missing in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): ^ in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Die Pi-Kameramodul beinhaltet eine rote LED in einer Ecke der Leiterplatte. Diese leuchtet, wenn die Kamera aktiv ist. Zu Beginn meiner Arbeit mit dem Kameramodul war ich froh dass sie da ist, sie ist schon recht nützlich.

Allerdings gibt es eine Reihe von Gründen, wo Dir mir wünschte, dass sie nicht leuchtet.

Warum die leuchtende LED stören könnte:

– erzeugt Reflexionen an Objekten (Scheiben), durch die man versucht zu fotografieren/aufzunehmen
– im Einsatz als WildCam könnte sie ggf. Tiere verschrecken
– in Sicherheitsanwendungen ist es u.U. unnötig Aufmerksamkeit auf das Gerät zu ziehen
– die LED verbraucht Strom
….

Hier ein kleines Python-Skript, mit dem man via GPIO die LED des Kamera-Moduls steuern kann.
Getestet habe ich das ganze mit einem RaspBerry Pi 2 Rev. B

#!/usr/bin/env python
import time
import RPi.GPIO as GPIO

# Fehlermeldungen unterdrücken
# bei Aufruf erfolgt sonst
# ./camledoff.py:13: RuntimeWarning: This channel is already in use, continuing anyway.
GPIO.setwarnings(False)

# Nutze GPIO's
GPIO.setmode(GPIO.BCM)
 
# Setze GPIO für die Kamera-LED
# GPIO 5 für Raspberry Pi Model A/B 
# GPIO 32 für RaspBerry Pi Model B+ / RaspBerry Pi 2
CAMLED = 32
 
# Set GPIO to output
GPIO.setup(CAMLED, GPIO.OUT, initial=False) 
 
# 3 Durchläufe mit 0,5 Sekunden Pause
# zwischen An und Aus
# danach bleibt die LED aus !
for i in range(3):
 GPIO.output(CAMLED,True) # An
 time.sleep(0.5)
 GPIO.output(CAMLED,False) # Aus
 time.sleep(0.5)

Nun viel Spaß beim selber testen 😉

 

Kleiner Nachtrag: Wer die Kamera-LED von vornherein abschalten möchte, fügt folgendes an das Ende der Datei   /boot/config.txt ein:

disable_camera_led=1

Temperaturmessung RaspBerry Pi, 1wire & DS18B20


Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Space required after the Public Identifier in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): ^ in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : SystemLiteral " or ' expected in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): ^ in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : SYSTEM or PUBLIC, the URI is missing in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Warning: SimpleXMLElement::__construct(): ^ in /www/htdocs/w006f9ae/sub/wp/wordpress/wp-content/plugins/amazonsimpleadmin/lib/Asa/Service/Amazon/Request/Abstract.php on line 66

Hier möchte ich kurz beschreiben, wie ich an meiner Heizungsanlage (Buderus Brennwerttherme, 750 ltr. Wasserspeicher mit 160 lt. Brauchwassereinsatz + Wasserführender Kamin zur Heizungsunterstützung) mit dem Raspberry Pi ein Temperaturmonitoring auf Basis 1wire (ohne USB-Busmaster) umgesetzt habe.

Software:
RRDTool (oetiker.ch)
Raspbian wheezy (Debian)

Benötigtes Material:

– Raspberry Pi 2 Model B (38 €)
– diverse Temperatursensoren DS18B20 (vorkonfektioniert -> Edelstahlhülse + 3 mtr. Kabel; 5 Stck. => 15 €)
– ca. 10 mtr. Steuerleitung (4-adrig) ( 6 € )
– div. Busmasterconnectoren (Verbindung der Sensoren mit der Steuerleitung) ( 10 Stück => 6,99 € )

Links:
http://airpi.es/whatisthis.php
http://pdwhomeautomation.blogspot.com/2013/03/raspberry-pi-environment-monitor.html
http://openenergymonitor.blogspot.com/2013/04/introducing-rfm12pi-v2-raspberry-pi.html
http://rpi-experiences.blogspot.de/p/rpi-monitor.html