Closed opalenzuela closed 9 years ago
consulta, se va a continuar manteniendo y desarrollando dominoOSE??? pregunto porque lo veo con actividad casi nula. Soy de Argentina, y es imposible conseguir algun odcontrol. Y me interesaria participar en el proyecto..
El desarrollo y mantenimiento de DominoOSE ha sido trasladado a la comunidad de usuarios, pero es cierto que el nivel de actividad es muy bajo. Si nos puedes ayudar a reanimarlo sería muy positivo, porque otros usuarios también están interesados en ello.
Intentaremos reanimarlo aportando algo. Pregunta, el codigo del ODControl actualizado, esta disponible? como para ir portandolo al dominoOSE... Porque hacer ingenieria inversa sobre OpenDomoOS seria bastante tedioso.
No es necesario hacer ingeniería inversa, simplemente validar que los comandos "lsc" y "set" funcionen correctamente a través de HTTP, que es la forma en que se realiza la comunicación a partir de OpenDomoOS 2.1
OK, sigo analizando un poco el codigo. Pero pregunto toda la comunicacion con opendomo es a traves de estos dos comandos?? Tambien se podrian configurar los domino desde opendomo??
Por ahora no; únicamente queremos acceder a ellos y controlar los puertos. De momento, la configuración se hace aparte.
Hola de nuevo. Especifica exactamente como es enviado el comando y que respuesta tiene que dar domino. O un enlace al manual. Esa parte hace mucho tiempo que funcionaba correctamente al menos en modo Telnet.
Por otro lado podíais mojaros un poco y mirar si funciona o decir que errores existen.
Hace tanto que no lo toco el tema que no recordaba....
Como esta actualmente no responde a comandos HTTP.
Me encuentro armando el banco de pruebas, en breve estoy reportando estado actual y resultado de las pruebas.
@cosmopaco , ¿quieres decir que no tiene interfaz web? Creo recordar que esto funcionaba desde las primeras versiónes!!
Si, tiene interfaz web. Pero solo responden en pagina html al comando lst.
De hecho creo que eso esta intacto desde la versión original.
int readFromHTTPPort(char *instruction){
char b=0;
int i = 0;
char barfound = 0;
char value[6];
char pname[6] = "";
char buffer[50];
//boolean uristarted = false;
// listen for incoming clients
EthernetClient client = Webserver.available();
if (client) {
// HTTP TESTING
while (client.available()) {
b = client.read();
if ((i < BUFFERSIZE) && (b >= 32 && b <= 126)) {
instruction[i] = b;
i++;
instruction[i] = 0;
}
if (b == ' ' && barfound == 1) { // First space after slash. Quitting
break;
}
if (b == '/') {
if (barfound==0) { // First slash: following "GET " command
i = 0;
barfound = 1;
} else { // Second slash, probably HTTP/1.1 block. Quitting.
break;
}
}
}
Serial.print("HTTP CMD:");
Serial.println(instruction);
if ((instruction[0]=='l' && instruction[1]=='s' && instruction[2]=='t') || i<=1) {
// Port list
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println(); // Space between headers and body
client.print(flstrn(str_http_header_1,buffer,50));
delay(1);
client.print(flstrn(str_http_header_2,buffer,50));
delay(1);
client.print(flstrn(str_http_header_3,buffer,50));
delay(1);
client.print(flstrn(str_http_header_4,buffer,50));
delay(1);
client.print(flstrn(str_http_header_5,buffer,50));
delay(1);
client.print(flstrn(str_http_header_6,buffer,50));
delay(1);
for(i=0;i<TOTALPORTS;i++) {
value[0] = 0;
eeprom_get_str(pname, i*EMPORTSLOT, 6);
pname[sizeof(pname) - 1] = 0;
if (ISDIGITAL(i)) {
if (ISINPUT(i)){
client.print("<li class=DI><b>");
client.print(pname);
if (ports[i].value != LOW) {
client.print("</b><a class=ON>");
}else{
client.print("</b><a class=OFF>");
}
}else{
client.print("<li class=DO><b>");
client.print(pname);
if (ports[i].value != LOW) {
client.print("</b><a class=ON href='set+");
client.print(pname);
client.print("+off'>on");
}else{
client.print("</b><a class=OFF href='set+");
client.print(pname);
client.print("+on'>off");
}
}
client.println("</a></li>");
} else if (ISANALOG(i)) {
client.print("<li class=AI><b>");
itoan(ports[i].value, value, sizeof(value));
client.print(pname);
client.print("</b><a>");
client.print(value);
client.println("</a></li>");
}
delay(10);
}
client.println(flstrn(str_http_footer_1,buffer,50));
client.print(VERSION);
client.println(flstrn(str_http_footer_2,buffer,50));
//client.println("</ul><div id=ftr></div></body></html>");
} else {
output = SERIALPORT; // Do not show any output
if (processInstruction(instruction)==true){
client.println("HTTP/1.1 307 Temporary redirect"); // HTTP Code: correct (redirect)
client.println("Location: /lst");
} else {
client.println("HTTP/1.1 500 Internal server error"); // HTTP Code: Internal server error
client.println("Location: /lst");
}
}
delay(10);
client.stop();
// END HTTP TESTING
return true;
}
return false;
}
@cosmopaco y @sebabuso, a partir de la versión 2.0, ODControl no va a tener ningún puerto telnet para comunicación; será o bien a través de comandos HTTP o mediante el protocolo cifrado. En el caso de la versión para Arduino, el algoritmo de cifrado es demasiado pesado así que nos limitaremos a usar HTTP.
Esto significa que el código del sketch podrá simplificarse mucho si nos cargamos la parte de telnet, y ganaremos el espacio necesario para añadir otras funciones que puedan ser más interesantes.
Por cierto, en el código veo un "else" y después un processInstruction, o sea que sí se están soportando el resto de comandos. Faltará implementar dentro de processInstruction el soporte para "lsc", que debería devolver un listado de puertos con este formato:
do002:DOM_:OFF
do003:DOMc:OFF
do004:DOM_:OFF
di000:DIM_:OFF
di001:DIM_:OFF
di002:DIM_:OFF
di003:DIM_:OFF
di004:DIM_:OFF
ao000:AOM_:+0000.0000:+00000|00100:a5:00005
ao001:AOM_:+0000.0000:+00000|00100:a5:00005
ai000:AIM_:+0000.0000:+00000|00020:a5:00005
ai001:AIM_:+0000.0240:+00000|00020:a5:00005
Aunque creo recordar que el Issue #2 ya lo implementaba. ¿Lo podéis verificar mediante este comando?
http://169.254.0.5/lsc
Gracias
Buenas,
He realizado pruebas y no me salen los controladores en el Opendomo. NO me aparecen. He implementado la última issue que tenemos aquí.
Como dato he querido introducirlo manualmente y como DOmino no me lo encontraba pero parece que indicando como si fuera ODcontrol transferiera datos pero finalmente no lo acababa capturando.
Saludos
opalenzuela no entiendo que indica el valor a5
ao000:AOM_:+0000.0000:+00000|00100:a5:00005
En realidad no entiendo por que un puerto analógico tiene tantos datos.????
ODControl usa un gran número de parámetros para gestionar los puertos analógicos. En el caso de DominoOSE, bastaría con el primer fragmento:
ao000:AOM_:+0000.0000:+00000|00100
Que sería: nombre del puerto, tipo, valor y rango. El resto se pueden ignorar.
@Shegar81 ¿A qué te refieres con que no te aparecen los controladores? ¿Has configurado el dispositivo y has reiniciado el servicio Automatismos?
Hola Tengo instalada la ultima version de Domino y no consiguo que OpenDomo encuentra el dispositivo he probado poniendo 192.168.x.x http://192.168.x.x http://192.168.x.x/lst http://192.168.x.x/lsc
la version
nc 192.168.1.50 1729
ver
devkt versn 1.1.4 14:40:05 Nov 29 2014
comando lst y lsc responden por consola, por http hago lsc y me sale igual que un lst. Es como si me redireccionara a lst
Cuando OpenDomoOS valida si la URL introducida se corresponde a un dispositivo, ejecuta el siguiente comando con los datos introducidos:
if test "$1" = "validate" && ! test -z "$2"
then
CONFIG="$2"
source $CONFIG
#TODO Whenever "ver" is adapted to indicate the UID, adapt this query to obtain it
# and use it as the device internal name instead of the URL/IP
if wget $URL/lsc -O $TMPFILE
then
if grep DONE $TMPFILE
then
exit 0
else
exit 2
fi
else
exit 1
fi
else
CONFIG="$1"
fi
O sea, que primero ejecuta esto:
if wget $URL/lsc -O $TMPFILE
Y luego mira si el archivo contiene la palabra "DONE":
if grep DONE $TMPFILE
¿Puedes mirar si la salida del "lsc" por HTTP contiene ese "DONE"?
ejecute el script que pusiste pero no obtengo ninguna salida.
¿Tienes el servicio odauto levantado?
/usr/local/opendomo/daemons/odauto.sh start
parece que si
ps aux | grep odauto admin 1483 0.5 0.2 2852 1364 ? S 08:02 0:02 /bin/sh /usr/local/opendomo/daemons/odauto.sh background
si hago odauto.sh me devuelve un error
sh odauto.sh start [....] Starting ODAUTO service...odauto.sh: line 67: odauto.sh: command not found done.
saludos
Efectivamente, parece que sí está en marcha.
Vamos a hacer una cosa: para estar seguros de que trabajamos sobre el mismo archivo, mejor descárgatelo directamente desde el repositorio:
cd /usr/local/opendomo/bindings/
wget https://raw.githubusercontent.com/opalenzuela/opendomo-automation/master/usr/local/opendomo/bindings/domino.sh
chmod +x domino.sh
Y ahora prueba de validar la conexión de tu DominoOSE:
./domino.sh /etc/opendomo/control/{nombre de tu archivo}.conf
¿Qué salida obtienes?
No he creado ningun archivo de configuracion en /etc... y el archivo domino.sh me da un error al intentar descargarlo
Ok. Empecemos por ahí pues. Crea uno con este contenido en /etc/opendomo/control/:
URL=http://{Tu IP}
TYPE="domino"
REFRESH=10
USER=""
PASS=""
DEVNAME="domino"
esto es lo que me responde
sh /usr/local/opendomo/bindings/domino.sh /etc/opendomo/control/domino-salon.conf Sourcing from /etc/opendomo/control/domino-salon.conf --2014-12-03 08:44:19-- http://%7B192.168.1.50%7D/lsc Resolving {192.168.1.50} ({192.168.1.50})... failed: Name or service not known. wget: unable to resolve host address `{192.168.1.50}'
cat: /var/www/data/domino.odauto.tmp: No such file or directory rm: cannot remove`/var/opendomo/tmp/domino.lst': No such file or directory
La IP va sin los braces {}
perdon
# sh /usr/local/opendomo/bindings/domino.sh /etc/opendomo/control/domino-salon.conf
Sourcing from /etc/opendomo/control/domino-salon.conf
--2014-12-03 08:48:28-- http://192.168.1.50/lsc
Connecting to 192.168.1.50:80... connected.
HTTP request sent, awaiting response... 307 Temporary redirect
Location: /lst [following]
--2014-12-03 08:48:29-- http://192.168.1.50/lst
Connecting to 192.168.1.50:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `/var/opendomo/tmp/domino.tmp'
[ <=> ] 866 1.58K/s in 0.5s
2014-12-03 08:48:29 (1.58 KB/s) - `/var/opendomo/tmp/domino.tmp' saved [866]
#ERR: The query ended with an error
<html>
<head><title>Domino</title><meta name=viewport content='width=320'/><link rel=stylesheet type='text/css' href='http://cloud.opendomo.com/odctp/ar.css' /><script src='http://cloud.opendomo.com/odctp/ar.js'></script></head><body><div id=header></div><ul id=frm class=lst><li class=DI><b>di002</b><a class=ON></a></li>
<li class=DI><b>di003</b><a class=ON></a></li>
<li class=DI><b>di005</b><a class=OFF></a></li>
<li class=DO><b>do006</b><a class=OFF href='set+do006+on'>off</a></li>
<li class=DO><b>do007</b><a class=OFF href='set+do007+on'>off</a></li>
<li class=DO><b>do008</b><a class=OFF href='set+do008+on'>off</a></li>
<li class=DO><b>do009</b><a class=OFF href='set+do009+on'>off</a></li>
<li class=AI><b>ai000</b><a>00253</a></li>
<li class=AI><b>ai001</b><a>00024</a></li>
</ul><a id=ftr href=http://opendomo.com>v
1.1.4 </a></body></html>
cat: /var/www/data/domino.odauto.tmp: No such file or directory
rm: cannot remove `/var/opendomo/tmp/domino.lst': No such file or directory
Perfecto!
Bueno, el error está en que DominoOSE no está devolviendo bien la salida. Al parecer, cuando le pedimos el "lsc" hace una simple redirección a "lst", y este último sale en formato HTML. Tal como se indica al principio de esta conversación, DominoOSE debería estar devolviendo el siguiente formato para el comando "lsc":
do002:DOM_:OFF
do003:DOMc:OFF
do004:DOM_:OFF
di000:DIM_:OFF
di001:DIM_:OFF
di002:DIM_:OFF
di003:DIM_:OFF
di004:DIM_:OFF
ao000:AOM_:+0000.0000:+00000|00100:a5:00005
ao001:AOM_:+0000.0000:+00000|00100:a5:00005
ai000:AIM_:+0000.0000:+00000|00020:a5:00005
ai001:AIM_:+0000.0240:+00000|00020:a5:00005
DONE
Puedo intentar aplicar los cambios, pero no dispongo de un Arduino Ethernet para validarlos. Tal vez @cosmopaco o @sebabuso puedan echar un cable con las pruebas.
No se si podre ayudaros en algo, no tengo muchos conocimientos de programacion Pero tengo un arduino ethernet y ganas de hechar una mano
Acabo de subir una modificación sobre el Sketch. Es un cambio a ciegas, puede que no compile, pero la esencia de lo que necesitamos está ahí. Cargando ese Sketch en el Arduino Ethernet debería bastar para poder solucionar ese problema de compatibilidad.
esta es la salida del domino.sh
OpenDomoOS:/etc/opendomo/control# sh /usr/local/opendomo/bindings/domino.sh /etc/opendomo/control/domino-salon.conf
Sourcing from /etc/opendomo/control/domino-salon.conf
--2014-12-03 09:14:57-- http://192.168.1.50/lsc
Connecting to 192.168.1.50:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: `/var/opendomo/tmp/domino.tmp'
[ <=> ] 401 767B/s in 0.5s
2014-12-03 09:14:57 (767 B/s) - `/var/opendomo/tmp/domino.tmp' saved [401]
Response with DONE. Continue. Missing /etc/opendomo/control/domino/xxxrxxxxtxdi002.info /usr/local/opendomo/bindings/domino.sh: line 105: /etc/opendomo/control/domino/xxxrxxxxtxdi002.info: No such file or directory /usr/local/opendomo/bindings/domino.sh: line 132: /etc/opendomo/control/domino/xxxrxxxxtxdi002.info: No such file or directory /usr/local/opendomo/bindings/domino.sh: line 133: /etc/opendomo/control/domino/xxxrxxxxtxdi002.info: No such file or directory /usr/local/opendomo/bindings/domino.sh: line 140: /etc/opendomo/control/domino/xxxrxxxxtxdi002.info: No such file or directory
Nos vamos acercando... ¿Podrías colgar la salida del siguiente comando?
wget -q http://192.168.1.50/lsc -O -
sin salida
Disculpa, prueba sin la "-q"
te vale esto
wget http://192.168.1.50/lsc cat lsc.3 xxxrxxxxtxdi002:DIM:ON di003:DIM:ON xxx01di005:DIM:OFF do006:DOM:OFF do007:DOM:OFF do008:DOM:OFF do009:DOM:OFF xxx02xxx03xxx04xxx05ai000:AIM:00253:+00000|00020:a5:00005 ai001:AIM_:00024:+00000|00020:a5:00005 ai002ai003ai004ai005vt000vt001vt002vt003vt004vt005vt006vt007vt008vt009vt010vt011vt012vt013vt014vt015vt016vt017vt018vt019vt020vt021vt022vt023vt024vt025vt026vt027vt028vt029DONE
Ok, lo veo. Está sacando basura para los puertos que no son digitales ni analógicos.
Vuelvo a subir cambios.
Por cierto, crea a mano el directorio /etc/opendomo/control/domino/ que veo que no lo tienes.
esta es la nueva salida
root@OpenDomoOS:/etc/opendomo/control# wget http://192.168.1.50/lsc -o - root@OpenDomoOS:/etc/opendomo/control# cat lsc.7 di002:DIM:ON di003:DIM:ON di005:DIM:OFF do006:DOM:OFF do007:DOM:OFF do008:DOM:OFF do009:DOM:OFF ai000:AIM:00253:+00000|00020:a5:00005 ai001:AIM_:00024:+00000|00020:a5:00005 DONE
y creo el directorio
Excelente. Ahora debería ser capaz de detectar y autoconfigurar los puertos.
El siguiente paso ya será que sea capaz de aplicar modificar los puertos de salida mediante el comando "set".
Para validar si el Sketch tiene la función de asignación bien, puedes intentar activar y desactivar un puerto (el que tengas algo conectado a él) mediante este comando:
wget http://192.168.1.50/set+do009+on -O -
wget http://192.168.1.50/set+do009+off -O -
si que se activa el puerto
OpenDomoOS:/etc/opendomo/control# wget http://192.168.1.50/set+do007+on -O -
--2014-12-03 09:42:01-- http://192.168.1.50/set+do007+on
Connecting to 192.168.1.50:80... connected.
HTTP request sent, awaiting response... 307 Temporary redirect
Location: /lst [following]
--2014-12-03 09:42:01-- http://192.168.1.50/lst
Connecting to 192.168.1.50:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `STDOUT'
[<=> ] 0 --.-K/s <html>
La nueva versión de OpenDomoOS incluye un nuevo mecanismo de integración con DominoOSE, que deberá ser validado.