opalenzuela / dominoOSE

Domino OSE: Domotics for Arduino (OpenDomo OS compatible)
http://es.opendomo.org
11 stars 6 forks source link

Validar integración con OpenDomoOS2.1 #39

Closed opalenzuela closed 9 years ago

opalenzuela commented 10 years ago

La nueva versión de OpenDomoOS incluye un nuevo mecanismo de integración con DominoOSE, que deberá ser validado.

S3b4Bus0 commented 10 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..

opalenzuela commented 10 years ago

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.

S3b4Bus0 commented 10 years ago

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.

opalenzuela commented 10 years ago

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

S3b4Bus0 commented 10 years ago

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??

opalenzuela commented 10 years ago

Por ahora no; únicamente queremos acceder a ellos y controlar los puertos. De momento, la configuración se hace aparte.

cosmopaco commented 10 years ago

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.

cosmopaco commented 10 years ago

Hace tanto que no lo toco el tema que no recordaba....

Como esta actualmente no responde a comandos HTTP.

S3b4Bus0 commented 10 years ago

Me encuentro armando el banco de pruebas, en breve estoy reportando estado actual y resultado de las pruebas.

opalenzuela commented 10 years ago

@cosmopaco , ¿quieres decir que no tiene interfaz web? Creo recordar que esto funcionaba desde las primeras versiónes!!

cosmopaco commented 10 years ago

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;
}
opalenzuela commented 10 years ago

@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

Shegar81 commented 10 years ago

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

cosmopaco commented 10 years ago

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.????

opalenzuela commented 10 years ago

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?

mrsero commented 9 years ago

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

opalenzuela commented 9 years ago

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"?

mrsero commented 9 years ago

ejecute el script que pusiste pero no obtengo ninguna salida.

opalenzuela commented 9 years ago

¿Tienes el servicio odauto levantado?

 /usr/local/opendomo/daemons/odauto.sh start
mrsero commented 9 years ago

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

opalenzuela commented 9 years ago

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?

mrsero commented 9 years ago

No he creado ningun archivo de configuracion en /etc... y el archivo domino.sh me da un error al intentar descargarlo

opalenzuela commented 9 years ago

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"
mrsero commented 9 years ago

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}'

WARN: ODControl not responding. Trying later

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

opalenzuela commented 9 years ago

La IP va sin los braces {}

mrsero commented 9 years ago

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
opalenzuela commented 9 years ago

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
opalenzuela commented 9 years ago

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.

mrsero commented 9 years ago

No se si podre ayudaros en algo, no tengo muchos conocimientos de programacion Pero tengo un arduino ethernet y ganas de hechar una mano

opalenzuela commented 9 years ago

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.

mrsero commented 9 years ago

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

opalenzuela commented 9 years ago

Nos vamos acercando... ¿Podrías colgar la salida del siguiente comando?

 wget -q http://192.168.1.50/lsc -O -
mrsero commented 9 years ago

sin salida

opalenzuela commented 9 years ago

Disculpa, prueba sin la "-q"

mrsero commented 9 years ago

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

opalenzuela commented 9 years ago

Ok, lo veo. Está sacando basura para los puertos que no son digitales ni analógicos.

Vuelvo a subir cambios.

opalenzuela commented 9 years ago

Por cierto, crea a mano el directorio /etc/opendomo/control/domino/ que veo que no lo tienes.

mrsero commented 9 years ago

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

opalenzuela commented 9 years ago

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".

opalenzuela commented 9 years ago

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 -
mrsero commented 9 years ago

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>
Domino
opalenzuela commented 9 years ago

Correcto pues. Por ahora doy por cerrado este issue y renumero versión a 1.1.5.

Gracias por la colaboración!!

mrsero commented 9 years ago

Una cuestion sigo sin conseguir que opendomo vea a domino desde la interface grafica saludos de nada gracias a ti

opalenzuela commented 9 years ago

Deberás reiniciar el servicio completo:

 /usr/local/opendomo/daemons/odauto.sh stop

(espera unos segundos)

 /usr/local/opendomo/daemons/odauto.sh start

En cualquier caso, esto ya será cosa de OpenDomoOS y no de DominoOSE.

mrsero commented 9 years ago

ok oriol muchas gracias ahora esta conectado

mrsero commented 9 years ago

detecta los puertos pero se pueden configurar desde opendomo, y en mostrar controladores se queda loading