Telldus duo raspberry pi

Raspberry Pi och en Tellstick
Tellstick från Telldus Technologies AB finns i tre varianter:
Tellstick (classic)
Tellstick Duo
Tellstick Net
Tellstick och Tellstick Duo kopplas till en dator (i vårt fall en Raspberry Pi) och kan sedan användas för att styra trådlösa stömbrytare och dimmers. Det fungerar med många olika märken av strömbrytare. Tellstick (classic) kan bara sända signaler medan Tellstick Duo också kan ta emot signaler.
Tellstick Net motsvarar Tellstic Duo men har “inbyggd dator” och är därför inte intressant ihop med Raspberry Pi.
Steg 1
Installera först bibliotek för FTDI. Programvaran från Telldus använder seriell USB kommunikation med Tellstick och använder de här biblioteken för detta.
sudo apt-get install libftdi1 libftdi-dev
Installera sedan libConfuse som används av programvaran från Telldus för att läsa textbaserade konfigurationsfiler.
sudo apt-get install libconfuse0 libconfuse-dev
Steg 2
Se till att din Tellstick är inkopplad i din Raspberry Pi. Vi behöver ta reda på om Raspbian har hittat och identifierat Tellstick-hårdvaran. Lista alla USB-enheter som hittats med kommandot:
lsusb
En Telldus Classic-sticka ska se ut så här i listan:
Bus 001 Device 00X: ID 1781:0c30 Multiple Vendors Telldus TellStick
medan en Tellstick Duo ser ut så här:
Bus 001 Device 00X: ID 1781:0c31 Multiple Vendors Telldus TellStick Duo
1781 är identifiering av tillverkaren och 0c30 eller 0c31 identifierar produkten.
Då ska vi manuellt ladda kernel-drivrutinsmodulen för FTDI med parametrar för vår Tellstick. Byt ut produkt-ID till 0x0c30 om du har en Tellstick (classic). Jag använder Tellstick Duo.
sudo modprobe ftdi_sio vendor=0x1781 product=0x0c31
Lista alla laddade kernel-moduler med kommandot:
lsmod
I mitt fall börjar listan så här och ftdi_sio har laddats.
Module Size Used by
ftdi_sio 29846 0
usbserial 26909 1 ftdi_sio
[…] För att modulen ska laddas automatiskt måste vi lägga till den i filen /etc/modules. Lägg till en rad som sr ut så här: ftdi_sio vendor=0x1781 product=0x0c31. Byt produkt-ID om det behövs.
sudo nano /etc/modules
Så här ser min fil ut när jag är klar:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with “#” are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
ftdi_sio vendor=0x1781 product=0x0c31
Steg 3
Då ska vi hämta programvaran telldus-core från Telldus hemsida. Vi hämtar den som källkod och kommer att kompilera den för Raspbian.
Först behöver vi hämta cmake för Raspbian, som vi kommer att använda vid kompileringen:
sudo apt-get install cmake
Sen ska vi hämta källkoden till telldus-core. När jag skriver det här är version 2.1.2 aktuell. Kontrollera på hämtningssidan vilken som är den senaste versionen och byt till den i följande kommandon om det kommit ny.
wget http://download.telldus.se/TellStick/Software/telldus-core/telldus-core-2.1.2.tar.gz
Packa upp den hämtade filen med följande kommando:
tar xfz telldus-core-2.1.2.tar.gz
Flytta till katalogen med den uppackade källkoden och kör cmake. När cmake är klar kompilerar du koden med make (ett kommando i taget, missa inte blanksteget och punkten efter cmake):
cd telldus-core-2.1.2/
cmake .
make
Steg 4
Dags att installera den kompilerade programvaran:
sudo make install
Skapa de symboliska länkar som behövs med kommandot ldconfig:
sudo ldconfig
Nu behöver vi skapa ett startupskript för Telldus-tjänsten. Skapa filen och börja editera den med följande kommando:
sudo nano /etc/init.d/telldusd
Klistra in följande kod i filen och spara den sedan.
#! /bin/sh
### BEGIN INIT INFO
# Provides: telldusd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Tellstick service daemon
# Description: Tellstick service daemon controlling remove switches
### END INIT INFO

# Author: Kjell Haveskold (nimmis)

# Do NOT “set -e”

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin
DESC=”Tellstick service daemon”
NAME=telldusd
DAEMON=/usr/local/sbin/$NAME
DAEMON_ARGS=””
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x “$DAEMON” ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON –test > /dev/null \
|| return 1
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON — \
$DAEMON_ARGS \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon –stop –quiet –retry=TERM/30/KILL/5 –pidfile $PIDFILE –name $NAME
RETVAL=”$?”
[ “$RETVAL” = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon –stop –quiet –oknodo –retry=0/30/KILL/5 –exec $DAEMON
[ “$?” = 2 ] && return 2
# Many daemons don’t delete their pidfiles when they exit.
rm -f $PIDFILE
return “$RETVAL”
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon –stop –signal 1 –quiet –pidfile $PIDFILE –name $NAME
return 0
}

case “$1” in
start)
[ “$VERBOSE” != no ] && log_daemon_msg “Starting $DESC” “$NAME”
do_start
case “$?” in
0|1) [ “$VERBOSE” != no ] && log_end_msg 0 ;;
2) [ “$VERBOSE” != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ “$VERBOSE” != no ] && log_daemon_msg “Stopping $DESC” “$NAME”
do_stop
case “$?” in
0|1) [ “$VERBOSE” != no ] && log_end_msg 0 ;;
2) [ “$VERBOSE” != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc “$DAEMON” “$NAME” && exit 0 || exit $?
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave ‘force-reload’ as an alias for ‘restart’.
#
#log_daemon_msg “Reloading $DESC” “$NAME”
#do_reload
#log_end_msg $?
#;;
restart|force-reload)
#
# If the “reload” option is implemented then remove the
# ‘force-reload’ alias
#
log_daemon_msg “Restarting $DESC” “$NAME”
do_stop
case “$?” in
0|1)
do_start
case “$?” in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo “Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}” >&2
echo “Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}” >&2
exit 3
;;
esac
Vi måste sätta rättigheter på filen så att den blir körbar:
sudo chmod +x /etc/init.d/telldusd
Sen installerar vi filen i startsekvensen så att den startas automatiskt:
sudo update-rc.d telldusd defaults
Om du inte vill starta om din Raspberry Pi nu, kan du starta Telldus-tjänsten med följande kommando:
/etc/init.d/telldusd start
För mig dög det inte att starta om tjänsten, jag fick boota om och bryta strömmen för allt skulle hoppa igång. Jag vet inte vad det berodde på men det kan handla om strömförsörjningen. Alla mina USB-enheter, inklusive Raspberry Pi, får sin ström från en USB-hub.
Steg 5
Nu måste vi konfigurera telldus-core för våra strömbrytare. Detta görs i filen /etc/tellstick.conf.
sudo nano /etc/tellstick.conf
Jag har bara några strömbrytare från Nexa av två modeller: PBR-2300 för inomhusbruk och LGDR-3500 för utomhusbruk. Båda modellerna är “självlärande”.
Här nedan följer min testversion av /etc/tellstick.conf:
user = “nobody”
group = “plugdev”
ignoreControllerConfirmation = “false”

device {
id = 1
name = “Testbrytare PBR-2300”
protocol = “arctech”
model = “selflearning-switch:nexa”
parameters {
house = “123456”
unit = “1”
}
}

device {
id = 2
name = “Testbrytare LGDR-3500”
protocol = “arctech”
model = “selflearning-switch:nexa”
parameters {
house = “123456”
unit = “2”
}
}
Efter varje gång man ändrar i /etc/tellstick.conf måste man starta om Telldus-tjänsten med kommandot:
sudo /etc/init.d/telldusd restart
Parametrarna i konfigurationsfilen har jag hittat på. Hus-koden house ska vara ett nummer mellan 1 och 67108863. Enhets-koden unit ska vara ett nummer mellan 1 och 16. Sedan måste man “lära” mottagaren sina parametrar genom att sätta dem i inlärningsläge. På LGDR-3500 finns det en learn-knapp dom man startar inlärningen med. En röd lysdiod blinkar under det några sekunder långa inlärningsläget. PBR-2300 går automatiskt in i inlärningsläge när den ansluts till vägguttaget och en röd lysdiod blinkar under några sekunder.
För att lära strömbrytaren med id = 1 sin kod försätter man den i inlärningsläge och ger kommandot:
tdtool –learn 1
och sen detsamma den med id = 2:
tdtool –learn 2
När strömbrytarna är upplärda så slår de av och på sig själva ett par gånger under två sekunder.
Därefter kan man styra dem med kommandot:
tdtool –on 1
respektive
tdtool –off 1
Om du har andra typer av enheter måste /etc/tellstick.conf anpassas till dem. Läs mer om detta i Telldus Wiki.
För med hjälp om kommandot tdtool skriv:
tdtool –help

http://tummelplatsen.se/wiki/Raspberry_Pi_och_en_Tellstick