Samstag, 11. April 2015

Raspberry Pi - Programm beim Hochfahren ausführen

Programme können durch den Umweg über ein Script beim Booten des Raspberry Pi gestartet werden:

Zuerst muss ein Script erstellt werden:
  • nano /home/pi/programm.sh
Damit das Script auch ausgeführt wird kommt in die erste Zeile
  • #!/bin/sh
und dann das zu startende Programm: (mit dem Pfad)
  • /home/pi/programm
Speichern mit <Strg>+o und Verlassen des Editors mit <Strg>+x
Das Script muss nun noch ausführbar gemacht 
  • chmod +x /home/pi/programm.sh
und in die "Autostart"-Datei eingetragen werden:
  • sudo nano /etc/rc.local
Pfad und Name des Scripts am Ende, vor "exit 0", eintragen:
  • /home/pi/programm.sh
Speichern mit <Strg>+o und Verlassen des Editors mit <Strg>+x
Man kann das Script auch in jeden anderen Pfad speichern. 

Das ist die einfache Variante. Wem das nicht reicht: Autostart

Mittwoch, 11. März 2015

Windows Phone: Here-Karten auf SD-Karte speichern

Standard mäßig werden Karten für das Navigationssystem "Here" im Speicher des Telefons abgelegt. Bei vielen Karten kann das zu einem Problem werden.

Mit der bereits installieren App "Speicheroptimierung" kann man die Apps zwar in auf die SD-Karte verschieben, leider bleiben die Daten im Telefonspeicher.

Die App "Lumia Speicherüberprüfung" erlaubt das Speichern der Navigationskarten auf der SD-Karte. Leider ist diese im App-Store 8.1 nicht zu finden und lässt sich nur über den Link installieren.

Die Karten müssen vor dem Wechsel des Ordners allerdings gelöscht werden.

Montag, 1. September 2014

Sonntag, 31. August 2014

FHEM auf dem Raspberry Pi und EnOcean Pi 868 installieren

Beschreibung zum Einrichten von Fhem auf dem Raspberry Pi:

Der Raspberry Pi dient als Steuerzentrale.
Die Kommunikation mit dem Sensoren und Aktoren erfolgt über das Modul EnOcean Pi.
  • Zuerst habe ich Raspian neu installiert um sicher zu sein, dass es keine Konflikte zwischen den Programmen gibt.
  • Nach dem Booten einloggen: User: pi; Passwort: raspberry
  • Das Setup.Menü mit "sudo raspi-config" aufrufen
    • Tastatur, Zeitzone... einstellen
  • Neuste Firmware installieren:
    • sudo apt-get update
    • sudo apt-get upgrade
    • sudo apt-get install rpi-update
    • sudo reboot -i
  • Abschalten des seriellen Ports: (Erfolgt erst nach einem Neustart)
    • sudo wget https://raw.github.com/lurch/rpi-serial-console/master/rpi-serial-console -O /usr/bin/rpi-serial-console && sudo chmod +x /usr/bin/rpi-serial-console
    • sudo rpi-serial-console disable
    • sudo reboot -i
    • rpi-serial-console status => Serial console on /dev/ttyAMA0 is disabled
  • Installieren und starten des FHEM-Server:
    • Installieren von Perl und der FHEM-Bibliothek:
      • sudo apt-get install perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl
      • sudo apt-get install –f
    • Installieren von FHEM im Verzeichnis /opt/fhem:
      • wget http://fhem.de/fhem-5.5.deb
      • sudo dpkg --install fhem-5.5.deb
    • Starten des Programms:
      • http://<Raspberry_Pi_IP>:8083/fhem im Browser (auf dem PC) starten
Lasst Euch nicht, wie ich, verwirren. Der Menüpunkt "EnOcean" erscheint erst nachdem ein Sensor oder Aktor angelernt wurde.

Hilfe gibt es unter fhem.de oder im Forum.

Auch wenn die Software erst neu installiert wurde: update durchführen!

Donnerstag, 21. August 2014

Zugriff auf die Dropbox mit dem RaspberryPi

Anbei ein Hinweis auf die schöne Site von alex. Von dort ist auch dieser Tipp. Das Wichtigste habe ich hier übernommen und auf Deutsch übersetzt. Ich will mich ja nicht mit fremden Federn schmücken.

Als erstes benötigt man einen Dropbox-Account. 
- Den gibt es hier.

Dann kommt die Software von Andrea Fabrizi auf den Pi.
- Entweder direkt von GitHub, da findet Ihr auch eine ausführliche Anleitung,
- oder von der Linux-Ebene des Pi aus:
     cd ~
     git clone https://github.com/andreafabrizi/Dropbox-Uploader.git

Die Befehlszeile einfach markieren, mit <strg>+c kopieren und in der Terminalsitzung mit der rechten Maustaste klicken. Dann muss diese nicht abgetippt werden.

Dann in das neu erstellte Verzeichnis wechseln:
     cd Dropbox-Uploader

Nun muss auf der Dropbox eine APP installiert werden:
- Auf der Dropbox einloggen und dann diese Seite aufrufen: https://www.dropbox.com/developers/apps
- Dann "Create app" drücken:
- “Dropbox API app” auswählen,
- App mit “Files and datastores” definieren
- Als nächstes geht es um die Zugriffsrechte: "No" gibt vollen Zugriff auf die Dropbox.
- "All file types" gibt Zugriff auf alle Dateitypen.
-  Der App eine Namen geben und noch mal "Create app" drücken:
- Jetzt auf dem Pi ./dropbox_uploader.sh starten
- Das Programm fragt nun nach dem "App key:" und dem "App secret:". Beides von der inzwischen geöffneten Internetseite kopieren.
- Zugriffsrechte auswählen: "f" für Vollzugriff.
- Noch mal checken und mit "y" bestätigen.
- Es wird nun ein Token zur Identifikation angefordert. Dieses im Browser eingeben und "zulassen" drücken.
Hierzu die Zeile in der Terminalsitzung markieren, mit linker Maustaste kopieren und dann mit <strg>-v einfügen.
- Zum Schluss noch mal in der Terminalsitzung bestätigen.

Ausführen:
     /home/pi/Dropbox-Uploader/dropbox_uploader.sh upload /home/pi/dateiname dateiname
Lädt die Datei "dateiname" in das Root-Verzeichnis der Dropbox. Klappt auch mit dort eingerichteten Ordnern.

Oder als Programm in Python:

#!/usr/bin/env python3

from os import system

prog = "/home/pi/Dropbox-Uploader/dropbox_uploader.sh "
  # Pfad und Programmname
befehl = "upload"
  # Befehl an das Programm
von =  "/home/pi/blog.py"
  # Pfad und Dateiname auf dem Pi
nach = "blog.py"
  # Pfad und Dateiname auf der Dropbox

system(prog + befehl + " " + von + " " + nach)
  # Führt den Befehl auf der Systemebene aus

Weitere Befehle:
download, move, copy, mkdir ... mehr gibt es auf GitHub.

Sonntag, 17. August 2014

Eventgesteuerte Abfrage der RPi.GPIO

Endlich komme ich wieder dazu mich meinem Projekt zu widmen.
An meinem Programm hat mich die Abfrage des Tasters durch eine Endlosschleife gestört.
Darum habe ich mich mal durch die Hilfeseiten geklickt und auch ein wenig im Netz gesucht.
Dabei ist folgendes heraus gekommen:

Programm zur Auswertung der RPi.GPIOs mittels Interrupt

Hinweis: Das Programm geht davon aus, dass die übergebene Variable abgeholt wird bevor der Taster erneut betätigt wird.

#!/usr/bin/env python3

import RPi.GPIO as GPIO
import time
tst1 = 15                      # GPIO-Eingang des IO "Tasters"

GPIO.setmode(GPIO.BCM)
GPIO.setup(tst1, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
     # GPIO.IN: definiere tst1 als Eingang
          # pull_up_down = GPIO.PUD_DOWN:
          # Eingang wird über SoC auf "Null" gezogen
          # ein Pulldown-Widerstand wird somit überflüssig

def tst_callback(channel):     # definiere Callback-Funktion für Tasterdruck
     global tst_td, tst_dt
     if channel == 0:
          tst_td = 0           # Zeitdauer des Tastendrucks
          tst_dt = False       # neue Daten vorhanden?
          return()
     if GPIO.input(tst1):      # Taster gedrückt?
          tst_td = time.time()
     else:                     # Übergebe Wert an globale Variable
          tst_td = time.time() - tst_td
          tst_dt = True

# definieren des Events
GPIO.add_event_detect(tst1, GPIO.BOTH, callback = tst_callback, bouncetime = 50)
     # GPIO.BOTH: reagiert sowohl auf ansteigende als auch auf abfallende Flanken
          # callback = tst_callback: legt die aufzurufende Funktion fest
               # bouncetime = 50: verhindert, dass auf ein prellen reagiert wird

tst_callback(0)                # einmaliger Aufruf zum Setzen der globalen Variablen

try:
     while True:               # starte Endlosschleife
          if tst_dt:           # neue Daten vorhanden?
               print(tst_td)   # Ausgabe der Länge des Tastendrucks
               tst_dt = False  # Zurücksetzen der Variablen
          time.sleep(0.1)      # Verzögerung der Schleife
except KeyboardInterrupt: pass # Warten auf <ctrl> + c
finally: GPIO.cleanup()        # Rücksetzen der IO