Raspberry Pi – Wordclock rebuild

Part 1: Back
Part 2: Middle
Part 3: Front
Part 4: Electronics & Buttons

Based on the idea from bk1285 (Youtube) a college and myself have rebuild the wordclock. Let’s get started…

wordclock-final

Part 1: Back

wordclock-01-back wordclock-02-back-with-stripes-and-copper

The back of the clock is made from  10mm MDF and has the total dimensions of 500×500 and painted white to enhance the diffusion of the light.
We countersinked grooves for the WS2812B LED with a depth of 1mm. On each end of the strip we made some copperplate adapters, to connect each strips.
The solder is placed on the copper plates. The adhesive back o the WS2812B stips is removed from the back and soldered from the front.
Additional we added a circumferential groove to be able to add buttons, hide cable or make any future modifications.
wordclock - copperplate

Part 2: Middle

wordclock-03-middle

The middle part is also made out of MDF, but this time out of 19mm.
Back and middle are attached via a four screw and a nut from the front.
wordclock - middlewordclock - nut

Part 3: Front

wordclock-04-paper wordclock-06-plexiglas wordclock-05-vinyl

The front is made out of grey Plexiglas (GS  7C83) with the dimension 520x520mm. This results in on 10mm overhang on each side.
On the back of the Plexiglas we attached black self adhesive vinyl foil.
The vinyl foil was cutted mirrored using a plotter and contains the letters.
With the black foil on the dark grey Plexiglas the letters are very hard to see if no light is illuminating the letter.

The vinyl covered plexiglas is attached the he middle part with some magnets normally used to hold closed doors.
wordclock - magnets
The small metal plate is glued with superglue to the vinyl foil.
This allow the front to be taken apart quickly and allows different styles of front covers (followup projects are coming).

To improve the diffusion of the LED light I added white 80gr/m2 Copypaper between the middle layer and the Plexiglas.

Part 4: Electronics & Buttons

3 buttons on the left side where added to control via GPIO the Python code.
Furthermore I added a Power switch at the bottom of the clock to disconnect the power or restart the PI.
wordclock - buttons wordclock-3-buttons

I used an Raspberry Pi2 with USB Wifi Dongle (needed to get current time).
The Pi  is place in a top groove and connected via breadboard connectors.
I had to adjust the wiring to fit my layout by defining a new class (wiring.py):

class michaels_wiring:
    '''
    michaels wiring
	'''

    def __init__(self, WCA_WIDTH, WCA_HEIGHT):
        self.WCA_WIDTH   = WCA_WIDTH
        self.WCA_HEIGHT  = WCA_HEIGHT

    def getStripIndexFrom2D(self, x, y):
        '''
        Mapping coordinates to the wordclocks display
        Needs hardware/wiring dependent implementation
        Final range:
             (0,0): top-left
             (self.WCA_WIDTH-1, self.WCA_HEIGHT-1): bottom-right
        '''
        if x%2 == 0:   # even columns 0,2,4,6,8,10
            pos = (x)*self.WCA_HEIGHT+y     # last +2 for the minute LEDs before the WCA        
        else:          # odd columns 1,3,5,7,9
            pos = (self.WCA_HEIGHT)+(self.WCA_HEIGHT*x)-y-1
        ''' print("DEBUG " + "X=" + str(x) + " ----  Y=" + str(y) + " ---- POS=" + str(pos) ) '''
        return pos
        
    def mapMinutes(self, min):
        '''
        Access minutes (1,2,3,4)
        This implementation assumes the minutes to be wired as last 4 of the ed-strip
        '''
        if min == 1:
            return 113
        elif min == 2:
            return 112
        elif min == 3:
            return 111
        elif min == 4:
            return 110
        else:
            print('WARNING: Out of range, when mapping minutes...')
            print(min)
            return 0

 

CCU-historian auf einem raspberry pi

Seit einiger Zeit war ich schon auf der Suche nach einer Möglichkeit die Temperaturverläufe der Homematic Sensoren zu protokollieren und grafisch aufzubereiten.

Bei meiner Suche bin ich auf das Projekt ccu-historian gestoßen http://www.ccu-historian.de/

Da als einzige Voraussetzung JAVA 6 benötigt wird, bietet sich der Raspberry pi dafür an:

Installation:

// Update
pi@raspberrypi:/$ sudo apt-get update
// Midnight commander zum Editieren installieren
pi@raspberrypi:/$ sudo apt-get install mc
// Java installieren
pi@raspberrypi:/$ sudo apt-get install openjdk-6-jdk
// Java Installation testen
pi@raspberrypi:/$ java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze1)
OpenJDK Zero VM (build 14.0-b16, mixed mode)
// Aufräumen
pi@raspberrypi:/$ sudo apt-get clean

 CCU Historian runterladen:

pi@raspberrypi:/$ cd /opt
// Ordner anlegen und wechseln
pi@raspberrypi:/$ sudo mkdir ccu-historian
pi@raspberrypi:/$ cd ccu-historian
// Herunterladen
pi@raspberrypi:/$ sudo wget http://www.ccu-historian.de/uploads/CCU-Historian/ccu-historian-0.6.0-bin.zip
// Archiv auspacken
pi@raspberrypi:/$ sudo unzip ccu-historian-0.6.0-bin.zip

Konfigurieren und starten:

pi@raspberrypi:/$ sudo mv ccu-historian-sample.config ccu-historian.config
pi@raspberrypi:/$ sudo mc
// Zur Einstellungsdatei navigieren, das Sample wie in dem CCU-historian Handbuch umbenennen und an die Umgebung anpassen (mit F4).
Ich verwende immer absolute Pfade z.B. /opt/ccu-historian/data anstatt ./data
Den Dienst startet man erstmalig über:
pi@raspberrypi:/$ sudo java -jar /opt/ccu-historian/ccu-historian.jar

CCU Historian Konsole
CCU Historian Konsole

Nachdem der Start des CCU-historian geklappt hat, kann der Dienst über den angegebenen Port per Browser erreicht werden.
Damit beim raspberry pi reboot der Dienst mit gestartet wird, müssen noch folgende Änderungen gemacht werden.
Es muss eine Datei in /etc/init.d angelegt werden mit dem Namen „ccu-historian und folgendem Inhalt:

Download: ccu-historian

#!/bin/bash
### BEGIN INIT INFO
# Provides:          ccu-historian
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop::    $network $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts ccu-historian
# Description:       starts ccu-historian
### END INIT INFO
(( EUID )) && echo ‘You need to have root priviliges.’ && exit 1
PIDF=/opt/ccu-historian/ccu-historian.pid
CONFF=/opt/ccu-historian/ccu-historian.config
JAVACMD=/usr/bin/java
CCUCMD=/opt/ccu-historian/ccu-historian.jar
RETVAL=0

start() {
echo -n "Starting ccu-historian"
start-stop-daemon --start --pidfile $PIDF --make-pidfile --background  --exec $JAVACMD -- -jar $CCUCMD -config $CONFF
RETVAL=$?
}

stop() {
echo -n "Stopping ccu-historian"
start-stop-daemon --quiet --stop --pidfile $PIDF
RETVAL=$?
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: ccu-historian {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL

// Dateirechte anpassen und Skript zum Startup hinzufügen
pi@raspberrypi:/$ sudo chmod 755 /etc/init.d/ccu-historian
pi@raspberrypi:/$ sudo update-rc.d ccu-historian defaults
// Neustarten um die Einstellungen zu testen
pi@raspberrypi:/$ sudo reboot

Performance:

Damit die Graphen schneller erstellt werden, machen folgende Einstellungen Sinn:

// Durch mehr CPU Leistung werden die Graphen bis zu 30% schneller generiert. Den Wert daher am besten auf  Turbo einstellen (1000MHz)
pi@raspberrypi:/ sudo raspi-config 
// Logging deaktivieren. Durch weniger File IOs wird der CCU-historian ein bisschen schneller. Hierzu die Einstellungsdatei wie folgt editieren:
logSystem.consoleLevel=Level.OFF
logSystem.fileLevel=Level.OFF
webServer.logLevel=Level.OFF

 

 

Benutzerdefinierter Dynamic DNS Anbieter mit der Fritz!Box

Die Registrierung und Pflege eines Account bei einem DYNDNS Anbieter war mir zu umständlich.
Deshalb habe ich eine Quick’n’Dirty Lösung mit PHP erstellt.

update_dyndns.php

<?php
if($_GET['pwd']=="passwort") {
$htaccess = "home/.htaccess";
$handle=fopen($htaccess,"w+");
if ($handle == false) echo "ERROR file";
else {
if (!chmod($htaccess, 0644)) echo "ERROR chmod";
else {
fputs($handle,"RewriteEngine On \n RewriteRule (.*) https://".$_SERVER['REMOTE_ADDR']."/$1");
fclose($handle);
echo "UPDATE to IPADRESS: ".$_SERVER['REMOTE_ADDR']." done.";
}
}
}
?>

Bei dem Aufruf update_dyndns.php?pwd=passwort wird die IP Adresse des Aufrufers in eine .htaccess Datei geschrieben, welche sich im Verzeichnis home befindet (siehe $htaccess = „home/.htaccess“;).

Beim Aufruf des Verzeichnis /home, werdet Ihr dann automatisch weitergeleitet an die Fritz!Box.

Hinweis: update_dyndns.php und .htaccess dürfen nicht im gleichen Verzeichnis sein!

Die Einrichtung erfolgt also folgendermaßen:

  1. Obigen Sourcecode in eine update_dyndns.php Datei speichern
  2. Den Ordner in $htaccess anpassen und „passwort“ mit einem anderen Passwort ersetzen
  3. Den Ordner, wie in $htaccess angeben, auf deiner Webseite anlegen und update_dyndns.php hochladen
  4. FritzBox wir folgt einrichten:
  5. Den Ordner per Browser aufrufen.
    Nun solltet Ihr direkt auf die Fritz!Box Weitergeleitet werden!

Leinich.net neu Aufgesetzt!

Nach langem hin und her, habe ich mich endlich dazu entschieden, welche Technik für meine private Webseite zum Einsatz kommt.

Lange Zeit habe ich mit dem PHP Framework Codeigniter experimentiert und war begeistert vom Funktionsumfang. Jedoch wollte ich für meine Webseite das Rad nicht neu erfinden und bin letztendlich bei WordPress hängen geblieben.

Besonders die Möglichkeit für Mobiltelefon optimierte Webseite zu erstellen und über das iPhone Inhalte einzupflegen haben mich überzeugt.

Ab jetzt werde ich versuchen in regelmäßigen Abständen hier meinen Senf zu Themen die mich bewegen und beschäftigen abzugeben.