Elektrische Imp postbus meldingen (3 / 3 stap)

Stap 3: Stap 3: de code


Zoals we hebben gezien alle mechanische problemen ;-) laten we een duik in de software.

Om te testen het een beetje meer, heb ik toegevoegd een temp sensor (tmp36) om te controleren elke 15 min temperatuur en het verslag over een live grafiek met behulp van Xively.

In een paar woorden is apparaat in de slaapmodus staat hele tijd, elke 15 min het wakker, temperatuur stuurt naar Xively, stuurt een e-mail en gaat weer slapen.

Als ik heb post, wakker het als gevolg van de externe interrupt (pin 1 alleen!), het stuurt me een e-mail en een SMS.

Een led is er alleen voor debug doeleinden.

In alle berichten die ik ontving van het heb ik ook toegevoegd batterij monitoring.

Broncode:

Agent:

 // 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); }); 

Apparaat:

 // 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(); 
Als (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(); 
lokale listeInfo = {"spanning": spanning, "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;lokale i; voor (ik = 0; ik < 10; i ++) {led.write(0); / / set LED pin om de nieuwe waarde imp.sleep(0.1); led.write(1); / / LED pincode instellen om de nieuwe waarde imp.sleep(0.1);} imp.wakeup (0,001, belangrijkste);

Gerelateerde Artikelen

Elektrische Imp aan 8 elektrische verlichting met behulp van internet

Elektrische Imp aan 8 elektrische verlichting met behulp van internet

dit project maakt gebruik van de nieuwe (en super cool) elektrische Imp.  U kunt elektrische apparaten voor afstandsbediening 120VAC via WiFi, via het internet Imp Cloud.  Het Imp stuurt een seriële string van bits naar een "Seriële naar parallelle&q
ImpBot: een Pan-Tilt elektrische Imp Robot

ImpBot: een Pan-Tilt elektrische Imp Robot

met systeemmenu (ControlBox), heb je een grote basis invoerapparaat duwen gegevens om de elektrische Imp-planner (en dus met het internet in het algemeen, via het HTTP-protocol uit het knooppunt), maar hoe zit het met uitvoerapparaten? Beheersing van
Deuropener van de Garage van de elektrische Imp

Deuropener van de Garage van de elektrische Imp

Ik heb telling van het aantal keren die hebben zetten we af op een reis alleen om terug te keren om te controleren om te zien als we vergeten om het sluiten van de garagedeur verloren. Dit ' ible ziet u hoe de elektrische Imp verbinden met uw garaged
Aan de slag met Analog.IO en elektrische Imp

Aan de slag met Analog.IO en elektrische Imp

Analog.io is een nieuwe website gewijd aan het delen van gegevensstromen van internet van dingen aangesloten apparaten. Analog.io kunt u uw gegevens via een web-browser te bekijken, waar u ook in de wereld bent. U bepalen de gegevens die zijn uitgeze
Elektrische Imp WiFi vooruitgang Display

Elektrische Imp WiFi vooruitgang Display

Wij vielen willekeurig in een ijs beloning systeem thuis. Brengen van goede cijfers binnenlandse middelen krijgen we om uit te gaan voor ijs. Niet zeker dat dit een politiek correcte beloningssysteem is, maar het is een evenement dat we allemaal graa
DMX uit de elektrische Imp

DMX uit de elektrische Imp

De elektrische Imp is een fantastisch kleine wifi-toegelaten microcontroller. Het is eigenlijk net als met een Arduino, een WiFi-schild en een Cloud-service in één pakket.Je krijgt niet net zoveel controle van de volledige processor als op de Arduino
Emma: een 8-cijferige alfanumeriek LED Display aangedreven door elektrische Imp

Emma: een 8-cijferige alfanumeriek LED Display aangedreven door elektrische Imp

Emma is een openbaar referentieontwerp voor een imp-aangedreven apparaat van elektrische Imp.Nog nooit gehoord van de elektrische Imp? Het is vrij netjes. "Het GMB" is een klein wifi-verbonden microcontroller ingepakt in de dezelfde vormfactor a
ImPrinter: de elektrische Imp draadloze, internet-verbonden thermische printer

ImPrinter: de elektrische Imp draadloze, internet-verbonden thermische printer

thermische printers hebben gekregen (alweer) erg populair in de afgelopen paar maanden; veel mensen lijken te zijn heel geïnteresseerd in het hebben van relevante info pop omhooggaand op een kleine rol van thermisch papier in plaats van in de telefoo
Bedrading en programmeren van de elektrische Imp met een LCD-scherm

Bedrading en programmeren van de elektrische Imp met een LCD-scherm

hechten van een LCD-scherm aan een elektrische ImpWat is een elektrische Imp?Het is een Wifi aangesloten processor in een super klein pakket. Check de website voor meer informatie - Elektrische ImpIk kocht de Sparkfun seriële ingeschakeld 16 x 2 LCD
IMP-ERSONATOR: Arduino, elektrische Imp + Wave Shield = externe Sound File Player

IMP-ERSONATOR: Arduino, elektrische Imp + Wave Shield = externe Sound File Player

dit Instructable demonstreer hoe maak je een speler op afstand geactiveerd geluidsbestand.Het maakt gebruik van een elektrische Imp, een schild van Adafruit Golf en een Arduino UnoDe elektrische Imp kunt u snel verbinding maken met apparaten (met inb
Aan de slag met elektrische Imp

Aan de slag met elektrische Imp

elektrische Imp maakt het gemakkelijk en leuk om internetconnectiviteit aan uw apparaten.Deze Instructables begeleidt u door het proces van het creëren van een elektrische Imp-account, en het krijgen van uw eerste Imp online.U zal moeten de volgende
Hoe meet je thermisch comfort met elektrische Imp en Ubidots

Hoe meet je thermisch comfort met elektrische Imp en Ubidots

Warme zomerdagen zijn leuk, toch? Maar de temperatuur is nog niet alles duurt voor ons lichaam te voelen; vochtigheid speelt ook een grote rol. In deze tutorial zullen we meten van temperatuur en relatieve vochtigheid van de omgeving en moet u een in
Weer Buddy-systeem met behulp van elektrische Imp en Arduino Due

Weer Buddy-systeem met behulp van elektrische Imp en Arduino Due

Just verzenden van een video van mijn weer buddy systeem dat ik onlangs gemaakt. Het maakt gebruik van de elektrische Imp verkrijgen informatie over het weer en de inachtneming van de Arduino te sturen die informatie naar de gerespecteerde onderdelen
Vereenvoudigd elektrische Imp op inachtneming van de Arduino Tutorial

Vereenvoudigd elektrische Imp op inachtneming van de Arduino Tutorial

Inleiding:Dit is een basishandleiding om informatie te verzenden van de elektrische Imp aan de inachtneming van de Arduino via UART (RX, TX) ik ben redelijk nieuw met beide dus een aantal dingen die ik schrijf mogelijk onjuist. Merendeel van de infor