Sari la conținut
ELFORUM - Forumul electronistilor

HAP.js (Home Automation Project)


godFather89

Postări Recomandate

Salutari,

 

Va prezint un proiect de "home automation". Este scris complet in node.js (javascript) conceput pentru a rula pe un Raspberry Pi.

Interactiunea cu mediul inconjurator se face prin module bazate pe ESP8266 (ESP-03 folosesc eu). Teoretic se pot face plugin-uri pentru orice alt tip de interactiune.

 

Pana acum am creat 3 tipuri de module:

1. generic: nu stie nimic dar e baza pentru restul tipurilor;

2. temperatura: citeste un senzor de temperatura I2C si trimite valoarea periodic <<la 10s>> catre server;

3. IR: poate citi/reproduce coduri de la telecomenzi (NEC si SAMSUNG sunt momentan suportate).

Mai sunt nevoie de noduri ce pot citi intrari si modifica iesiri (pentru intrerupatoare, lumini, etc.)

 

Exista si un modul pentru a crea interfata web pentru interactiunea cu utilizatorul.

Regulile de interactiuni intre module se pot defini momentan doar in script-uri js. Pe viitor voi face un modul in care se vor defini reguli simple prin interfata web gen IFTTT.

 

Codul pentru server-ul proiectului e aici https://github.com/godFather89/HAP.js

Codul modulelor ESP8266 nu e inca publicat dar il voi pune pe github in curand.

 

Si un mic clip demo pentru modulul IR si interfata web:

https://www.youtube.com/watch?v=8ku1HAMl4tU

 

Pareri, comentarii, sugestii, opinii?

Link spre comentariu
  • Răspunsuri 9
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • godFather89

    7

  • MaxSteel

    1

  • unuldinei

    1

  • rlodina

    1

Top autori în acest subiect

Buna.

 

Multumim de sharing - ideea mi se pare beton  - nu m-am uitat f. mult peste surse ca sa inteleg mai multe legate de arhitectura (i-mi place ideea cu acele plugin-uri) . Consider proiectul extrem de interesant si promitator - mai ales IFTTT  (am vazut, dar nu mai tin minte unde, o interfata grafica "de ansamblare" - conectare a unor module (era vorba despre un document management sistem ) bazat pe acest  concept de IfThen si am ramas extrem de impresionant de cat de simplu concepeai un flow de urmarire/procesare, etc. doc).

 

Si acum ceva constructiv:

 

1. Pentru instalarea dependintelor: 

 - foloseste  package.json: unde se pune descrierea si dependintele. npm init - te ajuta la crearea lui (daca ai deja instalate dependintele le completeaza automat in package.json).

  Astfel cu un simplu npm install i-mi sunt instalate toate dependintele.

 

2. Nu toate dependintele sunt cuprinse in Readme:

npm install compression dot esprima express express-session nodemon socket.io passport passport-local body-parser

lipsesc modulele: ip si agentkeepalive (sqlite3?)   (npm install ip -save  -> install + save in package.json in sectiunea dependencies). Pana la urma a pornit (pe portul 1234).

 

3. Cand (si daca) o sa ai timp o schima bloc a arhitecturii ar face proiectul mai accesibil.

 

Astept cu nerabdare urmatoarea ta posare:

  - sunt extrem de curios cum tratezi device-urile ( ModeMCU ? )

  - nu am inteles (la o prima lectura) cum functioneaza acel discovery node.

  - cred ca ar trebui sa ai o separatie extrem de clara intre concepte (aici i-mi dau si eu cu parearea):

         A . Core - cam tot ce inseamna engine, rules, etc. 

         B. un API bazat pe REST  (am vazut ceva pe portul 5111) 

         C. o interfata care se exploateze pct. B (portul 1234 ?)

 

Oricum un mare plus (cred eu) pt. ca:

     1. se vede o arhitectura - si asta-i marele castig 

     2. node + realtime-ul bidirectional (socket.io) care-ti ofera cateva atuuri 

 

Succes

Radu

Link spre comentariu

1. Mersi. Inca invat despre npm/node.js/javascript. Stiam ca poti face un descriptor al aplicatiei dar nu stiam exact cum si am zis ca nu e suficient de important deocamdata. Voi pune in aplicare.

2. Da, nu l-am mai actualizat demult. Pana la urma nu asta e scopul Readme-ului.

3. Documentatie + unit teste sunt necesare. Momentan prefer sa il dezvolt pana la un nivel la care sa il pot integra in apartament pentru teste extinse.

 

-device-urile sunt programate nativ in C. Am incercat NodeMCU dar mi se pare prea slab momentan (reset-uri neasteptate, heap-ul se tot umple dupa fiecare request si nu mai e golit... altca cauza de reset neasteptata).

-discovery-ul functioneaza in felul urmator: server-ul HAP trimite (periodic, la 10 sec) un broadcast udp pe portul 5112 la care fiecare device raspunde cu id-ul, numele si tipul. Server-ul, pe baza raspunsului, creaza obiectele specifice, declanseaza evenimentele, etc.

-api-ul REST pe portul 5111 e folosit pentru comunicare nod->serverHAP (notificari de la device-uri). Comunicarea serverHap->nod se face pe portul 80.

-interfata cu utilizatorul e intr-adevar pe portul 1234 (in mod implicit). Poate are fi mai intuitiv pe portul 80.

 

socket.io e folosit pentru uodate-uri in timp real catre interfata cu utilizatorul.

 

Am sa incerc sa urc si sursele pentru ESP8266.

 

LE: Multumesc mult pentru feedback!

Editat de godFather89
Link spre comentariu
  • 3 luni mai târziu...

IoT..e  domle.. foarte tare proiectul, sper ca l-ai dezvoltat intre timp. Totusi ceva n-am priceput ... de ce folosesti un esp8266 in loc de un ralink wifi pe usb ?

- asta cu IR e foarte buna , ar trebui sa aiba si modul de invatare (am 4 telecomenzi deja in camera - TV, STB,DVD si aer conditionat);

-Momentan ma chinui si eu cu un esp8266 si cu atmega  totul in C , il conectez aprind/ sting becuri dar cam adoarme si trebuie resetat .. 

-poti folosi multiplexoare pentru a extinde portul rapsberry-ului CD74HC4067 e cu 1:16 si merge si analog si digital ;

-o sa am niste intrebari despre comunicarea webserver si pagina web pentru ca nu ma incanta tehnica asta de bootstrap ;

Link spre comentariu

Mersi! Apreciez orice fel de feedback.

 

ESP8266 nu e conectat la PC (cel putin, nu prin USB/ serial). Cablul din clip e doar pentru alimentare. ESP-ul are conectat la el un led IR si un receiver IR pe care le conecteaza la wireless. In felul asta, o aplicatie (in cazul asta, HAP) poate citi/transmite coduri IR prin request-uri web (mai nou, mesaje MQTT). E un modul de sine statator care se conecteaza la o retea wireless si poate primi/trimite mesaje (coduri IR).

 

Are si mod de invatare. De fapt, ESP-ul e foarte prost, trimite trenul de impulsuri asa cum l-a citit el, nu incearca sa il descifreze. HAP-ul se ocupa de decodificare (la primire) si codificare (la trimitere) a codurilor. Deocamdata stie doar NEC dar in principiu poate fi invatat orice. Partea buna e ca codul de pe ESP e relativ simplu iar complexitatea se muta acolo unde e putere de calcul (PC/RPi/ThinClient).

 

Idea e ca nu vreau sa am multe RPi-uri (cost/dimensiune/consum) si nici fire prin casa. Modulele ESP sunt suficient de ieftine si mici incat sa pui cate unul oriunde ai nevoie sa citesti/modifici un pin. Vrei sa poti aprinde becul automatizat? Un mic modul pus in intrerupator se ocupa de asta. Vrei sa poti porni lampa de pe birou? Un mic modul intr-o priza. Vrei sa citesti/trimiti coduri IR? Un mic modul pus langa TV. Temperatura? Cate un modul separat in fiecare camera. etc.

 

L-am mai dezvoltat dar momentan am cam ramas fara timp si urmeaza si concediul, mutatul. Sper ca prin toamna sa ma pot ocupa serios...

 

Am deja 20 buc. ESP-03, senzori de prezenta, temperatura, IR, cam tot ce trebuie pentru un home automation light-weight.

Am studiat si multe sisteme dezvoltate open-source dar fie sunt mult prea complexe, fie mult prea banale si cam nici unul nu e tocmai ce as vrea eu. OpenHab 2 se apropie destul de mult.

Link spre comentariu

Sistemul va functiona in felul urmator:

 

-o multitudine de module (in principiu ESP8266, dar nu obligatoriu) vor interactiona cu serverul. 

-acestea vor fi senzori (temperatura/umiditate/prezenta/etc.), butoane (intrerupatoare?), relee, dimmere, etc.

-modulele (si nu numai) vor fi agregate sub forma de dispozitive virtuale;

-serverul va avea o interfata web din care:

1. se vor putea comanda direct dispozitivele virtuale

2. se vor putea genera reguli (intr-o interfata gen Scratch: https://scratch.mit.edu/) in care dispozitivele comunica unele intre altele (gen: "cand e seara si senzorul de prezenta detecteaza prezenta, aprinde lumina de veghe" - prin conectarea diferitor blocuri)

 

Dispozitve virtuale pot fi si un server de mail prin care se vor putea trimite notificari sau un gateway sms. Sau un client pentru un server MPD folosit pentru a schimba melodia, play/pause sau pentru a cere informatii despre melodia curenta, etc.

 

Evident, sistemul va putea fi usor extins, astfel se vor putea adauga noi tipuri de dispozitive adaugand un plugin nou.

Editat de godFather89
Link spre comentariu
  • 2 luni mai târziu...

Am facut rost de foarte putin timp si m-am reapucat de joaca.

Pana la urma logica va fi controlata de un server node-red (http://nodered.org/). Interfata web va fi generata pe baza unui xml cu componente generice care va comunica prin websockets cu node-red. Aplicatia web este bazata pe angular-material. Modulele vor comunica cu serverul prin MQTT.

Proiectul se redenumeste in HAP.red (https://github.com/andrei-tatar/HAP.red).

Link spre comentariu
  • 6 luni mai târziu...

Salut!

 

1) Ce surse de alimentare folosesti pentru alimentarea ESP8266-urilor?

2) Cum interfatezi ESP-ul la reteaua de 220V, respectiv consumator (releu, diac, triac... )?

 

Multumesc mult!

Link spre comentariu
  • 1 an mai târziu...

A trecut ceva timp dar...

- ESP8266 erau alimentate cu surse de telefon + regulator liniar 3.3V

- interfata ESP cu reteaua era prin releu.

 

Proiectul HAP.js s-a transformat in node-red-contrib-ui care pana la urma a devenit nore-red-dashboard. E practic o intefata UI pentru node-red. E okish, dar ar avea nevoie de o rescriere (la fel ca si node-red).

Am renuntat la ESP8266 in unele locuri. De exemplu intrerupatoarele cu dimmer le-am trecut pe NRF24L01 (din cauza consumului redus) pe care ulterior le-am trecut pe RFM69 pe 433 MHz (din cauza razei mici a NRF24L01). La fel si senzorii de temp/prezenta/umiditate/lumina. Toti sunt cu RFM69.

ESP8266 folosesc pentru IR bridge. De fapt il folosesc doar ca punte WiFi - serial (telnet).

 

Pana acum, sistemul meu e compus din:

-intrerupatoare cu dimmer in tot apartamentul (9 intrerupatoare, RFM69)

-senzori de prezenta/temperatura/umiditate/lumina - pana acum 2 pe holuri - daca detecteaza prezenta si lumina e scazuta, se aprind luminile (noaptea mai putin decat ziua)

-server MPD pentru muzica

-bridge IR in living - permite controlul luminii/muzicii cu telecomanda TV si a aerului conditionat

 

ce urmeaza:

-senzori de prezenta/temperatura/umiditate - in fiecare incapere

-actuatoare individuale la fiecare calorifer (baterie + RFM69) care impreuna cu senzorii de temperatura din fiecare camera, permit reglarea temperaturii in fiecare camera individual + oprirea/pornirea centralei

-integrarea a amplificatorului in sistem - pornire/oprire automata, schimbare canal (ar merge cu bridge-ul IR dar vreau si feedback).

 

-altele...

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări