SlideShare une entreprise Scribd logo
1  sur  77
Télécharger pour lire hors ligne
Domótica

www.voipnovatos.es

Alberto Sagredo Castro
Alberto Sagredo Castro

¿Quién soy?	

• Alberto Sagredo Castro	

• @albersag	

• Alicantino de adopción.	

• Entusiasta de mi trabajo y autodidacta. 	

• Formación Asterisk, Kamailio.	

• Consultoría e Ingeniería en VoIP.	

• Más info http://www.linkedin.com/in/albersag
www.voipnovatos.es
Alberto Sagredo Castro

Tópicos de la domótica
• La domótica es cara.	

• La domótica es complicada.	

• La domótica sólo la tiene Bill Gates en su
casa.	


• La domótica es exclusiva.	

• La domótica es propietaria y cerrada.
www.voipnovatos.es
Alberto Sagredo Castro

Realidad de la domótica
• La domótica NO es cara.	

• La domótica NO es complicada.	

• La domótica supone un coste de un 1 % de
la vivienda.	


• La domótica es de ámbito plural.	

• La domótica puede ser lo abierta que
queráis.

www.voipnovatos.es
¿Para qué sirve?

Alberto Sagredo Castro

• Eficiencia y Ahorro energético	

• Seguridad (Intrusión, inundación,

incendio....)Accionamiento remoto de dispositivos	


• Confort, control.	

• Ocio/Comunicaciones Multimedia	

• eSalud	

• Robótica de servicios (limpieza, cortar césped.)
www.voipnovatos.es
Historia de la Domótica
Protocolo X10	

• Protocolo que nace en en los 70’s.	

• Comunicación por los cables de electricidad
(Powerline).	


• Depende del cableado iba mejor o peor.	

• Es el más “consolidado”.	

• No hay “feedback” del estado del dispositivo.	

• Usado mucho en entorno Industrial.	

• Direccionamiento limitado de dispositivos (16 x 16 ).
Protocolo 	

• Protocolo creado y controlado por Zensys. Comprado x Sigma Designs	

• Comunicación Wireless en 868 Mhz (EU) 908 Mhz (USA)	

• Red Mesh entre los dispositivos. 	

• El que mayor expansión y apoyo de fabricantes hoy en día.	

• Hay feedback del estado del dispositivo.	

• Fácil instalación y despliegue.	

• Soporte Local de vendedores. (zwave.es)	

• Opciones SW Libre Open-zwave. HW Zensys	

• Bajo Consumo	

• Zwave Alliance con más de 400 fabricantes y 900 dispositivos certificados.	

• Interoperabilidad entre fabricantes buenísima
Protocolo 	

• Especificación de 2004	

• Banda ISM 2.4 Ghz (otra cosa más en esta banda). Aunque se
permite en estándar 868 Mhz (EU) 915 Mhz (USA)	


• Controlador de hasta 65535 nodos. (subredes de 255 nodos)	

• Bajo Consumo	

• Hasta 300 Kb/s	

• Topología estrella, árbol o malla (la más usada).	

• Se espera que sea la más usada o más barata. 	

• Pocos dispositivos. Usado por wattio (Startup Bilbaína)	

• Interoperabilidad entre fabricantes por ver…	

• Especificación IPV6 04/02/2013
Protocolo 	

• IPV6 over Low Power Wireless Personal Area Network	

• Tiene IPV6!! (Olle Johansson would like it!)	

• Estándar del IETF	

• Bajo Consumo	

• Encriptación AES-CCM 128	

• Topología Mesh	

• Tráfico Bidireccional	

• ¿Estándar de futuro?	

• Muy pocos dispositivos. Dispositivos de Laboratorio.	

• Conectado mundialmente a Internet o bien PAN controlada por router
local.	


• OS Contiki

o tinyOS 6lowpan native.
Protocolo 	

• Creado por Belkin	

• Interfaz Wifi a dispositivos domóticos	

• Actualmente tres dispositivos: Interruptor de pared,
interruptor de enchufe y sensor de presencia	


• Protocolo UnPn 	

• Todavía sin API abierta	

• Afortundamente Ingeniería Inversa y Wemo Hacking	

• Para Activar necesario iPhone // Android	

• ¿Interoperabilidad? No pidáis peras al olmo
Protocolo 	

• Creado por Phillips	

• Interfaz Wifi a dispositivos domóticos	

• Control y Color de luces. Orientado a Iluminación	

• Protocolo UnPn 	

• API abierta (http://developers.meethue.com)	

• IPhone / Android needed!	

• Caro
Fabricantes Z-wave
Los más conocidos:	


• Fibaro	

• Everspring	

• Fortrezz	

• Micasaverde (Vera)	

• Zipato	

• Aeon Labs	

• Danfoss
Zipato
• Fabricantes del Zipabox	

• Gateway orientado a la “cloud”	

• API muy abierta , JSON, REST-API	

• Muy abiertos a resolución de bugs	

• En el origen muy desconcertante	

• Gestión y configuración mediante interfaz web. Rules Creator Gráfico	

• 1 año escaso en el mercado	

• Se ha consolidado como una opción a tener en cuenta	

• Dispone de Addons para Zigbee, KNX, y Backup Module.	

• Apps nativas para Android / Iphone	

• Precio aprox 199 euros
Vera Lite
• Fabricado por Micasaverde (USA)	

• Gateway orientado a nube y local	

• API JSON, XML , amplísimas opciones de integración	

• UnPn	

• Soporte de usuarios muy bueno (http://forum.micasaverde.com)	

• Gran Cantidad de Plugins	

• Interfaz Web local.	

• Soporte remoto del fabricante cuando problemas de integración	

• El que tiene más solera.	

• En proceso de cambio. Mejorando web y más modelos de Vera	

• Integración con otros protocolos mediante dongles USB o bien plugins (Wemo) (Phillips Hue)	

• Apps compatibles iPhone/Android	

• Lo puedes encontrar por 170 euros
Vera: Integración
mediante HTTP
Documentados:	


• http://wiki.micasaverde.com/index.php/Luup_Requests	

!

• ACTION: http://ip_address:3480/data_request?

id=action&output_format=xml&DeviceNum=6&serviceId=urn:upnporg:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1	


!

• RUN SCENE: http://ip_address:3480/data_request?id=lu_action&serviceId=urn:micasaverdecom:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=<SceneNum>	


!

• VARIABLE GET: http://ip_address:3480/data_request?id=variableget&DeviceNum=6&serviceId=urn:micasaverdecom:serviceId:DoorLock1&Variable=Status	


!

• VARIABLE SET : http://ip_address:3480/data_request?id=variableset&DeviceNum=6&serviceId=urn:micasaverdecom:serviceId:DoorLock1&Variable=Status&Value=1	


!

• SNAPSHOT CAMERA: http://ip_address:3480/data_request?id=archive_video&cam=8&format=1
Alternativas “Do it
yourself”
Raspberry PI
• Podemos usar un stick USB Zwave como AEON
LABS y user z-wave me	

!
!

• O bien usar una “mochila”	

!
!
Z-wave Me
• Z-wave me lanzó un dispositivo Razberry conectado

directamente al puerto GPIO de la Raspberry PI (http://
razberry.z-wave.me)	


• Puede usarse el USB de AEON LABS también	

!
!
!

• http://en.z-wave.me/
Open Z-wave
• Interfaz Open Source para Zwave 	

	


(https://code.google.com/p/open-zwave)	


• Z-wave me lanzó un dispositivo Razberry conectado

directamente al puerto GPIO de la Raspberry PI (http://
razberry.z-wave.me)	


• Controlar un interruptor con Open z-wave http://
www.agilart.com/blog/open-zwave	

!
!
Open Remote
• Open Source Automation

Platform	


http://www.openremote.org/display/HOME/OpenRemote	


• Se integra con AMX, KNX, Lutron, Z-Wave, 1-Wire,

EnOcean, xPL, Insteon, X10, Infrared, Russound,
GlobalCache, IRTrans, XBMC,VLC, panStamps, Denon
AVR, FreeBox, MythTV, and more.	


• Cross Platform Windows, Linux, Mac, Raspberry Pi, Alix,
Synology, ReadyNAS, QNAP and others.
Aplicaciones
Smartphones
• Existen las propias aplicaciones de los fabricantes
(Zipato,Vera).	


• Las de Android más “potentes” que las que
rondan por Apple Store.	

!
!
!
Demo #1 : Home
Automation Phone System
Elementos Inteligentes:	

- Zipato 	

- Asterisk	

- Raspberry Pi	

- 	

- Instalador
Demo #1 : Home
Automation Phone System
Sensores:	

- Fibaro Wall Plug	

- Fortrezz Siren	

!
Demo #1 : Home
Automation Phone System
Esquema de Funcionamiento: 	


my.zipato.com
Demo #1 : Home
Automation Phone System
Demo #1 : Home
Automation Phone System

Dialplan Asterisk:	

[ivr]

!

exten => s,1,Answer()
exten => s,n,Background(demovoipnovatos)
exten => s,n,Wait(5)
exten => s,n,agi(speech-recog.agi,es)
exten => s,n,Set(PrimeraWord=${CUT(${utterance},x20,1)})
exten => s,n,Set(SegundaWord=${CUT(${utterance},xNN,2)})
exten => s,n,GotoIf($["${utterance}" = "encender luz"]?encenderluz)
exten => s,n,GotoIf($["${utterance}" = "apagar luz"]?apagarluz)
exten => s,n,GotoIf($["${utterance}" = "encender sirena"]?encendersirena)
exten => s,n,GotoIf($["${utterance}" = "encender wemo"]?encenderwemo)
exten => s,n,GotoIf($["${utterance}" = "apagar wemo"]?apagarwemo)
exten => s,n,Verbose(1,El texto reconocido es: ${utterance})
exten => s,n,Verbose(1,Con una probabilidad de acierto: ${confidence})
exten => s,n,Verbose(1,La primera palabra es ${PrimeraWord} y la segunda palabra es ${SegundaWord} )
exten => s,n,Hangup
;exten => 800,n(encenderluz),Set(foo=${CURL(http://lampara.voip2day.voipnovatos.es/encender)})
exten => s,n(encenderluz),System(wget "http://lampara.voip2day.voipnovatos.es/encender")
exten => s,n,Playback(luzencendida)
exten => s,n,Hangup()
;exten => 800,n(apagarluz),Set(foo=${CURL(http://lampara.voip2day.voipnovatos.es/apagar)})
exten => s,n(apagarluz),System(wget "http://lampara.voip2day.voipnovatos.es/apagar")
exten => s,n,Playback(luzapagada)
exten => s,n,Hangup()
exten => s,n(encendersirena),System(wget "http://sirena.voip2day.voipnovatos.es/encender")
exten => s,n,Playback(sirenaencendida)
exten => s,n,Hangup()
exten => s,n(encenderwemo),System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender")
exten => s,n,Playback(wemoencendido)
exten => s,n,Hangup()
exten => s,n(apagarwemo),System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/apagado")
exten => s,n,Playback(wemoapagado)
exten => s,n,Hangup()
Demo #1 : Home
Automation Phone System
Dialplan Asterisk:	

exten => 1,1,System(wget "http://lampara.voip2day.voipnovatos.es/encender")
exten => 1,n,Playback(luzencendida)
exten => 1,n,Hangup()

!

exten => 2,1,System(wget "http://lampara.voip2day.voipnovatos.es/apagar")
exten => 2,n,Playback(luzapagada)
exten => 2,n,Hangup()

!

exten => 3,1,System(wget "http://sirena.voip2day.voipnovatos.es/encender")
exten => 3,n,Playback(sirenaencendida)
exten => 3,n,Hangup()

!

exten => 4,1,System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender")
exten => 4,n,Playback(wemoencendido)
exten => 4,n,Hangup()

!

exten => 5,1,System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/apagar")
exten => 5,n,Playback(wemoapagado)
root@raspberrypi:/var/lib/asterisk/agi-bin#
total 16
drwxr-xr-x 2 root
root
4096 oct 17
drwxr-xr-x 12 asterisk asterisk 4096 nov 2
-rwxr-xr-x 1 root
root
7517 oct 17
root@raspberrypi:/var/lib/asterisk/agi-bin#

ls -al
17:56 .
17:06 ..
17:56 speech-recog.agi
Demo #1 : Home
Automation Phone System
Configuración Apache:	

<VirtualHost [2001:b18:406a::10]:80>
ServerAdmin webmaster@localhost
ServerName lampara.voip2day.voipnovatos.es
DocumentRoot /var/www/lampara

!

!
!

<Directory /var/www/lampara/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn,
error, crit,
# alert, emerg.
LogLevel warn

!

CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Demo #1 : Home
Automation Phone System
Script Encendido PHP	

<html>
<head>
<title>Encendido Lampara IDC IPV6</title>
</head>
<body>
<?php
echo file_get_contents('https://my.zipato.com/zipato-web/remoting/
attribute/set?serial=XXXXXXXXXXXXXX&ep=xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxx&apiKey=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx&state=true');
?>
</body>
</html>
Demo #1 : Home
Automation Phone System
Configuración Zipato
Demo #1 : Home
Automation Phone System
Configuración FIBARO Virtual Switch
Demo #1 : Home
Automation Phone System
Demo #2 : Teleasistencia
Elementos Inteligentes:	

- Zipato 	

- Asterisk	

- Raspberry Pi 	

- Instalador
Demo #2 : Teleasistencia
Actuadores:	

- Fibaro Key Fob	

- Fortrezz Siren
Demo #2 : Teleasistencia
Esquema de Funcionamiento: 	


my.zipato.com
Demo #2 : Teleasistencia
Configuración Zipato
Demo #2 : Teleasistencia
Configuración FIBARO Keyfob	


Los HTTP Request son realizados localmente
Demo #2 : Teleasistencia
Configuración Fortrezz Siren	


Los HTTP Request son realizados localmente
Demo #2 : Teleasistencia
Regla
Demo #2 : Teleasistencia
PHP .call file :

<html>
<head>
<title>Llamada Asterisk IPV4</title>
</head>
<body>
<?php
$numbertocall = "CALLCENTER";
$context="extensiones";
$extension="105";
$vars = "";
$touchtime = "";
$time = time();
$callfile = "call_" . $time . ".call";
$startcallfile ="/tmp/" . $callfile;
$endcallfile = "/var/spool/asterisk/outgoing/" . $callfile;

!

$cfile = fopen($startcallfile,"ab");
fwrite($cfile,"Channel: SIP/Vozcom/" . $numbertocall . "n");
fwrite($cfile,"MaxRetries: 1n");
fwrite($cfile,"RetryTime: 60n");
fwrite($cfile,"WaitTime: 30n");
fwrite($cfile,"Context: " . $context . "n");
fwrite($cfile,"Extension: " . $extension . "n");
if ($vars != "")
{
fwrite($cfile,"Set: " . $vars . "n");
}
fclose($cfile);

!

chmod($startcallfile,0777);
if ($touchtime != "")
{
list($hour,$minute,$second,$month,$day,$year) = split('-',$touchtime);
$ctime = mktime($hour,$minute,$second,$month,$day,$year);
touch($startcallfile,$ctime,$ctime);
}
rename($startcallfile,$endcallfile);

!
!

?>
</body>
</html>
Demo #2 : Teleasistencia
Configuración Apache:	

<VirtualHost *:8082>
ServerAdmin webmaster@localhost
ServerName asterisk.voip2day.voipnovatos.es
DocumentRoot /var/www/asterisk
<Directory /var/www/asterisk/llamar>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
<Directory /var/www/asterisk/alarma>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

!
!
!

ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Demo #2 : Teleasistencia
PHP Encendido / Apagado	

<html>
<head>
<title>Encendido Lampara IDC IPV6</title>
</head>
<body>
<?php
echo file_get_contents(‘https://my.zipato.com/zipato-web/remoting/attribute/set?……………………..’);

!
!

?>
</body>
</html>
Demo #2 : Teleasistencia
Dialplan Asterisk	

exten => 105,1,SIPAddHeader(Call-Info:;Answer-After=0)
exten => 105,n,Dial(SIP/${EXTEN})
exten => 105,n,Hangup
Demo #3 : Energy Call
Generator
Elementos Inteligentes:	

- Zipato	

- Asterisk	

- Raspberry Pi 	

- Instalador
Demo #3 : Energy Call
Generator
Sensores:	

- Fibaro Wall Plug	

- Fortrezz Siren Alarm	

!
Demo #3 : Energy Call
Generator
Esquema de Funcionamiento: 	


my.zipato.com
Demo #3 : Energy Call
Generator
Configuración Zipato
Demo #3 : Energy Call
Generator
Regla Zipato. Forma fácil
Demo #3 : Energy Call
Generator
O bien haremos consultas mediante JSON	

<?php
#include ("config.php");
$url = 'http://my.zipato.com:8080/zipato-web/json/Initialize';
$username = 'username;
$password = 'password';
$json = json_decode(file_get_contents($url));
$sid = 'jsessionid';
$none = 'nonce';
$id = $json->{$sid};
$nonce = $json->{$none};
$temp = sha1 ($password);
$temp2 = $nonce.$temp;
$pass = sha1($temp2);
$data = array("username" => "$username", "password" => "$pass", "method" => "SHA1" );
$data_url = "username=$username&password=$pass&method=SHA1";
$ch = curl_init('http://my.zipato.com:8080/zipato-web/json/Login');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_COOKIE, 'JSESSIONID='.$id);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://my.zipato.com:8080/zipato-web/rest/meters/values/");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_COOKIE, 'JSESSIONID='.$id.'; Path=/zipato-web/; HttpOnly');
curl_setopt($c, CURLOPT_HEADER, false);
$output = curl_exec($c);
Demo #3 : Energy Call
Generator
O bien haremos consultas mediante JSON	

$c = curl_init();
curl_setopt($c, CURLOPT_URL, "http://my.zipato.com:8080/zipato-web/rest/meters/");
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_COOKIE, 'JSESSIONID='.$id.'; Path=/zipato-web/; HttpOnly');
curl_setopt($c, CURLOPT_HEADER, false);
$output = curl_exec($c);
$json = json_decode ($output,true);
$timestamp = time();
$date = $today = date("Y-m-d H:i:s");

!

foreach ($json as $meter) {
//var_dump($meter);
$name = $meter['name'];
foreach ($meter['attributes'] as $attribute)
{
if ($attribute['definition']['name'] == "CURRENT_CONSUMPTION")
{
$consumo = round($attribute['value'],2);
}
}

!
//echo ($consumo);
!
system("asterisk -rx 'database put consumo lampara $consumo'");
!
}
Demo #3 : Energy Call
Generator
Dialplan Asterisk	

[extensiones]

!
!

exten => _9X.,1,Dial(SIP/vozcom/${EXTEN})
exten => _9X.,n,Hangup

!

exten => _6X.,1,Dial(SIP/vozcom/${EXTEN})
exten => _6X.,n,Hangup

!

exten
exten
exten
exten

!

=>
=>
=>
=>

locucion,1,Answer()
locucion,n,Wait(2)
locucion,n,Playback(Alarma en ventana)
locucion,n,Hangup

exten => checkconsumo,1,GotoIf($[${DB(consumo/lampara)} > 0]?ok:nook)
exten => checkconsumo,n(ok),Dial(SIP/vozcom/666777111,20,tTrR)
exten => checkconsumo,n(nook),Hangup
Demo #3 : Energy Call
Generator
Crontab	

*/1 * * * * php /var/www/sensor/vera/datos/captura.php
*/1 * * * * php /var/www/sensor/zipato/datos/captura.php
*/1 * * * * /usr/sbin/asterisk -rx "console dial checkconsumo@extensiones"
Demo #4 : Wemo Phone
System
Elementos Inteligentes:	

- Wemo Switch	

- Asterisk	

- Raspberry Pi 	

- Instalador
Demo #4 : Wemo Phone
System
Esquema de Funcionamiento:
Demo #4 : Wemo Phone
System
El encendido y Apagado lo haremos mediante PHP
y un script en bash	

<html>
<head>
<title>Encendido Lampara IDC IPV6</title>
</head>
<body>
<?php
System ("/var/www/wemo/enchufe/encender/wemo.sh 10.0.1.105 ON")
?>
</body>
</html>

Es importante saber la dirección IP del WEMO y el puerto que
levanta. Lo localizaremos mirando el DHCP Server y el puerto con
nmap
Demo #4 : Wemo Phone
System

#!/bin/sh
#
# WeMo Control Script
#
# rich@netmagi.com
#
# Usage: ./wemo_control IP_ADDRESS ON/OFF/GETSTATE/GETSIGNALSTRENGTH/GETFRIENDLYNAME
#
#

!

IP=$1
COMMAND=$2

!
#PORTTEST=$(curl -s $IP:49152 | grep "404")
!
#if [ "$PORTTEST" = "" ]
#
then
PORT=49153
#else
#
PORT=49152
#fi

!

if [ "$1" = "" ]
then
echo "Usage: ./wemo_control IP_ADDRESS ON/OFF/GETSTATE/GETSIGNALSTRENGTH/GETFRIENDLYNAME"
else

!
!
!

if [ "$2" = "GETSTATE" ]
then

curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION: "urn:Belkin:service:basicevent:
1#GetBinaryState"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetBinaryState xmlns:u="urn:Belkin:service:basicevent:1"><BinaryState>1</
BinaryState></u:GetBinaryState></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 |
grep "<BinaryState" | cut -d">" -f2 | cut -d "<" -f1 | sed 's/0/OFF/g' | sed 's/1/ON/g'

!
!

elif [ "$2" = "ON" ]
then
Demo #4 : Wemo Phone
System
!

curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION: "urn:Belkin:service:basicevent:
1#SetBinaryState"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetBinaryState xmlns:u="urn:Belkin:service:basicevent:1"><BinaryState>1</
BinaryState></u:SetBinaryState></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 |
grep "<BinaryState" | cut -d">" -f2 | cut -d "<" -f1

!
!
!

elif [ "$2" = "OFF" ]
then

curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION: "urn:Belkin:service:basicevent:
1#SetBinaryState"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetBinaryState xmlns:u="urn:Belkin:service:basicevent:1"><BinaryState>0</
BinaryState></u:SetBinaryState></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 |
grep "<BinaryState" | cut -d">" -f2 | cut -d "<" -f1

!
!
!

elif [ "$2" = "GETSIGNALSTRENGTH" ]
then

curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION:
"urn:Belkin:service:basicevent:1#GetSignalStrength"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/
soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetSignalStrength xmlns:u="urn:Belkin:service:basicevent:
1"><GetSignalStrength>0</GetSignalStrength></u:GetSignalStrength></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 |
grep "<SignalStrength" | cut -d">" -f2 | cut -d "<" -f1

!
!
!

elif [ "$2" = "GETFRIENDLYNAME" ]
then

curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION: "urn:Belkin:service:basicevent:
1#ChangeFriendlyName"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:ChangeFriendlyName xmlns:u="urn:Belkin:service:basicevent:1"><FriendlyName>Pool
Filter</FriendlyName></u:ChangeFriendlyName></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 |
grep "<FriendlyName" | cut -d">" -f2 | cut -d "<" -f1

!

else
Demo #4 : Wemo Phone
System
!
!
!

fi

else
echo
echo
echo
echo
fi

"COMMAND NOT RECOGNIZED"
""
"Usage: ./wemo_control IP_ADDRESS ON/OFF/GETSTATE/GETSIGNALSTRENGTH/GETFRIENDLYNAME"
""
Demo #4 : Wemo Phone
System

Dialplan Asterisk:	

[ivr]

!

exten => s,1,Answer()
exten => s,n,Background(demovoipnovatos)
exten => s,n,Wait(5)
exten => s,n,agi(speech-recog.agi,es)
exten => s,n,Set(PrimeraWord=${CUT(${utterance},x20,1)})
exten => s,n,Set(SegundaWord=${CUT(${utterance},xNN,2)})
exten => s,n,GotoIf($["${utterance}" = "encender luz"]?encenderluz)
exten => s,n,GotoIf($["${utterance}" = "apagar luz"]?apagarluz)
exten => s,n,GotoIf($["${utterance}" = "encender sirena"]?encendersirena)
exten => s,n,GotoIf($["${utterance}" = "encender wemo"]?encenderwemo)
exten => s,n,GotoIf($["${utterance}" = “apagar wemo"]?apagarwemo)
exten => s,n,Verbose(1,El texto reconocido es: ${utterance})
exten => s,n,Verbose(1,Con una probabilidad de acierto: ${confidence})
exten => s,n,Verbose(1,La primera palabra es ${PrimeraWord} y la segunda palabra es ${SegundaWord} )
exten => s,n,Hangup
;exten => 800,n(encenderluz),Set(foo=${CURL(http://lampara.voip2day.voipnovatos.es/encender)})
exten => s,n(encenderluz),System(wget "http://lampara.voip2day.voipnovatos.es/encender")
exten => s,n,Playback(luzencendida)
exten => s,n,Hangup()
;exten => 800,n(apagarluz),Set(foo=${CURL(http://lampara.voip2day.voipnovatos.es/apagar)})
exten => s,n(apagarluz),System(wget "http://lampara.voip2day.voipnovatos.es/apagar")
exten => s,n,Playback(luzapagada)
exten => s,n,Hangup()
exten => s,n(encendersirena),System(wget "http://sirena.voip2day.voipnovatos.es/encender")
exten => s,n,Playback(sirenaencendida)
exten => s,n,Hangup()
exten => s,n(encenderwemo),System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender")
exten => s,n,Playback(wemoencendido)
exten => s,n,Hangup()
exten => s,n(apagarwemo),System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/apagado")
exten => s,n,Playback(wemoapagado)
exten => s,n,Hangup()
Demo #4 : Wemo Phone
System
Dialplan Asterisk:	

exten => 1,1,System(wget "http://lampara.voip2day.voipnovatos.es/encender")
exten => 1,n,Playback(luzencendida)
exten => 1,n,Hangup()

!

exten => 2,1,System(wget "http://lampara.voip2day.voipnovatos.es/apagar")
exten => 2,n,Playback(luzapagada)
exten => 2,n,Hangup()

!

exten => 3,1,System(wget "http://sirena.voip2day.voipnovatos.es/encender")
exten => 3,n,Playback(sirenaencendida)
exten => 3,n,Hangup()

!

exten => 4,1,System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender")
exten => 4,n,Playback(wemoencendido)
exten => 4,n,Hangup()

!

exten => 5,1,System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender")
exten => 5,n,Playback(wemoapagado)
root@raspberrypi:/var/lib/asterisk/agi-bin#
total 16
drwxr-xr-x 2 root
root
4096 oct 17
drwxr-xr-x 12 asterisk asterisk 4096 nov 2
-rwxr-xr-x 1 root
root
7517 oct 17
root@raspberrypi:/var/lib/asterisk/agi-bin#

ls -al
17:56 .
17:06 ..
17:56 speech-recog.agi
Demo #5 : Phone Call Alarm
Elementos Inteligentes:	

- Vera Lite 	

- Asterisk	

- Raspberry Pi 	

- Instalador
Demo #5 : Phone Call Alarm
Actuadores:	

- Fibaro Door Sensor	

- Everspring Motion Sensor
Demo #5 : Phone Call Alarm
Esquema de Funcionamiento:
Demo #5 : Phone Call Alarm
Configuración Vera Lite
Demo #5 : Phone Call Alarm
Localizar ServID y ID de dispositivo a consultar	


https://sta1.mios.com/locator_json.php?username=xxx
{“units”:
[{“serialNumber":"xxxxxxx","FirmwareVersion":"1.5.622","name":"MTX","ipAddress":"x.x.x.x","users":
["username"],"active_server":"fwd7.mios.com","forwardServers":
[{"hostName":"fwd7.mios.com","primary":true},{"hostName":"fwd5.mios.com","primary":false}]}]}

http://x.x.x.x:3480/data_request?
id=user_data2&output_format=xml
http://x.x.x.x:3480/data_request?
id=user_data2&output_format=json
Demo #5 : Phone Call Alarm
Acceso Remotamente	

https://fwdx.mios.com/username/password/IDUNIT/
data_request?id=lu_status&output_format=json
Demo #5 : Phone Call Alarm
PHP Polling Script
<?php

!
$url = 'http://10.x.x.x:3480/data_request?id=variableget&DeviceNum=148&service
!
$abierta = file_get_contents('http://10.x.x.x:3480/data_request?id=variableget
!
if ($abierta == "0")
{
echo ("nnNo esta Abierta la Ventana. No hacemos nadann");
}

!
else{
!

echo ("nnEsta abierta la ventana. LLamamos al movilnn");
echo file_get_contents('http://10.x.x.x/asterisk/llamar');

!
}
!

?>

$url = 'http://10.x.x.x:3480/data_request?id=variableget&DeviceNum=148&serviceId=urn:micasaverde-com:serviceId:SecuritySensor1&Variable=Tripped';
Demo #5 : Phone Call Alarm
PHP LastTime Tripped Script
<?php

!

$url = 'http://10.x.x.x:3480/data_request?id=variableget&DeviceNum=148&service
$unixtime = time();

!

$abierta = file_get_contents('http://10.x.x.x:3480/data_request?id=variableget

!

$diftiempo=$unixtime - $abierta;

!

echo ($diftiempo);

!

if ($diftiempo > 60 )
{
echo ("nnNo esta Abierta la Ventana. No hacemos nadann");
}

!

else{

!

echo ("nnEsta abierta la ventana. LLamamos al movilnn");
echo file_get_contents('http://10.x.x.x/asterisk/llamar');

!

}
Demo #5 : Phone Call Alarm

Configuración Apache:	


<VirtualHost [2001:b18:406a::11]:80>
ServerAdmin webmaster@localhost
ServerName sensor.voip2day.voipnovatos.es

!

!

!
!
!

DocumentRoot /var/www/sensor
<Directory /var/www/sensor/datos>
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/sensor>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

!
Demo #5 : Phone Call Alarm
PHP .call file :

<html>
<head>
<title>Llamada Asterisk IPV4</title>
</head>
<body>
<?php
$numbertocall = "MOVIL";
$context="extensiones";
$extension="locucion";
$vars = "";
$touchtime = "";
$time = time();
$callfile = "call_" . $time . ".call";
$startcallfile ="/tmp/" . $callfile;
$endcallfile = "/var/spool/asterisk/outgoing/" . $callfile;

!

$cfile = fopen($startcallfile,"ab");
fwrite($cfile,"Channel: SIP/Vozcom/" . $numbertocall . "n");
fwrite($cfile,"MaxRetries: 1n");
fwrite($cfile,"RetryTime: 60n");
fwrite($cfile,"WaitTime: 30n");
fwrite($cfile,"Context: " . $context . "n");
fwrite($cfile,"Extension: " . $extension . "n");
if ($vars != "")
{
fwrite($cfile,"Set: " . $vars . "n");
}
fclose($cfile);

!

chmod($startcallfile,0777);
if ($touchtime != "")
{
list($hour,$minute,$second,$month,$day,$year) = split('-',$touchtime);
$ctime = mktime($hour,$minute,$second,$month,$day,$year);
touch($startcallfile,$ctime,$ctime);
}
rename($startcallfile,$endcallfile);

!
!

?>
</body>
</html>
Demo #5 : Phone Call Alarm
Dialplan Asterisk	

[extensiones]

!
!

exten => _9X.,1,Dial(SIP/vozcom/${EXTEN})
exten => _9X.,n,Hangup

!

exten => _6X.,1,Dial(SIP/vozcom/${EXTEN})
exten => _6X.,n,Hangup

!

exten
exten
exten
extne

!

=>
=>
=>
=>

locucion,1,Answer()
locucion,n,Wait(2)
locucion,n,Playback(Alarma en ventana)
locucion,n,Hangup
Alberto Sagredo Castro

Seguridad
puede controlar como consume
• Si nuestra casa se puede abrir, se no dejarlo abierto a cualquiera
energía, hay que tener cuidado y
(Sentido Común)	


• Si usamos sistemas cloud, creemos en el cloud… con todo lo que
ello conlleva.	

poner contraseñas o
• Si usamos Apache para HTTP request, forma didacta exenta de
certificados (Lo mostrado aquí es una
seguridad)	


• Zwave implícitamente lleva seguridad. Sobre todo dispositivos de
apertura de puertas. 	

• http://research.sensepost.com/cms/resources/conferences/2013/
bh_zwave/Security%20Evaluation%20of%20Z-Wave_WP.pdf
www.voipnovatos.es
Alberto Sagredo Castro

Futuro
• Esta por ver que protocolo se llevará el gato al agua.	

• Seguramente coexistencia de muchos de ellos, y el
integrador jugará a integrar y pelearse para hacerlos
funcionar. 	


• 6LowPAN interesante ver como evoluciona el mercado.	

• 6LowPAN y Zigbee soporte IPV6 (armados para el
futuro).	


• ¿Wemo abrirá su API?	

• ¿Phillips Hue más dispositivos?
www.voipnovatos.es
Alberto Sagredo Castro

¿Preguntas?

www.voipnovatos.es
Alberto Sagredo Castro

Gracias
• A Voip2day por invitarme un año más.	

• A mis hijos y esposa por hacerme féliz y darme razones
para luchar por ellos.	


• A mi mujer por aguantar los cables y las ondas que instalo
en casa.	


• A vosotros por la presencia y atención.	

• A los visitantes de voipnovatos.es por su fidelidad.	

• A voz.com por su apoyo incondicional.	

• A zwave.es por el asesoramiento en domótica.
www.voipnovatos.es
Alberto Sagredo Castro

@ albersag

www.voipnovatos.es

Contenu connexe

Similaire à V2 d2013 alberto sagredo - domótica

Seminario - Bitsense - UADE / Fundacion Proydesa
Seminario - Bitsense - UADE / Fundacion ProydesaSeminario - Bitsense - UADE / Fundacion Proydesa
Seminario - Bitsense - UADE / Fundacion ProydesaBitsense
 
Samsung Enterprise Networks 2016
Samsung Enterprise Networks 2016Samsung Enterprise Networks 2016
Samsung Enterprise Networks 2016Angel Mendieta
 
Inseguridad wireless-sfd- final
Inseguridad wireless-sfd- finalInseguridad wireless-sfd- final
Inseguridad wireless-sfd- finalsp1b0t
 
Qnap Estación Vistualización
Qnap Estación VistualizaciónQnap Estación Vistualización
Qnap Estación VistualizaciónDavid Lira
 
VoIP2DAY2014 Alberto Sagredo
VoIP2DAY2014   Alberto SagredoVoIP2DAY2014   Alberto Sagredo
VoIP2DAY2014 Alberto SagredoVOIP2DAY
 
Presentacion Lexon Axia Livewire 2013
Presentacion Lexon Axia Livewire 2013Presentacion Lexon Axia Livewire 2013
Presentacion Lexon Axia Livewire 2013Lexon S.A.
 
Sesion520244887484415454848 - redes1.pdf
Sesion520244887484415454848 - redes1.pdfSesion520244887484415454848 - redes1.pdf
Sesion520244887484415454848 - redes1.pdfRichardPardo10
 
Presentacion voip
Presentacion voipPresentacion voip
Presentacion voippavel
 
Curso de VoIP / Parte 01: VoIP y Asterisk
Curso de VoIP / Parte 01: VoIP y AsteriskCurso de VoIP / Parte 01: VoIP y Asterisk
Curso de VoIP / Parte 01: VoIP y AsteriskIrontec
 
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...PaloSanto Solutions
 
Fundamentos de telefonia ip
Fundamentos de telefonia ipFundamentos de telefonia ip
Fundamentos de telefonia ipJose Luis Chauca
 

Similaire à V2 d2013 alberto sagredo - domótica (20)

Seminario - Bitsense - UADE / Fundacion Proydesa
Seminario - Bitsense - UADE / Fundacion ProydesaSeminario - Bitsense - UADE / Fundacion Proydesa
Seminario - Bitsense - UADE / Fundacion Proydesa
 
La vo ip
La vo ipLa vo ip
La vo ip
 
Samsung Enterprise Networks 2016
Samsung Enterprise Networks 2016Samsung Enterprise Networks 2016
Samsung Enterprise Networks 2016
 
VozIPv6
VozIPv6VozIPv6
VozIPv6
 
Voz ipv6
Voz ipv6Voz ipv6
Voz ipv6
 
Inseguridad wireless-sfd- final
Inseguridad wireless-sfd- finalInseguridad wireless-sfd- final
Inseguridad wireless-sfd- final
 
Qnap Estación Vistualización
Qnap Estación VistualizaciónQnap Estación Vistualización
Qnap Estación Vistualización
 
Introduccion fpga
Introduccion fpgaIntroduccion fpga
Introduccion fpga
 
RadioVozIP
RadioVozIPRadioVozIP
RadioVozIP
 
VoIP2DAY2014 Alberto Sagredo
VoIP2DAY2014   Alberto SagredoVoIP2DAY2014   Alberto Sagredo
VoIP2DAY2014 Alberto Sagredo
 
Ubnt colombia
Ubnt  colombiaUbnt  colombia
Ubnt colombia
 
Introducción a Asterisk
Introducción a AsteriskIntroducción a Asterisk
Introducción a Asterisk
 
Presentacion Lexon Axia Livewire 2013
Presentacion Lexon Axia Livewire 2013Presentacion Lexon Axia Livewire 2013
Presentacion Lexon Axia Livewire 2013
 
Sesion520244887484415454848 - redes1.pdf
Sesion520244887484415454848 - redes1.pdfSesion520244887484415454848 - redes1.pdf
Sesion520244887484415454848 - redes1.pdf
 
Redes
RedesRedes
Redes
 
Presentacion voip
Presentacion voipPresentacion voip
Presentacion voip
 
Curso de VoIP / Parte 01: VoIP y Asterisk
Curso de VoIP / Parte 01: VoIP y AsteriskCurso de VoIP / Parte 01: VoIP y Asterisk
Curso de VoIP / Parte 01: VoIP y Asterisk
 
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
 
Telefonia
TelefoniaTelefonia
Telefonia
 
Fundamentos de telefonia ip
Fundamentos de telefonia ipFundamentos de telefonia ip
Fundamentos de telefonia ip
 

Dernier

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 

Dernier (15)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

V2 d2013 alberto sagredo - domótica

  • 2. Alberto Sagredo Castro ¿Quién soy? • Alberto Sagredo Castro • @albersag • Alicantino de adopción. • Entusiasta de mi trabajo y autodidacta. • Formación Asterisk, Kamailio. • Consultoría e Ingeniería en VoIP. • Más info http://www.linkedin.com/in/albersag www.voipnovatos.es
  • 3. Alberto Sagredo Castro Tópicos de la domótica • La domótica es cara. • La domótica es complicada. • La domótica sólo la tiene Bill Gates en su casa. • La domótica es exclusiva. • La domótica es propietaria y cerrada. www.voipnovatos.es
  • 4. Alberto Sagredo Castro Realidad de la domótica • La domótica NO es cara. • La domótica NO es complicada. • La domótica supone un coste de un 1 % de la vivienda. • La domótica es de ámbito plural. • La domótica puede ser lo abierta que queráis. www.voipnovatos.es
  • 5. ¿Para qué sirve? Alberto Sagredo Castro • Eficiencia y Ahorro energético • Seguridad (Intrusión, inundación, incendio....)Accionamiento remoto de dispositivos • Confort, control. • Ocio/Comunicaciones Multimedia • eSalud • Robótica de servicios (limpieza, cortar césped.) www.voipnovatos.es
  • 6. Historia de la Domótica
  • 7. Protocolo X10 • Protocolo que nace en en los 70’s. • Comunicación por los cables de electricidad (Powerline). • Depende del cableado iba mejor o peor. • Es el más “consolidado”. • No hay “feedback” del estado del dispositivo. • Usado mucho en entorno Industrial. • Direccionamiento limitado de dispositivos (16 x 16 ).
  • 8. Protocolo • Protocolo creado y controlado por Zensys. Comprado x Sigma Designs • Comunicación Wireless en 868 Mhz (EU) 908 Mhz (USA) • Red Mesh entre los dispositivos. • El que mayor expansión y apoyo de fabricantes hoy en día. • Hay feedback del estado del dispositivo. • Fácil instalación y despliegue. • Soporte Local de vendedores. (zwave.es) • Opciones SW Libre Open-zwave. HW Zensys • Bajo Consumo • Zwave Alliance con más de 400 fabricantes y 900 dispositivos certificados. • Interoperabilidad entre fabricantes buenísima
  • 9. Protocolo • Especificación de 2004 • Banda ISM 2.4 Ghz (otra cosa más en esta banda). Aunque se permite en estándar 868 Mhz (EU) 915 Mhz (USA) • Controlador de hasta 65535 nodos. (subredes de 255 nodos) • Bajo Consumo • Hasta 300 Kb/s • Topología estrella, árbol o malla (la más usada). • Se espera que sea la más usada o más barata. • Pocos dispositivos. Usado por wattio (Startup Bilbaína) • Interoperabilidad entre fabricantes por ver… • Especificación IPV6 04/02/2013
  • 10. Protocolo • IPV6 over Low Power Wireless Personal Area Network • Tiene IPV6!! (Olle Johansson would like it!) • Estándar del IETF • Bajo Consumo • Encriptación AES-CCM 128 • Topología Mesh • Tráfico Bidireccional • ¿Estándar de futuro? • Muy pocos dispositivos. Dispositivos de Laboratorio. • Conectado mundialmente a Internet o bien PAN controlada por router local. • OS Contiki o tinyOS 6lowpan native.
  • 11. Protocolo • Creado por Belkin • Interfaz Wifi a dispositivos domóticos • Actualmente tres dispositivos: Interruptor de pared, interruptor de enchufe y sensor de presencia • Protocolo UnPn • Todavía sin API abierta • Afortundamente Ingeniería Inversa y Wemo Hacking • Para Activar necesario iPhone // Android • ¿Interoperabilidad? No pidáis peras al olmo
  • 12. Protocolo • Creado por Phillips • Interfaz Wifi a dispositivos domóticos • Control y Color de luces. Orientado a Iluminación • Protocolo UnPn • API abierta (http://developers.meethue.com) • IPhone / Android needed! • Caro
  • 13. Fabricantes Z-wave Los más conocidos: • Fibaro • Everspring • Fortrezz • Micasaverde (Vera) • Zipato • Aeon Labs • Danfoss
  • 14. Zipato • Fabricantes del Zipabox • Gateway orientado a la “cloud” • API muy abierta , JSON, REST-API • Muy abiertos a resolución de bugs • En el origen muy desconcertante • Gestión y configuración mediante interfaz web. Rules Creator Gráfico • 1 año escaso en el mercado • Se ha consolidado como una opción a tener en cuenta • Dispone de Addons para Zigbee, KNX, y Backup Module. • Apps nativas para Android / Iphone • Precio aprox 199 euros
  • 15. Vera Lite • Fabricado por Micasaverde (USA) • Gateway orientado a nube y local • API JSON, XML , amplísimas opciones de integración • UnPn • Soporte de usuarios muy bueno (http://forum.micasaverde.com) • Gran Cantidad de Plugins • Interfaz Web local. • Soporte remoto del fabricante cuando problemas de integración • El que tiene más solera. • En proceso de cambio. Mejorando web y más modelos de Vera • Integración con otros protocolos mediante dongles USB o bien plugins (Wemo) (Phillips Hue) • Apps compatibles iPhone/Android • Lo puedes encontrar por 170 euros
  • 16. Vera: Integración mediante HTTP Documentados: • http://wiki.micasaverde.com/index.php/Luup_Requests ! • ACTION: http://ip_address:3480/data_request? id=action&output_format=xml&DeviceNum=6&serviceId=urn:upnporg:serviceId:SwitchPower1&action=SetTarget&newTargetValue=1 ! • RUN SCENE: http://ip_address:3480/data_request?id=lu_action&serviceId=urn:micasaverdecom:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=<SceneNum> ! • VARIABLE GET: http://ip_address:3480/data_request?id=variableget&DeviceNum=6&serviceId=urn:micasaverdecom:serviceId:DoorLock1&Variable=Status ! • VARIABLE SET : http://ip_address:3480/data_request?id=variableset&DeviceNum=6&serviceId=urn:micasaverdecom:serviceId:DoorLock1&Variable=Status&Value=1 ! • SNAPSHOT CAMERA: http://ip_address:3480/data_request?id=archive_video&cam=8&format=1
  • 18. Raspberry PI • Podemos usar un stick USB Zwave como AEON LABS y user z-wave me ! ! • O bien usar una “mochila” ! !
  • 19. Z-wave Me • Z-wave me lanzó un dispositivo Razberry conectado directamente al puerto GPIO de la Raspberry PI (http:// razberry.z-wave.me) • Puede usarse el USB de AEON LABS también ! ! ! • http://en.z-wave.me/
  • 20. Open Z-wave • Interfaz Open Source para Zwave (https://code.google.com/p/open-zwave) • Z-wave me lanzó un dispositivo Razberry conectado directamente al puerto GPIO de la Raspberry PI (http:// razberry.z-wave.me) • Controlar un interruptor con Open z-wave http:// www.agilart.com/blog/open-zwave ! !
  • 21. Open Remote • Open Source Automation Platform http://www.openremote.org/display/HOME/OpenRemote • Se integra con AMX, KNX, Lutron, Z-Wave, 1-Wire, EnOcean, xPL, Insteon, X10, Infrared, Russound, GlobalCache, IRTrans, XBMC,VLC, panStamps, Denon AVR, FreeBox, MythTV, and more. • Cross Platform Windows, Linux, Mac, Raspberry Pi, Alix, Synology, ReadyNAS, QNAP and others.
  • 22. Aplicaciones Smartphones • Existen las propias aplicaciones de los fabricantes (Zipato,Vera). • Las de Android más “potentes” que las que rondan por Apple Store. ! ! !
  • 23. Demo #1 : Home Automation Phone System Elementos Inteligentes: - Zipato - Asterisk - Raspberry Pi - - Instalador
  • 24. Demo #1 : Home Automation Phone System Sensores: - Fibaro Wall Plug - Fortrezz Siren !
  • 25. Demo #1 : Home Automation Phone System Esquema de Funcionamiento: my.zipato.com
  • 26. Demo #1 : Home Automation Phone System
  • 27. Demo #1 : Home Automation Phone System Dialplan Asterisk: [ivr] ! exten => s,1,Answer() exten => s,n,Background(demovoipnovatos) exten => s,n,Wait(5) exten => s,n,agi(speech-recog.agi,es) exten => s,n,Set(PrimeraWord=${CUT(${utterance},x20,1)}) exten => s,n,Set(SegundaWord=${CUT(${utterance},xNN,2)}) exten => s,n,GotoIf($["${utterance}" = "encender luz"]?encenderluz) exten => s,n,GotoIf($["${utterance}" = "apagar luz"]?apagarluz) exten => s,n,GotoIf($["${utterance}" = "encender sirena"]?encendersirena) exten => s,n,GotoIf($["${utterance}" = "encender wemo"]?encenderwemo) exten => s,n,GotoIf($["${utterance}" = "apagar wemo"]?apagarwemo) exten => s,n,Verbose(1,El texto reconocido es: ${utterance}) exten => s,n,Verbose(1,Con una probabilidad de acierto: ${confidence}) exten => s,n,Verbose(1,La primera palabra es ${PrimeraWord} y la segunda palabra es ${SegundaWord} ) exten => s,n,Hangup ;exten => 800,n(encenderluz),Set(foo=${CURL(http://lampara.voip2day.voipnovatos.es/encender)}) exten => s,n(encenderluz),System(wget "http://lampara.voip2day.voipnovatos.es/encender") exten => s,n,Playback(luzencendida) exten => s,n,Hangup() ;exten => 800,n(apagarluz),Set(foo=${CURL(http://lampara.voip2day.voipnovatos.es/apagar)}) exten => s,n(apagarluz),System(wget "http://lampara.voip2day.voipnovatos.es/apagar") exten => s,n,Playback(luzapagada) exten => s,n,Hangup() exten => s,n(encendersirena),System(wget "http://sirena.voip2day.voipnovatos.es/encender") exten => s,n,Playback(sirenaencendida) exten => s,n,Hangup() exten => s,n(encenderwemo),System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender") exten => s,n,Playback(wemoencendido) exten => s,n,Hangup() exten => s,n(apagarwemo),System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/apagado") exten => s,n,Playback(wemoapagado) exten => s,n,Hangup()
  • 28. Demo #1 : Home Automation Phone System Dialplan Asterisk: exten => 1,1,System(wget "http://lampara.voip2day.voipnovatos.es/encender") exten => 1,n,Playback(luzencendida) exten => 1,n,Hangup() ! exten => 2,1,System(wget "http://lampara.voip2day.voipnovatos.es/apagar") exten => 2,n,Playback(luzapagada) exten => 2,n,Hangup() ! exten => 3,1,System(wget "http://sirena.voip2day.voipnovatos.es/encender") exten => 3,n,Playback(sirenaencendida) exten => 3,n,Hangup() ! exten => 4,1,System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender") exten => 4,n,Playback(wemoencendido) exten => 4,n,Hangup() ! exten => 5,1,System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/apagar") exten => 5,n,Playback(wemoapagado) root@raspberrypi:/var/lib/asterisk/agi-bin# total 16 drwxr-xr-x 2 root root 4096 oct 17 drwxr-xr-x 12 asterisk asterisk 4096 nov 2 -rwxr-xr-x 1 root root 7517 oct 17 root@raspberrypi:/var/lib/asterisk/agi-bin# ls -al 17:56 . 17:06 .. 17:56 speech-recog.agi
  • 29. Demo #1 : Home Automation Phone System Configuración Apache: <VirtualHost [2001:b18:406a::10]:80> ServerAdmin webmaster@localhost ServerName lampara.voip2day.voipnovatos.es DocumentRoot /var/www/lampara ! ! ! <Directory /var/www/lampara/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn ! CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
  • 30. Demo #1 : Home Automation Phone System Script Encendido PHP <html> <head> <title>Encendido Lampara IDC IPV6</title> </head> <body> <?php echo file_get_contents('https://my.zipato.com/zipato-web/remoting/ attribute/set?serial=XXXXXXXXXXXXXX&ep=xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxx&apiKey=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx&state=true'); ?> </body> </html>
  • 31. Demo #1 : Home Automation Phone System Configuración Zipato
  • 32. Demo #1 : Home Automation Phone System Configuración FIBARO Virtual Switch
  • 33. Demo #1 : Home Automation Phone System
  • 34. Demo #2 : Teleasistencia Elementos Inteligentes: - Zipato - Asterisk - Raspberry Pi - Instalador
  • 35. Demo #2 : Teleasistencia Actuadores: - Fibaro Key Fob - Fortrezz Siren
  • 36. Demo #2 : Teleasistencia Esquema de Funcionamiento: my.zipato.com
  • 37. Demo #2 : Teleasistencia Configuración Zipato
  • 38. Demo #2 : Teleasistencia Configuración FIBARO Keyfob Los HTTP Request son realizados localmente
  • 39. Demo #2 : Teleasistencia Configuración Fortrezz Siren Los HTTP Request son realizados localmente
  • 40. Demo #2 : Teleasistencia Regla
  • 41. Demo #2 : Teleasistencia PHP .call file : <html> <head> <title>Llamada Asterisk IPV4</title> </head> <body> <?php $numbertocall = "CALLCENTER"; $context="extensiones"; $extension="105"; $vars = ""; $touchtime = ""; $time = time(); $callfile = "call_" . $time . ".call"; $startcallfile ="/tmp/" . $callfile; $endcallfile = "/var/spool/asterisk/outgoing/" . $callfile; ! $cfile = fopen($startcallfile,"ab"); fwrite($cfile,"Channel: SIP/Vozcom/" . $numbertocall . "n"); fwrite($cfile,"MaxRetries: 1n"); fwrite($cfile,"RetryTime: 60n"); fwrite($cfile,"WaitTime: 30n"); fwrite($cfile,"Context: " . $context . "n"); fwrite($cfile,"Extension: " . $extension . "n"); if ($vars != "") { fwrite($cfile,"Set: " . $vars . "n"); } fclose($cfile); ! chmod($startcallfile,0777); if ($touchtime != "") { list($hour,$minute,$second,$month,$day,$year) = split('-',$touchtime); $ctime = mktime($hour,$minute,$second,$month,$day,$year); touch($startcallfile,$ctime,$ctime); } rename($startcallfile,$endcallfile); ! ! ?> </body> </html>
  • 42. Demo #2 : Teleasistencia Configuración Apache: <VirtualHost *:8082> ServerAdmin webmaster@localhost ServerName asterisk.voip2day.voipnovatos.es DocumentRoot /var/www/asterisk <Directory /var/www/asterisk/llamar> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> <Directory /var/www/asterisk/alarma> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ! ! ! ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
  • 43. Demo #2 : Teleasistencia PHP Encendido / Apagado <html> <head> <title>Encendido Lampara IDC IPV6</title> </head> <body> <?php echo file_get_contents(‘https://my.zipato.com/zipato-web/remoting/attribute/set?……………………..’); ! ! ?> </body> </html>
  • 44. Demo #2 : Teleasistencia Dialplan Asterisk exten => 105,1,SIPAddHeader(Call-Info:;Answer-After=0) exten => 105,n,Dial(SIP/${EXTEN}) exten => 105,n,Hangup
  • 45. Demo #3 : Energy Call Generator Elementos Inteligentes: - Zipato - Asterisk - Raspberry Pi - Instalador
  • 46. Demo #3 : Energy Call Generator Sensores: - Fibaro Wall Plug - Fortrezz Siren Alarm !
  • 47. Demo #3 : Energy Call Generator Esquema de Funcionamiento: my.zipato.com
  • 48. Demo #3 : Energy Call Generator Configuración Zipato
  • 49. Demo #3 : Energy Call Generator Regla Zipato. Forma fácil
  • 50. Demo #3 : Energy Call Generator O bien haremos consultas mediante JSON <?php #include ("config.php"); $url = 'http://my.zipato.com:8080/zipato-web/json/Initialize'; $username = 'username; $password = 'password'; $json = json_decode(file_get_contents($url)); $sid = 'jsessionid'; $none = 'nonce'; $id = $json->{$sid}; $nonce = $json->{$none}; $temp = sha1 ($password); $temp2 = $nonce.$temp; $pass = sha1($temp2); $data = array("username" => "$username", "password" => "$pass", "method" => "SHA1" ); $data_url = "username=$username&password=$pass&method=SHA1"; $ch = curl_init('http://my.zipato.com:8080/zipato-web/json/Login'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_COOKIE, 'JSESSIONID='.$id); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); $c = curl_init(); curl_setopt($c, CURLOPT_URL, "http://my.zipato.com:8080/zipato-web/rest/meters/values/"); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); curl_setopt($c, CURLOPT_COOKIE, 'JSESSIONID='.$id.'; Path=/zipato-web/; HttpOnly'); curl_setopt($c, CURLOPT_HEADER, false); $output = curl_exec($c);
  • 51. Demo #3 : Energy Call Generator O bien haremos consultas mediante JSON $c = curl_init(); curl_setopt($c, CURLOPT_URL, "http://my.zipato.com:8080/zipato-web/rest/meters/"); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); curl_setopt($c, CURLOPT_COOKIE, 'JSESSIONID='.$id.'; Path=/zipato-web/; HttpOnly'); curl_setopt($c, CURLOPT_HEADER, false); $output = curl_exec($c); $json = json_decode ($output,true); $timestamp = time(); $date = $today = date("Y-m-d H:i:s"); ! foreach ($json as $meter) { //var_dump($meter); $name = $meter['name']; foreach ($meter['attributes'] as $attribute) { if ($attribute['definition']['name'] == "CURRENT_CONSUMPTION") { $consumo = round($attribute['value'],2); } } ! //echo ($consumo); ! system("asterisk -rx 'database put consumo lampara $consumo'"); ! }
  • 52. Demo #3 : Energy Call Generator Dialplan Asterisk [extensiones] ! ! exten => _9X.,1,Dial(SIP/vozcom/${EXTEN}) exten => _9X.,n,Hangup ! exten => _6X.,1,Dial(SIP/vozcom/${EXTEN}) exten => _6X.,n,Hangup ! exten exten exten exten ! => => => => locucion,1,Answer() locucion,n,Wait(2) locucion,n,Playback(Alarma en ventana) locucion,n,Hangup exten => checkconsumo,1,GotoIf($[${DB(consumo/lampara)} > 0]?ok:nook) exten => checkconsumo,n(ok),Dial(SIP/vozcom/666777111,20,tTrR) exten => checkconsumo,n(nook),Hangup
  • 53. Demo #3 : Energy Call Generator Crontab */1 * * * * php /var/www/sensor/vera/datos/captura.php */1 * * * * php /var/www/sensor/zipato/datos/captura.php */1 * * * * /usr/sbin/asterisk -rx "console dial checkconsumo@extensiones"
  • 54. Demo #4 : Wemo Phone System Elementos Inteligentes: - Wemo Switch - Asterisk - Raspberry Pi - Instalador
  • 55. Demo #4 : Wemo Phone System Esquema de Funcionamiento:
  • 56. Demo #4 : Wemo Phone System El encendido y Apagado lo haremos mediante PHP y un script en bash <html> <head> <title>Encendido Lampara IDC IPV6</title> </head> <body> <?php System ("/var/www/wemo/enchufe/encender/wemo.sh 10.0.1.105 ON") ?> </body> </html> Es importante saber la dirección IP del WEMO y el puerto que levanta. Lo localizaremos mirando el DHCP Server y el puerto con nmap
  • 57. Demo #4 : Wemo Phone System #!/bin/sh # # WeMo Control Script # # rich@netmagi.com # # Usage: ./wemo_control IP_ADDRESS ON/OFF/GETSTATE/GETSIGNALSTRENGTH/GETFRIENDLYNAME # # ! IP=$1 COMMAND=$2 ! #PORTTEST=$(curl -s $IP:49152 | grep "404") ! #if [ "$PORTTEST" = "" ] # then PORT=49153 #else # PORT=49152 #fi ! if [ "$1" = "" ] then echo "Usage: ./wemo_control IP_ADDRESS ON/OFF/GETSTATE/GETSIGNALSTRENGTH/GETFRIENDLYNAME" else ! ! ! if [ "$2" = "GETSTATE" ] then curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION: "urn:Belkin:service:basicevent: 1#GetBinaryState"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetBinaryState xmlns:u="urn:Belkin:service:basicevent:1"><BinaryState>1</ BinaryState></u:GetBinaryState></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 | grep "<BinaryState" | cut -d">" -f2 | cut -d "<" -f1 | sed 's/0/OFF/g' | sed 's/1/ON/g' ! ! elif [ "$2" = "ON" ] then
  • 58. Demo #4 : Wemo Phone System ! curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION: "urn:Belkin:service:basicevent: 1#SetBinaryState"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetBinaryState xmlns:u="urn:Belkin:service:basicevent:1"><BinaryState>1</ BinaryState></u:SetBinaryState></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 | grep "<BinaryState" | cut -d">" -f2 | cut -d "<" -f1 ! ! ! elif [ "$2" = "OFF" ] then curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION: "urn:Belkin:service:basicevent: 1#SetBinaryState"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:SetBinaryState xmlns:u="urn:Belkin:service:basicevent:1"><BinaryState>0</ BinaryState></u:SetBinaryState></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 | grep "<BinaryState" | cut -d">" -f2 | cut -d "<" -f1 ! ! ! elif [ "$2" = "GETSIGNALSTRENGTH" ] then curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION: "urn:Belkin:service:basicevent:1#GetSignalStrength"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/ soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:GetSignalStrength xmlns:u="urn:Belkin:service:basicevent: 1"><GetSignalStrength>0</GetSignalStrength></u:GetSignalStrength></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 | grep "<SignalStrength" | cut -d">" -f2 | cut -d "<" -f1 ! ! ! elif [ "$2" = "GETFRIENDLYNAME" ] then curl -0 -A '' -X POST -H 'Accept: ' -H 'Content-type: text/xml; charset="utf-8"' -H "SOAPACTION: "urn:Belkin:service:basicevent: 1#ChangeFriendlyName"" --data '<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><u:ChangeFriendlyName xmlns:u="urn:Belkin:service:basicevent:1"><FriendlyName>Pool Filter</FriendlyName></u:ChangeFriendlyName></s:Body></s:Envelope>' -s http://$IP:$PORT/upnp/control/basicevent1 | grep "<FriendlyName" | cut -d">" -f2 | cut -d "<" -f1 ! else
  • 59. Demo #4 : Wemo Phone System ! ! ! fi else echo echo echo echo fi "COMMAND NOT RECOGNIZED" "" "Usage: ./wemo_control IP_ADDRESS ON/OFF/GETSTATE/GETSIGNALSTRENGTH/GETFRIENDLYNAME" ""
  • 60. Demo #4 : Wemo Phone System Dialplan Asterisk: [ivr] ! exten => s,1,Answer() exten => s,n,Background(demovoipnovatos) exten => s,n,Wait(5) exten => s,n,agi(speech-recog.agi,es) exten => s,n,Set(PrimeraWord=${CUT(${utterance},x20,1)}) exten => s,n,Set(SegundaWord=${CUT(${utterance},xNN,2)}) exten => s,n,GotoIf($["${utterance}" = "encender luz"]?encenderluz) exten => s,n,GotoIf($["${utterance}" = "apagar luz"]?apagarluz) exten => s,n,GotoIf($["${utterance}" = "encender sirena"]?encendersirena) exten => s,n,GotoIf($["${utterance}" = "encender wemo"]?encenderwemo) exten => s,n,GotoIf($["${utterance}" = “apagar wemo"]?apagarwemo) exten => s,n,Verbose(1,El texto reconocido es: ${utterance}) exten => s,n,Verbose(1,Con una probabilidad de acierto: ${confidence}) exten => s,n,Verbose(1,La primera palabra es ${PrimeraWord} y la segunda palabra es ${SegundaWord} ) exten => s,n,Hangup ;exten => 800,n(encenderluz),Set(foo=${CURL(http://lampara.voip2day.voipnovatos.es/encender)}) exten => s,n(encenderluz),System(wget "http://lampara.voip2day.voipnovatos.es/encender") exten => s,n,Playback(luzencendida) exten => s,n,Hangup() ;exten => 800,n(apagarluz),Set(foo=${CURL(http://lampara.voip2day.voipnovatos.es/apagar)}) exten => s,n(apagarluz),System(wget "http://lampara.voip2day.voipnovatos.es/apagar") exten => s,n,Playback(luzapagada) exten => s,n,Hangup() exten => s,n(encendersirena),System(wget "http://sirena.voip2day.voipnovatos.es/encender") exten => s,n,Playback(sirenaencendida) exten => s,n,Hangup() exten => s,n(encenderwemo),System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender") exten => s,n,Playback(wemoencendido) exten => s,n,Hangup() exten => s,n(apagarwemo),System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/apagado") exten => s,n,Playback(wemoapagado) exten => s,n,Hangup()
  • 61. Demo #4 : Wemo Phone System Dialplan Asterisk: exten => 1,1,System(wget "http://lampara.voip2day.voipnovatos.es/encender") exten => 1,n,Playback(luzencendida) exten => 1,n,Hangup() ! exten => 2,1,System(wget "http://lampara.voip2day.voipnovatos.es/apagar") exten => 2,n,Playback(luzapagada) exten => 2,n,Hangup() ! exten => 3,1,System(wget "http://sirena.voip2day.voipnovatos.es/encender") exten => 3,n,Playback(sirenaencendida) exten => 3,n,Hangup() ! exten => 4,1,System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender") exten => 4,n,Playback(wemoencendido) exten => 4,n,Hangup() ! exten => 5,1,System(wget "http://wemo.voip2day.voipnovatos.es/enchufe/encender") exten => 5,n,Playback(wemoapagado) root@raspberrypi:/var/lib/asterisk/agi-bin# total 16 drwxr-xr-x 2 root root 4096 oct 17 drwxr-xr-x 12 asterisk asterisk 4096 nov 2 -rwxr-xr-x 1 root root 7517 oct 17 root@raspberrypi:/var/lib/asterisk/agi-bin# ls -al 17:56 . 17:06 .. 17:56 speech-recog.agi
  • 62. Demo #5 : Phone Call Alarm Elementos Inteligentes: - Vera Lite - Asterisk - Raspberry Pi - Instalador
  • 63. Demo #5 : Phone Call Alarm Actuadores: - Fibaro Door Sensor - Everspring Motion Sensor
  • 64. Demo #5 : Phone Call Alarm Esquema de Funcionamiento:
  • 65. Demo #5 : Phone Call Alarm Configuración Vera Lite
  • 66. Demo #5 : Phone Call Alarm Localizar ServID y ID de dispositivo a consultar https://sta1.mios.com/locator_json.php?username=xxx {“units”: [{“serialNumber":"xxxxxxx","FirmwareVersion":"1.5.622","name":"MTX","ipAddress":"x.x.x.x","users": ["username"],"active_server":"fwd7.mios.com","forwardServers": [{"hostName":"fwd7.mios.com","primary":true},{"hostName":"fwd5.mios.com","primary":false}]}]} http://x.x.x.x:3480/data_request? id=user_data2&output_format=xml http://x.x.x.x:3480/data_request? id=user_data2&output_format=json
  • 67. Demo #5 : Phone Call Alarm Acceso Remotamente https://fwdx.mios.com/username/password/IDUNIT/ data_request?id=lu_status&output_format=json
  • 68. Demo #5 : Phone Call Alarm PHP Polling Script <?php ! $url = 'http://10.x.x.x:3480/data_request?id=variableget&DeviceNum=148&service ! $abierta = file_get_contents('http://10.x.x.x:3480/data_request?id=variableget ! if ($abierta == "0") { echo ("nnNo esta Abierta la Ventana. No hacemos nadann"); } ! else{ ! echo ("nnEsta abierta la ventana. LLamamos al movilnn"); echo file_get_contents('http://10.x.x.x/asterisk/llamar'); ! } ! ?> $url = 'http://10.x.x.x:3480/data_request?id=variableget&DeviceNum=148&serviceId=urn:micasaverde-com:serviceId:SecuritySensor1&Variable=Tripped';
  • 69. Demo #5 : Phone Call Alarm PHP LastTime Tripped Script <?php ! $url = 'http://10.x.x.x:3480/data_request?id=variableget&DeviceNum=148&service $unixtime = time(); ! $abierta = file_get_contents('http://10.x.x.x:3480/data_request?id=variableget ! $diftiempo=$unixtime - $abierta; ! echo ($diftiempo); ! if ($diftiempo > 60 ) { echo ("nnNo esta Abierta la Ventana. No hacemos nadann"); } ! else{ ! echo ("nnEsta abierta la ventana. LLamamos al movilnn"); echo file_get_contents('http://10.x.x.x/asterisk/llamar'); ! }
  • 70. Demo #5 : Phone Call Alarm Configuración Apache: <VirtualHost [2001:b18:406a::11]:80> ServerAdmin webmaster@localhost ServerName sensor.voip2day.voipnovatos.es ! ! ! ! ! DocumentRoot /var/www/sensor <Directory /var/www/sensor/datos> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/sensor> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> !
  • 71. Demo #5 : Phone Call Alarm PHP .call file : <html> <head> <title>Llamada Asterisk IPV4</title> </head> <body> <?php $numbertocall = "MOVIL"; $context="extensiones"; $extension="locucion"; $vars = ""; $touchtime = ""; $time = time(); $callfile = "call_" . $time . ".call"; $startcallfile ="/tmp/" . $callfile; $endcallfile = "/var/spool/asterisk/outgoing/" . $callfile; ! $cfile = fopen($startcallfile,"ab"); fwrite($cfile,"Channel: SIP/Vozcom/" . $numbertocall . "n"); fwrite($cfile,"MaxRetries: 1n"); fwrite($cfile,"RetryTime: 60n"); fwrite($cfile,"WaitTime: 30n"); fwrite($cfile,"Context: " . $context . "n"); fwrite($cfile,"Extension: " . $extension . "n"); if ($vars != "") { fwrite($cfile,"Set: " . $vars . "n"); } fclose($cfile); ! chmod($startcallfile,0777); if ($touchtime != "") { list($hour,$minute,$second,$month,$day,$year) = split('-',$touchtime); $ctime = mktime($hour,$minute,$second,$month,$day,$year); touch($startcallfile,$ctime,$ctime); } rename($startcallfile,$endcallfile); ! ! ?> </body> </html>
  • 72. Demo #5 : Phone Call Alarm Dialplan Asterisk [extensiones] ! ! exten => _9X.,1,Dial(SIP/vozcom/${EXTEN}) exten => _9X.,n,Hangup ! exten => _6X.,1,Dial(SIP/vozcom/${EXTEN}) exten => _6X.,n,Hangup ! exten exten exten extne ! => => => => locucion,1,Answer() locucion,n,Wait(2) locucion,n,Playback(Alarma en ventana) locucion,n,Hangup
  • 73. Alberto Sagredo Castro Seguridad puede controlar como consume • Si nuestra casa se puede abrir, se no dejarlo abierto a cualquiera energía, hay que tener cuidado y (Sentido Común) • Si usamos sistemas cloud, creemos en el cloud… con todo lo que ello conlleva. poner contraseñas o • Si usamos Apache para HTTP request, forma didacta exenta de certificados (Lo mostrado aquí es una seguridad) • Zwave implícitamente lleva seguridad. Sobre todo dispositivos de apertura de puertas. • http://research.sensepost.com/cms/resources/conferences/2013/ bh_zwave/Security%20Evaluation%20of%20Z-Wave_WP.pdf www.voipnovatos.es
  • 74. Alberto Sagredo Castro Futuro • Esta por ver que protocolo se llevará el gato al agua. • Seguramente coexistencia de muchos de ellos, y el integrador jugará a integrar y pelearse para hacerlos funcionar. • 6LowPAN interesante ver como evoluciona el mercado. • 6LowPAN y Zigbee soporte IPV6 (armados para el futuro). • ¿Wemo abrirá su API? • ¿Phillips Hue más dispositivos? www.voipnovatos.es
  • 76. Alberto Sagredo Castro Gracias • A Voip2day por invitarme un año más. • A mis hijos y esposa por hacerme féliz y darme razones para luchar por ellos. • A mi mujer por aguantar los cables y las ondas que instalo en casa. • A vosotros por la presencia y atención. • A los visitantes de voipnovatos.es por su fidelidad. • A voz.com por su apoyo incondicional. • A zwave.es por el asesoramiento en domótica. www.voipnovatos.es
  • 77. Alberto Sagredo Castro @ albersag www.voipnovatos.es