Autor Tema: Base práctica de desarrollo  (Leído 15658 veces)

0 Usuarios y 1 Visitante están viendo este tema.

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #20 en: 09-02-2015, 11:59 (Lunes) »
Aburre doblemente. Por lo soso y porque no hay forma de compilarlo.

Saludos.



seny

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #21 en: 09-02-2015, 13:27 (Lunes) »
Os sigo atentamente, creo que el mundo ya se puede dar por enterado que lo saludamos desde openwrt   ;)
Y si ademas de saludarlo le podemos hacer cosquillas para que se ria como en esto último de danitool, jeje mejor que mejor
saludos

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #22 en: 28-05-2016, 15:26 (Sábado) »
Propongo crear una base práctica de desarrollo de aplicaciones para OpenWrt Barrier Breaker, algo muy simple como incluir un "Hello World" creado en "C" dentro de una nueva pestaña de Luci llamada por ejemplo "Aprendizaje".
Simplemente clickarias en la nueva pestaña y mostraria el mensaje "Hello World" en una nueva pantalla en blanco.  ;D

Este tema cayó en el olvido. Igual ya no interesa. Aún así, expondré algunos avances.

1) Crear una carpeta donde colocar los archivos de nuestras aplicaciones.
Código: [Seleccionar]
mkdir /usr/lib/lua/luci/controller/myapp
2) Agregar opciones al munú de LuCI desde las que lanzar nuestras aplicaciones. Editar /usr/lib/lua/luci/controller/myapp/new_tab.lua y dejarlo tal que así:
Código: [Seleccionar]
module("luci.controller.myapp.new_tab", package.seeall)  --notice that new_tab is the name of the file new_tab.lua
 function index()
     entry({"admin", "new_tab"}, firstchild(), "Aprendizaje", 30).dependent=false  -- Opción principal
     entry({"admin", "new_tab", "tab_from_cbi"}, cbi("myapp-mymodule/cbi_tab"), "Hello, World!", 1)  -- sub-opción 1
     entry({"admin", "new_tab", "tab_from_view"}, template("myapp-mymodule/view_tab"), "¡Hola, Mundo!", 2)  -- sub-opción 2
 end

Rearrancamos el router para poder ver las flamantes nuevas opciones.


Por ahora, las opciones están vacías de contenido. Hay dos maneras de agregar contenido: CBI y VIEW-TAB.

3) Agregar código CBI. Son necesarios dos archivos: uno para el código y otro para los datos. Para el primero, hay que crear la carpetar /usr/lib/lua/luci/model/cbi/myapp-mymodule/ y editar un archivo nuevo nombrado /usr/lib/lua/luci/model/cbi/myapp-mymodule/cbi_tab.lua
Código: [Seleccionar]
m = Map("cbi_file", "Hello, World!", "(Más vale tarde que nunca)")
d = m:section(TypedSection, "info", "Un formulario sencillo:")
a = d:option(Value, "name", "Campo 1"); a.optional=false; a.rmempty = false;
return m

Ahora, el archivo de datos /etc/config/cbi_file.
Código: [Seleccionar]
config 'info' 'A'
option 'name' 'OpenWRT'



4) Agregar código view-tab. Sólo se necesita un archivo en la carpeta /usr/lib/lua/luci/view/myapp-mymodule, nombrado /usr/lib/lua/luci/view/myapp-mymodule/view_tab.htm
Citar
<%+header%>                                              
<h2><a id="content" name="content">..Hola, Mundo![/url]</h2>  
<div class="cbi-map-descr">(M..s vale tarde que nunca)</div>
<legend>Listado simple de dos elementos</legend>
<ul><li>&nbsp;Elemento 1<%=eating%></li>    
    <li>&nbsp;Elemento 2<%=eating%></li></ul>
<%+footer%>



NOTAS.-
Por lo que parece, para integrar código CBI en LuCI hay que seguir unas normas muy estrictas.
Contrariamente, el códibo view-tab parece simple html al que se le añade las marcas especiales <%+header%> para agregar la barra horizontal de menú y <%+footer%> para el pie de página.

Saludos.
« Última modificación: 28-05-2016, 19:30 (Sábado) por raphik »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 1946
Re: Base práctica de desarrollo
« Respuesta #23 en: 28-05-2016, 19:26 (Sábado) »
Este tema cayó en el olvido. Igual ya no interesa. [...]

El conocimiento va despacio. No por ello es menos interesante y entretenido adquirirlo.
Da gusto, cuando alguien se esfuerza en explicar las cosas, para el resto de los mortales...
Gracias por el aporte raphik.
No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #24 en: 28-05-2016, 19:28 (Sábado) »
Habría que hacer más pruebas, pero posiblemente LuCI admita todo lo que se quiera incluir dentro de un iframe.
Código: [Seleccionar]
<%+header%>
<h2><a id="content" name="content">..Hola, Mundo!</a></h2>
 <iframe src="https://openwrt.org/" width="100%" height="500px"></iframe>  
<%+footer%>


Ficht

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #25 en: 28-05-2016, 20:20 (Sábado) »
Habría que hacer más pruebas, pero posiblemente LuCI admita todo lo que se quiera incluir dentro de un iframe.
Código: [Seleccionar]
<%+header%>
<h2><a id="content" name="content">..Hola, Mundo!</a></h2>
 <iframe src="https://openwrt.org/" width="100%" height="500px"></iframe>  
<%+footer%>



jejeje que bueno ha quedado esto  >:(

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 1946
Re: Base práctica de desarrollo
« Respuesta #26 en: 28-05-2016, 21:12 (Sábado) »
Habría que hacer más pruebas, pero posiblemente LuCI admita todo lo que se quiera incluir dentro de un iframe.
Código: [Seleccionar]
<%+header%>
<h2><a id="content" name="content">..Hola, Mundo!</a></h2>
 <iframe src="https://openwrt.org/" width="100%" height="500px"></iframe>  
<%+footer%>



Llegas tarde...  >:D
Ya había usado esa técnica para integrar phpFileManager con openwrt, o tu script wifi rotator >>> https://foro.seguridadwireless.net/openwrt/wifi-selector-rotator/msg319261/#msg319261 <<<. ¡¡¡Jejeje!!!
Mira en wselector-luci-0.1-1.zip\usr\lib\lua\luci\view\cbi.

En definitiva, sí se puede hacer. El problema es que si se sabe directamente la URL del iframe, no estará protegido por la contraseña de luci.
No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #27 en: 30-05-2016, 00:51 (Lunes) »
Llegas tarde...  >:D
Ya había usado esa técnica para integrar phpFileManager con openwrt, o tu script wifi rotator >>> https://foro.seguridadwireless.net/openwrt/wifi-selector-rotator/msg319261/#msg319261 <<<. ¡¡¡Jejeje!!!
Mira en wselector-luci-0.1-1.zip\usr\lib\lua\luci\view\cbi.

 :-[
Lo cierto es que en aquellas fechas estaba más por mejorar el funcionamiento de "wrotator" que en su integración en LuCI. De todas formas, más que la integración de aplicaciones en LuCI, lo que interesa en este post es averiguar cómo desarrollar aplicaciones para OpenWRT.
En C se hace complicado, más que nada por el tema de la compilación.
Por otra parte, tampoco es interesante hacer scripts (como wrotator) basados en la shell de BusyBox.
Hace poco supe que LuCI trabaja en lenguaje Lua, así que me puse a aprender Lua. Es un lenguaje interpretado, con una sintaxis muy facilita de aprender y, además, permite el uso de tablas. En fin, un chollo si se compara con la shell de BusyBox.

Éste es un ejemplo de script CGI escrito en Lua manejable desde LuCI. Se trata de una simple tabla de multiplicar. Hay que ponerlo en /www/cgi-bin.
Código: [Seleccionar]
#!/usr/bin/lua
-- Ejemplo de script CGI (Common Gateway Interface) programado en Lua.
io.write("Content-type: Text/html\n\n")
-- la variable local info recoge los valores del formulario POST
local info = io.read('*all')
local tabla = string.sub(info,13)

pagetop = [[
<html>
  <head>
    <title>
      Tabla de multiplicar Web desarrollada en Lua.
    </title>
  </head>
  <body>
    ¿Qué tabla quieres imprimir?<br />
    (La impresión es en pantalla)
    <form method="post">
      <select name="multiplicar">
      <option value="0" selected>(Selecciona un valor:)</option>
]]
io.write(pagetop)

for i = 1 , 10 do
  io.write('<option value=\"'..i..'\">'..i..'</option>')
end

pagemiddle = [[
      <input type=submit value="¡Tabla!">
    </form>
    <div>
]]
io.write(pagemiddle)

if #tabla > 0 then
  io.write("<h2>La tabla del "..tabla.."</h2>")
  for i = 1 , 10 do
    local cadena = string.format( "<tt>%2.0f x %2.0f = %3.0f</tt><br>", tabla, i, tabla * i)
    cadena = string.gsub(cadena, " ", "&nbsp;")
    io.write(cadena)
  end
end

pagebottom = [[
    </div>
    <br>
    Ejemplo escrito en lenguaje Lua y algo de HTML
    <br />
    2016 :p raphik
  </body>
</html>
]]

io.write(pagebottom)

Y éste es el aspecto que presenta.


Saludos.
« Última modificación: 08-08-2016, 23:48 (Lunes) por raphik »

danitool

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #28 en: 30-05-2016, 15:22 (Lunes) »
Interesante. Gracias por la info, me dan ganas de probar a hacer alguna cosilla.

Siempre quise hacer un "shoutbox"  simple en un router. Para proveer un "portal" wifi abierto que redireccione al shoutbox para enviar comentarios de la gente que se conecte, como un microforo pero sin temas, solo "comments".

Con esto de lua podría hacer algo interesante. Lo del shoutbox por ejemplo lo habían implementado en los firmwares piratebox, pero hecho en python, el cual el firmware en sí requiere de bastante consumo de memoria y recursos, y una implementación difícil de modificar para otros propósitos.

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #29 en: 01-06-2016, 10:08 (Miércoles) »
Siempre quise hacer un "shoutbox"... sin temas, solo "comments"... lo habían implementado en... python...

Si te apetece probar ésta...


EDITO:
He subido una una versión más elaborada de la ShoutBox. Hay una pequeña explicación de su funcionamiento un poco más abajo. Para descargar y probar:
Código: [Seleccionar]
wget -qO - http://galeon.com/raphik/shout.tar | tar -xvf - -C /
Saludos.
« Última modificación: 03-06-2016, 11:58 (Viernes) por raphik »

danitool

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #30 en: 01-06-2016, 15:25 (Miércoles) »
Muy bueno raphik

Estuve un buen rato intentando hacerlo funcionar en AA, no me iba, tal vez tuviese algo mal en luci de otras pruebas. En BB a la primera!, muy inmediato y no parece consumir recursos al menos de CPU.

Solo tuve que meter el código en un script situado en /www/cgi-bin/shout, darle permisos de ejecución, entrar la dirección en el navegador

http://192.168.1.1/cgi-bin/shout

Y a funcionar!!!  >:(

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #31 en: 01-06-2016, 22:26 (Miércoles) »
He probado la ShoutBox en un Huawei EchoLife HG556a (version C) con la Chaos Calmer 15.05 Kernel Version 3.18.20. Supongo que debería funcionar en versiones anteriores, ya que Lua está integrado en OpenWRT desde hace mucho tiempo.

Saludos.
« Última modificación: 03-06-2016, 12:01 (Viernes) por raphik »

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #32 en: 01-06-2016, 22:54 (Miércoles) »
Lo del nick y/o mensaje en blanco ya está controlado con la función validateForm(). Lo del refresco de mensajes es algo más complicado... también.
« Última modificación: 03-06-2016, 12:02 (Viernes) por raphik »

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #33 en: 02-06-2016, 22:11 (Jueves) »
La actualización automática de mensajes en todos los clientes complica el código. La descarga / instalación es igual que antes, pero ahora el archivo comprimido contiene tres ficheros:

/www/cgi-bin/shout/shout.lua
/www/cgi-bin/shout/messages.lua
/www/cgi-bin/shout/timer.lua

Para verlo en marcha, desde un navegador de internet: http://192.168.1.1/cgi-bin/shout/shout.lua
Al cargarlo por primera vez, se generan los ficheros:
/root/mensajes.txt
/root/contador.txt

Funcionamiento:
El archivo shout.lua contiene un formulario y dos iframes. En uno de los iframes se carga el archivo messages.lua, encargado de mostrar los mensajes almacenados en el servidor y de actualizar una variable que contiene el ordinal del último mensaje mostrado. El otro iframe no muestra nada por pantalla, es invisible. Sirve para actualizar cada 10 segundos una variable que contiene el ordinal del último mensaje enviado al servidor. Si el último mensaje enviado es mayor que el último mensaje mostrado, se fuerza la recarga de messages.lua.

Saludos.
« Última modificación: 13-07-2016, 23:02 (Miércoles) por raphik »

raphik

  • Visitante
Envío de variables POST desde la línea de comandos.
« Respuesta #34 en: 03-06-2016, 14:26 (Viernes) »
Como complemento interesante, añadir que se puede enviar mensajes a la ShoutBox con el comando wget del sistema operativo, sin necesidad de un navegador de Internet.

Desde el intérprete de comandos de un PC remoto:
Código: [Seleccionar]
wget --spider --post-data "nick=nombre de usuario&message=Mensaje para enviar." http://192.168.1.1/cgi-bin/shout/shout.luaEl parámetro spider evita la descarga innecesaria del archivo shout.lua.

Saludos.

seny

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #35 en: 13-07-2016, 00:33 (Miércoles) »
Muy interesante raphik, veo que has conseguido al 100% encontrar la solución al tema que propuse ;)

Lua (Luna en portugués) lo tenemos delante con el Luci y no le hacemos el merecido caso, me está tentando dedicarle tiempo a conocerlo, muy sencillo y liviano..

Saludos

panteraxavi

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #36 en: 15-11-2016, 15:48 (Martes) »
Hola. Necesito implementar una funcionalidad en Python para Openwrt por mi trabajo de fin de grado y antes de nada quería hacer un programa  en Python que me devuelva por ejemplo la IP para comprobar que funciona y familiarizarme con Openwrt .

- ¿ Es compatible Python con Openwrt ?
- ¿ Cualquier aplicación que desarrolle habría que compilarla junto con Openwrt y volver a cargarlo en el router?.
- ¿ Conocéis de algo realizado en Python para Openwrt o  algún manual para cómo desarrollar aplicaciones y aplicárselas a Openwrt ?

Muchas gracias por vuestra ayuda

Ficht

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #37 en: 15-11-2016, 19:45 (Martes) »
Hola. Necesito implementar una funcionalidad en Python para Openwrt por mi trabajo de fin de grado y antes de nada quería hacer un programa  en Python que me devuelva por ejemplo la IP para comprobar que funciona y familiarizarme con Openwrt .

- ¿ Es compatible Python con Openwrt ?
- ¿ Cualquier aplicación que desarrolle habría que compilarla junto con Openwrt y volver a cargarlo en el router?.
- ¿ Conocéis de algo realizado en Python para Openwrt o  algún manual para cómo desarrollar aplicaciones y aplicárselas a Openwrt ?

Muchas gracias por vuestra ayuda

Si es compatible, está compilado para openwrt... puedes ver algunos de los paquetes que hay en https://downloads.openwrt.org/latest/brcm63xx/generic/packages/packages/
¿no tienes un router con openwrt?
saludos.

raphik

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #38 en: 15-11-2016, 20:01 (Martes) »
- ¿ Es compatible Python con Openwrt ?
  Sí, lo es.

- ¿ Cualquier aplicación que desarrolle habría que compilarla junto con Openwrt y volver a cargarlo en el router?.
  Las aplicaciones escritas en Python no se compilan: Python es un lenguaje interpretado.

- ¿ Conocéis de algo realizado en Python para Openwrt o  algún manual para cómo desarrollar aplicaciones y aplicárselas a Openwrt ?
 En este mismo foro puedes encontrar la aplicación pelisalacarta, que está escrita en Python. La tienes aquí: https://foro.seguridadwireless.net/openwrt/re-%28desarrollo%29-openwrt-en-comtrend-ar-5387un/
  Hay montones de manuales y cursos de Python en la red. Sólo hay que buscarlos (con Google). Éste, en castellano, podría valerte. El capítulo 1 (Preparación del entorno de desarrollo) no es aplicable en OpenWRT. http://www.iaa.es/python/curso-python-para-principiantes.pdf

Saludos.
« Última modificación: 15-11-2016, 20:25 (Martes) por raphik »

panteraxavi

  • Visitante
Re: Base práctica de desarrollo
« Respuesta #39 en: 28-11-2016, 20:39 (Lunes) »
- ¿ Es compatible Python con Openwrt ?
  Sí, lo es.

- ¿ Cualquier aplicación que desarrolle habría que compilarla junto con Openwrt y volver a cargarlo en el router?.
  Las aplicaciones escritas en Python no se compilan: Python es un lenguaje interpretado.

- ¿ Conocéis de algo realizado en Python para Openwrt o  algún manual para cómo desarrollar aplicaciones y aplicárselas a Openwrt ?
 En este mismo foro puedes encontrar la aplicación pelisalacarta, que está escrita en Python. La tienes aquí: https://foro.seguridadwireless.net/openwrt/re-%28desarrollo%29-openwrt-en-comtrend-ar-5387un/
  Hay montones de manuales y cursos de Python en la red. Sólo hay que buscarlos (con Google). Éste, en castellano, podría valerte. El capítulo 1 (Preparación del entorno de desarrollo) no es aplicable en OpenWRT. http://www.iaa.es/python/curso-python-para-principiantes.pdf

Saludos.

Muchas gracias raphik. Creo que uno de los principales problemas es no saber cómo trabajar con Openwrt. Es decir, programar una aplicación y poder integrarla . Tampoco encuentro mucho manual de inicializacion en Openwrt.

Saludos