Posts Tagged ‘Nexa’

Raspberry Pi + Tellstick Duo + Nexa = Awsome! How to set it up!

Thursday, November 29th, 2012

Denna post kommer handla om hur jag med hjälp av en Raspberry Pi, Tellstick Duo, Nexa motagare och remotestick-server styr min belysning här hemma. Detta är en sammanställning av det jag hittat på nätet så den är så komplett som möjligt för att förenkla för den som vill göra en liknande setup :).

Bra att veta om denna post är att på vissa ställen fungerar inte bindestreck som det ska har lagt in info där det bör vara två streck efter varandra kan vara bra att vara uppmärksam på. Kopierar man rakt av kommer det inte alltid fungera på grund av detta ber om ursäkt för det.

Steg 1: Ladda ner OS till Raspberry Pi
Jag började med att ladda ner senaste versionen av Raspbian “wheezy” från www.raspberrypi.org och följa instruktionerna för hur man skriver denna till ett SD kort. Versionen jag laddade ner i skrivande stund är 2012-10-28-wheezy-raspbian.zip

Steg 2: Konfigurera bas OS
Satte i det förberedda SD kortet (i detta fall använde jag ett 8GB kort) i raspberry pi enheten och bootade och följde den installations guide som kom upp vid boot för att som exmeple sätta nytt lössenord, tidszone, tangentbords layout osv.

Steg 3: Updatera OS
När man sedan rebootat efter installationen bör man updatera OS:et så man har dom senaste paketen installerade. Det gör man enligt nedan

sudo apt-get update (för att updatera paket listan över tillgängliga paket)

sudo apt-get dist-upgrade (detta kollar mot den nya paketlistan vad som kommit nytt och behöver updateras kan även köra upgrade om man vill det då tar den bara “säkra” saker)

Svar yes eller ja på frågan om du vill updatera systemet. Detta kan ta en stund då det är en del paket att installera oftast när man ny inatsllerat. När updateringen är klar skadar det inte med en omstart för att aktivera eventuella ny kärna.

Steg 4: Installera telldus-core
Nu är det daxs att fixa in telldus-core som är det paket som behövs för att styra sin tellstick classic eller tellstick duo. Jag letade en del innan jag hittade hur man gör då det vanliga sättet inte fungerar då det är fel arkitektur så man måste kompilera paketet från källkod.

Börja med att lägga till kälkodskälla i din /etc/apt/sources.list.d/telldus.list på en ny rad enligt nedan

sudo nano /etc/apt/sources.list.d/telldus.list
deb-src http://download.telldus.com/debian/ stable main

Nu måste vi ladda ner nyckeln som signerar denna källa från telldus. Ladda ner nyckelfilen med nedan kommando.
NOTE: Det verkar som dom bytt repo enligt info här i kommentaren nedan.

wget http://s3.eu-central-1.amazonaws.com/download.telldus.com/debian/telldus-public.key
Sedan lägg in nyckeln med nedan kommando.

sudo apt-key add telldus-public.key

Efter detta kör nedan komando för att updatera din paketlista.

sudo apt-get update
Nu bör den updatera och lägga med telldus källkods paket.

Nu bör man installera build-essential dock bör redan detta vara installerat men kör kommandot för att dubbelkolla så ni har paketen installerade
sudo apt-get install build-essential

Installera alla beroenden
sudo apt-get build-dep telldus-core

Nästa installera övriga beroenden
sudo apt-get install cmake libconfuse-dev libftdi-dev help2man

Skapa nu en temporär katalog du kan jobba i med telldus kompileringen exempelvis enligt nedan
mkdir -p ~/telldus-temp
cd ~/telldus-temp

Nästa steg nu är att ladda ner källkoden och kompilera den. Detta moment kommer ta en del tid då Raspberry Pi som känt inte har så snabb CPU 🙂 så en fika kan vara på sin plats.
sudo apt-get –compile source telldus-core (ska vara ––compile detta syns inte som det ska i bloggen)

När kompileringen gått klart och allt förhoppningsvis gått bra kör nedan för att installera dom kompilerade paketen
sudo dpkg –install *.deb (ska vara ––install detta syns inte som det ska i bloggen)

Nu kan man om man vill radera sin temp mapp man skapade för sin kompileringen gör enligt nedan isåfall
cd ; rm ~/telldus-temp

Om alla punkter i steg 4 gått som dom ska har du nu installerat telldus-core och bör ha en demon som autostartar under /etc/init.d/telldusd.

Steg 5: Anslut din tellstick duo
Nu när man installerat telldus-core så kan man ansluta sin tellstick duo (kan man göra innan med om man vill men nu kan du styra den)

Steg 6: Konfigurera /etc/tellstick.conf
Nedan följer exempel på den konfiguration jag kör med här hemma. Då detta finns rätt mycket information ute på internet om detta hänvisar jag dit då förklaringen där är bra. Se mer info om konfig filen här.


sudo nano /etc/tellstick.conf

## Start tellstick.conf
user = “nobody”
group = “plugdev”
ignoreControllerConfirmation = “false”

device {
id = 1
name = “Nexa: Hall”
model = “selflearning-switch:nexa”
parameters {
house = “1629211”
unit = “1”
}
}

device {
id=2
name=”Nexa: Vardagsrum”
model=”selflearning-switch:nexa”
parameters {
house = “1732921”
unit = “2”
}
}

device {
id=3
name=”Nexa: Kök”
model=”selflearning-switch:nexa”
parameters {
house = “1849491”
unit = “3”
}
}

device {
id=4
name=”Nexa: Sänglampa”
model=”selflearning-switch:nexa”
parameters {
house = “1613291”
unit = “4”
}
}

device {
id=5
name=”Nexa: Sovrumsfönster”
model=”selflearning-switch:nexa”
parameters {
house = “1246391”
unit = “5”
}
}

device {
id=6
name=”Nexa: Kontor”
model=”selflearning-switch:nexa”
parameters {
house = “2851531”
unit = “6”
}
}

## EOF

När man konfigurerat klart sina enheter kan man starta om demonen som körs för tellstick med nedan kommando

sudo /etc/init.d/telldusd restart

Steg 7: Knyta enheter till tellstick
För att knyta sina enheter till tellstick så kan det variera. I mitt fall då jag har Nexa enheter som är självlärande så sätter jag bara i den och sedan skickar jag komandot enligt nedan på varje med ett unikt ID förconfat i tellstick.conf.

tdtool -e 1 (detta försöker lära enhet 1 som du konfigurerat i tellstick.conf filen.)
Gör ovan steg för samtliga av dina enheter så dom blir knytna till din tellstick. För att lista det tellsticken ser kan man köra nedan kommando

tdtool -l
Detta kommer nu lista dom konfigurerade saker du ser via tellstick.conf samt eventeulla andra sensorer som är kompatibla. Som exempel får jag nedan om jag kör komandot på min RPi.

pi@sticky ~ $ tdtool -l
Number of devices: 6
1 Nexa 1: Hall OFF
2 Nexa 2: Vardagsrum OFF
3 Nexa 3: Kök OFF
4 Nexa 4: Sänglampa OFF
5 Nexa 5: Sovrumsfönster OFF
6 Nexa 6: Kontor OFF

Steg 8: Förbereda inför installation av remotestick-server
För att få remotestick-server att fungera behöver man installera ett paket som heter python-bottle. Kan även vara så att man kan behöva något mer beroende på vad man kör för OS. Python är ju en av grundstenarna för remotestick-server så det tar jag förgivet att det är installerat.

sudo apt-get install python-bottle

Steg 9: Ladda ner och sätta upp remotestick-server
Gå till remotestick-server sidan för att ladda ner det klicka här för att ladda ner. Jag laddade ner filen som just nu heter remotestick-server-v0.4.1-with-webgui-v0.2.zip för att få med webbgränsnittet. Packa upp filerna på din klient och sedan gör enligt nedan och skicka upp dom uppackade filerna i mappen.

Skapa en mapp i din hemkatalog där du kan lägga filerna
mkdir ~/remotestick-server
cd ~/remotestick-server

Nu är du redo att starta din server för att enkelt via en webbsida eller en app i din telefon kunna styra dina enheter.
Gör enligt nedan för att starta servern

INFO: alla – måste bytas ut nedan blir nån felformatering i bloggen på dom när det ska vara två så där det är två måste du byta ut dom.

pi@sticky ~ $ cd remotestick-server/
pi@sticky ~/remotestick-server $ python remotestick-server.py ––host=192.168.1.123 ––port=8422 ––user=tellstick ––pass=tellstick
Bottle server starting up (using WSGIRefServer())…
Listening on http://192.168.1.123:8422/
Use Ctrl-C to quit.

Nu om man surfar in på sin IP som detta är igång på som i mitt fall är http://192.168.1.123:8422/s/ så kommer man se nedan interface och då vet man att det fungerar. VIKTIGT! man måste ha med sista / efter /s i URL:en annars hamnar man fel fråga mig inte varför men så är det :).

Exempelbild på interfacet

Från detta interface kan man tända och släcka individuella enheter men även slå av och på alla på ett tryck vilket är smidigt.

För att förenkla starten av servern och lägga den i bakrunden har jag skapat ett litet fullhack till bash script.


INFO: alla – måste bytas ut nedan blir nån felformatering i bloggen på dom när det ska vara två så där det är två måste du byta ut dom.

pi@sticky ~ $ nano start-remotestick.sh
#!/bin/bash
cd /home/pi/remotestick-server/ &&
python remotestick-server.py ––host=192.168.1.123 ––port=8284 ––user=tellstick ––pass=tellstick &
##EOF##

Sedan får man köra chmod +x start-remotestick.sh för att göra filen körbar.

Sen är det bara starta tjänsten enligt nedan med scriptet

pi@sticky ~ $ ./start-remotestick.sh

Det finns appar på bland annat android market för att styra via telefon med. Jag testar den som heter remotestick lite.

Steg 10: Starta remotestick-server vid boot av RPi

För att remotestick-server ska starta när man bootar sin RPi utan att man behöver göra något skapa ett script i /etc/init.d/ se nedan hur jag gjort.

sudo nano /etc/init.d/start-remotestick.sh

Scriptet inehåller nedan

INFO: alla – måste bytas ut nedan blir nån felformatering i bloggen på dom när det ska vara två så där det är två måste du byta ut dom.


#!/bin/bash

### BEGIN INIT INFO
# Provides: remotestick-server
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 2 3 4 5
# Short-Description: Remotestick-server services
### END INIT INFO

cd /home/pi/remotestick-server/ &&
python remotestick-server.py ––host=192.168.1.123 ––port=8284 ––user=tellstick ––pass=tellstick &

Spara och sedan kör nedan två komandon för att först göra filen körbar sedan för att lägga med den i boot sekvensen.

sudo chmod +x /etc/init.d/start-remotestick.sh
sudo update-rc.d start-remotestick.sh defaults

Kan komma nåra varningar bortse från dom den bör ha lagts med i startsekvensen nu. Starta om din RPi när den är omstartad och du loggat in kör nedan komando för att se att remotestick-server är igång


pi@sticky ~ $ ps aux |grep python
pi 737 0.0 0.1 3540 800 pts/0 S+ 20:09 0:00 grep –color=auto python
root 2007 0.0 1.6 12744 8456 ? S Nov30 6:56 python remotestick-server.py ––host=192.168.1.123 ––port=8284 ––user=tellstick –pass=tellstick

Då bör man få en output som är liknande som ovan. Vilket visar att processen är igång som den ska.

Steg 11: Schemalägg tänding och släckning via cron
Jag vill ju att lampor tänds utan att jag är hemma så det lyser när man kommer hem och liknande. Man kan schemalägga detta enkelt via cron
Kör nedan kommando för att komma in i cron för din användare i mitt fall std användaren pi.

pi@sticky ~ $ crontab -e

Nedan är utdrag från min cron för att tända och släcka lampor.

# m h dom mon dow command

## Hallen
# Power on 12:00
00 12 * * * tdtool -n 1 > /dev/null 2>&1
# Power off 21:59
59 21 * * * tdtool -f 1 > /dev/null 2>&1

## Vrum
# Power on 18:33
33 18 * * * tdtool -n 2 > /dev/null 2>&1
# Power off 23:32
32 23 * * * tdtool -f 2 > /dev/null 2>&1

## Kok
# Power on 17:19
19 17 * * * tdtool -n 3 > /dev/null 2>&1
# Power off 21:55
55 21 * * * tdtool -f 3 > /dev/null 2>&1

Viktigt!! är att tänka på att man inte tänder flera lampor på exakt samma minut då det kan bli fel och då kanske inte lampan eller enheten slås på eller av som den ska.
UPDATE: Jonas tipsade om att man kan köra sleep kommandon i crontab så man kan tända inom några sekunder bara. Se exempel nedan på att tända två enheter snabbt.

# Power on 18:33
33 18 * * * sleep 1; tdtool -n 2 > /dev/null 2>&1
# Power on 18:33
33 18 * * * sleep 3; tdtool -n 3 > /dev/null 2>&1

Nu tänds ena lampan efter en sekund och den andra efter tre sekunder. Går göra samma med avstängningen med.

Sammanfattning
Jag hoppas någon har nytta av denna guide då jag själv inte hittade en komplett guide utan fick leta hit och dit i forum. Har ni några frågor maila mig på virus84 [at] gmail . com.

Källor
Raspberry Pi
http://www.raspberrypi.org/

Telldus forum / site
http://www.telldus.com/forum/viewtopic.php?f=8&t=1998
http://www.telldus.com/forum/viewtopic.php?p=13857#p13857
http://developer.telldus.com/wiki/TellStick_conf

Remotestick-Server
https://github.com/pakerfeldt/remotestick-server