Go Down

Topic: Suggerimento per progetto Domotico "ambizioso" (Read 756 times) previous topic - next topic

geniusmiki

Salve, vorrei realizzare un progetto domotico con funzioni di antifurto che dovrebbe contenere sicuramente più di un arduino.

Volevo capire se facendo scrivere i dati acquisiti dai vari sensori in un database mysql posizionato in locale su un raspberry potrei usare questo database per leggere e scrivere dati da tutti gli arduino interessati?
Questo per avere magari un display per visualizzare le info, possibilità di telecontrollo tramite web/app.
Secondo qualcuno più esperto e navigato nel settore, sarebbe questa la strada migliore per questo progetto?

docdoc

Credo proprio sia possibile, ma ovviamente da Arduino non vai a scrivere direttamente nel MySql, ma ti serve "qualcosa" che riceva le informazioni e scriva lui sul database (e/o che leggendo le info dal db le fornisca su richiesta all'Arduino che le richiede).

Quindi tutto sta nel definire l'infrastruttura sia come comunicazione (es. Ethernet? WiFi? Altro?) sia come "server" centrale su Raspberry (come debba funzionare e quindi come implementarlo dipende dalla precedente scelta).
Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

geniusmiki

Grazie per la risposta, avrei bisogno di capire meglio il "qualcosa" che scrive nel db cosa potrebbe essere, l'infrastruttura sarà basata o su ethernet o wifi se sarò costretto.
Se il raspberry rappresenta un problema o una complicazione lo posso rimpiazzare tranquillamente con un pc windows o linux.

gpb01

Un'idea potrebbe semplicemente essere che i vari Arduino, via WiFi, fanno delle banali HTTP GET ed inviano i dati ad un programma in PHP che gira sulla raspberry e che provvede a metterli nel DB MySQL.

Guglielmo
Search is Your friend ... or I am Your enemy !

geniusmiki

Grazie per la risposta, il programma php lo dovrei scrivere io? (questo potrebbe essere un problema)

la questione interscambio dati e consultazione tra gli arduino è corretto farla quindi con database o ci sono strade migliori/più semplici?

gpb01

#5
Jul 18, 2018, 06:30 am Last Edit: Jul 18, 2018, 06:30 am by gpb01
Grazie per la risposta, il programma php lo dovrei scrivere io?
Ovviamente SI ... visto che sei TU che sai che dati devi trattare, come li devi registrare e come li vuoi poi elaborare. ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

docdoc

Grazie per la risposta, il programma php lo dovrei scrivere io? (questo potrebbe essere un problema)
:o

Famme capi'... Tu vorresti realizzare un progetto di domotica basato su Arduino e con database MySQL, e non sai come scrivere n programma che accetta delle connessioni ed in base a questo scrive in un DB?

Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Patrick_M

:D se no non era abbastanza "ambizioso" no?


(@geniusmiki ...si fa per ridere neH!)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

geniusmiki

Grazie a tutti per le risposte,
@docdoc, purtroppo ho conoscenze di programmazione molto basilari, solo per passione mi diverto con arduino.
Speravo che arduino avesse una libreria che scrivesse semplicemente in un db mysql. Se devo creare il connettore non ne sono in grado.

@Patrick_M    :P  :P  :P

gpb01

... Speravo che arduino avesse una libreria che scrivesse semplicemente in un db mysql ...
Premesso che stai confondendo un qualche cosa che è nato per fare controlli/automazione (una piccola MCU a 8 bit) con un qualche cosa che è un piccolo computer (un sistema Linux adatto a fare certe cose), ricordo che qualcuno aveva scritto una libreria mySQL per Arduino, ma ... NON ho mai saputo se veramente funzionasse.

La strada da seguire te l'ho indicata, se vuoi arrischiarti con una libreria raramente usata e dall'incerto funzionamento ... prova a cercare su Google e forse qualche cosa troverai.

Guglielmo
Search is Your friend ... or I am Your enemy !

geniusmiki

Guglielmo grazie per il tempo che hai speso per rispondermi ancora una volta, proverò la libreria perchè in realtà non posso fare altrimenti, in php non so mettere mano

a presto

gpb01

QUI trovi la libreria ... poi facci sapere se funziona :D

Guglielmo
Search is Your friend ... or I am Your enemy !

Claudio_FF

#12
Jul 19, 2018, 08:22 pm Last Edit: Jul 20, 2018, 07:02 am by Claudio_FF
Il progetto è interessante. Usare una comunicazione IP su ethernet significa non doversi occupare di collegamento fisico, instradamento, collisione, controllo errori, tutti i tormentoni dei link più "semplici".

Naturalmente l'intera infrastruttura deve essere a prova di blackout, quindi alimentazione tramite UPS di tutti gli elementi (router, switch, sensori, nodi remoti ecc).

L'uso di un Rpy come macchina server mi sembra azzeccato per il basso consumo, ma qualsiasi cosa su cui possa girare un sistema operativo decente va bene.

Personalmente per piccoli messaggi su una rete di sensori interna non userei il TCP (e quindi neppure il protocollo HTTP che viene trasportato dal TCP), se un'unità non risponde si resta bloccati in attesa della connessione.

Piuttosto l'UDP, che mi sembra più simile alla seriale: si spedisce senza alcun ritardo e "si spera" che all'altro lato abbiano ricevuto... eventualmente si pensa a un ACK.

Non ho approfondito, ma lato Arduino per inviare pacchetti UDP dovrebbero bastare queste informazioni: https://www.arduino.cc/en/Tutorial/UDPSendReceiveString

Rimane naturalmente il lato server, da scrivere in un qualsiasi linguaggio che permette l'uso dei socket UDP/IP per ricevere i messaggi dagli Arduino sensori. In Python ad esempio bastano una ventina di righe o meno (in Java immagino anche), ma non so se in questo forum (in quanto discorso complessivo legato ad Arduino) se ne può parlare...

Ad esempio come spunto un server UDP minimale in Python3 è questo (stampa i messaggi ricevuti da Arduino o da chi altro, e risponde ACK):
Code: [Select]
from socketserver import UDPServer, BaseRequestHandler

class Gestore(BaseRequestHandler):

    def handle(self):
        messaggio = self.request[0].decode('utf-8')
        socket = self.request[1]
        print('L\' IP {} ha inviato:'.format(self.client_address[0]))
        print(messaggio)
        socket.sendto('ACK'.encode('utf-8'), self.client_address)

server = UDPServer(('', 8000), Gestore)
server.serve_forever()


Per quanto riguarda il database invece non ne so nulla, magari non è neppure necessario.
* * * *    if non è un ciclo   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *

zoomx

Se non ricordo male per scrivere in un db MySql dovrebbe bastare connettersi alla sua porta e usare i comandi SQL.

@geniusmiki,
ultimamente sta andando di moda il database InfluxDB, vedi se può fare al caso tuo.

docdoc

Se non ricordo male per scrivere in un db MySql dovrebbe bastare connettersi alla sua porta e usare i comandi SQL.
Ma no, non funziona così, c'è un protocollo di comunicazione che non puoi gestire così...

Al massimo se la macchina è Linux potresti fare una connessione Telnet, ed accedere al DB con l'apposito comandio poi dare le istruzioni SQL. Ma è una procedura non semplice da gestire (mandare un comando, attendere una risposta prima di dare il successivo o riconoscere eventuali messaggi di errore, eccetera...).

Potrebbe fare qualcosa in php ad esempio ma in ogni caso se non sa programmare in generale, la vedo difficile se prima non studia gli aspetti tecnici (o paga qualcuno per realizzarlo per suo conto ;)).

Alex "docdoc" - ** se ti sono stato d'aiuto, un punto karma sarà gradito, clicca su "add" qui a sinistra, vicino al mio nome ;) **

Go Up