Pages: 1 2 [3] 4 5 ... 9   Go Down
Author Topic: Souliss, Domotica e IoT basata su Arduino ed Android  (Read 20444 times)
0 Members and 1 Guest are viewing this topic.
Napoli
Offline Offline
Sr. Member
****
Karma: 5
Posts: 349
Post fata resurgo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

innanzitutto complimenti per il lavoro.

Io, come molti altri facenti parte della categoria "poveri", abbiamo comprato la ethernet shield appositamente prodotta per noi, quella con chip non wiz, questa http://www.nuelectronics.com/estore/index.php?main_page=project_eth

e' molto famosa in quanto costa poco. e' supportata dal tuo progetto ? oppure se hai interesse nel supportarla potrei fare da test.
Un'altro punto a suo favore e' che e' costruibile con integrati DIP (ENC28J60), quindi ottimo per standalone, mentre con il wiz non e' possibile

Ciao Testato,

in linea generale è possibile aggiungere altro hardware senza dover modificare nulla nel codice, è sufficiente predisporre la libreria dell'integrato da supportare per il funzionamento il P2P e fornire dei metodi per interfacciarlo con lo "strato" superiore di vNet.

Non conosco l'ENC28J60, ma guardando velocemente il riassuntivo del datasheet trovo: "Integrated MAC and 10BASE-T PHY". Ciò significa che non c'è il supporto in hardware del IP e TCP/UDP, è corretto?

In passato lessi di librerie specifiche per tale chip, se l'implementazione dello stack IP non ruba troppo spazio (RAM/FLASH) può essere considerata come una possibile integrazione futura. Un aspetto fondamentale è nel non gravare eccessivamente sul 328, ad esempio per la gestione dei ACK e delle connessioni.

In linea di principio, si potrebbe anche fare a meno di IP e protocolli annessi, lavorando direttamente con a livello MAC (il chip a 2.4 Ghz di Chibiduino implementa anchesso solo i livelli MAC a PHY), ma si perderebbero alcune facilitazioni come ad esempio HTTP (che richiede TCP).
Logged

Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

Napoli
Offline Offline
Sr. Member
****
Karma: 5
Posts: 349
Post fata resurgo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Economica? Consuma poco ? Mah ... Ho realizzato un modulo rete con cirrius C8900 che consuma 1/10 di quell'accrocchio pagando il chip solo $6. Il problema e' che C8900 non e' spi ma necessita di essere memory mapped.

Vaseo, vorrei dei chiarimenti sulle modifiche introdotte al protocollo modbus, cosa e perche'.

Il protocollo Modbus è basato sul concetto Master/Slave, MaCaco è un protocollo P2P con funzionalità di sottoscrizione dei dati. Per il resto i concetti sono analoghi, ma l'implementazione è semplificata in varie parti.

Se hai qualche curiosità in particolare, ne possiamo parlare.

Saluti,
Dario.
Logged

Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

Napoli
Offline Offline
Sr. Member
****
Karma: 5
Posts: 349
Post fata resurgo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vaseo ho provato a dare un'occhiata ma no  ci ho capito na sega! Io ho già un impianto Arduino Based co Ethernet shield, collegati tramite Switch PoE.

Non riesco a comprendere come potrei usare il tuo software.

Essendo un Tecnico elettronico più che un Softwerista, saresti in grado di fornirmi uno schema elettrico e come implementare il tuo software dentro gli Arduino?

Thanks

Dipende da cosa ti serve fare. Relativamente agli schemi elettrici non c'è nulla di speciale, sono digital input o output (niente triac fatti a mano) qualche optoisolatore e darlington risolvono i problemi. La parte software è corredata di esempi funzionanti che possono essere usati come base.

Se vuoi possiamo discutere delle tue necessità e capire cosa possa risultarti utile del codice di Souliss, ma ti chiedo di aprire un Topic a parte, non vorrei uscire troppo fuori tema all'interno di questo spazio.

Saluti,
Dario.
Logged

Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

Offline Offline
God Member
*****
Karma: 5
Posts: 873
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non conosco l'ENC28J60, ma guardando velocemente il riassuntivo del datasheet trovo: "Integrated MAC and 10BASE-T PHY". Ciò significa che non c'è il supporto in hardware del IP e TCP/UDP, è corretto?

In passato lessi di librerie specifiche per tale chip, se l'implementazione dello stack IP non ruba troppo spazio (RAM/FLASH) può essere considerata come una possibile integrazione futura. Un aspetto fondamentale è nel non gravare eccessivamente sul 328, ad esempio per la gestione dei ACK e delle connessioni.

Correttissimo

(@testato)
Eccoti spiegato  perche' hanno scelto il Wiz su arduino. A me non piace nemmeno un po', e preferisco non avere lo stack tcp/ip ma un semplice udp/ip piuttosto che avere supporto hw.


Edit:
@Testato
Nelle avrlib c'e' un driver di basso livello per ENC po si fa riferimento ad uno stack tcp/ip esterno semplificato. Io l'ho integrato sul mio nodo domotico dove faccio uso di L2148 (un arm con 32Kbyte di ram, 2Kbyte dedicati alle varie amenita' di rete).
« Last Edit: January 07, 2012, 03:48:51 pm by legacy » Logged

Offline Offline
God Member
*****
Karma: 5
Posts: 873
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il protocollo Modbus è basato sul concetto Master/Slave, MaCaco è un protocollo P2P con funzionalità di sottoscrizione dei dati. Per il resto i concetti sono analoghi, ma l'implementazione è semplificata in varie parti. Se hai qualche curiosità in particolare, ne possiamo parlare.

Cosa intendi per sottoscrizione dei dati ? In che parti hai semplificato modbus?
Nella mia rete ho vari slave modbus che se interrogati accedono ai propri database o ai propri sensori e riportano al master quanto questo chiedo loro. Il tutto sftuttado la single regiser function code e la multi register function code. Ho 4 funzioni per fare tutto.
Logged

0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5608
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

yes
allego lo  schema a blocchi.

Attualmente le applicazioni che ho trovato, (vedi il link che ho messo dello shield) non implementano il TCP/IP completo
Quindi si potrebbe decidere se provare a scriverlo (o trovarlo se magari e' stato fatto), oppure lavorar su mac, oppure la terza strada, quella appunto del link mio:
--------
" instead of implementing full TCP protocl, a single data packet TCP protocol is used. You webpage contents, including all html tags, must be in one packet. The length of packet is limited by the SRAM size, currently half of the RAM space (500 bytes) is used for network Packet buffer. It is sufficient for simple webpages as shown below."
--------
« Last Edit: January 07, 2012, 03:47:52 pm by Testato » Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Offline Offline
God Member
*****
Karma: 5
Posts: 873
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Io dico che lo stack tcp/ip completo non serve. Anzi volendo non serve nemmeno tcp/ip. Io uso solo udp/ip.
Logged

Napoli
Offline Offline
Sr. Member
****
Karma: 5
Posts: 349
Post fata resurgo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Cosa intendi per sottoscrizione dei dati ? In che parti hai semplificato modbus?
Nella mia rete ho vari slave modbus che se interrogati accedono ai propri database o ai propri sensori e riportano al master quanto questo chiedo loro. Il tutto sftuttado la single regiser function code e la multi register function code. Ho 4 funzioni per fare tutto.

Con MaCaco ci sono diverse modalità per ricevere e/o inviare i dati, per convenzione indico con N1 il nodo che possiede i dati:
- Sottoscrizione, il nodo ricevente N2 effettua una richiesta ad N1. Alla richiesta segue una risposta contenente i dati, a questo punto N1 invierà i dati solo se gli stessi varieranno. Il nodo sottoscrittore N2, valuta lo stato di salute del canale (un timer con valore di time-out variabile) ed eventualmente rinnova la sottoscrizione.

- Polling, il nodo ricevente N2 effettua una richiesta ad N1. Alla richiesta segue una risposta. Per avere i dati periodicamente, il nodo N2 effettua richieste continue.

- Pushing, il nodo N1 scrive nel nodo N2. L'invio dati può essere gestito da un timer (sconsigliato) o dagli eventi (i dati sono cambiati) a cura dell'utente.

La struttura del protocollo è più semplice, anche se concettualmente identica. Ad esempio, per non mantenere uno stato delle richieste, i functional code di richiesta e risposta sono diversi e legati da un fattore 0x10 (ad esempio 0x05 è la richiesta di sottoscrizione, 0x15 è la risposta) e nell'header del messaggio è contenuto il puntatore all'area dati in cui gli stessi andranno memorizzati quando giunti a destinazione.

Ulteriori semplificazioni:
- Assenza della gestione errori, se viene richiesto di scrivere dove non consentito o leggere dati non presenti, non viene notificato nulla. Semplicemente il frame viene scartato.
- Assenza di CRC, il tutto viene affidato ai CRC di livello MAC o IP in base al driver usato.

Tutto il resto è analogo, le richieste sono per gruppi di dati contigui.

Saluti,
Dario.
Logged

Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

Napoli
Offline Offline
Sr. Member
****
Karma: 5
Posts: 349
Post fata resurgo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@ Testato, @ legacy,

Il protocollo TCP/IP è necessario se poi si vuole usare HTTP per interfacce grafiche generiche, ad esempio basate su browsers. Sono d'accordo, non è necessario un TCP completo, ma dedicare 500 byte solo come buffer dati su un 328 da 2k è troppo. Inoltre a questi 500 byte vanno aggiunti quelli necessari a mantenere lo stato delle socket.

L'utilizzo diretto in vNet è fattibile, il livello MAC è più che sufficiente, ma si perde la possibilità di avere funzionalità di interfaccia semplici.

Ad esempio, l'idea iniziale per Souliss era di portare l'intero framework su diverse piattaforme. Però poi ho virato verso JSON, quindi usando HTTP come protocollo, per ridurre i tempi di implementazione di un'interfaccia veloce da costruire.

Il punto cruciale è nelle risorse necessarie, vorrei poter aggiungere al codice la possibilità di effettuare alcune configurazioni run-time e l'auto-addressing (sia per nodi Ethernet, sia per nodi Chibi) e sopratutto non voglio giungere ad una libreria che non lasci spazio all'applicazione utente.

Il motivo per cui l'interfaccia web non è caricata da SD, ma va caricata in locale dal PC è per l'eccessivo utilizzo di risorse di TinyWebServer. Ciò per dire che volendo rimanere nel target del 328, il raggio d'azione non è vasto.

Mi impegno nel valutare le librerie esistenti per integrarle in vNet, ma i tempi saranno lunghi, per ora è previsto un lungo periodo in cui il codice non verrà modificato perché mi dedicherò esclusivamente alla riscrittura della documentazione.

Saluti,
Dario.
« Last Edit: January 07, 2012, 07:14:43 pm by veseo » Logged

Souliss - Open-source Distributed Home Automation with Arduino and Android

http://www.souliss.net
Follow at @soulissteam

@veseotech

0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5608
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ottimo,
quando serve un qualsiasi test sulla versione ENC fai un fischio.
Io nel frattempo se trovo altre librerie arduiniche sul ENC28J60 le posto qui
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Offline Offline
God Member
*****
Karma: 5
Posts: 873
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ Testato, @ legacy,

Il protocollo TCP/IP è necessario se poi si vuole usare HTTP per interfacce grafiche generiche, ad esempio basate su browsers. Sono d'accordo, non è necessario un TCP completo, ma dedicare 500 byte solo come buffer dati su un 328 da 2k è troppo. Inoltre a questi 500 byte vanno aggiunti quelli necessari a mantenere lo stato delle socket.

Cosa centra l'http quando i nodi domotici fra loro non si devono certamente scambiare pagine web ma dati provenienti da sensori e comandi per azionamenti ? I mei nodi sono arduino nano e non ho affatto bisogno di tcp/ip perche' si scambiano frame in udp/ip e il server httpd gira su un nodo concetratore realizzato tramite scheda embedded linux che si preoccupa di interfacciare la rete domotica con il mondo esterno da cui un utente puo' prendere visione tramite browser.

Ma poi mica servono i socket in applicazioni embedded: non sono necessarie, servirebbero solo per mere questioni di portabilita', cosa non riechiesta ne sensata dato che bene o male per una data classe di servizio domotico (quella a bassissimo livello in questo caso)  l'hw che lo realizza e' quello che e'.

Tu fai generalizzazioni che secondo me non hanno senso pratico.
Logged

Offline Offline
God Member
*****
Karma: 5
Posts: 873
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

- Assenza della gestione errori, se viene richiesto di scrivere dove non consentito o leggere dati non presenti, non viene notificato nulla. Semplicemente il frame viene scartato.
- Assenza di CRC, il tutto viene affidato ai CRC di livello MAC o IP in base al driver usato.

Tra l'altro e se i miei nodi si scambiassero frame su seriale ? O via radio (sempre assimilabile ad una seriale) ? La tua semplificazione va bene, ma va bene solo per alcuni chip ethernet che fanno CRC in hw.

Ti faccio notare che si puo' implementare l'algoritmo del CRC modbus anche senza passare dalle tabelle, anzi lo posso anche far calcolare in modo iterattivo byte dopo byte. Computazionalmente non c'e' poi tutto questo grosso risparmio.
Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2795
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Tu fai generalizzazioni che secondo me non hanno senso pratico.
Dici smiley-eek

Comuque, io di udp, ip, tcp non ci capisco nulla, ho studiato in passato ovviamente, ma non ho mai implementato un protocollo, layer ecc. Forse però nel tuo caso hai demandato le funzionalitò http ad una periferica non prevista da veseo (quella cosa che hai detto tu con linux su, che non so cosa sia).

Io seguo, ma non ho il background per contribuire, mi manca il tempo e la volonta per dedicarmi alle problematiche di rete.

Invece capisco che se devi accendere la luce il comando lo invii solo una volta e a quello che ho capito varie logiche sono implementate in MaCaco.

Vi seguo, in silenzio.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Offline Offline
God Member
*****
Karma: 5
Posts: 873
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Forse però nel tuo caso hai demandato le funzionalitò http ad una periferica non prevista da veseo (quella cosa che hai detto tu con linux su, che non so cosa sia).

Si io ho un nodo concentratore linux e tanti nodi domotici arduino nano.

Il nodo concentratore e' una banale scheda linux come quella dei router casalinghi, p.e. fonera2 o altro openWRT, dove girano banali programmini che interfacciano la rete domotica che parla udp/ip con una serie di servizi verso il mondo esterno.
I nodi domotici parlano udp/ip su ethernet per trasportare frame modbus e lo stesso modbus su serialne. Il nodo concentratore parla invece diversi protocolli tra cui http perche' ha un server web che permette il controllo della rete da browser.

Il punto e' che Http e' un layer di presentazione a livello applicativo, ed e' roba nemmeno da router, e' roba da PC/tablette/smartphone/boh sicuramente non e' roba da nodi. I nodi non dovrebbero avere che un layer fisico con sopra il piu' semplice e leggero trasporto. Appunto UDP/IP. Tutto il resto e' compito del concentratore, quindi per me non ha alcun senso pratico, anche perche' parto dal fatto che non uso un chip di rete che mi aiuti in un qualsiasi modo sopra al layer fisico del mac. ENC non ha alcun supporto in hw e ci devi pensare tu. Siccome uso nodi arduino-nano che hanno poca ram sicuramente non la vado a consumare implementando il tcp/ip. Hai una vaga idea di quante risorse porti via ? Tanta tanta, e poi per cosa ? Per avere la funzionalita' http in un nodo domotico ? Mah ...

Non mi serve alcuna delle funzionalita' offerte dal tcp/ip se devo far parlre 2 nodi domotici, il protocollo modbus va piu' che bene e a livello fisico gli basta anche una serialina.

Ora, vero che sono partito da hw con poche risorse, ma volendo ho anche nodi L2148 (arm) con 32Kbyte e 256Kbyte di flash, e anche li ho ENC come scheda di rete, oppure la C8900. Volendo il tcp/ip in versione ridotta ce l'ho gia' pronto, testato e funzionante, ma non mi sembra sensato implementare tcp/ip apposta per avere la funzionalita' http in un nodo domotico. Cosa devono dirsi fra di loro i nodi ? Sicuramente nulla di http. Non e' necessario, cosi' come non e' necessario che venga messa in piedi tutta la pesante implacatura socket.


edit:
Se devo accendere la luce e sto usando il browser mi connetto al router linux, e questo dopo varie vicessitudini in webapplication del tuto trasparenti all'utente, che e' persino ignaro che sotto ci sia il server apache con vari CGI per indirizzare il servizio a vari applicativi scritti o in phyton o programmi in C, eppure proprio uno di questi applicativi scritti in C spedira' un pacchetto udp/ip che trasporta un comando modbus verso il nodo mini-arduino preposto all'azionamento del rele' che da corrente alla lampadina in questione. Seguira' poi conferma (altra transazione modbus) dal sensore di luce che mandera' al router conferma di "luce accesa". Contatori timer in webapplication space mi diranno timeout se non arriva l'ack dal sensore di luce entro tot tempo.

Cosi' per le tapparelle elettriche, il portone del garage, l'elettropompa della serra, ecc ecc.
Tutto semplice senza troppi giri strani.



edit2:
Puo' essere benissimo che non abbia capito il sw di Vaseo.
Se dovesse convincermi che e' davvero utile lo porto sui nodi domotici arm.
« Last Edit: January 08, 2012, 10:51:16 am by legacy » Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 2795
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Prima della migrazione dei server avevo risposto, ma è andato in timeout e poi down totale.

Sinteticamente hai raggione qui:
Quote
Non mi serve alcuna delle funzionalita' offerte dal tcp/ip se devo far parlre 2 nodi domotici, il protocollo modbus va piu' che bene e a livello fisico gli basta anche una serialina.

Al momento non vedo necessità di portarsi dietro http sui nodi, ma ovviamente un nodo speciale deve avere interfaccia tramite http to udp, per gestire la casa tramite application web.

Penso che questo pensiero lo condivida anche veseo.

Quindi su upd hai frame modbus, ottimo, flesibile direi.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Pages: 1 2 [3] 4 5 ... 9   Go Up
Jump to: