Stap 5: Code uitgelegd
Apparaat-id en het apparaat geheim worden gebruikt voor het verifiëren van het fysieke object (zoals Edison, Arduino, Raspberri PI,..) met Lelylan. Als u de referenties van het apparaat open op het Dashboard, selecteer het zojuist gemaakte apparaat, klik op instellingen en kopieer de apparaat-ID en het geheim van het apparaat.
/ * Apparaatinstellingen * /
var apparaat = {id: '', geheime: ''}
Lelylan gebruik MQTT, een publiceren abonneren protocol voor het Internet van dingen. Om te communiceren met de Edison Lelylan maken die u wilt instellen van twee onderwerpen: één ontvangen berichten van Lelylan (inTopic) en verzenden van berichten naar Lelylan (out/opic). Deze onderwerpen zijn uniek en geïdentificeerd door de apparaat-id.
var inTopic = ' apparaten /' + device.id + '/ krijgen' / / ontvangen van berichten,
outTopic = ' apparaten /' + device.id + '/ set'; berichten publiceren
Elk apparaat in de Lelylan wordt gekenmerkt door een type, die op zijn beurt wordt geïdentificeerd door een lijst van eigenschappen, functies en statussen (meer informatie op de dev center). Voor dit project dat we het type slimme pan met de status van de eigenschappen gemaakt (onder leiding van in- of uitschakelen), beperken temperatuur (pan inhoud graden), kwaliteit lucht (gar-detectie) en temperatuur (na die het alarm verhogen zal).
Wat we doen is controleren de ontvangen (of sturen) bericht en de JSON met een specifieke eigenschap id ontleden (of maken). Op deze manier kunnen we begrijpen de ontvangen eigenschap of bijwerken van de fysieke waarden in Lelylan.
Voor dit voorbeeld gebruiken we de slimme pan is type-ID 55055efb5a06678498000001)
var type = {}
'status': {id: '55055eff5a06673360000001'},
'temperatuur': {id: '5505607f5a06673360000004'},
"lucht": {id: '550560935a06673360000005'},
'tempLimit': {id: '550560a65a0667cff2000001'},
};
Stel de server van de Lelylan MQTT (MQTT server IP en poort) en apparaat (id en geheim) waar om verbinding te maken. Wij ook een beveiligde verbinding dankzij de Edison rekenkracht (niet mogelijk met een Arduino bijvoorbeeld) ingeschakeld.
var instellingen = {}
gastheer: '178.62.108.47', / / MQTT server IP
haven: '8883', / / MQTT-serverpoort
gebruikersnaam: device.id, / / device.id als de gebruikersnaam van de client
wachtwoord: device.secret, / / device.secret als clientwachtwoord
Protocol: 'ssl', / / beveiligde verbinding
rejectUnauthorized: valse
}
In dit gedeelte definiëren we de gebruikte pinnen om te controleren de led, om de temperatuur en om de kwaliteit lucht (gasdetectie) te krijgen.
/ * LED definitie * /
var digitalPin3 = nieuwe mraa. GPIO(3); digitalPin3.dir (mraa. DIR_OUT);
var ledState = true;
/ * Temperatuur definitie * /
var analogPin0 = nieuwe mraa. AIO(0); / * Gas detectie definitie * /
var analogPin1 = nieuwe mraa. AIO(1);
Op dit moment openen we de verbinding van de MQTT en we kunnen beginnen met het verzenden van de temperatuur en lucht kwaliteit waarden te Lelylan. Hier volgt de code voor het lezen en verzenden van de temperatuur naar Lelylan, waar we lezen van de huidige waarde en het maken van een JSON te sturen via MQTT naar Lelylan (samengesteld uit de id van de temperatuur en de temperatuur). Soortgelijke logica leeft voor de gas-sensor.
var client = mqtt.connect(settings); client.on ('verbinden', function {}
functie readTemp() {}
var analogValue = Math.round(analogPin0.read(), 2);
setTimeout (readTemp, 10000);
console.log ('de temperatuur te publiceren Lelylan');
Message = {"Eigenschappen": [{"id": type.temperature.id, "waarde": analogValue}]};
client.publish (out_topic, JSON.stringify(message)); […]
Op dit punt als de temperatuur de gedefinieerde limiet viaduct, de led is ingeschakeld en wijzigingen worden naar Lelylan verzonden.
Als (analogValue > tempLimit) {}
console.log ("Turn op licht (temperatuur) -", analogValue);
boardLight.write(255);
Message = {"Eigenschappen": [{"id": type.status.id, "waarde": "aan"}]};
client.publish (out_topic, JSON.stringify(message));
} else {}
console.log ("Zet licht (temperatuur) -", analogValue);
boardLight.write(0);
Message = {"Eigenschappen": [{"id": type.status.id, "waarde": "off"}]};
client.publish (out_topic, JSON.stringify(message));
}
Het laatste fragment van code wordt gebruikt om in te schrijven voor alle berichten afkomstig van de vorm Lelylan, dynamisch het bijwerken van de limiet van de temperatuur van het web. Op deze manier die wij de waarde rechtstreeks vanuit Lelylan Dashboard of een mobiele app variëren kunnen.
client.Subscribe(in_topic);
client.on ('bericht', function (onderwerp, bericht) {}
var prop = JSON.parse (bericht) .properties [0];
console.log ('Ontvangen bericht', status); / * Stel de temperatuurgrens * /
Als (prop.id == typelight.tempLimit.id) {}
tempLimit = prop.value;
boardLight.write(255);
console.log ('de temperatuurgrens is ingesteld op', tempLimit);
}
client.publish (out_topic, JSON.stringify(message));
console.log ('Bericht ontvangen (onderwerp)', onderwerp, '(message)', message);
});