Hi
Here is an complete instruction to get SwitchKing working on Raspberry Pi.
I've choosen to install Raspbian of the latest version direct from
http://www.raspberrypi.org/downloads. It comes with mono 10.2.8, this version is compiled with soft float and you will need hard float on the Pi.
1.
Install to raspbian to at least 4GB SD card. If you choose 4GB you will need to mount a USB stick later on to compile mono, if you don't want to do that use 8GB SD card instead.
Do language settings, be sure to keep UTF-8 otherwise mono will not run correctly, keyboard and so on. Don't forget to expand file system.
2.
Install Tellstick core, follow this instruction and you will have it run perfectly as a daemon
http://elinux.org/R-Pi_Tellstick_core
3.
Install mono of latest version using this instruction
http://neildanson.wordpress.com/
If you have choosen a 4GB SD card you will need to mount a USB stick otherwise you will run out of disk space. This page could be helpful
http://devtidbits.com/2013/03/21/using- ... pberry-pi/.
Be sure to to be in /mnt/usbdrive directory before you follow Neil's instructions
USB stick can be unmounted after the installation is complete
4.
Change permission on /etc/tellstick.conf.
otherwise SwitchKing Server not be able to write new devices.
5.
Install SQLite, you may not need this but is good if you want to check database
6.
Install SwitchKing using instructions on SwitchKings homepage.
Download zip file extract it to /bin/SwitchKing. The easiest way to do it will be using file Manager, be sure to to run it as root witch is done in file managers tools menu "open current folder as root".
SwitchKing can be manually started using this command. It is recommended to try this first to see if everything works allright.
It is the same syntax witch has been written in switchkingd file further down
Code: Select all
mono /bin/SwitchKing/Bin/SwichKing.exe terminal 8080 8800
Don't forget to set permissions on database
Code: Select all
chmod 666 /bin/SwitchKing/Bin/DB/switchKing.server.db3
7.
Now time to create the init.d script to start SwitchKing as daemon. I've been using /etc/skeleton as an orginal och here is my code.
File /etc/switchkingd
Code: Select all
#! /bin/bash
### BEGIN INIT INFO
# Provides: switchkingd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: SwitchKing Server service daemon
# Description: SwitchKing Server service daemon is runed inside Mono-service.
# And is used to controlling Tellstick.
# Logs will be written to /var/log/syslog
# SwitchKing client is runned on Windows, iPad or Linux.
#
### END INIT INFO
# Author: Frittefrax 2013-12-28
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/bin/SwitchKing/Bin
DESC="SwitchKing service daemon"
NAME=switchkingd
DAEMON=/usr/local/bin/mono
INSTALLDIR=/bin/SwitchKing/Bin
EXENAME=SwitchKing.exe
PIDFILE=/var/run/$NAME.pid
DAEMON_ARGS=" $INSTALLDIR/$EXENAME daemon 8080 8800 &"
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 --background --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --background --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
:
8.
start switchking using
The CPU will run at 100% for10-15 sec and then return to normal. Test to connect with SwitchKing client. First time you are connecting with the iPad app you maybe discover a crash, if so just start the service again.
9.
If every thing working smoothly add switchkingd to rc.d using
Code: Select all
cd /etc/init.d
sudo update-rc.d switchkingd defaults
10.
Restart your Pi and check that both service is running as they should
Code: Select all
sudo service tellstickd status
sudo service switchking status
Happy switching!
Fredrik