Intelly kök (5 / 7 steg)

Steg 5: Koden förklaras

Den enhet hemligheten och enhets-id används för att autentisera det fysiska objektet (som Edison, Arduino, Raspberri PI,..) med Lelylan. För att få enheten autentiseringsuppgifter öppna instrumentpanelen, Välj den nyligen skapade enheten, klicka på inställningar och kopiera enhets-ID och enheten hemligheten.

/ * Inställningar * /

var enhet = {id: '', hemliga: ''}

Lelylan använder MQTT, en publicera prenumerera protokoll för Sakernas Internet. För att göra Lelylan kommunicera med Edison behöver du ställa in två ämnen: en ta emot meddelanden från Lelylan (inTopic) och skicka meddelanden till Lelylan (out/opic). Dessa ämnen är unika och identifierade av enhets-id.

var inTopic = ' enheter / "+ device.id + '/ få' / / ta emot meddelanden,

outTopic = ' enheter / "+ device.id + / ställa in. publicera meddelanden

Varje enhet i Lelylan kännetecknas av en typ, som i sin tur identifieras med en lista över egenskaper, funktioner och status (Läs mer på dev center). Detta projekt vi skapat smarta pan typ med statusen egenskaper (ledde på eller av), begränsa temperaturen (pan innehåll grader), kvalitet luft (gar detection) och temperatur (efter som larmet kommer att höja).

Vad vi gör är att kontrollera den mottagna (eller skicka) meddelande och tolka (eller skapa) av JSON med en viss egenskap id. Detta sätt kan vi förstå egenskapen mottagna eller uppdatera de fysiska värdena i Lelylan.

För detta exempel använder vi smarta pannan är typ-ID 55055efb5a06678498000001)

var typ = {

'status': {id: '55055eff5a06673360000001'},

"temperatur": {id: '5505607f5a06673360000004'},

"luft": {id: '550560935a06673360000005'},

'tempLimit': {id: '550560a65a0667cff2000001'},

};

Ange Lelylan MQTT server (MQTT server IP och port) och enhet (id och secret) var att ansluta. Vi har också möjliggjort en säker anslutning tack Edison beräkningskraft (inte möjligt med en Arduino till exempel).

var inställningar = {

värd: '178.62.108.47', / / MQTT server IP

Port: '8883', / / MQTT Serverport

användarnamn: device.id, / / device.id som klienten användarnamn

lösenord: device.secret, / / device.secret som klienten lösenord

protokoll: "ssl", / / säker anslutning

rejectUnauthorized: falskt

}

I det här avsnittet definierar vi använt stiften att styra led, att få temperaturen och att få kvalitet luft (gas upptäckt).

/ * LED definition * /

var digitalPin3 = ny mraa. Gpio(3); digitalPin3.dir (mraa. DIR_OUT);

var ledState = sant;

/ * Temperatur definition * /

var analogPin0 = ny mraa. AIO(0); / * Gas detektering definition * /

var analogPin1 = ny mraa. AIO(1);

På denna punkt vi öppna den MQTT anslutningen och vi kan börja skicka temperaturen och luft kvalitet värden till Lelylan. Här följer koden för att läsa och skicka temperaturen till Lelylan, där vi läser det aktuella värdet och skapa en JSON att skicka genom MQTT till Lelylan (som består från temperatur id och temperatur värdet). Liknande logik lever för gas sensorn.

var kund = mqtt.connect(settings); client.on ('connect', function() {

funktion readTemp() {

var analogValue = Math.round(analogPin0.read(), 2);

setTimeout (readTemp, 10000);

Console.log ("publicera temperaturen till Lelylan');

meddelande = {"egenskaper": [{"id": type.temperature.id, "värde": analogValue}]};

client.publish (out_topic, JSON.stringify(message)); […]

På denna punkt om temperaturen passera den definierade nivån, led är påslagen och ändringar skickas till Lelylan.

om (analogValue > tempLimit) {

Console.log ("Vända på ljus (temperatur) -", analogValue);

boardLight.write(255);

meddelande = {"egenskaper": [{"id": type.status.id, "värde": "på"}]};

client.publish (out_topic, JSON.stringify(message));

} annat {

Console.log ("Stäng av ljus (temperatur) -", analogValue);

boardLight.write(0);

meddelande = {"egenskaper": [{"id": type.status.id, "värde": "av"}]};

client.publish (out_topic, JSON.stringify(message));

}

Det sista utdraget av koden används att teckna alla meddelanden kommer form Lelylan, dynamiskt uppdatera temperaturgränsen från webben. Detta sätt vi kan variera sitt värde direkt från Lelylan Dashboard eller någon mobila app.

client.subscribe(in_topic);

client.on ("meddelande", funktion (ämne, meddelande) {

var prop = JSON.parse (meddelande) .properties [0];

Console.log ('Mottaget meddelande', status); / * Ange temperaturgräns * /

om (prop.id == typelight.tempLimit.id) {

tempLimit = prop.value;

boardLight.write(255);

Console.log ("temperaturgränsen sattes", tempLimit);

}

client.publish (out_topic, JSON.stringify(message));

Console.log ('Meddelande mottagits (ämne)', ämne, '(meddelande)', meddelande);

});

Se Steg
Relaterade Ämnen