Programy se mi podařilo úspěšně dokončit. Chyba byla v těch cyklech..než to sem hodím popíšu, k čemu to vlastně bude.
Chtěl bych se časem pokusit vytvořit software k bezpečnému řízení, například inteligentní budovy, odkudkoliv, právě přes protokol ssh. Prozatím je to jen simulace. Funguje to následovně - připojím se k serveru (počítač ovládající náš dům) příkazem:
ssh -L 5000:localhost:22 uzivatel@server
- čímž vytvořím ssh tunel který posílá všechno z 22 portu serveru na 5000 port vzdáleného počítače. Nyní se ocitnu na serveru kde spustím testovací program VYSÍLAČ.
vysílač.cpp
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
FILE *vystup;
double px,kx,y,x,krok,a,b;
int i,f,g,s;
int main ()
{
system("clear");
printf("\nsensor 1: ");
printf("\nsensor 2: ");
printf("\nsensor 3: ");
printf("\nsensor 4: ");
printf("\nsensor 5: ");
printf("\n");
for (;;)
{
f=rand() % 6;
sleep(f);
system("clear");
s=rand() % 5;if (s==0) s=1; //AKTIVATOR SENZORU
printf("\n");printf("sensor 1: ");
if (s==1) {
std::cout<<"\e[5m AKTIVACE\e[0m"<<std::endl;
vystup = fopen("/home/uzivatel/Projekt/vystup.txt","wt");
fprintf(vystup,"1");fclose(vystup);
} //printf ("aktivace");
printf("\n");printf("sensor 2: ");
if (s==2) {
std::cout<<"\e[5m AKTIVACE\e[0m"<<std::endl;
vystup = fopen("/home/uzivatel/Projekt/vystup.txt","wt");
fprintf(vystup,"2");fclose(vystup);
}
printf("\n");printf("sensor 3: ");
if (s==3) {
std::cout<<"\e[5m AKTIVACE\e[0m"<<std::endl;
vystup = fopen("/home/uzivatel/Projekt/vystup.txt","wt");
fprintf(vystup,"3");fclose(vystup);
}
printf("\n");printf("sensor 4: ");
if (s==4) {
std::cout<<"\e[5m AKTIVACE\e[0m"<<std::endl;
vystup = fopen("/home/uzivatel/Projekt/vystup.txt","wt");
fprintf(vystup,"4");fclose(vystup);
}
printf("\n");printf("sensor 5: ");
if (s==5) {
std::cout<<"\e[5m AKTIVACE\e[0m"<<std::endl;
vystup = fopen("/home/uzivatel/Projekt/vystup.txt","wt");
fprintf(vystup,"5");fclose(vystup);
}
printf("\n");
g=rand() % 6; if (g<2) g=2;
sleep(g);
}
//system("clear");
return 0;
}
- program simuluje výstup z několika senzorů a změnu stavu ukládá do souboru /home/uzivatel/Projekt/vystup.txt
Na vzdáleném počítači spustím následující skript:
#!/bin/sh
sshfs -p 5000 localhost:/home/uzivatel/Projekt/ /media/server
if [ -d /media/server ]
then
echo OK!
else echo Not OK! && sleep 5 && exit
fi &&
sleep 3 &&
printf '\nSpouštím testovací program\n' && sleep 3 &&
/home/richie/Projekt/prijmac
- čímž vlastně připojím disk serveru k vzdálenému počítači, na kterém se nachází můj konfigurační soubor.
program PŘIJMAČ vypadá následovně:
#include <iostream>
#include <stdio.h>
#include<stdlib.h>
#include <unistd.h>
FILE *vstup;
int main()
{
int r,i;
char c;
for(;;)
{vstup = fopen("/media/server/vystup.txt", "rt");//otevreni souboru pro cteni
fscanf (vstup, "%u", &r);
if (r==1) {system("clear"); printf ("\naktivovan sensor 1 \n");}
if (r==2) {system("clear"); printf ("\naktivovan sensor 2 \n");}
if (r==3) {system("clear"); printf ("\naktivovan sensor 3 \n");}
if (r==4) {system("clear"); printf ("\naktivovan sensor 4 \n");}
if (r==5) {system("clear"); printf ("\naktivovan sensor 5 \n");}
//system("clear");
sleep (1);
}
return 0;
}
Teď mám v plánu pokusit se vyřešit toto pomocí signálů, ale když sem si pročítal ty stránky co jsou o pár příspěvků víš, no zatím je to pro mě trochu psycho:/ Takže kdyby se někomu chtělo uvést nějaký triviální příklad, velice by mi to pomohlo. Dalším krokem bude připojení nějakého reálného senzoru k počítači. Zatím sem uvažoval o tom, že bych se pokusil senzor opatřit jednoduchým wifi modulem, který by mi přes síť posílal info o stavu tohoto senzoru na server. Sousta práce, ale výsledek by mohl být poměrně zajímavý a užitečný..navíc by to bylo podstatně levnější řešení, než ty co jsou momentálně na trhu.
Je kladen důraz na bezpečnost, takže vítám jakýkoliv názor na její zlepšení.