Electric Imp buzón notificaciones (3 / 3 paso)

Paso 3: Paso 3: el código

Como hemos visto todos los temas mecánicos ;-) vamos a sumergirnos en el software.

Para probarlo un poco más, he añadido un sensor de temperatura (tmp36) para monitorizar la temperatura cada 15 minutos e informar sobre un gráfico vivo usando Xively.

En pocas palabras, el dispositivo está en modo de reposo todo el tiempo, cada 15 minutos se despierta, envía la temperatura a Xively, envía un correo electrónico y se va a dormir otra vez.

Si tengo correo, despierta debido a la interrupción externa (pin 1 solamente!), me envía un correo electrónico y un SMS.

Un led está allí sólo para propósito de depuración.

En cada mensajes que recibí de él también he añadido control de la batería.

Código fuente:

Agente:

 // TempBug Example Agent Code<br> 
 /* GLOBALS and CONSTANTS -----------------------------------------------------*/ 
 const XIVELY_API_KEY = "blablabla"; const XIVELY_FEED_ID = "blablabla"; const XIVELYCHANNEL = "temperature"; Xively <- {}; // this makes a 'namespace' 
 /* CLASS AND GLOBAL FUNCTION DEFINITIONS -------------------------------------* 
 / Xively "library". See <a href="https://github.com/electricimp/reference/tree/master/webservices/xively" rel="nofollow"> https://github.com/electricimp/reference/tree/mas...</a> 
 class Xively.Client { ApiKey = null; triggers = []; 
 constructor(apiKey) { this.ApiKey = apiKey; } 
 /***************************************** * method: PUT * IN: * feed: a XivelyFeed we are pushing to * ApiKey: Your Xively API Key * OUT: * HttpResponse object from Xively * 200 and no body is success *****************************************/ function Put(feed){ local url = "https://api.xively.com/v2/feeds/" + feed.FeedID + ".json"; local headers = { "X-ApiKey" : ApiKey, "Content-Type":"application/json", "User-Agent" : "Xively-Imp-Lib/1.0" }; local request = http.put(url, headers, feed.ToJson()); 
 return request.sendsync(); } 
 /***************************************** * method: GET * IN: * feed: a XivelyFeed we fulling from * ApiKey: Your Xively API Key * OUT: * An updated XivelyFeed object on success * null on failure *****************************************/ function Get(feed){ local url = "https://api.xively.com/v2/feeds/" + feed.FeedID + ".json"; local headers = { "X-ApiKey" : ApiKey, "User-Agent" : "xively-Imp-Lib/1.0" }; local request = http.get(url, headers); local response = request.sendsync(); if(response.statuscode != 200) { server.log("error sending message: " + response.body); return null; } 
 local channel = http.jsondecode(response.body); for (local i = 0; i < channel.datastreams.len(); i++) { for (local j = 0; j < feed.Channels.len(); j++) { if (channel.datastreams[i].id == feed.Channels[j].id) { feed.Channels[j].current_value = channel.datastreams[i].current_value; break; } } } 
 return feed; } 
 } class Xively.Feed{ FeedID = null; Channels = null; constructor(feedID, channels) { this.FeedID = feedID; this.Channels = channels; } function GetFeedID() { return FeedID; } 
 function ToJson() { local json = "{ \"datastreams\": ["; for (local i = 0; i < this.Channels.len(); i++) { json += this.Channels[i].ToJson(); if (i < this.Channels.len() - 1) json += ","; } json += "] }"; return json; } } 
 class Xively.Channel { id = null; current_value = null; constructor(_id) { this.id = _id; } function Set(value) { this.current_value = value; } function Get() { return this.current_value; } function ToJson() { return http.jsonencode({id = this.id, current_value = this.current_value }); } } 
 function postToXively(data,id) { xivelyChannel <- Xively.Channel(XIVELYCHANNEL+id); xivelyChannel.Set(data); xivelyFeed <- Xively.Feed(XIVELY_FEED_ID, [xivelyChannel]); local resp = xivelyClient.Put(xivelyFeed); server.log("Posted to Xively: "+data+", got return code: "+resp.statuscode+", msg: "+resp.body); } 
 /* REGISTER DEVICE CALLBACKS ------------------------------------------------*/ 
 device.on("data", function(datapoint) { postToXively(datapoint.temp, datapoint.id); }); /* REGISTER HTTP HANDLER -----------------------------------------------------* 
 / This agent does not need an HTTP handler 
 /* RUNTIME BEGINS HERE -------------------------------------------------------*/ 
 server.log("TempBug Agent Running"); 
 // instantiate our Xively client xivelyClient <- Xively.Client(XIVELY_API_KEY); xivelyChannel <- Xively.Channel("temperature"); 
 function mailgun(subject, message) { local from = "Mailbox local to = "titi local apikey = "key-blablbabla"; local domain = "blablabla.mailgun.org"; local request = http.post("https://api:" + apikey + " + domain + "/messages", {"Content-Type": "application/x-www-form-urlencoded"}, "from=" + from + "&to=" + to + "&subject=" + subject + "&text=" + message); local response = request.sendsync(); server.log("Mailgun response: " + response.body); } 
 function sendEmail (voltage,tmp) { mailgun("Electric Imp", "Monitoring \nTension Batterie "+voltage+" Température "+tmp); //http.get("https://smsapi.free-mobile.fr/sendmsg?user=blablabla&pass=blablabla&msg=Vous%20Avez%20Du%20Courrier!%0D", {}).sendsync(); } 
 function sendSMS (voltage,temp) { mailgun("Electric Imp", "Courrier Reçu! ;-) \n"); http.get("https://smsapi.free-mobile.fr/sendmsg?user=blablabla&pass=blablabla&msg=Y'a%20Du%20Courrier!%0D"+"Batt="+voltage+"V T="+temp+"°C", {}).sendsync(); } 
 //device.on("SMS", sendSMS); 
 device.on("mail", function(datapoint2) { sendEmail(datapoint2.voltage, datapoint2.tmp); }); 
 device.on("SMS", function(listeInfo) { sendSMS(listeInfo.voltage, listeInfo.tmp); }); 

Dispositivo de:

 // Alias the GPIO pin as 'button'<br>button <- hardware.pin1; led <- hardware.pin9; led.configure(DIGITAL_OUT); led2 <- hardware.pin8; led2.configure(DIGITAL_OUT); tmp36 <- hardware.pin7; tmp36.configure(ANALOG_IN); 
 doorStatus <- hardware.pin2; doorStatus.configure(DIGITAL_IN_PULLDOWN); 
 // global variable to track current state of LED pin //etat <- 0; // set LED pin to initial value (0 = off, 1 = on) //led.write(etat); function boucle() { local Vout = tmp36.read(); local tmp = ((3.3*Vout/65535)-0.5)*100 ; local voltage = hardware.voltage(); 
 local datapoint2 = { "voltage" : voltage, "tmp" : tmp } agent.send("mail",datapoint2); 
 local id = hardware.getdeviceid(); local datapoint = { "id" : id, "temp" : tmp } agent.send("data",datapoint); // local rssi = imp.rssi(); //agent.send("mail", rssi); local i; for (i=0; i<10; i++) { led.write(0); // set LED pin to new value imp.sleep(0.05); led.write(1); // set LED pin to new value imp.sleep(0.05); // The button is released server.log("Release"); } //imp.deepsleepfor(10); server.log("Press"); imp.deepsleepfor(900); } function buttonPress() { // imp.onidle( agent.send("SMS","toto")) 
 // local Vin = hardware.voltage(); 
 } 
 local onlyOne = 0; 
 function main() { local statedoorStatus = doorStatus.read(); 
Si (statedoorStatus == 0) {boucle(); if (statedoorStatus == 0) { boucle(); } else { if (onlyOne ==0) { local Vout = tmp36.read(); local tmp = ((3.3*Vout/65535)-0.5)*100 ; local voltage = hardware.voltage(); 
local listeInfo = {"tensión": tensión, "tmp": tmp local listeInfo = { "voltage" : voltage, "tmp" : tmp } agent.send("SMS",listeInfo); onlyOne = 1; } local i; for (i=0; i<10; i++) { led.write(0); // set LED pin to new value imp.sleep(0.1); led.write(1); // set LED pin to new value imp.sleep(0.1); } } imp.wakeup(0.001, main); } button.configure(DIGITAL_IN_WAKEUP,buttonPress); main(); Agent.Send("SMS",listeInfo); onlyOne = 1;local i; para (i = 0; i < 10; i ++) {led.write(0); / / set pin LED a nuevo valor imp.sleep(0.1); led.write(1); / / pin LED para nuevo valor imp.sleep(0.1);} imp.wakeup (0.001, principal);

Artículos Relacionados

Sensor de temperatura inalámbrico simple actualización de sitio web con electric imp y termistor

Sensor de temperatura inalámbrico simple actualización de sitio web con electric imp y termistor

[Edición 2014] El planificador que fue utilizado por Imp eléctrico ya no es usado y no está disponible ya. [/Edit]Este es un pequeño proyecto para empezar con la eléctrica imp y un termistor para que pueda ver cómo puede obtener las lecturas de tempe
Electric Imp progreso WiFi pantalla

Electric Imp progreso WiFi pantalla

Al azar, cayó en un sistema de recompensa de helado en casa. Traer buenas notas medios hogar llegamos a salir para el helado. No está seguro de que se trata de un sistema de recompensa políticamente correcto, pero es un evento que todos esperamos. Na
Electric Imp para controlar 8 luces eléctricas usando internet

Electric Imp para controlar 8 luces eléctricas usando internet

este proyecto utiliza el diablillo eléctrico nuevo (y super fresca).  Puede control remoto 120VAC dispositivos eléctricos por WiFi, a través de internet Imp nube.  El Imp envía una cadena serial de bits a un chip de salida digital "Serial a paralelo&
Emma: un 8-dígitos LED Display alfanumérico con Electric Imp

Emma: un 8-dígitos LED Display alfanumérico con Electric Imp

Emma es un diseño de referencia de dominio público para un dispositivo de Electric Imp imp.¿Nunca ha oído de Electric Imp? Es bastante limpio. "El diablillo" es un pequeño microcontrolador conectado wifi embalado para arriba en el mismo factor d
IMP-ERSONATOR: Electric Imp + Arduino + protector de la onda = reproductor de archivos de sonido remoto

IMP-ERSONATOR: Electric Imp + Arduino + protector de la onda = reproductor de archivos de sonido remoto

este Instructable demostrará cómo hacer un reproductor de archivos de sonido activado remotamente.Utiliza un Imp eléctrico, un protector de la onda de Adafruit y un Arduino UnoEl diablillo eléctrico le permite rápidamente conectar dispositivos (inclu
Simplificado Electric Imp a Tutorial de Arduino Due

Simplificado Electric Imp a Tutorial de Arduino Due

Introducción:Este es un tutorial básico para enviar información de la Imp eléctrico a la debida Arduino a través del UART (RX, TX) yo soy bastante nuevo en tanto así que algunas cosas que escribo puede ser incorrecta. Mayoría de la información que ob
Crear tu propia luz inteligente usando Electric Imp

Crear tu propia luz inteligente usando Electric Imp

Crear tu propia luz inteligente usando a Imp eléctrico. Aprender a controlar y monitorear las luces del móvil, tableta y escritorio en 15 minutos. $44 en hardware. Nivel de entrada.Paso 1: HardwarePara completar este tutorial, necesita los siguientes
Tiempo usando Electric Imp de amiguismo y Arduino Due

Tiempo usando Electric Imp de amiguismo y Arduino Due

a enviar un video de mi tiempo de amiguismo que hice recientemente. Usa al diablillo eléctrico para conectarse a internet y obtener información del tiempo y la debida de Arduino para enviar esa información a las partes respetadas.No estoy seguro si l
Termómetro de barbacoa Chef IMP: Internet-Connected

Termómetro de barbacoa Chef IMP: Internet-Connected

cuando era un niño, cocinar nuestras vacaciones pavo o asado con uno de los termómetros poco pop-up que usted simplemente pega en el pájaro, que aparece (probablemente) cuando el pájaro está hecho, o por lo menos seguro para comer. Teníamos un montón
Abridor de puerta de garaje eléctrica Imp

Abridor de puerta de garaje eléctrica Imp

He perdido la cuenta de la cantidad de veces que hemos fijado en un viaje sólo para tener que volver atrás para comprobar si recordamos cerrar la puerta del garaje. Este ' ible le muestra cómo conectar el diablillo eléctrico a su abridor de puerta de
Para empezar con Analog.IO y eléctrica Imp

Para empezar con Analog.IO y eléctrica Imp

Analog.IO es un nuevo sitio web dedicado al intercambio de flujos de datos de internet de las cosas los dispositivos conectados. Analog.IO le permite ver sus datos a través de un navegador donde quiera que estés en el mundo. Control de los datos que
DMX de la Imp eléctrico

DMX de la Imp eléctrico

El diablillo eléctrico es un fantástico poco con Wi-microcontrolador. Básicamente es como tener un Arduino, un escudo de WiFi y un servicio de nube en un solo paquete.No te tanto control de procesador como en el Arduino, aunque, porque el Cortex M3 e
ImpBot: un Robot eléctrico de Imp Pan-Tilt

ImpBot: un Robot eléctrico de Imp Pan-Tilt

con controlBox, tienes un gran dispositivo de entrada básico empujar datos al planificador eléctrico Imp (y por lo tanto a internet en general, vía HTTP a nodo), pero ¿qué pasa con los dispositivos de salida? Control de luces es un buen truco, como v
Cómo medir el confort térmico y eléctrica Imp Ubidots

Cómo medir el confort térmico y eléctrica Imp Ubidots

¿Días de verano son agradable, correcto? Pero la temperatura no es todo lo que toma para que nuestro cuerpo se sienta cómodo; humedad juega un papel enorme. En este tutorial se medir temperatura y humedad relativa del medio ambiente y para calcular e