Tellstick




 

Innehåll.


Tillbaka till Raspberry Pi.
Inledning.
Installation.
Inställning.
Programmering av strömbrytare.
Kommandon.
C-program.
- Flera C-program.


Tellstick  


 

Inledning.

Tellstick kanske inte är ett tillbehör till Raspberry Pi men fungerar utmärkt på Raspberry Pi.



Installation.


=======================================================
Installera telldus-core
sudo nano /etc/apt/sources.list.d/telldus.list
deb-src http://download.telldus.com/debian/ stable main
wget http://download.telldus.se/debian/telldus-public.key
sudo apt-key add telldus-public.key
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get build-dep telldus-core
sudo apt-get install cmake libconfuse-dev libftdi-dev help2man
mkdir -p ~/telldus-temp
cd ~/telldus-temp
sudo apt-get --compile source telldus-core
sudo dpkg --install *.deb
cd ; rm ~/telldus-temp

Denna instruktion är hämtad från https://blogg.itslav.nu/?p=875#comment-1494
gjord av Magnus.
==========================================================

Alternativt.
sudo apt-get update
sudo apt-get dist-upgrade

Börja med att installera följande programvara:
sudo apt-get install libftdi1 libftdi-dev
sudo apt-get install libconfuse0 libconfuse-dev

Ifall du använder kernel version senare än 2.6.21 behöver du försäkra dig om att modulen ftdi_sio inte är laddad i kerneln.
Kontrollera om modulen är laddad i kerneln med följande kommando:
lsmod | grep ftdi_sio
ftdi_sio 30601 0
usbserial 27066 1 ftdi_sio

Ifall modulen är installerad ta bort den med kommando:
modprobe -r ftdi_sio

Installation av mjukvaran.
Hämta ner den senaste mjukvaran från Telldus från: http://download.telldus.se/Tellstick/Software/telldus-core
Packa upp:
cd /usr/src
sudo gunzip telldus-core-{version}.tar.gz #Ändra {version} till nerladdad version
sudo tar xvf telldus-core-{version}.tar

Detta skapar mappen /usr/src/telldus-core{version} som innehåller filer från arkivet.
Gå till den nya mappen
cd telldus-core{version}

Om cmake inte finns så installera cmake med kommando:
sudo apt-get install cmake
För att konfigurera telldus-core för din dator:
sudo cmake .
Glöm inte punkten i slutet.

För att skapa bibliotek (library) skriv:
sudo make
Eventuellt måste man skriva:
sudo -c make install

Sedan ska tellstick konfigureras, se nedan.



 

Till början.



Inställning.

Efter installation så krävs att man anpassar filen /etc/tellstick.conf för sina egna förutsättningar.
För Nexa EYCR-2300 ska inställningen vara:


user = "nobody"
group = "plugdev"
ignoreControllerConfirmation = "false"
device {
   id = 1
   name = "knapp1"
   protocol = "arctech"
   model = "selflearning-switch:nexa"
   parameters {
     house = "4444"
     unit = "1"
   }
}


model för Nexa EYCR-2300 är selflearning-switch
parameter house ska vara en sifferkod t ex "4444"
Efter ändring av tellstick.conf ska tellstickdemonen startas om:
sudo /etc/init.d/telldusd restart



Till början.



Programmering av strömbrytare.

Börja med att se till att /etc/tellstick.conf är konfigurerad för den strömbrytare som ska programmeras (se ovan).
1. Sätt i strömbrytaren i ett uttag.
2. Anslut en lampa i strömbrytarens uttag.
3. Pressa ner den gröna knappen på strömbrytaren som kommer att börja blinka (i 10 sek).
4. Ge kommandot: tdtool --learn 2 (2 = enhetsnummer på strömbrytaren).
5. Lampan kommer att blinka några gånger. När blinkningen avslutats är programmeringen klar.



Till början.



Kommandon.

tdtool --help
tdtool --learn 2
tdtool -n knapp1 (n = on)
tdtool -f knapp1 (f = off)

Omstart av Tellstick demonen:
sudo /etc/init.d/telldusd restart



 

C-program.

Ett program skrivet i C för att med Tellstick tända och släcka en lampa. Lampan tänds kl 18:00 och släcks kl 06:00.

Programmet kan startas på flera sätt, med eller utan startparametrar:
1. ./tellstick-9 /dev/null &
2. PATH/tellstick-9 -t "06:15" -s "06:20" /dev/null &

Utan parametrar tänds lampan kl 18:00 och släcks kl 06:00.
Med parametrar kan man själv bestämma klockslag när lampan ska tändas respektive släckas.
Parametern -t ska följas av tidpunkt när lampan ska tändas. Parametern -s ska följas av tidpunkt när man vill att lampan ska släckas. Parametervärdena ska omges av citattecken.

Programmet kommer att kl 00:01 skifta loggfil, så kallad loggroll.
För att avbryta programmet måste man använda shellkommandot:
kill -9 PID
där PID, process ID, är det id som sätts på programmet. PID kan hittas med hjälp av shellkommandot ps -ef.


/* tellstick-9.c
 *  2014-10-17 Jan Pihlgren
 * 
 *  Nu körs loggroll varje natt, 00:01.
 *  Parameter, arg[1], med önskat klockslag för tändning  och arg[2] för släckning 
 *  kan anges i samband med start av programmet.
 * 
 *  Programmet startas med kommando:
 *  PATH/tellstick-9 -t "06:15" -s "06:20" /dev/null &
 *  PATH = sökvägen till programmet.
 * 
 *  Programmet stoppas med kommando:
 *  kill -9 PID eller sudo kill -9 PID
 *  där PID hittas med kommando ps -ef och leta efter startkommandot ovan.
 *  
*/
#include <telldus-core.h>
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
	
#define BUF_SIZE 1024
	
void loggroll();

char logfile[] = "/home/pi/temp/tellstick.log";
char oldfile1[] = "/home/pi/temp/tellstick.old1";
char oldfile2[] = "/home/pi/temp/tellstick.old2";
char oldfile3[] = "/home/pi/temp/tellstick.old3";
	
int main(int argc, char *argv[]) {

      time_t tid;
      struct tm *info;
      char buffer[80];
      char klockan[10];
      int svar;
      int go = 1; // fortsätt programmet
      char starttid[] = "18:00";
      char stopptid[] = "06:00";
      char rolltid[] = "00:01"; 

/*		Rulla loggfilerna	*/
	loggroll();

	FILE *fp;
	if (argc > 1) {
		if (strcmp(argv[1], "-t") == 0) {
				fp=fopen(logfile, "a");
				strcpy(starttid,argv[2]);
				fprintf(fp,"indata börjar med -t\n");
				fprintf(fp,"starttid = %s\n",starttid);								
				fclose(fp);
		}
		if (strcmp(argv[3], "-t") == 0) {
				fp=fopen(logfile, "a");
				strcpy(starttid,argv[4]);
				fprintf(fp,"indata slutar med -t\n");
				fprintf(fp,"starttid = %s\n",starttid);								
				fclose(fp);
		}		
		if (strcmp(argv[1], "-s") == 0){
				fp=fopen(logfile, "a");
				strcpy(stopptid,argv[2]);
				fprintf(fp,"indata börjar med -s\n");
				fprintf(fp,"stopptid = %s\n",stopptid);								
				fclose(fp);
		}
		if (strcmp(argv[3], "-s") == 0) {
				fp=fopen(logfile, "a");
				strcpy(stopptid,argv[4]);
				fprintf(fp,"indata slutar med -s\n");
				fprintf(fp,"stopptid = %s\n",stopptid);								
				fclose(fp);
		}				
	}
	fp=fopen(logfile, "a");
	fprintf(fp,"Tändning sker klockan %s\n",starttid);        
	fprintf(fp, "Släckning sker klockan %s\n",stopptid);
	fclose(fp);
	
	  while(go != 0){	
		fp=fopen(logfile, "a");
	  
		time(&tid);
		info = localtime(&tid);
		strftime(buffer,80,"%H:%M",info);
		strcpy(klockan,buffer);
		printf("Klockan = %s\n",klockan);
		fprintf(fp,"Klockan = %s\n",klockan);
      
		svar = strcmp(starttid,klockan);
		if( svar == 0){
			tdTurnOn(1);
		}
		printf("svar2 = %d\n",svar);
		fprintf(fp,"svar2 = %d\n",svar);
	
		svar = strcmp(stopptid,klockan);
		if( svar == 0){
			tdTurnOff(1);
		}
		printf("svar4 = %d\n",svar);
		fprintf(fp,"svar4 = %d\n",svar);
		fclose(fp);

		svar = strcmp(rolltid,klockan);
		if( svar == 0){
			loggroll();
		}	
		sleep(60);
	}
    
    tdClose();
	
	return 0;
}
		          
void loggroll(){
       
	/*  Radera oldfile3 */	
		remove(oldfile3);

	/* Flytta filer */		
		rename(oldfile2, oldfile3);  // flytta oldfile2 till oldfile3
		rename(oldfile1, oldfile2);  // flytta oldfile1 till oldfile2
		rename(logfile, oldfile1);	 // flytta logfile till oldfile1
	return;
}						
							

Här är ett förslag på Makefile för Raspberry Pi.


CC=gcc
CFLAGS=-Wall -ltelldus-core

OBJS = tellstick-9.o

all: ${OBJS}
	${CC} -o tellstick-9 ${CFLAGS} ${OBJS}

tellstick-9.c:
	${CC} ${CFLAGS} -c tellstick-9.c

clean:
	rm -f tellstick-9 tellstick-9.o
							
							


 

Till början.



Flera C-program.

Ett C-program, ett vidareutveckling av ovanstående program. Programmet (tellstick-13.c) presenteras i form av en pdf-fil. Programmet styr Tellstick för att tända och släcka en eller flera lampor. Som strömbrytare har använts Nexa EYCR-2300.

Här är en vidareutveckling av programmet (tellstick-15.c) för styrning av Tellstick. Programmet styr strömbrytare 1 att tändas vid solens nedgång och släckas vid solens uppgång. Programmet presenteras i en pdf-fil.



Till början.