|
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
|
|