SlideShare una empresa de Scribd logo
1 de 77
Descargar para leer sin conexión
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

Más contenido relacionado

Similar a 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.
 
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
 
Fundamentos20de20telefonia20ip 131006193600-phpapp02
Fundamentos20de20telefonia20ip 131006193600-phpapp02Fundamentos20de20telefonia20ip 131006193600-phpapp02
Fundamentos20de20telefonia20ip 131006193600-phpapp02myconta
 

Similar a 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
 
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
 
Fundamentos20de20telefonia20ip 131006193600-phpapp02
Fundamentos20de20telefonia20ip 131006193600-phpapp02Fundamentos20de20telefonia20ip 131006193600-phpapp02
Fundamentos20de20telefonia20ip 131006193600-phpapp02
 

Último

Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaYeimys Ch
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y maslida630411
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxCarolina Bujaico
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nóminacuellosameidy
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 

Último (20)

Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y mas
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Nomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de NóminaNomisam: Base de Datos para Gestión de Nómina
Nomisam: Base de Datos para Gestión de Nómina
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 

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