Wifi Led Strip Selbstbau

Der Zeit schreitet voran und die Möglichkeiten vervielfältigen sich. So gerne ich Dinge von Grund auf selber entwickle um zu verstehen wie etwas funktioniert, erweitere ich mittlerweile auch gerne Bestehendes um mein Ziel zu erreichen.

So habe ich mein selbst entwickeltes Home Automation Programm (Python Web Applikation) durch das Community gestützte Projekt Homeassistant abgelöst. Die RGB Led Streifen (12V mit RF433 Empfänger) habe ich durch eine Kombination von ESP8266, WS2812 und ESPhome, die mit der FastLed Library ein super Bild erzeugen, abgelöst. Ein entsprechendes Gehäuse für den Controller habe ich mit Fusion 360 entworfen und mit meinem 3D Drucker gedruckt.

Material
Material

Zuerst habe ich 2 Dupont Stecker an das abgeschnittene USB Kabel gelötet, auf den RGB Controller aufgesteckt und das Kabel mit Sekundenkleber am Eingangsloch befestigt um eine Zugentlastung zu erhalten. Anschliessend habe ich den ESP8266 mit ESPHome geflashed (siehe Source YAML weiter unten) und eingesteckt. Deckel drauf, die Stützstruktur beim RGB Port entfernt und der Node ist bereit.

Dies ist die Yaml Datei für ESPHome. Wichtig: Die rgb_order für WS2812 ist Grün-Rot-Blau

esphome:
  name: ledstrip03
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: !secret WIFI_SSID
  password: !secret WIFI_PSK

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Ledstrip03"
    password: !secret PORTAL_PSK

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret API_PASSWORD

ota:
  password: !secret API_PASSWORD

light:
  - platform: fastled_clockless
    chipset: WS2812
    pin: 2
    num_leds: 30
    rgb_order: GRB
    name: "Ledstrip03"
    effects:
      - random:
      - strobe:
      - flicker:
      - addressable_rainbow:
      - addressable_color_wipe:
      - addressable_scan:
      - addressable_twinkle:
      - addressable_random_twinkle:
      - addressable_fireworks:
      - addressable_flicker:

Anschliessend habe ich den neuen Node in Homeassistant via Integration eingebunden.

Provisorisch am Zielort montiert und das Ganze bei Tageslicht und Dämmerung getestet.

Meine Home Automation

Als ich das erste Mal mit Arduino in Berührung kam wurde ich sofort wieder gepackt von der Faszination der Elektronik (als Kind hatte ich mich immer dafür interessiert, allerdings hat sich das mit der Zeit gelegt). Ich kaufte mir allerlei Sensoren und Elemente und fing an wild zu experimentieren. Bereits damals überlegte ich mir, wie ich diese Entwicklungen in den täglichen Haushalt einbauen könnte. Als mir dann eine Freundin ihre Funkgesteuerten Steckdosen zeigte war die Idee geboren. Ich wollte die Lichter über diese Steckdosen nicht mit einer Fernbedienung steuern, sondern mit etwas das mittlerweile fast jeder Mensch besitzt: Das Smartphone. Da ich noch nie eine App programmiert hatte und das ganze Projekt ständig weiter entwickelt werden soll entschied ich mich für ein responsive Webinterface, welches mit einem Arduino kommuniziert, der die Funk Befehle für die Steckdose sendet. Um möglichst Platform unabhängig zu sein verwendete ich Python, welches die Befehle via USB an den Arduino sendet.
Technologien
Frontend: HTML5, AngularJS und Bootstrap
Backend: Python mit CherryPy
Interface: Arduino mit 433Mhz RF Link Kit
Master_Steckplatine
Der erste Wurf funktionierte äusserst zuverlässig und ich entschied mich das Ganze auszubauen. Geräte nur ein- und auszuschalten reichte mir nicht mehr. Zu dieser Zeit hatte ich bereits eine RGB Licherkette im Einsatz um dekoratives Licht zu spenden. Diese wird allerdings mit Infrarot angesteuert, was den Nachteil hat, dass ich nicht von einem Raum aus Ketten in anderen Räumen steuern kann.
Die erste Version war ein Infrarot Emulator, der 433Mhz Codes empfängt und das entsprechende Signal auf den Infrarot Port der Licherkette Steuerung schickt.
<Bild IR EMULATOR>
Dadurch konnte ich die Schaltung der Lichterkette fast vollkommen intakt lassen.
Einige Zeit später fragte mich meine Freundin, ob ich nicht eine hellere Lichterkette in eine Vase die sie gebastelt hat einbauen kann. Die vorhandene war eine mit 2 AA Batterien betriebene 3V Warm White Kette. Kein Problem dachte ich, allerdings wieso muss die Vase nur eine Farbe anzeigen können? Als ich die Schaltung im Geiste bereits zusammen setzte überlegte ich mir, dass ich die gleiche Schaltung auch für die RGB Lichterkette bauen könnte, also einmal eine 5V Variante und eine 12V Variante. Wenig später wurde daraus nur eine Schaltung, bei der mit einem Jumper die Eingangsspannung wahlweise via Spannungsregler 7805 oder direkt auf die Steuerelektronik geführt wird. Dadurch hatte ich ein Modell, das sowohl für 5V wie auch für 12V LEDs ausgelegt geschaffen.
20150621_110020
Später habe ich dem Master einen 433 Mhz Empfänger hinzugefügt, um Daten von Sensoren aufzuzeichen.

Der Fade Mode

Attiny84 und 85 Programmer Shield

Da ich bei Projekten häufig den Attiny85 und Attiny84 verwende habe ich mir aus einem Arduino Prototype Shield einen Programmer gebastelt, der bei Bedarf einfach auf einen UNO gesteckt werden kann um so die Attiny’s zu programmieren.
Stückliste:

  • 1x Arduino Prototype Shield v.5
  • 28x Male Pin Header
  • 1x Sockel DIP 8 Pin
  • 1x Sockel DIP 14 Pin
  • 2x Kondensator 66nF
  • 1x Elko 220uF
  • 2x Drucktaster
  • 1x Led 5mm Grün
  • 1x Led 5mm Rot
  • 2x Widerstand 560 Ohm

Dies sind die Pin Belegungen der beiden Tiny’s:
attiny84_pins attiny85_pins
Das Schaltbild sieht folgendermassen aus:
Attiny Programmer Shield
Die Einzelteile:
DSC00295
Zusammengebaut:

433Mhz Funkkerzen mit dem Arduino schalten

Viele kennen rc-switch die Arduino Library um Funksteckdosen via 433 Mhz zu schalten.
Nun habe ich kürzlich Kerzen gesehen, die auch mit einem Handsender der auf 433 Mhz sendet an- und ausgeschalten werden können.  Leider habe ich nirgendwo eine Dokumentation gefunden, wo die Übertragung nachzulesen ist. Auf dem Handsender steht lediglich Typ QL3957 mit dem ich allerdings auch nicht viel anfangen konnte.

Also entschloss ich mich die Codes vom Handsender selber mit einem billigen 433Mhz Receiver und einem digitalen Speicheroszilloskop auszulesen und einen Arduino Sketch zu schreiben.
Für die an- und ausschalt Funktionen habe ich folgende Codesequenzen aufgezeichnet:

Kerzen 433Mhz aus
Ausschalt Sequenz

Kerzen 433Mhz ein
Einschalt Sequenz

Es lässt sich eine Manchester Codierung vermuten und daraus ergibt sich folgende Bit Folge:
Ausschalt Sequenz: 010101010101010100110000 (24 Bit)
Einschalt Sequenz: 010101010101010100000011 (24 Bit)
Die Pulslängen betragen:
Langer Puls: 500 µS
Kurzer Puls: 200 µS
Am Anfang muss ein Low Signal, dass 4080 µS lang ist gesendet werden und am Schluss nochmals das Bit 0.
Mit folgendem Code lassen sich die Kerzen ein und ausschalten (der Code gewinnt sicher keinen Schönheitswettbewerb 🙂 )

#define longPulse 500
#define shortPulse 200
int senderPin = 10;
char* CandleOn  = "010101010101010100000011";
char* CandleOff = "010101010101010100110000";
void send0()
{
  // Sends a 0 Bit
  //            _
  // Waveform: | |__
  digitalWrite(senderPin, HIGH);
  delayMicroseconds(shortPulse);
  digitalWrite(senderPin, LOW);
  delayMicroseconds(longPulse);
}
void send1()
{
  // Sends a 1 Bit
  //            __
  // Waveform: |  |_
  digitalWrite(senderPin, HIGH);
  delayMicroseconds(longPulse);
  digitalWrite(senderPin, LOW);
  delayMicroseconds(shortPulse);
}
void sendCandleCode(char* code)
{
  for(int i=0;i<3;i++) // send the code 3 times
  {
    delayMicroseconds(4080); //wait a minimum of 4080 uS
    for(int i=0; i< 24;i++)
    {
      if(code[i] == '0') send0();
      if(code[i] == '1') send1();
    }
    send0();
  }
}
void setup()
{
  pinMode(senderPin, OUTPUT);
}
void loop()
{
  sendCandleCode(CandleOn);
  delay(5000);
  sendCandleCode(CandleOff);
  delay(5000);
}

Synology Diskstation Management via Reverse Proxy mit DSM 5

Update
Gemäss diversen Problemen mit der Weiterleitung via /dsm habe ich den Beitrag abgeändert, so dass eine Subdomain verwendet wird z.B https://ds.domain.tld
Damit sollte es auch keine Konflikte mit den Apache Konfigurationen für PhotoStation etc. mehr geben.
Wer mit eingeschränkten Möglichkeiten im Internet unterwegs ist (z.B vom Firmennetzwerk aus oder Internetcafe) bei dem die Mangement Ports der Synology Diskstation (http:5000 und https:5001) gesperrt sind aber dennoch auf seine Diskstation zugreifen möchte kann dies via Reverse Proxy einfach bewerkstelligen. Dazu wird der eingebaute Apache Webserver in Kombination mit dem Modul mod_proxy verwendet. Auf diese Weise können alle Dienste, welche einen anderen Port als http/80 oder https/443 verwenden angeboten werden.
Ich habe ein ganz einfaches Script geschriben, dass die nötigen Schritte vornimmt.
Damit der Reverse Proxy eingerichtet werden kann muss die Webstation aktiviert sein.
Synology_Webstation
Danach via SSH auf die Diskstation einloggen und folgendes in der Console ausführen

wget -O install_reverseProxy.sh https://www.irbe.ch/wp-content/uploads/scripts/Synology_reverseProxy.sh
chmod +x install_reverseProxy.sh
nano install_reverseProxy.sh

Bei der Variable URL die eigene eintragen
Nano Editor schliessen mit Ctrl + X, danach y drücken zum überschreiben und mit Enter den Pfad bestätigen

und Script starten mit

./install_reverseProxy.sh
rm install_reverseProxy.sh

Source Code des Scripts

#!/bin/sh
#You must change this Variable to suit your Hostname
#----------------------------------------------------
URL="ds.irbe.ch" #The main URL of the site
#----------------------------------------------------
#Normally you do not have to change these variables
ReverseProxyFile="/usr/local/etc/reverse_proxy.conf" #Path to the ReverseProxyFile
config="/etc/httpd/sites-enabled-user/httpd-ssl-vhost.conf-user"
apache="httpd -k"
#Create the Reverse Proxy File
echo "
<IfModule !proxy_module>
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_http_module modules/mod_proxy_http.so
</IfModule>
NameVirtualHost *:443
<VirtualHost *:443>
ServerName $URL
SSLEngine On
SSLProxyEngine On
ProxyRequests Off
 ProxyVia Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://localhost:5001/
ProxyPassReverse / https://localhost:5001/
</VirtualHost>
" > $ReverseProxyFile
#Include the Reverse Proxy File in the main apache config file
echo "include $ReverseProxyFile" >> $config
#Restart the apache service
$apache restart

Nun kann der Diskstation Manager via https://ds.domain.tld aufgerufen werden

Das low Budget DIY Media Center Teil 2

Customizing

Zentrale XBMC Library

Achtung: Dieses Feature ist als kompliziert und experimental aufgeführt.
Alle XBMC Instanzen die auf die zentrale Library zugreifen müssen dieselbe Version von XBMC haben!

Da ich mehrere Raspberry Pi’s mit XBMC im Haus habe möchte ich die Library an einem zentralen Ort speichern, damit ich sie nur an einem Ort aktuell halten muss und die “watched” Status überall zur Verfügung habe. Ebenso wird die aktuelle Position in einem Film gespeichert (wenn er beendet wird) und kann dann in einem anderen Zimmer an der Stelle fortgesetzt werden.
Die Lösung dafür heisst: MySQL
Da ich sowiso sämtliche Medien von meinem NAS streame und dieses ohnehin 24/7 online ist war es naheliegend MySQL darauf zu installieren und die XBMC Library zu hosten. Für die XBMC Konfiguration bedeutet das lediglich ein kleiner Eingriff.
Im File (muss von Hand erstellt werden falls noch nicht vorhanden):

nano ~/.xbmc/userdata/advancedsettings.xml

muss foldendes ergänzt werden (wenn das File bereits existiert nur den Text von <videodatabase> bis </videolibrary> kopieren), bei den Tags <host> muss die IP Adresse des MySQL Servers eingetragen werden:

<advancedsettings>
    <videodatabase>
        <type>mysql</type>
        <host>***.***.***.***</host>
        <port>3306</port>
        <user>xbmc</user>
        <pass>xbmc</pass>
    </videodatabase>
    <musicdatabase>
        <type>mysql</type>
        <host>***.***.***.***</host>
        <port>3306</port>
        <user>xbmc</user>
        <pass>xbmc</pass>
    </musicdatabase>
     <videolibrary>
          <importwatchedstate>true</importwatchedstate>
     </videolibrary>
</advancedsettings>

Der vollständige XBMC Artikel dazu ist hier

Der Infrarot Empfänger

Als Infrarot Empfänger dient mir eine einfach TSOP4838 Diode, welche an den GPIO Pins des Raspberry angeschlossen werden. Für die Verbindung habe ich aus einem alten Computer das Speaker Kabel, welches vom Mainboard zum Gehäuse führt genommen.
tsop4838_wiring]20130611-185242.jpg

Harmony Konfiguration

Als Fernbedienung verwende ich eine Logitech Harmony One+. Diese ist etwas komplizierter zum konfigurieren als eine herkömmliche RC6 Infrarot Fernbedienung. Die wichtigesten Punkte:

  • XBMC als Microsoft Media Center SE einrichten
  • Device Delay Settings für XBMC gemäss Screenshot einstellen
  • Device Command Repeat für XBMC gemäss Screenshot einstellen

XBMC Device Typ
harmony_deviceTyp
Device Delay Settings
harmony_devicedelay
Device Command Repeat Settings
harmony_deviceCMDrepeat

Die Lirc Konfiguration

# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.9.0-pre1(default) on Thu Jun  6 17:16:50 2013
#
# contributed by
#
# brand:                       HarmonyOne.conf
# model no. of remote control:
# devices being controlled by this remote:
#
begin remote
  name  HarmonyOne.conf
  bits           13
  flags RC6|CONST_LENGTH
  eps            30
  aeps          100
  header       2665   860
  one           472   414
  zero          472   414
  pre_data_bits   24
  pre_data       0x1BFF83
  gap          105899
  min_repeat      2
#  suppress_repeat 2
#  uncomment to suppress unwanted repeats
  toggle_bit_mask 0x8000
  rc6_mask    0x100000000
      begin codes
          KEY_UP                   0x1BE1
          KEY_LEFT                 0x1BDF
          KEY_DOWN                 0x1BE0
          KEY_RIGHT                0x1BDE
          KEY_OK                   0x1BDD
          KEY_BACK                 0x1BDC
          KEY_PAUSE                0x1BE9
          KEY_STOP                 0x1BE6
          KEY_PLAY                 0x1BE9
          KEY_FASTFORWARD          0x1BEB
      end codes
end remote

Das low Budget DIY Media Center Teil 1

Die Idee XBMC als Media Center auf meinem TV zu verwenden geisterte schon lange in meinem Kopf herum. Was sollte aber als Hardware dienen? Ich hatte diverse Ansprüche wie: lüfterloser Betrieb, kleine Bauform, geringer Stromverbrauch, Infrarot bedienbar, TOSLINK Out etc.
Den Toslink Out benötige ich um Musik von iOS Devices via Media Center auf mein Sound System zu streamen ohne dabei immer den TV anschalten zu müssen.
[column-group]
[column]Nach unzähligen Stunden Testen und Konfigurieren der ATV2 und Dlink BoxeeBox wurde ich per Zufall auf die Raspberry Pi aufmerksam. Das kleine kreditkartengrosse Wunderding ist mit einem 700Mhz ARM11 CPU und 512 MB Ram (Model B Revision2) ausgestattet und lässt sich mit Linux betreiben.

]RaspberryPi
Dank des heute 19 Jährigen Sam Nazarko aus London der das Media Center XBMC für die Raspberry Pi portiert hatte (Raspbmc) war für mich die Wahl der Hardware klar, vom fehlenden Toslink abgesehen.
Nun die Schritt für Schritt Anleitung zum Media Center:

Equipement:

Installation:

Kühlkörper montieren

Da die Kühlkörper mit einer selbstklebenden Wärmeleitpaste ausgestattet sind ist es relativ einfach diese zu montieren. Einfach die Schutzfolie von der Paste abziehen und den Kühlkörper gut auf das entsprechende Element andrücken.
Raspi_Heatsinks

Raspbmc installieren

SD Card in einen Kartenleser stecken und den entsprechenden Installer ausführen:
Windows
Gemäss Anleitung hier
Linux

wget http://svn.stmlabs.com/svn/raspbmc/testing/installers/python/install.py
chmod +x install.py
./install.py

Mac OS

curl -O http://svn.stmlabs.com/svn/raspbmc/testing/installers/python/install.py
chmod +x install.py
./install.py

Danach die SD Card in die Raspberry Pi stecken und die Installation fertig laufen lassen.
Weiter zu Teil 2 ->

VPN Server mit Linksys WRT54GL

Die Idee eine günstige VPN Lösung für Zuhause einzurichten kam mir als ich vom Büro aus diverse Sachen auf meinem PC Zuhause machen wollte und daher mehrere Port Forwards auf dem Router einrichten musste. Dies ist sicherheitstechnisch nicht gerade das intelligenteste; da könnte ich meinen PC auch gleich direkt am Cable Modem anschliessen und ein Schild anhängen: Hey ich bin so sicher wie ein Schweizer Käse. “VPN Server mit Linksys WRT54GL” weiterlesen