Memorizzare istruzioni nel Database

di il
6 risposte

Memorizzare istruzioni nel Database

Buonasera a tutti,
intanto ringrazio anticipatamente tutti quelli che mi risponderanno
Premetto che sono un programmatore alle prime armi e mi scuso fin da ora per le possibili cavolate che dirò.

Come ho scritto nel titolo, vorrei sapere se è possibile memorizzare delle istruzioni in un record del database per poterle eseguire successivamente.
Cerco di spiegarmi: ho realizzato un piccolo programmino in java che mi controlla lo stato di alcuni componenti domotici e mi tiene aggiornato il loro stato nel database ( il programmino altro non è che un ciclo infinito), quello che vorrei fare è eseguire comandi differenti a seconda del cambiamento di stato di diversi devices. per esempio vorrei che se si accende la luce in camera si spegne la luce in cucina, per fare questo pensavo di associare al cambiamento di stato della luce in camera un pezzo di codice che spegne la luce in cucina e di memorizzarlo nel database, in modo tale che se il programma si accorge del cambiamento di stato, legge le istruzioni scritte nel database e le esegue.
Spero di essermi spiegato bene.
Secondo voi come posso fare?

grazie a tutti

6 Risposte

  • Re: Memorizzare istruzioni nel Database

    Ciao! Se ho ben capito la situazione tu hai un software in Java che può interagire con i componenti domotici leggendone ed eventualmente modificandone lo stato (es: dal SW in Java puoi vedere se una luce è accesa o spenta e, sempre tramite il SW, puoi decidere di accenderla o spegnerla). Se così fosse, allora, non ti serve fare tutto questo giro da MySQL: infatti, una volta che ti accorgi che la luce in camera è accesa puoi direttamente decidere di spegnere la luce in cucina;
    
    // Leggi lo stato della lampadina
    ...
    if (luceCamera.isOn()) {
        luceCucina.turnOff();
        // Fai le altre operazioni
        ...
    }
    ...
    
    Un'altra situazione, anche se credo poco probabile, si ha se puoi intervenire sullo stato dei device solo tramite il DB: Ad esempio le lampadine in qualche modo leggono il valore dal DB e regolano il proprio comportamento sulla base di ciò che hanno letto. In questo caso puoi avvalerti dei : quando modifichi lo stato di un device puoi far scatenare automaticamente delle operazioni internamente al DB. Ad esempio quando modifichi lo stato della lampadina in camera (tramite una operazione di UPDATE ad esempio) puoi far scattare il trigger che si occupa di regolare di conseguenza lo stato della lampadina in cucina.
  • Re: Memorizzare istruzioni nel Database

    Ciao Della!
    Intanto grazie mille per la risposta, sei molto gentile
    Allora guarda il problema non è quello di realizzare funzioni ad hoc pe accendre e spegnere dei componenti.
    I servizi che girano sul serverino in realtà sono due, uno che si occupa di aggiornare il database leggendo periodicamente lo stato dei componenti (un ciclo infinito) e uno che si occupa di eseguire i comandi (che dovrebbe leggere al database c sono separati dal web)
    Poi ci dovrebbe essere un interfaccio web con la quale l'utente visualizza tutti i omponenti, gli stati i piani ecc...
    la miaidea era quella di associare al cambiamento di stato di un componente un determinata istruzione a scelta dell'utente.
    Poniamo l'esempio che io entro nell'interfaccia web, vado sul componente switch della luce in camera, voglio associargli diversi comandi del tipo: quando cambia stato ed è nello stato di acceso allora invia una mail e accendi la luce sul comodino.
    Io volevo fare in modo tale che ci fosse una tabella dove memorizzo il device e gli posso associare questo tipo di comandi (nn so un campo di una colonna o qualcosa del genere che può anche essere vuota), in modo tale che quando il servizio di updating si accorge del cambiamento di stato scrive quei comandi in un altra tabella dove memorizzo le istruzioni che devono essere eseguite.
    A questo punto, il servizio di esecuzione comandi (che è anche lui un processo con un ciclo infinito di lettura e scrittura nel database ) legge i comandi contenuti nella tabella, tenta di eseguirli e cancella i record della tabella ( così posso mettere in coda anche più comandi ed eseguirli in serie)
    In questo modo l'utente può scegliere di eseguire quello che vuole e può anche salvare dei scenari a cui associa più istruzioni.

    Il mio dubbio è: come scrivo le istruzioni che deve eseguire il processo di esecuzione programmi nel database?? scrivo delle istruzioni java che poi il processo interpreta ed esegue oppure posso astrarre in qualche modo??

    Spero di essere stato chiaro.
    Grazie mille
  • Re: Memorizzare istruzioni nel Database

    Ok allora è un po' più complicato di quello che avevo inteso prima
    In ogni caso più che salvare direttamente le istruzioni nel DB (poi sarebbe difficile eseguirle all'interno del tuo programma) potresti salvare tutte le informazioni necessarie secondo un qualche formato (es: xml) che poi andrai a prelevare dal DB e che interpreterai per eseguire le operazioni richieste. In questo modo svincoli le informazioni dal linguaggio di programmazione, cosa utile per eventuali modifiche future..
  • Re: Memorizzare istruzioni nel Database

    Ciao, la tua soluzione mi sembra molto buona.
    Solo che vorrei chiederti due cose che non ho capito bene.
    Per prima cosa come salvo un xml nel database? devo fare dei fogli xml o jon esterni e poi tenermi nel databas i link di dove sono e eprirli di volta in volta?
    Poi, secondo la tua solutzione, se uno vuole accendere una lampadina da interfaccia (senza salvare uno scenario) grafica web che succede? viene scritto un file temporanero xml o json che viene interpretato dal servizio di esecuzione comandi e poi eliminato?

    Ti ringrazio molto per la disponibilità e la pazienza!!!
  • Re: Memorizzare istruzioni nel Database

    Ciao scusa se rispondo solo ora! Per la questione di salvare un XML in un DB so che alcuni permettono "nativamente" di gestire il formato XML. Per quanto mi ricordo, però, MySQL non è fra questi.. Se si tratta di XML tutto sommato semplici puoi anche pensare di salvarli come plain text.
    Per l'esecuzione di un comando singolo, invece, dipende da come hai fatto il servizio di gestione comandi: se l'unica interazione possibile è con il DB allora c'è poca scelta se non quella di creare un record temporaneo come hai detto tu. Altrimenti se, ad esempio, il servizio di esecuzione comandi possiede, che so, una coda di messaggi, allora puoi pensare di inviare un messaggio dal servizio web a questo componente, e quest'ultimo periodicamente si andrà a leggere i messaggi nella coda e li eseguirà


    Sent from my iPhone using Tapatalk
  • Re: Memorizzare istruzioni nel Database

    Un esempio di DB XML che mi è appena venuto in mente è BaseX (dovrebbe essere gratuito). Se hai anche fare solo con documenti XML ritengo che sia molto comodo perché le query si fanno in XQuery (non in SQL), cosa che (pur essendo un po' complicata all'inizio) ti permette di fare query molto specifiche


    Sent from my iPhone using Tapatalk
Devi accedere o registrarti per scrivere nel forum
6 risposte