Smart Home

LUCRARE DE LICENȚĂ

Smart home

Cuprins

Introducere

Soluții inteligente de control și automatizare pentru casă

De ce Smart Home?

Ușurința în utilizare, confort și economie de energie!

Controlul iluminatului

Controlul climatizării

Control Server audio/video

Control securitate – Efracție, supraveghere video

Controlul prin internet

Generalități

Structura posibilă a unei astfel de sistem

Dezvoltarea unei aplicații pentru comanda sistemului

Aplicația TCP Server

Aplicația TCP Client

Dezvoltarea aplicației pentru Pocket PC/Laptop

Dezvoltarea unei aplicații “client” pentru Pocket PC/Laptop

Codul pentru butonul Connect

Codul pentru butonul Disconnect

Codul pentru butonul Send

Codul pentru butonul Close

Clasa SocketPacket

Funcția de tip delegate

Cod răspuns program

Configurarea camerelor detectate pe rețeaua locală

Adăugare buton configurare cameră

Funcție trimitere comandă

Funcție determinare adresă IP a calculatorului

Funcție detectare fus orar

Funcție recepție răspuns calculator

Funcție setare parametrii cameră

Concluzii finale

Concluzii

Costurile de implementare a Smart Home-ului și perioada de amortizare

Bibliografie

Anexe

CAPITOLUL 1 – INTRODUCERE

1.1 Soluții inteligente de control și automatizare pentru casă

Conceptul de smart home reprezintă controlul automatizat al casei, aducând un grad ridicat de confort, securitate și în același timp economisind energie. Servicii de instalare profesionistă de la cel mai simplu  sistem de diminuare al luminii, până la sisteme cu șcenarii complexe, în care toate echipamentele casei tale sunt interconectate pentru a lucra împreună: climatizare, sisteme de securitate, iluminat, media, audio-video și utilități. Toate pot fi controlate din interfața centralizată sau chiar de pe telefonul mobil, tabletă sau laptop de oriunde te-ai afla. Prin utilizarea sistemelor wireless smart home, totul poate fi instalat fară a fi necesar cablajul între acestea.

Fig. 1.1 – Schemă reprezentare elemente Smart Home

[10] – http://smarthomeenergy.co.uk/sites/smarthomeenergy.co.uk/files/images/smart-home_0.jpg

1.2De ce Smart Home? 

S-a dovedit în timp, odată cu evoluția tehnologiei, că sistemele simple nu mai pot răspunde cu succes cerințelor de confort și siguranțăîn utilizare a instalațiilor de iluminat, prize, climatizare și securitate. Sistemele smart homeintegrează toate aceste subsisteme și determină funcționarea lor unitară. Odată cu integrarea cerințelor simple ale unei locuințe: setare temperatură, comandă iluminat, închidere/deschidere draperii, au apărut interfețele media și lărgirea spectrului de  aplicații ajungând până la distribuția sunetului în casă, a semnalului TV, vizualizarea live pe telefonul mobil sau laptop al camerelor de supraveghere și armare/dezarmare a sistemului de efracție.

1.3Ușurința în utilizare, confort și economie de energie!

Conceptul de smart home. Imaginați-vă casa în care ușile se încuie automat la 22:00. Draperii care se deschid sau închid la răsaritul soarelui.Temperatura ideală în toată casa și care nu uită să treacă în modul economic când pleci de acasă. Sistem home theater care controlează luminile, sunetul și imaginile cu o singură atingere.

Prin instalarea sistemelor smart home utilizatorii se pot bucura de o mutitudine de beneficii prin ușurința în utilizare, confortul creat și economiile aduse în timp. Rolul unui sistem smart home și de automatizare al casei a fost dintotdeauna sporirea confortului și securității  cât și utilizarea ușoară a unor sisteme complexe.

1.4 Controlul iluminatului

Acum poți controla nivelul optim al luminii pentru fiecare încăpere, poți spori sau scade intesitatea luminii în funcție de activitatea pe care o ai, poți creea scenarii de oprire a tuturor luminilor din casa la plecare, sau seara înainte de culcare, și toate acestea cu o singură atingere de buton. Față de sistemele convenționale, nu trebuie să mai verifici dacă ai stins lumina de pe terasă sau din bucătărie, nu trebuie să mai închizi singur draperiile sau rulourile într-o zi insorită de vară: sistemul de control al iluminatului face toate acestea pentru tine.

Funcții de bază:

Comanda mai multor circuite la o sigură apăsare de buton

Controlul unuia sau a mai multor circuite din puncte diferite (de la mai multe întrerupătoare)

Scenarii de iluminat la sosire, plecarea de acasă, oaspeți, vizionare film în home theater

Scenarii de iluminat dedicat activității tale : TV, Home Cinema, etc

Iluminat de securitate prin programarea de scenarii de iluminat care simulează prezența în casă.

1.5 Controlul climatizării

Vrei ca încălzirea în pardoseala din baie să pornească singurăîntr-o dimineață răcoroasă, vrei ca atunci când pleci de acasă temperatura să scadă la 19°C și să crească la 23°C când revii, vrei să poți controla temperatura individual din fiecare cameră, sistemele smart home îți oferă nivelul de confort de care ai nevoie.În plus, folosind sistemele automate de control al climatizarii poți face o economie de până la 30% la factura de energie, prin simpla utilizare eficientă a resurselor bazată pe gradul de ocupare și prezența în casă.

Funcții de bază:

Controlul temperaturii în fiecare cameră

Scenariul de climatizare: confort, economic, customizat

Control automat al incălzirii în pardoseală

1.6 Control Server audio/video

Alege muzica preferatăîn fiecare încăpere, poți să selectezi o melodie sau un post de radio diferit la piscină și un altul în living. Toate acestea cu sistemele multi room.

1.7 Control securitate – Efracție, supraveghere video

Vrei să știi că locuința ta este în sigurantă, să poți să urmărești camerele video de oriunde te-ai afla pe telefonul mobil, tableta sau laptop, vrei să răspunzi la interfon chiar de pe tableta de acasă. Sistemele integrate smart home pot face toate acestea.

Funcții de bază:

Vizualizare live a camerelor de supraveghere, videointerfon și touch panel

Detecție de mișcare, inundație, fum și temperatură, gaz metan, ce poate genera comenzi in sistemul de securitate

Armare/dezarmare sistem de detecție efracție odată cu plecarea/sosirea acasă

CAPITOLUL 2 – CONTROLUL PRIN INTERNET

2.1 Generalități

Rețeaua de internet a apărut ca rezultat al gândirii unor vizionari care au înțeles importanța schimbului de informații între calculatoare. O rețea globală de calculatoare a fost propusă prima dată de către Massachussets Institute of Technology (MIT) în anii ’60. De atunci internetul a evoluat până la stadiul actual. Gândit pentru schimbul de informații, acesta a devenit o unealtă puternică ce presupune conectarea fiecărui domiciliu în zilele noastre. Informațiile schimbate între calculatoare pot fi de orice natură. Spre exemplu programele de “chat” permit schimbul de informații la nivel de șiruri de caractere între doi sau mai mulți utilizatori. De multe ori în locul tastării informației se optează pentru transmiterea de voce (Voice Over IP – VOIP). Programele de chat permit azi și transmiterea de imagini prin internet. Exemple de asemenea programe de chat sunt bine-cunoscutele Yahoo Messenger și Skype. Un scenariu puțin diferit este reprezentat de aplicațiile ce lucrează prin metoda “streaming”. Acestea transmit de obicei informative video.

Ce s-ar intampla dacă informațiile schimbate între calculatoare ar fi de fapt comenzi? Informația schimbată în acest caz nu este esențial-diferită față de cazul programelor de chat: ambele sunt șiruri de caractere. Aplicând principiul comenzilor de la distantă, un nou concept își face apariția în zilele noastre: așa-numitul concept “smart-home”. Acest concept permite controlul de la distanță a unor dispozitive electrice/electronice casnice (lumini, caldură, aer conditionat, etc.). O variantă posibilă a unui asemenea sistem ar putea folosi un termostat construit în jurul unui webserver. La accesarea paginii de web a acestuia, după identificare se poate prescrie temperatura dorită în casă. Astfel, dacă pe timpul orelor de lucru aceasta este setată la 16 ℃ (pentru a economisi energie), înainte de plecarea de la serviciu, utilizatorul poate stabili noua valoare a temperaturii la 20 ℃.

Spre exemplu, pentru controlul luminilor se poate folosi așa-numitul Pocket PC. Comenzile se transmit în acest caz prin rețeaua WIFI. Este însă posibilăși utilizarea infrastructurii GSM sau UMTS respectiv 4G, dezvoltată pentru operatorii de telefonie mobilă. În acest caz se poate folosi un telefon și un sistem de codare/decodare. Unul dintre cele mai cunoscute astfel de sisteme il reprezintă codoarele/decodoarele DTMF.

În acest capitol se vor prezenta trei aplicații ce lucrează prin internet. Prima aplicație este o simplă aplicație de chat. Datorită faptului că mesajele trimise nu diferă structural față de comenzi, aplicația de chat este piatra de temelie a controlului prin internet. Pentru dezvoltarea acesteia se va utiliza Visual Basic. Structura acesteia este una de tip “client-server”. În funcționare aplicația “client” se va conecta la aplicația “server” prin internet. După conectare cele două aplicații pot începe schimbul de mesaje. Paragraful descrie un “client” dezvoltat pe un Pocket PC. Structural, acesta nu este diferit de cel ce rulează pe PC dar prezintă avantajul mobilității.

Cea de a treia aplicație demonstrează controlul prin internet al unei camere IP orice model. Cu ajutorul tehnologiei UPnP, programul caută camerele IP pe rețeaua locală. Odată găsite, acestea sunt configurate cu ajutorul comenzilor HTTP.

2.2 Structura posibilă a unui astfel de sistem

Structural un asemenea sistem nu este complicat. De fapt, orice posesor de PC conectat la internet (sau la o rețea locală) poate construi un asemenea sistem. Acest capitol presupune că cititorul a parcurs capitolele anterioare (sau că acesta posedă cunoștiințe de electronică și de programare). O aplicație de control de la distanță construită pe principiul “client-server” presupune un dipozitiv care primește comenzi de la un altul. Dispozitivul care primește comenzi va fi cel “server” iar cel care trimite va fi cel “client”. Ambele sunt conectate la aceeași rețea (prin cablu sau wireless). Este important de precizat faptul că nu este necesar ca ambele să fie calculatoare. Dispozitivul “server” poate fi construit în jurul unui microcontroller PIC. Dispozitivul “client” poate fi un laptop sau un Pocket PC. Aplicația de control de la distanță prin internet se poate vedea în Figura 2.1. Un laptop, Pocket PC sau desktop poate rula aplicația “client”. Aplicația “server” poate rula pe un calculator sau pe un sistem de dezvoltare cu microcontroller PIC. Rețeaua ce conectează dispozitivele “server” și “client” poate fi rețeaua de internet sau o rețea locală ce presupune existența unui router.

În cazul conectarii la internet, legătura se face printr-un modem urmat de un router (la utilizarea dispozitivelor wireless, acesta trebuie să fie wireless). Dispozitivul client va trebui să cunoască adresa de IP a routerului și portul dispozitivului client (in router trebuie să existe o legatură între adresa internă de IP a serverului și portul alocat acestuia). Cu alte cuvinte, pentru conectare din exterior la dispozitivul “server”, trebuie cunoscută adresa de IP a routerului și valoarea portului serverului.

Pe de altă parte, dacă cele două dispozitive “server” și “client” se află în aceeași rețea locală, atunci trebuie cunoscută doar adresa de IP a serverului. Odată ce adresa de IP a dipozitivului client este cunoscută (pentru aflarea acesteia se poate folosi comanda ipconfig în fereastra DOS), se poate determina adresa de IP a routerului. Spre exemplu dacă adresa de IP a dispozitivului “client” este 192.168.1.5, atunci adresa routerului este 192.168.1.1. Routerul poate fi“client” poate fi un laptop sau un Pocket PC. Aplicația de control de la distanță prin internet se poate vedea în Figura 2.1. Un laptop, Pocket PC sau desktop poate rula aplicația “client”. Aplicația “server” poate rula pe un calculator sau pe un sistem de dezvoltare cu microcontroller PIC. Rețeaua ce conectează dispozitivele “server” și “client” poate fi rețeaua de internet sau o rețea locală ce presupune existența unui router.

În cazul conectarii la internet, legătura se face printr-un modem urmat de un router (la utilizarea dispozitivelor wireless, acesta trebuie să fie wireless). Dispozitivul client va trebui să cunoască adresa de IP a routerului și portul dispozitivului client (in router trebuie să existe o legatură între adresa internă de IP a serverului și portul alocat acestuia). Cu alte cuvinte, pentru conectare din exterior la dispozitivul “server”, trebuie cunoscută adresa de IP a routerului și valoarea portului serverului.

Pe de altă parte, dacă cele două dispozitive “server” și “client” se află în aceeași rețea locală, atunci trebuie cunoscută doar adresa de IP a serverului. Odată ce adresa de IP a dipozitivului client este cunoscută (pentru aflarea acesteia se poate folosi comanda ipconfig în fereastra DOS), se poate determina adresa de IP a routerului. Spre exemplu dacă adresa de IP a dispozitivului “client” este 192.168.1.5, atunci adresa routerului este 192.168.1.1. Routerul poate fi accesat într-un Internet Explorer cu comanda http://192.168.1.1. Username și parolă sunt necesare pentru a deschide această pagină web. Odată intrat, utilizatorul poate vedea o listă cu dispositive atașate. O asemenea listă se poate vedea în Figura 2.2.

Fig. 2.2 – Detectarea camerei pe reteaua locala (192.168.1.5)

Un posibil punct de pornire în dezvoltarea unei aplicații de control la distanță sunt programele de chat. Într-o asemenea aplicație se tastează mesaje sub forma de șiruri de caractere de la ambele capete. Pentru a realiza o aplicație de control de la distanță se adaugă un program de interpretare a șirurilor de caractere (parser) la programul “server”. Aceasta permite “recunoașterea” unei comenzi primite și deci o acțiune potrivită. Următorul capitol descrie realizarea unei aplicații de chat.

Referințe – [11],[12],[8],[7]

CAPITOLUL 3 – DEZVOLTAREA UNEI APLICAȚII PENTRU COMANDA SISTEMULUI

Așa cum s-a menționat mai sus, un punct de plecare posibil în dezvoltarea unei aplicații de control de la distanță este o aplicație de chat. Adăugarea unui parser, permite înțelegerea comenzii trimise și declanșarea unei acțiuni dinainte stabilite.

Scopul acestei lucrări nu este descrierea protocoalelor de comunicație in detaliu. O descriere excelentă a traficului de rețea și a mecanismului de rețea poate fi găsită în cartea lui Blum (2003) intitulată “C# Network Programming”. Unul dintre protocoalele utilizate pentru comunicații este așa-numitul Transmission Control Protocol (TCP). TCP adaugă informație pachetului de date și garantează livrarea acestuia sau generarea unui mesaj de eroare către expeditor în cazul în care livrarea eșuează. Datorită acestei trăsaturi, TCP este numit protocol orientat spre conexiune. În vederea unei conexiuni sunt necesare două componente:

Adresă de IP,

Portul utilizat.

În vederea stabilirii unei conexiuni valide, dispozitivul aflat la distanță, trebuie să accepte pachete de date. Pentru testare, aplicațiile “server” și “client” pot lucra pe același PC.

3.1 Aplicația TCP Server

Pentru dezvoltarea acestei aplicații se va utiliza compilatorul Visual Basic 6.0. Ambele aplicații au fost dezvoltate sub indrumarea Conf.Dr.Prof. Stanciu Rareș.

Aplicația server utilizează componenta software numită “Microsoft Winsock Control 6.0”. Pentru adăugarea acesteia la proiectul serverului, se utilizează meniul “Project” și submeniul “Components”. Odată inserat în Toolbox, acesta poate fi adăugat formei proiectului.

Fig. 3.1 – Aplicația de primire mesaj tcpServer

Două componente de tip “listbox” și un buton vor fi adăugate la forma proiectului. Acestea sunt numite “txtSend”, “txtReceive”, iar butonul se numește cmdSend. Listingul programului aplicație server este prezentat mai jos.

'File: tcpServer

'Date: 09.29.2009

'Auth: R Stanciu

'Refs: Paul Oh and Deitel

Option Explicit

Private Sub Form_Load()

cmdSend.Enabled = False

'set the local

tcpServer.LocalPort = 5000

'listen

Call tcpServer.Listen

End Sub

Private Sub Form_Terminate()

'close the server

Call tcpServer.Close

End Sub

Private Sub tcpServer_Close()

cmdSend.Enabled = False

Call tcpServer.Close ' client closed, server should too

txtReceive.Text = txtReceive.Text & "Client closed connection." & vbCrLf & vbCrLf

txtReceive.SelStart = Len(txtReceive.Text)

Call tcpServer.Listen ' listen for next connection

End Sub

Private Sub cmdSend_Click()

' Send following text data to the client

Call tcpServer.SendData("Server >>> " & txtSend.Text)

' Repeat text data in server's txtReceive.Text window

txtReceive.Text = txtReceive.Text & "Server >>>" & txtSend.Text & _

vbCrLf& vbCrLf

' Clear the txtSend.Text window"

txtSend.Text = ""

txtReceive.SelStart = Len(txtReceive.Text)

End Sub

Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)

' Ensure that tcpServer is closed

' before accepting a new connection

If tcpServer.State <> sckClosed Then

Call tcpServer.Close

End If

cmdSend.Enabled = True

Call tcpServer.Accept(requestID) ' accept connection

' Display following message on server application:

txtReceive.Text = "The connection from IP Address: " & _

tcpServer.RemoteHostIP &" is successful" & vbCrLf & _

"Port #: "& tcpServer.RemotePort & vbCrLf & vbCrLf

End Sub

Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)

Dim message As String

Call tcpServer.GetData(message) ' get data from client

txtReceive.Text = txtReceive.Text & message & vbCrLf & vbCrLf

txtReceive.SelStart = Len(txtReceive.Text)

End Sub

Private Sub tcpServer_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

Dim result As Integer

result = MsgBox(Source & ": " & Description, _

vbOKOnly, "TCP/IP Error")

End

End Sub

Programul poate fi găsit pe CD-ul ce insoțește aceast proiect: CD\Program\tcpServer.

3.2 Aplicația TCP Client

La fel ca și în cazul aplicației server și în acest caz se utilizează compilatorul Visual Basic 6.0. Din nou se va folosi componenta software “Microsoft Winsock Control 6.0”. Se vor utiliza două componente de tip “listbox” și un buton. Componentele “listbox” se numesc din nou “txtSend” and “txtReceive” iar butonul se numește din nou cmdSend. Listingul programului aplicație client este prezentat mai jos.

Fig. 3.2 – Aplicația TCPClient, fereastră în care se scrie IP-ul unde se trimite mesajul

'File: tcpClient

'Date: 09.29.2009

'Auth: R Stanciu

'Refs: Paul Oh and Deitel

Option Explicit

Dim IPString As String

Dim Usr As String

Private Sub cmdSend_Click()

'Send data to server

Call tcpClient.SendData("Client >>> " & txtSend.Text)

txtReceive.Text = txtReceive.Text & _

"Client >>> " & txtSend.Text & vbCrLf & vbCrLf

txtReceive.SelStart = Len(txtReceive.Text)

txtSend.Text = ""

End Sub

Private Sub Form_Load()

cmdSend.Enabled = False

' Set up local port and wait for connection

tcpClient.RemoteHost = InputBox("Enter the remote host IP Address", _

"IP Address", "localhost")

If tcpClient.RemoteHost = "" Then

tcpClient.RemoteHost = "localhost"

End If

tcpClient.RemotePort = 5000 ' server port

Call tcpClient.Connect ' connect to RemoteHost address

End Sub

Private Sub Form_Terminate()

Call tcpClient.Close

End Sub

Private Sub tcpClient_Close()

cmdSend.Enabled = False

Call tcpClient.Close ' server closed, client should too

txtReceive.Text = txtReceive.Text & "Server closed connection." & vbCrLf

txtReceive.SelStart = Len(txtReceive.Text)

End Sub

Private Sub tcpClient_Connect()

' When connection occurs, display a message

cmdSend.Enabled = True

txtReceive.Text = "Connected to IP address: " & _

tcpClient.RemoteHostIP & vbCrLf & vbCrLf

End Sub

Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)

Dim message As String

Call tcpClient.GetData(message) ' get data from server

txtReceive.Text = txtReceive.Text & message & vbCrLf & vbCrLf

txtReceive.SelStart = Len(txtReceive.Text)

End Sub

Private Sub tcpClient_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

' If the client fails to connect to server, then this code executes

Dim result As Integer

result = MsgBox(Source & ": " & Description & vbCrLf & "Ooooopppss! Can't connect to server!", _

vbOKOnly, "TCP/IP Error")

' Source variable is the control (winsock in this case) causing the error

' Description variable cites the error message

' vbOKOnly is the control button

' TCP/IP Error is the MsgBox caption

End

End Sub

Fig.3.3 – Aplicația TCPClient, ferestră în care se scrie mesajul către Server

Programul poate fi gasit pe CD-ul ce insoțește aceast proiect : CD\Program\tcpClient.

Referințe – [13], [14], [15], [16]

CAPITOLUL 4 – DEZVOLTAREA APLICAȚIEI PENTRU POCKET PC / LAPTOP

4.1 Dezvoltarea unei aplicații “client” pentru Pocket PC

În acest capitol se prezintă dezvoltarea unei aplicații de tip “client” ce rulează pe un Pocket PC. Pentru dezvoltare se va utiliza compilatorul C# din mediul integrat Visual Studio 2008. Acest pachet sofware permite dezvoltarea unui program destinat să ruleze sub Windows CE și asigură, transferul acestuia precum și lansarea lui in execuție. La fel ca și aplicația prezentată anteriorși aceasta se bazează pe coloana vertebrală a unei aplicații de chat. În eventualitatea în care Pocket PC-ul dispune de modul wireless acestă aplicație beneficiază și de mobilitate.

Pentru dezvoltare se va deschide Visual Studio 2008. Proiectul se va numi ceSocketClient și va fi dezvoltat in C#. Înainte de crearea proiectului se va stabili tipul acestuia ca fiind Pocket PC 2003 (Figura 4.2). Dupăce proiectul a fost creat, forma acestuia se populează cu controale de tip TextBox și butoane. Forma proiectului arată ca în Figura 4.1.

Fig. 4.2 – Alegerea tipului de proiect “PPC” în Visual Studio 2008.

Controalele plasate pe formă se numesc dupa cum urmează:

textBoxIP – controlul textbox pentru adresa de IP a serverului,

textBoxPort – controlul textbox pentru portul de comunicație,

TextTxMessage – controlul textbox conținând mesajul de trimis,

TextRxMessage – controlul textbox conținând mesajul recepționat,

buttonConnect – butonul de conectare la server,

buttonDisconnect – butonul de deconectare,

buttonSend – butonul de trimitere a sirului de caractere,

buttonClose – butonul de terminare a aplicatiei.

În fereastra textBoxIP se va introduce adresa de IP a serverului (de exemplu 192.168.1.3). În fereastra textBoxPort se va introduce numărul portului (de exemplu 5000). Odată realizată această formă este momentul pentru scrierea codului. Este important ca în proiect să se facă apel la toate modulele necesare:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.Net.Sockets;

using System.Threading;

using System.IO;

Dacă nu sunt deja incluse ele vor trebui incluse manual în proiect. Următorul pas este adăugarea variabilelor.

byte[] m_dataBuffer = newbyte[10];

IAsyncResult m_result;

publicAsyncCallback m_pfnCallBack;

publicSocket m_clientSocket;

Notă: Caracterele [] sunt paranteze drepte fară spațiu între ele.

Din cauza faptului că nu se cunoaște momentul în care vor sosi caracterele, se va utiliza o funcție delegate pentru afișarea lor (această soluție este mai elegantă decât citirea periodică a socket-ului). Definirea funcției delegate se poate vedea mai jos:

delegatevoidAddTextCallback(string text);

4.2Codul pentru butonul Connect

Codul pentru butonul Connect reprezintă partea de conectare a PocketPC la Laptop. Prin acesta se face conexiunea de care avem nevoie pentru transferarea programului din Laptop pe PocketPC. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 1.

4.3Codul pentru butonulDisconnect

Codul pentru butonul Disconnect este aproximativ la fel ca și cel pentru butonul Connect doar că diferă comanda de baza ea fiind deconectare. Acest pasaj de cod se folosește după finalizarea procesului de copiere a programului de pe PC pe PocketPC pentru a nu exista erori în datele copiate. (safely remove). Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 2.

4.4 Codul pentru butonulSend

Codul pentru butonul Send este defapt procesul prin care un program anume selectat va fi transferat pentru a fi folosit pe PocketPC. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 3.

4.5 Codul pentru butonulClose

Codul pentru butonul Close este de folos pentru inchiderea aplicației după ce anumite informații respectiv programe au incheiat procesul de copiere cu succes. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 4.

4.6 Clasa SocketPacket

În acest subcapitol este prezentată clasa de care aparține programul transferat de pe Laptop către PocketPC. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 5.

4.7 Funcția de tip delegate

Funcția care ajută la copierea de program din calculator pe PocketPC. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 6.

4.8 Cod răspuns program

În această parte de cod este reprezentat răspunsul calculatorului la întâlnirea diferitelor erori care pot aparea. Tot aici se regăsesc si mesajele de eroare dacă cumva în cadrul funcțiilor descrise mai sus intervine o problema. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 7.

Fig. 4.3 – Fereastră alegere opțiune de deploy a programului

Programul este acuma gata pentru compilare și transfer pe Pocket PC. Pentru aceasta este necesar sa fie conectat la calculator. Înainte de lansarea programului este bine de verificat dacă Pocket PC-ul se poate conecta la rețeaua WiFi (pentru aceasta pot fi necesare setări suplimentare). Întregul proiect poate fi gasit aici: CD\Program\ceSocketClient.

Referințe – [3], [4], [5], [6], [7]

CAPITOLUL 5– CONFIGURAREA CAMERELOR DETECTATE PE REȚEAUA LOCALĂ

5.1 Adăugare buton configurare cameră

Necesitatea detectarii camerelor video pe rețeaua locală este dată, în primul rând de simplitatea în folosire, pe care o reprezintă. În momentul în care adaugi camere video pe rețeaua de acasă este foarte ușor să fie detectate de acest program fară mare dificultate. Aceași idee poate fi folosită în cazul resetării unei carmere video, ea putând fi ușor identificată după aceea. Programul aferent găsirii unei camere pe rețea se gasește pe CD la “Program\SearchCameras”.

Fig.5.1 – Aplicația caută și listează camerele de pe rețeaua locală

Pentru configurarea camerelor detectate pe rețeaua locală pe forma din Figura 5.1se va mai amplasa un buton. Prin apăsarea acestui buton utilizatorul va cere programului să configureze camera. Codul aferent se găsește în directorul “Program\SetCameras” pe CD-ul care însotește acest proiect. Următoarea parte de cod trebuie adaugată butonului nou creat.

string text = "";

for (k = 0; k < camNumber; k++)

{

SetupMyCameras();

camDataString = camDataString + "Camera" + (k + 1).ToString();

text = "CamNumb 1 CamName Cam1 CamManuf Axis CamPTZ FIX CamIP 192.168.1.50 CamPort 9100 CamUser GemaSoft CamPass GemaSoft CamComp 30 CamVS mjpeg CamViewProt Y CamPTZProt Y CamTDFormat %d%b CamParam1 Reserved CamParam2 Reserved CamParam3 Reserved CamParam4 Reserved CamParam5 Reserved EndCam1";

}

MessageBox.Show("Finished setting up camera(s)!!");

Fig. 5.2 – Aplicația care setează camerele găsite pe rețeaua locală

5.2 Funcție trimitere comandă

În această parte de cod va fi realizată funcția de trimitere a comenzii dorite de la PC sau tabletă către camerele video respectiv serverul unde acestea sunt legate direct pe rețea fiind identificate printr-o adresă IP. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 8.

5.3 Funcție determinare adresă IP a calculatorului

Această funcție conține cod pentru determinarea adresei de IP a calculatorului de unde se vor seta pe viitor camerele de supraveghere video. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 9.

5.4 Funcție detectare fus orar

Această funcție determină cu ajutorul conectări calculatorului de unde se setează camerele video la internet a fusului orar respectiv a orei corecte. Toate acestea sunt necesare pentru vizualizaera în timp real și la ora corectă care va urma mai apoi în program. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 10.

5.5 Funcție recepție răspuns calculator

La trimiterea unei comenzi către cameră, aceasta răspunde cu “OK” dacă comanda a reușit. În caz de nereusită se afișează un mesaj de eroare. În cazul trimiterii comenzii în Internet Explorer, răspunsul este afișat în aceeași fereastră. Pentru a recepționa răspunsul se utilizează funcția prezentată în Anexa 11.

5.6 Funcție setare parametrii cameră

Această funcție este practic baza de cod pentru configurarea camerelor video de supraveghere care se regăsesc pe rețea. Parametri care sunt configurați de către această comandă sunt IP-ul fiecărei camere detectate pe rețea, setarea axei pe care trebuie sa fie setată respectiva cameră de supravegheat precum și mici detalii de comandă a lor cum ar fi vizualizarea în timp real. Referire la cod se poate vedea la finalul lucrării în anexe. Anexa 12.

Referințe – [17], [18], [19], [20], [21], [22]

CAPITOLUL 6 – CONCLUZII FINALE

6.1 Concluzii

Conceptul de proiect Smart Home prezentat în această lucrare este un concept nou apărut în domeniul automatizării caselor și aduce cu sine o multitudine de beneficii precum și unele dezavantaje în folosirea ei.

Automatizarea locuinței respectiv casei se face prin folosirea de tehologii noi care lucrează ca un sistem unitar controlate de server și mai apoi de utilizatorul final prin intermediul comunicației prin internet.

Aplicația de chat care a fost prezentată în cuprinsul lucrării reprezintă baza în construirea a sistemului Smart Home. Prin intermediul acesteia sunt transmise de la utilizator către locuintă comenziile dorite : Regralrea de lumini, Setarea optimă a temperaturii în locuință, armarea/dezarmarea sistemului de alarmă respectiv securitate a casei și altele menționate mai sus.

Aplicația de găsire și setare a camerelor de supraveghere video din cadrul locuinței reprezintă primul pas către supravegherea de la distanță a locunței în cauză.

Pe scurt acest sistem unitar numit Smart Home este tehnologia care conferă utilizatorului comoditatea de a interacționa prin intermediul internetului cu casa lui pentru a putea controla diferite facilități.

6.2 Costurile de implementare a Smart Home-ului și perioada de amortizare

Costurile transformării casei proprii în Smart Home variază de la tehologie la tehnologie și de la multitudinea de opțiuni care pot fi instalate. Pentru eficiență maximă a unui Smart Home punând în aplicare toate posibilitațiile descrise mai sus în această lucrare și anume :

Controlul iluminatului

Controlul climatizării

Control Server audio/video

Control securitate – Efracție, supraveghere video

Control senzori și întrerupătoare

Control draperii

Control senzori fum

Control senzori mișcare

Cu toate aceste facilități se va ajunge la un cost estimativ între 10.000 spre 15.000 de euro depinzând de mărciile disponibile spre vânzare.

Făcând după aceea un calcul real al nevoilor dintr-o casă se poate spune că suma se poate amortiza undeva în jurul a 5 ani de folosință.

Bibliografie

Axelson, J., USB Complete, Iunie 2009, ISBN 978-1931448086,

Axelson J., Port Serial Complete, Decembrie 2007, ISBN 978-1931448-06-2,

Blum R., – C# Network Programming, Sybex, 2003, ISBN 0-7821-4176-5,

Jamsa K, Jamsa’s C/C++/C# Programmer’s Bible, 2nd ed., Onword Press, 2002, ISBN 0-76684682-2,

Kernigan B., Ritchie D. – Programming in C(1st edition),2009, ISBN 0-13-110163-3,

Kernigan B., Ritchie D. – Programming in C(2nd edition),2010, ISBN 0-13-110362-8,

Muench C., – The Windows CE Technology Tutorial, Addison-Wesley 2000, ISBN 0-201-61642-4,

Ioan Rareș Stanciu, Florin Molnar-Matei – Sisteme de monitorizare și control în timp real, 2013, ISBN 978-606-569-542-9,

Tutorials from Boondog website – www.boondog.com

Fig. 1.1 – http://smarthomeenergy.co.uk/sites/smarthomeenergy.co.uk/files/images/smart-home_0.jpg,

Addison-Wesley Professional,TCP/IP Illustrated Volume 1, 1993 , ISBN 978-0201633467,

Charles M. Kozierok, The TCP/IP Guide Ș A Comprehensive, Illustrated Internet Protocols Referance, 2005, ISBN 978-1593270476,

O’Reilly Media, C# 5.0, 2012, ISBN 978-1449320104,

Manning Publications, C# 5.0 3rd Edition, 2013, ISBN 978-1617291340,

Microsoft Press, Microsoft Visual C# 1st Edition, 2013, ISBN 978-0735681835,

Microsoft Press, Microsoft Visual Basic 6.0 1st Edition, 1999, ISBN 978-0735605589,

Butterworth-Heinemann, Digital Video Surbeillance and Security, 2010, ISBN 978-1856177474,

Alexandr Lytkin, IP Video Surveillance – An Essential Guide, 2012, ISBN 978-5600000339,

Constantin Calinoiu, Senzori si Traductoare vol I, 2009, ISBN 978-973-31-2347-7,

Neeli Prasad, Anand Prasad, WLAN Szstems &Wireless IP for Next Generation Communications, 2002, ISBN 978-1580532907

Pejman Roshan, Jonathan Leary, 802.11 Wireless LAN Fundamentals, 2010, ISBN 978-1587142246,

Rick Leinecker, Vanessa L. Williams, Visual Studio 2008 All-In-One Desk Reference, 2008, ISBN 978-0470191088.

Bruce Hallberg, Networking: A Beginner’s Guide (6th Edition), 2014, ISBN 978-0071812245

Anexe :

1.Codul pentru butonul Connect

// See if we have text on the IP and Port text fields

if (textBoxIP.Text == "" || textBoxPort.Text == "")

{

MessageBox.Show("IP Address and Port Number are required to connect to the Server\n");

return;

}

try

{

UpdateControls(false);

// Create the socket instance

m_clientSocket = newSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

// Cet the remote IP address

IPAddress ip = IPAddress.Parse(textBoxIP.Text);

int iPortNo = System.Convert.ToInt16(textBoxPort.Text);

// Create the end point

IPEndPoint ipEnd = newIPEndPoint(ip, iPortNo);

// Connect to the remote host

m_clientSocket.Connect(ipEnd);

if (m_clientSocket.Connected)

{

UpdateControls(true);

//Wait for data asynchronously

WaitForData();

}

}

catch (SocketException se)

{

string str;

str = "\nConnection failed, is the server running?\n" + se.Message;

MessageBox.Show(str);

UpdateControls(false);

}

2.Codul pentru butonulDisconnect

if (m_clientSocket != null)

{

m_clientSocket.Close();

m_clientSocket = null;

UpdateControls(false);

}

3. Codul pentru butonulSend

try

{

Object objData = TextTxMessage.Text;

byte[] byData = System.Text.Encoding.ASCII.GetBytes(objData.ToString());

if (m_clientSocket != null)

{

m_clientSocket.Send(byData);

}

}

catch (SocketException se)

{

MessageBox.Show(se.Message);

}

4. Codul pentru butonulClose

if (m_clientSocket != null)

{

m_clientSocket.Close();

m_clientSocket = null;

}

Close();

5. Clasa SocketPacket

publicclassSocketPacket

{

public System.Net.Sockets.Socket thisSocket;

publicbyte[] dataBuffer = newbyte[1];

}

6. Funcția de tip delegate

Codul se poate vedea mai jos:

privatevoid AddText(string text)

{

if (this.TextRxMessage.InvokeRequired)

{

AddTextCallback d = newAddTextCallback(AddText);

this.Invoke(d, newobject[] { text });

}

else

{

TextRxMessage.Text += text;

}

}

7. Codrăspuns program

publicvoid WaitForData()

{

try

{

if (m_pfnCallBack == null)

{

m_pfnCallBack = newAsyncCallback(OnDataReceived);

}

SocketPacket theSocPkt = newSocketPacket();

theSocPkt.thisSocket = m_clientSocket;

// Start listening to the data asynchronously

m_result = m_clientSocket.BeginReceive(theSocPkt.dataBuffer,

0, theSocPkt.dataBuffer.Length,

SocketFlags.None,

m_pfnCallBack,

theSocPkt);

}

catch (SocketException se)

{

MessageBox.Show(se.Message);

}

}

publicvoid OnDataReceived(IAsyncResult asyn)

{

try

{

SocketPacket theSockId = (SocketPacket)asyn.AsyncState;

int iRx = theSockId.thisSocket.EndReceive(asyn);

char[] chars = newchar[iRx + 1];

System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();

int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);

System.String szData = new System.String(chars);

//MessageBox.Show(szData);

AddText(szData);

WaitForData();

}

catch (ObjectDisposedException)

{

//System.Diagnostics.Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n");

}

catch (SocketException se)

{

MessageBox.Show(se.Message);

}

}

privatevoid UpdateControls(bool connected)

{

buttonConnect.Enabled = !connected;

buttonDisconnect.Enabled = connected;

string connectStatus = connected ? "Connected" : "Not Connected";

//textBoxConnectStatus.Text = connectStatus;

}

8. Funcție trimitere comandă

// A generic command to send an http message. The bool returns whether the command was successful or not.

privatestring sendHttpCommand(string host, int port, string user, string pass, string path, string query)

{

string commandAttempt = "path: " + path + " query: " + query;

try

{

UriBuilder builder = newUriBuilder("http", host, port);

builder.Path = path;

builder.Query = query;

commandAttempt = builder.Uri.ToString();

//MessageBox.Show(commandAttempt);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(builder.Uri);

request.UnsafeAuthenticatedConnectionSharing = true;

request.Timeout = 5000;

request.CookieContainer = newCookieContainer();

request.Credentials = newNetworkCredential(user, pass);

request.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

HttpWebResponse response;

response = (HttpWebResponse)request.GetResponse();

Stream strm = response.GetResponseStream();

StreamReader sr = newStreamReader(strm);

string camResp = sr.ReadLine();

return camResp;

response.Close();

}

catch (Exception ex)

{

//MessageBox.Show(ex.Message);

return"Fail";

}

}

9. Funcție determinare adresă IP a calculatorului

publicString GetIP()

{

String strHostName = Dns.GetHostName();

// Find host by name

IPHostEntry iphostentry = Dns.GetHostByName(strHostName);

// Grab the first IP addresses

String IPStr = "";

foreach (IPAddress ipaddress in iphostentry.AddressList)

{

IPStr = ipaddress.ToString();

return IPStr;

}

return IPStr;

}

10. Funcție detectare fus orar

privatevoid getTZ()

{

String timeDiff;

//MessageBox.Show(TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).ToString());

timeDiff = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).ToString();

//MessageBox.Show(timeDiff);

timeDiff = timeDiff.Substring(0, timeDiff.IndexOf(":"));

//MessageBox.Show(timeDiff);

timeDiffFromGMT = int.Parse(timeDiff);

//MessageBox.Show(timeDiffFromGMT.ToString());

if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now))

{

if (timeDiffFromGMT < 0)

{

timeDiffFromGMT = timeDiffFromGMT – 1;

//MessageBox.Show(timeDiffFromGMT.ToString());

}

}

else

{

//MessageBox.Show(timeDiffFromGMT.ToString());

}

}

11. Funcție recepție răspuns calculator

publicstaticbool SetAllowUnsafeHeaderParsing20()

{

//Get the assembly that contains the internal class

Assembly aNetAssembly = Assembly.GetAssembly(typeof(System.Net.Configuration.SettingsSection));

if (aNetAssembly != null)

{

//Use the assembly in order to get the internal type for the internal class

Type aSettingsType = aNetAssembly.GetType("System.Net.Configuration.SettingsSectionInternal");

if (aSettingsType != null)

{

//Use the internal static property to get an instance of the internal settings class.

//If the static instance isn't created allready the property will create it for us.

object anInstance = aSettingsType.InvokeMember("Section",

BindingFlags.Static | BindingFlags.GetProperty | BindingFlags.NonPublic, null, null, newobject[] { });

if (anInstance != null)

{

//Locate the private bool field that tells the framework is unsafe header parsing should be allowed or not

FieldInfo aUseUnsafeHeaderParsing = aSettingsType.GetField("useUnsafeHeaderParsing", BindingFlags.NonPublic | BindingFlags.Instance);

if (aUseUnsafeHeaderParsing != null)

{

aUseUnsafeHeaderParsing.SetValue(anInstance, true);

returntrue;

}

}

}

}

returnfalse;

}

12. Funcție setare parametrii cameră

privatevoid SetupMyCameras()

{

string path;

string query;

//MessageBox.Show("The first camera IP address is " + initialFile.firstCameraIP);

//setting the root password

//http://192.168.0.11:80/axis-cgi/admin/param.cgi?action=update&System.RootPwdSet=yes

path = "/axis-cgi/admin/param.cgi";

query = string.Format("action=update&System.RootPwdSet=yes");

string success = sendHttpCommand(textBox2.Text.Substring(0, textBox2.Text.Length-2), 80, "root", "pass", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Suceeded setting the root password!");

// setting the first account

//http://192.168.0.11/axis-cgi/admin/pwdgrp.cgi?action=add&user=SecuraCorp&pwd=Elvis&grp=axuser&sgrp=axadmin:axoper:axview&comment=Elvis

path = "/axis-cgi/admin/pwdgrp.cgi";

query = "action=add&user=" + "AxisControl" + "&pwd=" + "AxisControl" + "&grp=axuser&sgrp=axadmin:axoper:axview&comment=" + "AxisControl";

//MessageBox.Show(query);

success = sendHttpCommand(AxisCamerasInTheNetworkIPs[k], 80, "root", "pass", path, query);

if (success.IndexOf("Created account " + "AxisControl") >= 0)

{

if (displayMessages)

MessageBox.Show("Succeeded setting the first camera account!");

// setting the fixed IP address of the camera

//http://192.168.1.3:80/axis-cgi/admin/param.cgi?action=update&Network.IPAddress=192.168.1.50

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Network.IPAddress=" + "192.168.1.50";

success = sendHttpCommand(textBox2.Text.Substring(0, textBox2.Text.Length – 2), 80, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded seeting the fixed IP address for this camera!");

// setting the Router IP in the camera

//http://192.168.1.3/axis-cgi/admin/param.cgi?action=update&Network.DefaultRouter=192.168.1.1

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Network.DefaultRouter=";

string pcIPaddr = GetIP();

string thirdField = pcIPaddr.Substring(0, pcIPaddr.LastIndexOf("."));

//MessageBox.Show(thirdField);

//thirdField = thirdField.Substring(thirdField.LastIndexOf(".") + 1, thirdField.Length – thirdField.LastIndexOf(".") – 1);

//MessageBox.Show(thirdField);

query = query + thirdField + ".1";

success = sendHttpCommand(AxisCamerasInTheNetworkIPs[k], 80, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded setting the router IP in the camera account!");

// setting the camera to the fixed IP

//http://192.168.1.3/axis-cgi/admin/param.cgi?action=update&Network.BootProto=none

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Network.BootProto=none";

success = sendHttpCommand(AxisCamerasInTheNetworkIPs[k], 80, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded setting the camera to a fixed IP!");

//AxisCamerasInTheNetworkIPs[k] = textBox1.Text;

//setting up the camera port – firstCamPort

//http://192.168.1.50/axis-cgi/admin/param.cgi?action=update&System.BoaPort=9000

//MessageBox.Show(firstCamPort.ToString());

path = "/axis-cgi/admin/param.cgi";

query = "action=update&System.BoaPort=" + firstCamPort.ToString();

success = sendHttpCommand("192.168.1.50", 80, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded changing the camera port!");

//enable date on the image

//http://192.168.1.50:9000/axis-cgi/admin/param.cgi?action=update&Image.I0.Text.DateEnabled=yes

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Image.I0.Text.DateEnabled=yes";

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded enabling date on the camera image");

//enable time on the image

//http://192.168.1.50:9000/axis-cgi/admin/param.cgi?action=update&Image.I0.Text.ClockEnabled=yes

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Image.I0.Text.ClockEnabled=yes";

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded enabling time on the camera image!");

// synchronize the camera date&time with this PC

path = "/axis-cgi/admin/date.cgi";

query = string.Format("action=set&year={0}&month={1}&day={2}&hour={3}&minute={4}&second={5}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded synchronizing the camera time&date!");

//set text on the camera image

//http://192.168.1.50:9000/axis-cgi/admin/param.cgi?action=update&Image.I0.Text.String=Cam

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Image.I0.Text.String=";

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded setting up the camera name!");

//display the camera name in the image

//http://192.168.1.50:9000/axis-cgi/admin/param.cgi?action=update&Image.I0.Text.TextEnabled=yes

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Image.I0.Text.TextEnabled=yes";

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded displaying the camera name!");

//set camera time-zone

//http://192.168.0.10:1940/axis-cgi/admin/param.cgi?action=update&Time.TimeZone=GMT-8

getTZ();

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Time.TimeZone=GMT" + timeDiffFromGMT;

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

MessageBox.Show(success);

}

}

else

{

MessageBox.Show("Failed displaying the camera name!");

}

}

else

{

MessageBox.Show("Failed setting up the camera name!");

}

}

else

{

MessageBox.Show("Failed synchronizing the camera time&date!");

}

}

else

{

MessageBox.Show("Failed to enable time on the camera image!");

}

}

else

{

MessageBox.Show("Failed to enable date on the camera image!");

}

}

else

{

MessageBox.Show("Failed to se the camera port!");

}

}

else

{

MessageBox.Show("Failed to set camera to a fixed IP!");

}

}

else

{

MessageBox.Show("Failed to se the Router IP in camera account!");

}

}

else

{

MessageBox.Show("Failed to set the fixed IP address for this camera!");

}

}

else

{

MessageBox.Show("Failed to create the new account!");

}

}

else

{

MessageBox.Show("Failed to set up the root password!");

}

}

Bibliografie

Axelson, J., USB Complete, Iunie 2009, ISBN 978-1931448086,

Axelson J., Port Serial Complete, Decembrie 2007, ISBN 978-1931448-06-2,

Blum R., – C# Network Programming, Sybex, 2003, ISBN 0-7821-4176-5,

Jamsa K, Jamsa’s C/C++/C# Programmer’s Bible, 2nd ed., Onword Press, 2002, ISBN 0-76684682-2,

Kernigan B., Ritchie D. – Programming in C(1st edition),2009, ISBN 0-13-110163-3,

Kernigan B., Ritchie D. – Programming in C(2nd edition),2010, ISBN 0-13-110362-8,

Muench C., – The Windows CE Technology Tutorial, Addison-Wesley 2000, ISBN 0-201-61642-4,

Ioan Rareș Stanciu, Florin Molnar-Matei – Sisteme de monitorizare și control în timp real, 2013, ISBN 978-606-569-542-9,

Tutorials from Boondog website – www.boondog.com

Fig. 1.1 – http://smarthomeenergy.co.uk/sites/smarthomeenergy.co.uk/files/images/smart-home_0.jpg,

Addison-Wesley Professional,TCP/IP Illustrated Volume 1, 1993 , ISBN 978-0201633467,

Charles M. Kozierok, The TCP/IP Guide Ș A Comprehensive, Illustrated Internet Protocols Referance, 2005, ISBN 978-1593270476,

O’Reilly Media, C# 5.0, 2012, ISBN 978-1449320104,

Manning Publications, C# 5.0 3rd Edition, 2013, ISBN 978-1617291340,

Microsoft Press, Microsoft Visual C# 1st Edition, 2013, ISBN 978-0735681835,

Microsoft Press, Microsoft Visual Basic 6.0 1st Edition, 1999, ISBN 978-0735605589,

Butterworth-Heinemann, Digital Video Surbeillance and Security, 2010, ISBN 978-1856177474,

Alexandr Lytkin, IP Video Surveillance – An Essential Guide, 2012, ISBN 978-5600000339,

Constantin Calinoiu, Senzori si Traductoare vol I, 2009, ISBN 978-973-31-2347-7,

Neeli Prasad, Anand Prasad, WLAN Szstems &Wireless IP for Next Generation Communications, 2002, ISBN 978-1580532907

Pejman Roshan, Jonathan Leary, 802.11 Wireless LAN Fundamentals, 2010, ISBN 978-1587142246,

Rick Leinecker, Vanessa L. Williams, Visual Studio 2008 All-In-One Desk Reference, 2008, ISBN 978-0470191088.

Bruce Hallberg, Networking: A Beginner’s Guide (6th Edition), 2014, ISBN 978-0071812245

Anexe :

1.Codul pentru butonul Connect

// See if we have text on the IP and Port text fields

if (textBoxIP.Text == "" || textBoxPort.Text == "")

{

MessageBox.Show("IP Address and Port Number are required to connect to the Server\n");

return;

}

try

{

UpdateControls(false);

// Create the socket instance

m_clientSocket = newSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

// Cet the remote IP address

IPAddress ip = IPAddress.Parse(textBoxIP.Text);

int iPortNo = System.Convert.ToInt16(textBoxPort.Text);

// Create the end point

IPEndPoint ipEnd = newIPEndPoint(ip, iPortNo);

// Connect to the remote host

m_clientSocket.Connect(ipEnd);

if (m_clientSocket.Connected)

{

UpdateControls(true);

//Wait for data asynchronously

WaitForData();

}

}

catch (SocketException se)

{

string str;

str = "\nConnection failed, is the server running?\n" + se.Message;

MessageBox.Show(str);

UpdateControls(false);

}

2.Codul pentru butonulDisconnect

if (m_clientSocket != null)

{

m_clientSocket.Close();

m_clientSocket = null;

UpdateControls(false);

}

3. Codul pentru butonulSend

try

{

Object objData = TextTxMessage.Text;

byte[] byData = System.Text.Encoding.ASCII.GetBytes(objData.ToString());

if (m_clientSocket != null)

{

m_clientSocket.Send(byData);

}

}

catch (SocketException se)

{

MessageBox.Show(se.Message);

}

4. Codul pentru butonulClose

if (m_clientSocket != null)

{

m_clientSocket.Close();

m_clientSocket = null;

}

Close();

5. Clasa SocketPacket

publicclassSocketPacket

{

public System.Net.Sockets.Socket thisSocket;

publicbyte[] dataBuffer = newbyte[1];

}

6. Funcția de tip delegate

Codul se poate vedea mai jos:

privatevoid AddText(string text)

{

if (this.TextRxMessage.InvokeRequired)

{

AddTextCallback d = newAddTextCallback(AddText);

this.Invoke(d, newobject[] { text });

}

else

{

TextRxMessage.Text += text;

}

}

7. Codrăspuns program

publicvoid WaitForData()

{

try

{

if (m_pfnCallBack == null)

{

m_pfnCallBack = newAsyncCallback(OnDataReceived);

}

SocketPacket theSocPkt = newSocketPacket();

theSocPkt.thisSocket = m_clientSocket;

// Start listening to the data asynchronously

m_result = m_clientSocket.BeginReceive(theSocPkt.dataBuffer,

0, theSocPkt.dataBuffer.Length,

SocketFlags.None,

m_pfnCallBack,

theSocPkt);

}

catch (SocketException se)

{

MessageBox.Show(se.Message);

}

}

publicvoid OnDataReceived(IAsyncResult asyn)

{

try

{

SocketPacket theSockId = (SocketPacket)asyn.AsyncState;

int iRx = theSockId.thisSocket.EndReceive(asyn);

char[] chars = newchar[iRx + 1];

System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();

int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);

System.String szData = new System.String(chars);

//MessageBox.Show(szData);

AddText(szData);

WaitForData();

}

catch (ObjectDisposedException)

{

//System.Diagnostics.Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n");

}

catch (SocketException se)

{

MessageBox.Show(se.Message);

}

}

privatevoid UpdateControls(bool connected)

{

buttonConnect.Enabled = !connected;

buttonDisconnect.Enabled = connected;

string connectStatus = connected ? "Connected" : "Not Connected";

//textBoxConnectStatus.Text = connectStatus;

}

8. Funcție trimitere comandă

// A generic command to send an http message. The bool returns whether the command was successful or not.

privatestring sendHttpCommand(string host, int port, string user, string pass, string path, string query)

{

string commandAttempt = "path: " + path + " query: " + query;

try

{

UriBuilder builder = newUriBuilder("http", host, port);

builder.Path = path;

builder.Query = query;

commandAttempt = builder.Uri.ToString();

//MessageBox.Show(commandAttempt);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(builder.Uri);

request.UnsafeAuthenticatedConnectionSharing = true;

request.Timeout = 5000;

request.CookieContainer = newCookieContainer();

request.Credentials = newNetworkCredential(user, pass);

request.ImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

HttpWebResponse response;

response = (HttpWebResponse)request.GetResponse();

Stream strm = response.GetResponseStream();

StreamReader sr = newStreamReader(strm);

string camResp = sr.ReadLine();

return camResp;

response.Close();

}

catch (Exception ex)

{

//MessageBox.Show(ex.Message);

return"Fail";

}

}

9. Funcție determinare adresă IP a calculatorului

publicString GetIP()

{

String strHostName = Dns.GetHostName();

// Find host by name

IPHostEntry iphostentry = Dns.GetHostByName(strHostName);

// Grab the first IP addresses

String IPStr = "";

foreach (IPAddress ipaddress in iphostentry.AddressList)

{

IPStr = ipaddress.ToString();

return IPStr;

}

return IPStr;

}

10. Funcție detectare fus orar

privatevoid getTZ()

{

String timeDiff;

//MessageBox.Show(TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).ToString());

timeDiff = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).ToString();

//MessageBox.Show(timeDiff);

timeDiff = timeDiff.Substring(0, timeDiff.IndexOf(":"));

//MessageBox.Show(timeDiff);

timeDiffFromGMT = int.Parse(timeDiff);

//MessageBox.Show(timeDiffFromGMT.ToString());

if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now))

{

if (timeDiffFromGMT < 0)

{

timeDiffFromGMT = timeDiffFromGMT – 1;

//MessageBox.Show(timeDiffFromGMT.ToString());

}

}

else

{

//MessageBox.Show(timeDiffFromGMT.ToString());

}

}

11. Funcție recepție răspuns calculator

publicstaticbool SetAllowUnsafeHeaderParsing20()

{

//Get the assembly that contains the internal class

Assembly aNetAssembly = Assembly.GetAssembly(typeof(System.Net.Configuration.SettingsSection));

if (aNetAssembly != null)

{

//Use the assembly in order to get the internal type for the internal class

Type aSettingsType = aNetAssembly.GetType("System.Net.Configuration.SettingsSectionInternal");

if (aSettingsType != null)

{

//Use the internal static property to get an instance of the internal settings class.

//If the static instance isn't created allready the property will create it for us.

object anInstance = aSettingsType.InvokeMember("Section",

BindingFlags.Static | BindingFlags.GetProperty | BindingFlags.NonPublic, null, null, newobject[] { });

if (anInstance != null)

{

//Locate the private bool field that tells the framework is unsafe header parsing should be allowed or not

FieldInfo aUseUnsafeHeaderParsing = aSettingsType.GetField("useUnsafeHeaderParsing", BindingFlags.NonPublic | BindingFlags.Instance);

if (aUseUnsafeHeaderParsing != null)

{

aUseUnsafeHeaderParsing.SetValue(anInstance, true);

returntrue;

}

}

}

}

returnfalse;

}

12. Funcție setare parametrii cameră

privatevoid SetupMyCameras()

{

string path;

string query;

//MessageBox.Show("The first camera IP address is " + initialFile.firstCameraIP);

//setting the root password

//http://192.168.0.11:80/axis-cgi/admin/param.cgi?action=update&System.RootPwdSet=yes

path = "/axis-cgi/admin/param.cgi";

query = string.Format("action=update&System.RootPwdSet=yes");

string success = sendHttpCommand(textBox2.Text.Substring(0, textBox2.Text.Length-2), 80, "root", "pass", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Suceeded setting the root password!");

// setting the first account

//http://192.168.0.11/axis-cgi/admin/pwdgrp.cgi?action=add&user=SecuraCorp&pwd=Elvis&grp=axuser&sgrp=axadmin:axoper:axview&comment=Elvis

path = "/axis-cgi/admin/pwdgrp.cgi";

query = "action=add&user=" + "AxisControl" + "&pwd=" + "AxisControl" + "&grp=axuser&sgrp=axadmin:axoper:axview&comment=" + "AxisControl";

//MessageBox.Show(query);

success = sendHttpCommand(AxisCamerasInTheNetworkIPs[k], 80, "root", "pass", path, query);

if (success.IndexOf("Created account " + "AxisControl") >= 0)

{

if (displayMessages)

MessageBox.Show("Succeeded setting the first camera account!");

// setting the fixed IP address of the camera

//http://192.168.1.3:80/axis-cgi/admin/param.cgi?action=update&Network.IPAddress=192.168.1.50

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Network.IPAddress=" + "192.168.1.50";

success = sendHttpCommand(textBox2.Text.Substring(0, textBox2.Text.Length – 2), 80, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded seeting the fixed IP address for this camera!");

// setting the Router IP in the camera

//http://192.168.1.3/axis-cgi/admin/param.cgi?action=update&Network.DefaultRouter=192.168.1.1

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Network.DefaultRouter=";

string pcIPaddr = GetIP();

string thirdField = pcIPaddr.Substring(0, pcIPaddr.LastIndexOf("."));

//MessageBox.Show(thirdField);

//thirdField = thirdField.Substring(thirdField.LastIndexOf(".") + 1, thirdField.Length – thirdField.LastIndexOf(".") – 1);

//MessageBox.Show(thirdField);

query = query + thirdField + ".1";

success = sendHttpCommand(AxisCamerasInTheNetworkIPs[k], 80, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded setting the router IP in the camera account!");

// setting the camera to the fixed IP

//http://192.168.1.3/axis-cgi/admin/param.cgi?action=update&Network.BootProto=none

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Network.BootProto=none";

success = sendHttpCommand(AxisCamerasInTheNetworkIPs[k], 80, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded setting the camera to a fixed IP!");

//AxisCamerasInTheNetworkIPs[k] = textBox1.Text;

//setting up the camera port – firstCamPort

//http://192.168.1.50/axis-cgi/admin/param.cgi?action=update&System.BoaPort=9000

//MessageBox.Show(firstCamPort.ToString());

path = "/axis-cgi/admin/param.cgi";

query = "action=update&System.BoaPort=" + firstCamPort.ToString();

success = sendHttpCommand("192.168.1.50", 80, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded changing the camera port!");

//enable date on the image

//http://192.168.1.50:9000/axis-cgi/admin/param.cgi?action=update&Image.I0.Text.DateEnabled=yes

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Image.I0.Text.DateEnabled=yes";

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded enabling date on the camera image");

//enable time on the image

//http://192.168.1.50:9000/axis-cgi/admin/param.cgi?action=update&Image.I0.Text.ClockEnabled=yes

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Image.I0.Text.ClockEnabled=yes";

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded enabling time on the camera image!");

// synchronize the camera date&time with this PC

path = "/axis-cgi/admin/date.cgi";

query = string.Format("action=set&year={0}&month={1}&day={2}&hour={3}&minute={4}&second={5}", DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded synchronizing the camera time&date!");

//set text on the camera image

//http://192.168.1.50:9000/axis-cgi/admin/param.cgi?action=update&Image.I0.Text.String=Cam

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Image.I0.Text.String=";

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded setting up the camera name!");

//display the camera name in the image

//http://192.168.1.50:9000/axis-cgi/admin/param.cgi?action=update&Image.I0.Text.TextEnabled=yes

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Image.I0.Text.TextEnabled=yes";

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

if (displayMessages)

MessageBox.Show("Succeeded displaying the camera name!");

//set camera time-zone

//http://192.168.0.10:1940/axis-cgi/admin/param.cgi?action=update&Time.TimeZone=GMT-8

getTZ();

path = "/axis-cgi/admin/param.cgi";

query = "action=update&Time.TimeZone=GMT" + timeDiffFromGMT;

success = sendHttpCommand("192.168.1.50", firstCamPort, "AxisControl", "AxisControl", path, query);

if (success == "OK")

{

MessageBox.Show(success);

}

}

else

{

MessageBox.Show("Failed displaying the camera name!");

}

}

else

{

MessageBox.Show("Failed setting up the camera name!");

}

}

else

{

MessageBox.Show("Failed synchronizing the camera time&date!");

}

}

else

{

MessageBox.Show("Failed to enable time on the camera image!");

}

}

else

{

MessageBox.Show("Failed to enable date on the camera image!");

}

}

else

{

MessageBox.Show("Failed to se the camera port!");

}

}

else

{

MessageBox.Show("Failed to set camera to a fixed IP!");

}

}

else

{

MessageBox.Show("Failed to se the Router IP in camera account!");

}

}

else

{

MessageBox.Show("Failed to set the fixed IP address for this camera!");

}

}

else

{

MessageBox.Show("Failed to create the new account!");

}

}

else

{

MessageBox.Show("Failed to set up the root password!");

}

}

Similar Posts

  • Consumul de Biocombustibil In U.e

    Există argumente conform cărora durabilitatea și capitalismul – cel puțin în forma sa actuală – sunt incompatibile în ceea ce privește obiectivele și principiile care le conduc. În best-seller-nl său celebru, „ Die Kunst des Liebens" („Aria de a iubi") din anul 1956, specialistul în socio-psihologie, Erich Fromm, dădea următorul diagnostic: „Capitalismul modern are nevoie…

  • Aplicatie Pentru Gestiunea Unei Case de Pariuri

    Cuprins Introducere In aceasta lucrare de licența voi prezenta o aplicație pentru gestiunea unei case de pariuri. Dar ce sunt pariurile sportive? Pariurile sportive reprezintă activitatea de a prezice rezultatele dintr-un eveniment sportiv si pe care se pariază o anumita miza pe deznodământul acelui eveniment. Pariuri exista in toate sporturile: fotbal, baschet, handbal, rugby dar…

  • Proiectarea Unui Suport Special CU Role

    CUPRINS CAPITOLUL 1 PREZENTAREA „SUPORTULUI SPECIAL CU ROLE”. …………………………………………………………….3 1.1. Schema de principiu. …………………………………………………………3 1.2 Funcționarea „Suportului special cu role”. ………………………………….5 CAPITOLUL 2 TEHNOLOGIA DE EXECUȚIE A PIESEI ,, ȘURUB TRAPEZOIDAL’’. ………………………………………………………7 2.1. Analiza tehnologică a piesei. …………………………………………………10 2.2. Stabilirea tipului de producție și a lotului optim. ………………………………………………………………………11 2.3. Alegerea semifabricatului. …………………………………………………13 2.4. Itinerariul tehnologic…

  • Integrale Curbilinii

    CUPRINS Introducere Cap.I: Integrale curbilinii. §1.  Drum, drum rectificabil, curbă. §2.  Integrale curbilinii de primul tip. 2.1. Integrala curbilinie de primul tip. 2.2. Reducerea la o Integrală Definită Obișnuită 2.3. Proprietățile integralelor curbilinii §3. Integrale curbilinii de al doilea tip. 3.1. Integrale curbilinii de al doilea tip. 3.2. Formula de calcul a integralei curbilinii de…

  • Levitaţia Magnetica

    Suspensia magnetică, Maglev, sau Levitația magnetică, este o metodă prin care un obiect este suspendat cu câmpuri magnetice de suport. Forța magnetică este folosită pentru a contracara efectele accelerației gravitaționale și orice alte accelerații. Levitația magnetica a evoluat din considerente importante în proiectarea sistemelor care necesită pierderi reduse datorate frecării și a unui consum redus…