Realizar llamada de acuerdo al cambio de luminosidad en el ambiente por medio de Arduino, es decir cuando el nivel de luz cambie Arduino le dara la orden a Asterisk para realizar una llamada anunciando un movimiento.
(Utilizamos Arduino UNO con Ethernet Shield)
El video ilustrativo de como funciona:
Creamos el archivo arduino.php en /var/lib/asterisk/agi-bin/ :
#!/usr/bin/php -q
<?php
require("phpagi.php");
$agi = new AGI();
$agi->answer();
$return = $agi->get_data('beep', 30000, 1);
$agi->text2wav("Hubo movimiento en la habitacion ");
$agi->hangup();
?>
En /var/www/html (la ruta que tienen configurado en el server web) creamos el archivo call_sense.php :
<?php
$luz = $_GET['luz'];
echo $luz;
$asterisk_outgoing = "/var/spool/asterisk/outgoing/";
$asterisk_tmp = "/tmp/";
$asterisk_cid = "Sensor de Luz<7307>"; // the from caller id you'd like to display.
$arduinocallfile = "/$asterisk_tmp/arduino_call.txt";
$arduinocall = fopen($arduinocallfile, 'w') or die("can't open file");
$arduinocall_data="Channel:SIP/7306\nApplication:AGI\nData:arduino.php\nCallerID:$asterisk$
fwrite($arduinocall, $arduinocall_data);
fclose($arduinocall);
// chmod, chown and chgrp the file to asterisk:asterisk
chmod ("/$asterisk_tmp/arduino_call.txt", 0666);
chown ("/$asterisk_tmp/arduino_call.txt", "asterisk");
chgrp ("/$asterisk_tmp/arduino_call.txt", "asterisk");
rename("/$asterisk_tmp/arduino_call.txt","/$asterisk_outgoing/arduino_call.call");
?>
Y ahora el código de nuesto Arduino UNO :
Código:
#include <SPI.h>
#include <Ethernet.h>
int lightPin = 0;
int threshold = 640; //este valor lo modificamos de acuerdo el nivel de sensibilidad que tiene nuestra fotoresistencia dada por la resistencia que esta entre A0 y GND.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { xxx, xxx, xxx, x }; //IP del servidor web donde esta Asterisk y el archivo call_sense.php
int luz = 0;
EthernetClient client;
void setup()
{
Ethernet.begin(mac);
Serial.begin(9600);
}
void loop () {
Serial.println(Ethernet.localIP());
senddata();
delay(500);
}
void senddata()
{
Serial.println(analogRead(lightPin));
if(analogRead(lightPin) > threshold ){
Serial.println("high");
}else{
Serial.println("low");
luz = 1;
Serial.println();
Serial.println("Iniciando conexion!");
Serial.println("Conectando!");
delay(1000); //This one keeps it from hanging
if (client.connect(server,80)) {
Serial.println("Connected!");
client.print("GET http://XXX.XXX.XXX.X/call_sense.php?luz=");
client.print(luz);
client.println(" HTTP/1.1");
client.println("User-Agent: Arduino 1.0");
client.println("Host: xxx.xxx.xxx.x");
client.println();
}
else
{
Serial.println("Connection failed");
client.stop();
}
}
}
2 comentarios :
no entendi algunos comandos, puedes hacer un video por favor explicando paso a paso.. por favor..
Hola disculpa me puedes ayudar, no entiendo de donde sale el archivo arduino_call.txt , me puedes explicar q archivo es porfavor.. te agradezco mucho por la ayuda.
Publicar un comentario