Domotica Open Source – Partiamo con SOULISS

Souliss è un framework opensource per sistemi domotici.

Questo è il sito ufficiale: www.souliss.net e questo è un interessante articolo pubblicato su Elettronica Open Source:  it.emcelettronica.com/domotica-con-souliss che spiega in modo chiaro cos’è e cosa fa Souliss.

Dopo essermi informato ed essermi procurato il materiale necessario, provo il sistema e condivido la mia esperienza.

Per fare qualche prova uso Arduino ed un modulo ethernet basato sul chip ENC28J60, che sono supportati direttamente.

Ad oggi infatti l’hardware supportato direttamente dal framework è il seguente:

Freaklabs Chibiduino (2.4 GHz Wireless)
Freaklabs Chibiduino with Ethernet Shield (W5100)
Arduino Ethernet (W5100)
Arduino with Ethernet Shield (W5100)
Arduino with ENC28J60 Ethernet Shield
KMTronic DINo    
Olimex AVR-T32U4         with MOD-ENC28J60
Olimex OLIMEXINO-32U4     with MOD-ENC28J60
Olimex OLIMEXINO-328     with MOD-ENC28J60
Olimex AVR-T32U4         with MOD-WIFI
Olimex OLIMEXINO-32U4     with MOD-WIFI
Olimex OLIMEXINO-328     with MOD-WIFI
Olimex AVR-T32U4         with MOD-ENC28J60 and MOD-IO
Olimex OLIMEXINO-32U4     with MOD-ENC28J60 and MOD-IO
Olimex OLIMEXINO-328     with MOD-ENC28J60 and MOD-IO
Olimex AVR-T32U4         with MOD-WIFI      and MOD-IO
Olimex OLIMEXINO-32U4     with MOD-WIFI      and MOD-IO
Olimex OLIMEXINO-328     with MOD-WIFI      and MOD-IO
Olimex AVR-T32U4         with MOD-ENC28J60 and MOD-IO 2
Olimex OLIMEXINO-32U4     with MOD-ENC28J60 and MOD-IO 2
Olimex OLIMEXINO-328     with MOD-ENC28J60 and MOD-IO 2
Olimex AVR-T32U4         with MOD-WIFI      and MOD-IO 2
Olimex OLIMEXINO-32U4     with MOD-WIFI      and MOD-IO 2
Olimex OLIMEXINO-328     with MOD-WIFI      and MOD-IO 2
Olimex AVR-T32U4         with MOD-ENC28J60 and MOD-RGB
Olimex OLIMEXINO-32U4     with MOD-ENC28J60 and MOD-RGB
Olimex OLIMEXINO-328     with MOD-ENC28J60 and MOD-RGB
Olimex AVR-T32U4         with MOD-WIFI      and MOD-RGB
Olimex OLIMEXINO-32U4     with MOD-WIFI      and MOD-RGB
Olimex OLIMEXINO-328     with MOD-WIFI      and MOD-RGB

Dopo essermi accertato che l’hardware funzioni correttamente (cosa da fare sempre tramite, ad esempio, il consueto sketch di test “Hello World” oppure con uno sketch semplicissimo qualsiasi) inizio a leggere istruzioni per “partire” con Souliss.

Occorre fare una nota sui collegamenti hardware.
Se usate un ethernet shield di quelli che si appplicano sopra Arduino, allora proseguite al paragrafo successivo.

Se invece usate un modulo ethernet tipo questo

allora fate attenzione a collegarlo con i pin seguenti:

---------------------------
Collegamenti modulo Ethernet HR911105A
basato su chip Microchip ENC28J60

SCK: pin 13 di Arduino
SO: pin 12 di Arduino
SI: pin 11 di Arduino
CS: pin 10 di Arduino
RESET: pin reset di Arduino
---------------------------

Scarico il framework dal qui:

http://code.google.com/p/souliss/downloads/list

estraggo la cartella “souliss” e la copio nella cartella delle librerie dell’IDE di Arduino.

Apro, per il test preliminare, lo sketch “Souliss – Hello World”.

Prima della compilazione e del caricamento occorre personalizzare i file di configurazione di Souliss.
All’interno della cartella souliss/conf apro il file “QuickCfg.h” trascinandolo (per semplicità) all’interno dell’IDE di Arduino.
Individuo la parte di codice seguente:

#if(QC_ENABLE)
 #    define    QC_BOARDTYPE            0x00
 #endif

e modifico così:

 #if(QC_ENABLE)
 #    define    QC_BOARDTYPE            0x05
 #endif

Poi:

#if(QC_ENABLE)
#    define    QC_GATEWAYTYPE            0x00
#endif

e modifico così:

#if(QC_ENABLE)
#    define    QC_GATEWAYTYPE            0x01
#endif

Questo è ciò che serve per fare il test preliminare.
Di default il numero IP è 192.168.1.17 ma è possibile cambiarlo modificando una riga dello sketch “Souliss – Hello World”:

#define network_address_1    0x0011             // 0x0011 is equal to 17 in decimal

Il numero esadecimale 0x0011 deve essere sommato all’indirizzo DEFAULT_BASEIPADDRESS presente nel file “QuickCfg.h“.
Visto che l’indirizzo di base è 192.168.1.0, allora l’IP del “nodo” sarà 192.168.1.17
Per cambiarlo basta inserire cambiare il numero, ad esempio:

#define network_address_1    0x006E 

per avere l’indirizzo IP 192.168.1.110
Per convertire il numero da decimale a esadecimale si può usare la calcolatrice di windows, nella modalità “programmatore”, è semplicissimo.

Infine, occorre collegare un led al pin 2 ed un pulsante al pin 9. Ricordarsi la resistenza di pulldown per il pulsante.

Nell’App per Android Souliss occorre inserire l’indirizzo IP del super nodo (nel nostro caso 192.168.1.17 ) e premere il pulsante “Get Souliss Node” che si trova in “Opzioni / Opzioni di rete”

La configurazione di SoulissApp è semplice ed intuitiva, l’app ha rilevato automaticamente i nodi presenti e tutto funzionato al primo tentativo.

Questo è il preludio a quello che potrebbe diventare un impianto domotico completo, opensource ed a costi ragionevoli.

Le foto non hanno la presunzione di mostrare i collegamenti effettuati, che tra l’altro sono veramente banali, ma piuttosto di dare una rappresentazione di quanto scritto sopra, visto che vedere una foto è più bello e che leggere tutto.

35 replies to Domotica Open Source – Partiamo con SOULISS

  1. Complimenti per la guida.
    Ma è possibile gestire il tutto dall’esterno della Lan? ed in questo caso come indirizzo direttamente Arduino?
    Grazie

    • Certo che è possibile.
      In SoulissApp nelle impostazioni, alla voce “Network/Indirizzo Pubblico”, devi inserire il tuo indirizzo pubblico. (Vedi altre guide per il DDNS)
      Ovviamente sul router devi aprire in ingresso la porta 230 verso l’IP di Arduino/Souliss.

      • Grazie!
        Dove trovo le guide che hai citato?

        • http://it.wikipedia.org/wiki/Dynamic_DNS

          Ho un vecchio router che non supporta il DDNS quindi per il momento ho aperto un account su https://www.noip.com/ e su un tablet ho configurato l’App “Dynamic DNS Update”.
          Il tablet ovviamente deve rimanere sempre acceso.

          La soluzione migliore comunque è usare il supporto DDNS del router.

          • …nel caso mio mi sa che la soluzione si complica in quanto ho Fastweb!

  2. Tonino, ho risolto.
    L’errore era dovuto al fatto che i comandi QC…. li inserivo dopo include.

  3. la porta dell’arduino è la 88.

    • Souliss usa la porta 230

      • Tony,
        Sul router ho aperto, per 192.168.1.17, sia la porta 88 che la 230.
        Con altri sketch soulissapp si avvia normalmente, con questo non ne vuole proprio sapere.
        Ho provato inoltre a far girare il tuo sketch per gli 8 relè e continua a rmi l’errore :Souliss_SetLocalAddress(unsigned char*, unsigned int)’.
        Premetto che ho una Arduino uno con Ethernet Shield (W5100).Ti allego lo scketch, se puoi dai un’occhiata.Ti ringrazio.

        #include “Souliss.h”
        #include “Typicals.h”
        #include

        #define QUICKCONF_H
        #define QC_ENABLE 0x04
        #define QC_BOARDTYPE 0x03
        #define QC_GATEWAYTYPE 0x01
        #define QC_INTERFACE 0x00

        // network addresses
        #define network_address_2 0x0011 // 0x0011 is equal to 17 in decimal
        #define network_my_subnet 0xFF00
        #define network_my_supern 0x0000

        // define the shared memory map
        U8 memory_map[MaCaco_MEMMAP];

        // flag
        U8 data_changed = 0;

        #define time_base_fast 10 // Time cycle in milliseconds
        #define time_base_slow 10000 // Time cycle in milliseconds
        #define num_phases 255 // Number of phases

        U8 phase_speedy=0, phase_fast=0, phase_slow=0;
        unsigned long tmr_fast=0, tmr_slow=0;

        U8 firstPIN=2; //first pin used by Arduino for relay board
        U8 lastPin=9; //last pin used by Arduino for relay board

        U8 iSLOT=0; //first slot used by Typical 11

        void setup()
        {
        Souliss_SetAddress(network_address_2, network_my_subnet, network_my_supern);
        // Load the address also in the memory_map
        Souliss_SetLocalAddress(memory_map, network_address_2);

        //setup 8 Typical 11
        for(U8 iPin=firstPIN;iPin time_base_fast)
        {
        tmr_fast = millis();
        phase_fast = (phase_fast + 1) % num_phases;

        // Execute the code every 3 time_base_fast
        if (!(phase_fast % 3))
        {
        // TO IMPLEMENT: SETUP PIN FOR WALL SWITCH
        //Souliss_DigIn( ETC….

        // Execute the logic for typicals 11
        U8 iSlot;
        iSLOT=0;
        for(U8 iPin=firstPIN;iPin<=lastPin;iPin++)
        {
        Souliss_Logic_T11(memory_map, iSLOT, &data_changed);
        Souliss_LowDigOut(iPin, Souliss_T1n_Coil, memory_map, iSLOT);
        iSLOT++;
        }
        }

        // Execute the code every 5 time_base_fast
        if (!(phase_fast % 5))
        {
        // Retreive data from the communication channel
        Souliss_CommunicationData(memory_map, &data_changed);
        }
        }
        }

        • buonasera a tutti ho iniziato da poco ad usare souliss per comandare un impianto domotica creato da me con arduino mega e 32 relè o inserito lo sketch hello world di souliss e funziona ora volevo sapere per comandare più relè come devo scrivere nello sketch mi date un aiuto gentilmente grazie

          • ragazzi per favore mi suggerite come fare
            grazie

          • Leggi con attenzione il codice. Cerca di individuarne le parti e di capire il concetto di slot. Però fai riferimento agli esempi a corredo di Souliss, quello che trovi su github (una volta era GoogleCode).
            Non è difficile, si tratta solo di duplicare poche righe di codice.

  4. Tonino,
    Sono riuscito finalmente a far compilare e caricare il Fiat lux.
    Ora è sopraggiunto altro problema, dopo aver caricato lo sketch sullo smart non mi legge la connessione a Souliss.
    Per favore aiutami, stò impazzendo.
    Se ritieni posso inviare lo sketch.
    Grazie Leo

    • Hai installato SoulissApp sullo smartphone?
      SoulissApp supporta il discovery e dovrebbe autoconfigurarsi da solo.

  5. Dimenticavo di dirti che il modem è configurano 192.168.1.1 e che la scheda arduino è 192,168.1.17

  6. Carico lo sketch Souliss – Fiat Lux
    e mi restituisce errore sulla riga:
    Souliss_SetLocalAddress(memory_map, network_address_1); con unsigned char*
    unsigned int.

    dov’ è che sbaglio?
    Ti ringrazio

  7. Tonino,
    innanzitutto complimenti, ho da chiederti una informazione, se carico Hello Word o flat Lux mi manda il seguente errore:
    Souliss_SetLocalAddress(unsigned char*,unsigned int).
    Ti ringrazio

    • Riguarda meglio il tipo di errore.
      Nell’esempio HelloWorld la riga è questa
      Souliss_SetLocalAddress(memory_map, network_address_1);

      Devi ridefinire soltanto network_address_1 che, di default, è impostato a 0x0011, che è il valore esadecimale di 17. Questo vuol dire che l’indirizzo IP del Gateway è 192.168.1.17, se la tua LAN ha la numerazione IP del tipo 192.168.1.XX.

      Per passare rapidamente dai valori esadecimali a quelli decimali puoi usare la calcolatrice di windows, nella modalità “programmatore”.

  8. Ciao, grazie alla tua guida…semplice e fatta per comuni mortali che vogliono avvicinarsi a concetti difficili…ho avuto la possibilità di pilotare tramite arduino, modulo rete HR911105A, modulo 8 relè il mio piccolo impianto luce (rigorosamente su banco prima di dare fuoco a casa…vista la sottovalutata pericolosità della 220v).
    Ma ho un problema che non riesco a superare…uno dei relè…comanda un Finder passo passo (type 26.04).
    Ho modificato per gli 8 canali lo sketch di esempio: ex2_fiatlux_eth1 (in realtà ho semplicemente aggiunto il controllo per gli altri 6 canali.)
    Quando però comando il finder…questo mi rimane “agganciato” ovvero…invece di farmi un on-off veloce (simulando quindi la pressione di un pulsante a switch reale)…mi fà solo l’on…rimanendo il finder agganciato (come se rimanessi col dito premuto su di un pulsante reale) con il rischio che si bruci.
    Ovviamente nel codice dovrei, per il canale utilizzato, indicare “accenditi” “attendi qualche istante” “spegniti”.
    Non ci sono risucito in nessun modo…potresti darmi una mano???
    Ti ringrazio di tutto.

    • Usa il tipico 14 invece che il numero 11.
      Il T14 è scritto proprio per il relè passo passo.
      Per farlo funzionare correttamente però è necessario un relè passo passo a doppio contatto.
      Questo è lo schema da usare https://docs.google.com/viewer?a=v&pid=forums&srcid=MTA4OTI0ODM3MTUxMzkxNTEyNTQBMDQ5NTY3MjQxNjMzNDc3Mjc2ODYBZnNXRWdKcEZrVndKATAuMgEBdjI
      Qui invece trovi una discussione generale sull’argomento: https://groups.google.com/forum/#!msg/souliss/8Gy5xsGJCpA/9G0a94T9vwEJ

      Tonino

      • FUNZIONAAAAA ALLA GRANDISSIMAAA…ti ringrazio veramente…pensare che mi stavo dannando come un pazzo perchè avevo trovato soluzioni “ardimentose” addirittura utilizzando uno degli scenari per simulare on-off veloce…unico piccolo rammarico…che l’app vedendo il tipico 14 ( Souliss_SetT14 ) lo riconosce come appunto un pulse digital output…perdendo la “finezza” del tipico 11 e della lampadina che si accende (di grande effetto seppur inutile ai fini dell’utilità)
        Ti ringrazio della grande disponibilità è per la velocità nella risposta.
        Ciao alla prossima.

        • Sai perché? Ti ho dato un’indicazione sbagliata.
          Il tipico da usare è il T18.
          Vale tutto ciò che ho scritto sopra.
          Il T18 funziona come il T14 a livello output, ma è visto da SoulissApp come fosse un T11.

          • Ottimo, funziona tutto a dovere…ma avrei due domande:
            Partendo dall’esempio ex2_fiatlux_eth1:
            1) Quando vario il tipico in 18 o 14, mi esce fuori l’errore:
            Souliss_T18_Timer was not declared in this scope
            Immagino perchè non presente nella funzione tipico 18??? Ho risolto rimuovendo il code…ma volevo una conferma.
            2) E’ assolutamente allucinante…se alimento tutto: arduino, rete e modulo 8 relè dall’usb…tutto bene e funziona a dovere…non appena collego ad arduino un trasformatore 12 volt, da 1A ma ho provato anche a 2A e a 6A, il sistema mi lampeggia velocemente insieme al ticchettio dei relè…mi parte lento…fino ad aumentare di velocità…ovviamente stacco tutto…rialimento dall’usb del pc…tutto bene…che cavolo pensi sia???
            Ti ringrazio come sempre della disponibilità

          • 1) Confermo, il timer non è previsto per il tipico 18, pertanto il relativo codice può essere rimosso.

            2) Potrebbe essere un problema di ponticelli. Che hardware utilizzi?
            Io con le chibi ho il problema opposto. La scheda 8 relè funziona solo se alimentata esternamente, non via USB.

          • Giusto per portare a conclusione il post.
            Allora il problema dell’alimentazione esterna e quindi del veloce accendi/spegni dei relè era dovuto alla cattiva programmazione di souliss, infatti rifacendo tutto il codice da capo mi funziona tutto a dovere. Quindi mi sento di consigliare che quando si rilevano inspiegabili problemi hardware…di accertarsi che il codice non sia la causa.
            Ora…però…(sembra un videogioco con il mostro di fine livello sempre piu grande.) sto avendo il problema che agganciando un finder al tipico 18…mi funziona qualche volta…ma poi mi manda in panne arduino…stacco e riattacco l’alimentazione di arduino e rifunziona tutto…fino a che nn piloto il relè collegato al finder…da profano…mi sento di ipotizzare qualche forma di disturbo elettromagnetico…hai avuto difficoltà simili???
            Ringraziandoti ancora per la disponibilità.

  9. Confermo che per i principianti non c’è una guida in italiano che aiuti a configurare correttamente.
    Io sono un mese che sto cercaqndo di far funzionare l’App souliss ma senza successo
    Ho chiesto al forum ma senza risposta
    Ma forse souliss è solo un giocattolo per pochi intimi.
    Comunque proverò a chiedere aiuto anche a Voi.
    La mia “rete” è costituita dai seguenti nodi:
    Arduino uno
    Ethernet shield W5100
    Router teletu
    Smartphone
    Con uno scìketch tipo webclient tutto funziona perfettamente così come per altri sketch testati per comandare rele da remoto.
    Sul router nella cartella Rete Utente vedo tutti i nodi collegati con il router
    Quando carico lo sketch di souliss l’app non riesce a connettersi con la shield e andando a verificare la “rete” la ethernet shield tisulta scollegata dal router.
    Sarei grato se potreste darmi qualche indicazione o qualche esempio di quickconf che funziona
    Grazie Gianni

    Ora ho chiesto aiuto ad un amico ma se

  10. Ciao. Volevo provare il sistema SOULISS, ma non riesco a compilarlo con l’IDE di Arduino.
    Ho una scheda Arduino UNO R3 e una Shield ETH standard originale. Mi evidenzia una serie di errori legati a ‘U8’ e non riesco a capire perchè la variabile non viene dichiarata. Lo sketch usato è “Souliss_ex01_HelloWorld_eth1.ino”
    Ho usato l’IDE 1.0.5r6, poi 1.5.5r6 ma con gli stessi errori.

    Cosa sbaglio?
    Cosa posso fare ?

    Grazie.

    • Hai piazzato il framework Souliss dentro la cartella “libraries”?

  11. Complimenti, bella spiegazione era un po che cercavo un traduzione del sito in italiano.
    Se e’ possibile metti altri tutorial riguardanti souliss, grazie.
    Domenico

  12. Interessante l’applicazione ma è piuttosto complicato il settaggio dei vari parametri ip… peccato

    • Ma no non è complicato. Che problema hai?

      • Probabilmente non è complicato a non riesco a capire come modificare l’indirizzo IP .
        Va modificato sullo sketch che carico su Ardu ? Va modificato sul file di configurazione ? Oppure devo modificare l’indirizzo IP della scheda ethernet su Ardu?

        • Ciao, scusa il ritardo.
          Si il numero IP deve essere statico e deve essere impostato sullo sketch che carichi su Arduino, non nel file di configurazione.

          Se l’indirizzo base è 192.168.1.0 allora nello sketch scrivi
          #define network_address_1 0x006E
          per avere 192.168.1.110
          #define network_address_1 0x006F
          per avere 192.168.1.111
          #define network_address_1 0×0011
          per avere 192.168.1.17
          #define network_address_1 0×0012
          per avere 192.168.1.18
          ..e così via.

          • scusami sarò un po di legno ma non riesco a capire
            Faccio un po di domande:
            1) Il file quick cfg va modificato prima di inserirlo nella libreria dellIde?
            2) se si l’indirizzo IP della mia ethernet shield è: 192.168.1.5; quale dovrebbe essere il corrispettivo valore esagesimale?
            3)Alla voce gateway devo inserire l’IP del mio router?
            Per il momento GRAZIE

  13. Pingback:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

wp-puzzle.com logo

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.