Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SW]Pagina web de configuración del nodo #15

Open
darkjavi opened this issue Jan 25, 2016 · 10 comments
Open

[SW]Pagina web de configuración del nodo #15

darkjavi opened this issue Jan 25, 2016 · 10 comments

Comments

@darkjavi
Copy link
Contributor

Preparar pequeña pagina html de campos/valores para la la configuración del nodo.
Esta pagina la servirá el propio nodo, no hace falta que tenga muchas florituras, pues solo se va a usar para la config inicial.

@darkjavi darkjavi modified the milestone: JarvisFirmware 0.8 Feb 2, 2016
@darkjavi
Copy link
Contributor Author

Parámetros mas prioritarios para la pagina web:

ID del nodo
Tipo de nodo
Esssid wifi
password wifi
Ip del server (aka Jarvis)
Puerto del server

@darkjavi darkjavi changed the title Pagina web de configuración del nodo [SW]Pagina web de configuración del nodo Feb 28, 2016
@novvere
Copy link

novvere commented Dec 27, 2016

Tengo el formulario hecho en espWebServer pero estoy buscando el mejor sitio para meterlo y tener acceso a la configuración.

@darkjavi
Copy link
Contributor Author

Genial Miguel!
Pues a ver si encontramos un ratito que coincidamos en mks y vemos como integrar el codigo que tienes en el repo

@trastejantEdu
Copy link
Contributor

Si! Proposito de año nuevo! que no se nos escape enero sin reunirnos para organizar Jarvis! ;-)

@novvere
Copy link

novvere commented May 25, 2017

A la hora de mostrar en tipo de nodo en el formulario web de configuración me encuentro con un problema. La lista de tipos de nodos definida en settings.h es un enum, ¿de donde puedo sacar un array con los nombres de cada uno y que esté siempre sincronizada con el enum? ¿creo un array estático de nombres en el mismo fichero de cabecera?

@darkjavi
Copy link
Contributor Author

Me he visto varias veces en el mismo problema y nunca he dado con una solución sencilla para enumerar un enum y sacar los nombres de de cada uno de los elementos de manera totalmente automática, pues el enum al final son etiquetas que representan un valor entero(0,1,2...)

Creo que lo más sencillo es lo que dices, meter una función en el settings.h que devuelva un array con los nombres en el mismo orden en el que están en el enum, y cuando se añade un nuevo tipo de nodo en el settings se añade también a esa función. Como están en el mismo orden la posicion en el array coincide con el indice del enum que representa.

Algo en plan...

static std::vector<String> getNodeTypes()
{
  std::vector<String> nodeTypes;
  nodeTypes << "unknownModule" << "unConfiguredModule" << "simpleSwitchModule" << "etc etc"

  return nodeTypes
}

Asi desde otras partes del código puedes obtener la lista de nodos con su nombre en String, y a la hora de meter más solo hay que añadirlos en esa función.

@balrog-kun
Copy link

No es que haga diferencia notable pero un array estatico tiene la ventaja de que lo generas solo una vez y tienes solo una copia. Y si es un array del tipo C antiguo se puede definir de manera independiente del orden de los enums:

const char *nodeType[] = {
[unknownModule] = "unknownModule",
etc,
};

O con un switch () en una funcion. Tambien hay truquitos feos del C para no escribir lo mismo mas de una vez pero no se usan en practica (en sensorino si), y por lo visto hay truquitos nuevos en las ultimas versiones de C++.

@darkjavi
Copy link
Contributor Author

darkjavi commented May 28, 2017

Si, en efecto hacerlo con array estático ahorra unos bytes de memoria. Igual es una cosa personal de que le tengo bastante tirria a los arrays estáticos de C y prefiero gastar unos bytes para tener métodos de alto nivel p.e. .count() para poder poder iterar cómodamente.

//array dinamico
for(int i = 0 ; i < array.count() ; i++)

//array estatico
for(int i = 0 ; i < (sizeof(array)/sizeof(tipoDeDato))) ; i++)

También creo que la primera forma es mas fácil de entender para los newbies

@balrog-kun
Copy link

Si, ya que usamos C++ es buena idea aprovecharlo. Aun asi el vector puede ser estatico para no re-generarlo todas las veces que se llama la funcion y devolver referenca haria que el que llama no pierda tiempo volviendo a copiarlo implicitamente. Tambien debe poderse hacer de manera que no dependa del orden de los enums (parece que desde C++11 han hecho mas facil inicializar un std::vector, en versiones anteriores es a base de un array C o dinamicamente nodeType[unknownModule] = "unknownModule";). Son detalles pero ya que estams comentando preferencias..

Respecto a los bucles en los proyectos que hay se ve que el enum al final tiene un valor adicional que puedes usar de tope para los bucles,

enum nodeTypes {
   unknownModule,
   ...,

   __maxNodeType
};

Si es solo un array de strings algunas veces se añade un NULL para poder iterar con for (auto i = array; i; i++) ... sin los sizeof.

@novvere
Copy link

novvere commented May 30, 2017

Lo estoy haciendo con un vector estático que en C++11 se puede inicializar igual que un array.

El número de valores del emun se calcula como dice Andrew con el último elemento del enum, el número de elementos del vector se puede calcular de un modo algo menos fino con LINE . Al final, se genera un error de compilación con static_assert si los dos números no coinciden, mejor detectar errores en compilación que en tiempo de ejecución.

Ahora lo compilaré en el ESP para ver si funciona todo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants