-
Notifications
You must be signed in to change notification settings - Fork 14
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
Comments
Parámetros mas prioritarios para la pagina web: ID del nodo |
Tengo el formulario hecho en espWebServer pero estoy buscando el mejor sitio para meterlo y tener acceso a la configuración. |
Genial Miguel! |
Si! Proposito de año nuevo! que no se nos escape enero sin reunirnos para organizar Jarvis! ;-) |
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? |
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. |
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[] = { 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++. |
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 |
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 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,
Si es solo un array de strings algunas veces se añade un NULL para poder iterar con |
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. |
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.
The text was updated successfully, but these errors were encountered: