onosteam / onos Goto Github PK
View Code? Open in Web Editor NEWonos
Home Page: http://myonos.com
onos
Home Page: http://myonos.com
Se la seriale è connessa ma arduino non è presente o non comunica onos aspetta indefinitivamente risposta e non avvia il webserver..
Per migliorare la velocità di comando del'onos center dal server online si può fare in modo che quando un utente si logga nella pagina web online di controllo l'onoscenter se ne accorga ed inizi ad scaricare con frequenza maggiore i comandi dal database online.
Da sviluppare quando finita l'interfaccia web
OnosCenter deve essere in grado di verificare se sul server principale sono presenti degli aggiornamenti e deve chiedere agli utenti di confermare l'aggiornamento.
Bisogna fare un sistema che periodicamente controlli la versione presente sul server e che mostri una comunicazione (ad esempio una tendina nella parte inferiore della grafica) inoltre da li l'utente deve selezionare se vuole posticipare l'aggiornamento o se vuole effettuarlo.
Deve essere anche possibile vedere quali saranno i cambiamenti dopo l'aggiornamento..
Da implementare la parte di aggiornamento firmware tramite radio, sviluppando gli esempi che ho provato.
Da aggiungere sia lato arduino sia lato python.
Da fare una notifica nella gui html per l'utente che il nodo non funzionerà per i prossimi 5 minuti e che premendo accetta la licenza ed il rischio ...una volta premuto parte l'aggiornamento di quel singolo nodo.
Quando l'aggiornamento finisce con successo o fallisce ci deve essere una notifica che informa l'utente.
Da decidere se nel mentre ci deve essere un elemento che gira tipo caricamento in corso.
Non sarà possibile fare una barra con la percentuale del processo perchè troppo laborioso..
Correggere pad in versione ad della pcb per togliere il pad da sotto il modulo radio.
Problema, se la seriale non è presente il webserver non parte
Al momento non è possibile rinominare gli oggetti di un nodo .
Sviluppare un metodo per rendere possibile l'associazione tra nome oggetto dato dall'utente e nome dell'oggetto nel nodo.
Probabilmente si potrebbe creare un dizionario di traduzione ...
Notare che il nodo comunica solo il numero progressivo dell'oggetto quindi ad esempio dice: il primo oggetto del nodo è cambiato dallo stato 0 allo stato 1.
Quindi si potrebbe fare una correlazione tra nome oggetto dell'utente e numero progressivo dell'oggetto nel nodo.
L'utente al momento può cambiare lo stato di un oggetto da pagina web, da scenario e da mail, tenere conto che l'utente da questi mezzi deve poter usare il nome da lui dato all'oggetto.
In order to make easy to change and improve the onosCenter sync with the online phpdatabase it would be nice to implement an external script to sync them..
per la creazione degli scenari prendo come esempio la pagina che avevamo nella vecchia versione della grafica o bisogna aggiungere o togliere qualcosa ?
enable
set type : condition-math-timer
set type after run : nothing-autodelete-onetime-shot
delay time
priprity
summary condition
summary functions
pulsanti vari per condizioni e creazione
avrei delle modifiche da fare e un idea per rendere semplice e user friendly la creazione delle condizioni però è lunga da scrivere faccio prima a creare un esempio e poi mostrartelo
Cose da aggiungere alla grafica:
-Collegamento ad indirizzo locale di onos..192.168.x.x se si è su interfaccia web da internet e metodo per riconoscere se si è collegati in locale oppure da remoto.
Su nodi che hanno un sensore collegato sarebbe interessante permettere all'utente di modificare la frequenza con la quale il nodo aggiorna il dato su onos , considerando che se si mette una frequenza troppo alta e si hanno troppi nodi la capacità di onos di controllare un nodo via radio diminuisce .
Creare una sincronizzazione tra gli utenti online(database) e quelli locali (dizionario) su onos, al momento ci sono due dizionari distinti ..bisogna creare interfaccia web e gestione software degli utenti .
Aggiungere la parte di controllo che aggiorna lo stato dell'oggetto se viene premuto il pulsante fisico sul nodo.
l'interfaccia web online passa da 0 a pending a 0 e poi ad 1 quando si preme il pulsante...
rendendo l'interfaccia online non affidabile.
(per adesso lo fa solo con plug0_WPlugAvx0008)
Il css dell interfaccia web online opposto a quello in locale, quindi se il colore è azzurro con stato 0 in locale , online è viola con stato 0 , vicerversa cn stato 1 .
Sviluppare la parte web per permettere agli uenti di creare manualmente degli oggetti e di modificare quelli esitenti.
Ecco i parametri che gli utenti dovranno poter cambiare:
Ci dovrà essere una casella da spuntare per visualizzare i parametri avanzati.
E alcuni parametri saranno modificabili solo se si è amminitratori.
Web Object Status type[edit]
digital_input
digital_output
analog_input
analog_output
servo_output
sr_relay
string_var
numeric_var
switch
digital_obj
analog_obj
cfg_obj
'''htmlDict''' : a dictionary where the keys are the status values and the data is the html to display for each status visibile solo e si spunta la casella advanced options
'''styleDict''' : a dictionary where the keys are the status values and the data is the style to use for each status visibile solo e si spunta la casella advanced options
'''cmdDict''' : a dictionary where the keys are the status values and the data is the linux shell command to execute when the webobject became equal to the relative status key solo admin può cambiare questa impostazione visibile solo e si spunta la casella advanced options
'''own''' : the username of the web object owner (the one who created it) solo admin può cambiare questa impostazione visibile solo e si spunta la casella advanced options
'''grp''' : the group list the user must belong to in order to set the status (linux style) solo admin può cambiare questa impostazione visibile solo e si spunta la casella advanced options
'''perm''' : the permission the user must have in order to change the status (linux style) , expressed in octal form like 777 ,read write execute (execute is not used) solo admin può cambiare questa impostazione visibile solo e si spunta la casella advanced options
'''mail_l''' : list of mail addresses which onos will send a mail when the object status changes
Da sviluppare la parte per aggiornare il fw di arduino collegato ad onosCenter tramite seriale..bisognerà calcolare i tempi e far autoresettare arduino tramito comando seriale visto che non abbiamo il rts su openwrt...
Sviluppare nodo per controllo apparecchi infrarossi, con apprendimento del codice.
Cose da aggiungere alla grafica:
-La parte in basso della pagina web deve poter contenere un log del sistema e di tutte le azioni che esso compie, cambio stati oggetti , cambio stati da mail ecc
questo log deve essere minimizzabile..
fare automa per trovare inizio comando onos su onos_rf69_serial_transponder
switch (tmp_byte) {
case '[':{
onos_cmd_start_detector=1;
}
case 'S':{
if (onos_cmd_start_detector==1){
onos_cmd_start_detector=2;
}
else{// reset automa
onos_cmd_start_detector=0;
}
}
case '_':{
if (onos_cmd_start_detector==2){
onos_cmd_start_detector=0;
onos_cmd_start_position=0;
}
else{// reset automa
onos_cmd_start_detector=0;
}
}
} // end switch
Testata la possibilità di aggiornare sonoff da wifi , resta ora da fare una interfaccia che invii il comando per effettuare l'aggiornamento.
Il comando da dare per aggiornare è:
http://192.168.1.17/cm?user=admin&password=password&cmnd=upload 1
Bisogna posizionare il nuovo firmware in /scripts_folder/sonoffOTA/Sonoff1P0001.ino.bin
E rinominarlo con il seriale del nodo.
Inoltre onosCenter dovrebbe ricevere e rinominare autonomamente i nuovi fw da server myonos...(da sviluppare procedura)
Pagina home
Display Zone
Display Scenari
Display Grafici [tempo di accensione,consumo,temperatura,umidità,luminosità,pressione] dei nodi
Display Nodi [stato(online/offline),parametri] nodi
Display notifiche
Modifica oggetti [creare,modificare,cancellare,rinominare] oggetti,aggiungere utenti per notifica cambiamento stato via mail/telegram
Modifica zone [creare,modificare,cancellare,rinominare] zone
Modifica scenari [creare,modificare,cancellare,rinominare] scenari (terminata)
Modifica utenti [creare,modificare permessi,cancellare,aggiungere mail ,cambiare password] utenti
Modifica impostazioni [backup,esporta,importa,ripristina a default] impostazioni
Aggiornamento nodi [caricamento fw nodo sonoff da file,caricamento nodo rfm69 da file]
Aggionamento OnosCenter con notifica di aggiornamento online disponibile.
Premendo ctrl+c non si termina più python webserver.py (provato con un nodo che chiedeva address ma non lo riceveva,quindi con onos che continuava a ritrasmettere..)
Se non ci sono scenari nella lista viene aggiunto il seguente html:
Modificare il css per centrarlo e renderlo uguale al resto della grafica..
To implement the error logging with syslog.syslog(error_message) , to check if is it possible to use it on openwrt..
quando un nuovo oggetto viene acceso e comunica con onoscenter per la prima volta e non è stata creata nessuna stanza (nel caso del primo avvio) si potrebbe creare una zona in automatico (automatic_zone) nella quale vengono assegnati tutti i nuovi oggetti collegati ad onoscenter
To implement handle_new_query_to_network_node_thread() with the same safe strategy to queue the not successful query to retry them later...like done in handle_new_query_to_radio_node_thread()
A volte il log in /var/log/syslog non è leggibile perchè ci sono dei caratteri non ascii ,che manda arduino sulla seriale.
Sulla parte grafica degli scenari ma anche altrove potrebbe essere comodo mettere un pulsante punto interrogativo per ogni form , premendo su questo pulsante dovrebbe comparire del testo che spieghi la funzione del form ed i valori che possono essere inseriti.
Da implementare uno storico (almeno di 24 ore) che tenga traccia dei cambiamenti di stato degli oggetti e che segni l'username dell'utente che ha deciso il cambiamento, inoltre se il cambiamento è stato fatto da uno scenario salverà come utente che ha fatto l'azione il nome dello scenario.
Per semplificare la comprensione del sistema bisognerebbe disegnare uno schema a blocchi ed una lista delle azioni e funzioni che onos compie .
Da fare quando è quasi completato il sistema.
Se il server online non è attivo e quindi onoscenter non riesce a parlarci gli scenari probabilmente non funzionano..da verificare e risolvere.
Nella parte di inserimento delle condizioni scenari ma anche nella parte delle funzioni da eseguire andrebbe aggiunto un metodo per inserire numeri e date oltre che i nomi degli oggetti (che sono già presenti al momento)
Devo ricordarmi di aggiungere il controllo analogico all'interfaccia web !
Gli oggetti rimangono in stato onoswait dopo riconnessione nodo,fino a che non li si cambia da interfaccia web
Se all'avvio di onos si rimuove la porta usb seriale onos da errore:
class Serial_connection_Handler destroyed
class arduinoserial destroyed
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
executed changeWebObjectType() with :wifi0_Plug6way0002
Traceback (most recent call last):
File "webserver.py", line 1373, in
changeWebObjectType(a.getName(),a.getType()) #i call this in order to setup the node io conf for the webobjects
File "webserver.py", line 411, in changeWebObjectType
hardware.setHwPinMode(node_address,pins_to_set[0],"DOUTPUT")
NameError: global name 'hardware' is not defined
Rinominare i files html ,css e fonts in modo che seguano questa specifica:
home --> pagina home al momento mostra la lista delle zone
display_zone_objects --> pagina che mostra la lista degli oggetti in una zona
scenarios_list --> pagina che mostra la lista degli scenari
mod_scenario --> pagina per modificare uno scenario
login --> pagina di login
If 2 radio nodes have the same address onosCenter will not assign a new address to one of them.
Al momento dopo aggiornamento automatico di onos i seguenti files rimangono quelli vecchi:
tutto nelle cartelle:
cgi
config_files
zones
Ed il file
globalVar.py
Bisognerebbe verificare che sia vero e fare in modo di permettere ad onos di aggiornare in modo intelligente i files di configurazione leggendo i vecchi dati e aggiungendo le variabili non ancora create in quella versione di onos..
Sensore freezer , sensore allagamento.
L'amministratore del sistema deve poter impostare i permessi degli oggetti e delle zone per ogni utente e gruppo , da sviluppare la parte grafica e la gestione ( l'utente che non ha permesso di vedere lo stato dell'oggetto vedrà un punto di domanda oppure una x al posto del valore)
Rendere possibile la configurare degli scenari in modo che mandino una mail con testo personalizzabile agli utenti inseribile in un txt..
Oppure rendere possibile personalizzare la mail che viene mandata al cambio dello stato di un oggetto.
programmare una order list per prototipi e versioni Beta.
afterDelayFunctionsToRun è una lista di operazioni che l'utente può configurare per essere esguite un certo tempo dopo che le condizioni dello scenario si sono verificate.
In questo modo lo scenario esegue le operazioni in functionsToRun quando si verificano le sue condizioni , poi crea un'altro scenario con all'interno delle functionsToRun le operazioni che erano in afterDelayFunctionsToRun , e come condizione del nuovo scenario mette un tempo che è l'orario quando si sono verificate le prime condizioni sommato al delay impostato dall'utente.
Con questa soluzione si possono creare condizioni molto avanzate come ad esempio :
Se passa qualcuno ed attiva un sensore allora onos accende una luce e dopo 5 minuti la spegne.
Queste cose si possono fare anche usando due scenari separati..
Per il momento l'interfaccia web per configurare gli scenari è già abbastanza complessa quindi forse non è il caso di sviluppare un ramo di operazioni aggiuntive...
Per usare ulteriore hardware fatto da terzi è necessario sviluppare la parte che gestisce mqtt con onos.
Il broker è installabile su openwrt quindi basta implementare la parte python del client.
Se esiste già la pagina partire sempre dalla pagina html generata da onos perchè ha sempre le ultime modifiche apportate.
Tutte le pagine che hanno un form devono avere :
parte html con tutti gli input....
Altrimenti onos non riceve i dati post..Tutti gli input devono avere il parametro name="un nome" altrimenti non passano la variabile tramite il post e si perdono ore a capire il perchè non funziona :P
Esempio:
Tutti i pulsanti "invio" che servono per inviare dati del form devono avere la voce submit, non devono essere solamente link html:
Esempio:
We need a way for the user to select the serial port where arduino is connected to the pc.
Graphical or text parameters? for now it will connect to the first one found ..
Spesso onos cerca di mandare più volete un cambio di indirizzo al nodo radio .
Per creare una nuova zona si clicka sul pulsante nuova sul menù destro a comparsa una volta ckickato il pulsante si viene reindirizzati ad una nuova pagina ?
se si una volta clickato sul submit sarebbe utile essere reindirizzati alla pagina con la lista delle zone
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.