Étape 5: Code a expliqué
L’id de périphérique et le secret de périphérique sont utilisées pour authentifier l’objet physique (comme Edison, Arduino, PI Raspberri,..) avec Lelylan. Pour obtenir les informations d’identification de l’appareil ouvert le tableau de bord, sélectionnez le périphérique nouvellement créé, cliquez sur paramètres et copiez l’ID de périphérique et le Secret de l’appareil.
/ * Paramètres * /
dispositif de var = {id: '' secrète: ''}
Lelylan utilisations MQTT, une publication abonnement protocole pour l’Internet des objets. Pour faire les Lelylan à communiquer avec l’Edison vous devez définir deux sujets : un recevoir courrier provenant de Lelylan (inTopic) et un envoi de messages à Lelylan (out/opic). Ces sujets sont uniques et identifiée par l’id de périphérique.
var inTopic = ' dispositifs /' + device.id + « / get » / / réception de messages,
outTopic = ' dispositifs /' + device.id + « / set » ; publication de messages
Tous les appareils en Lelylan se caractérise par un type qui à son tour, est identifié par une liste de propriétés, les fonctions et les statuts (en savoir plus sur le dev center). Pour ce projet, que nous avons créé le type pan intelligente avec le statut de propriétés (voyant allumé ou éteint), température (pan contenu degrés), qualité de l’air (gar détection) et la température limitent (après qui déclenchera l’alarme).
Ce que nous faisons est de vérifier le reçu message (ou envoyer) et parse (ou créer) le JSON avec un id de propriété spécifique. De cette façon, nous pouvons comprendre les biens reçus ou mettre à jour les valeurs physiques dans Lelylan.
Pour cet exemple, nous utilisons le pan intelligent type ID est 55055efb5a06678498000001)
type var = {}
« status »: {id: « 55055eff5a06673360000001 »},
« température »: {id: « 5505607f5a06673360000004 »},
« air »: {id: « 550560935a06673360000005 »},
« tempLimit »: {id: « 550560a65a0667cff2000001 »},
};
Définissez le serveur MQTT Lelylan (adresse IP du serveur MQTT et port) (id et secret) où se connecter. Nous a également permis une connexion sécurisée grâce à la puissance de calcul de Edison (pas possible avec un Arduino par exemple).
var settings = {}
hôte: « 178.62.108.47 », / / IP du serveur MQTT
Port: « 8883 », / / port du serveur MQTT
nom d’utilisateur : device.id, / / device.id comme nom d’utilisateur du client
mot de passe : device.secret, / / device.secret comme mot de passe client
Protocole: « ssl », / / connexion sécurisée
rejectUnauthorized : faux
}
Dans cette section, nous définissons les broches utilisées pour contrôler la led, pour obtenir la température et d’obtenir la qualité de l’air (détection de gaz).
/ * Définition LED * /
var digitalPin3 = new mraa. GPIO(3) ; digitalPin3.dir (mraa. DIR_OUT) ;
var ledState = true ;
/ * Définition de la température * /
var analogPin0 = new mraa. AIO(0) ; / * Définition de détection de gaz * /
var analogPin1 = new mraa. AIO(1) ;
À ce stade, nous allons ouvrir la connexion MQTT, et nous pouvons commencer à envoyer la température et à Lelylan, les valeurs de qualité de l’air. Voici le code pour lire et envoyer la température à Lelylan, où nous avons lire la valeur actuelle et créer un JSON à envoyer par l’intermédiaire de MQTT à Lelylan (composé de l’id de la température et la valeur de la température). Une logique semblable vit pour le capteur de gaz.
var client = mqtt.connect(settings) ; client.on ("connect", function() {}
function readTemp() {}
var analogValue = Math.round(analogPin0.read(), 2) ;
setTimeout (readTemp, 10000) ;
Console.log ("publier la température à Lelylan') ;
message = {« properties »: [{« id »: type.temperature.id, « value »: analogValue}]} ;
client.Publish (out_topic, JSON.stringify(message)) ; […]
À ce stade, si la température de passage supérieur à la limite définie, le voyant est allumé et les modifications sont envoyées à Lelylan.
Si (analogValue > tempLimit) {}
Console.log (« Allumer de la lumière (température) - », analogValue) ;
boardLight.write(255) ;
message = {« properties »: [{« id »: type.status.id, « value »: « on »}]} ;
client.Publish (out_topic, JSON.stringify(message)) ;
} else {}
Console.log (« Turn off lumineux (température) - », analogValue) ;
boardLight.write(0) ;
message = {« properties »: [{« id »: type.status.id, « value »: « off »}]} ;
client.Publish (out_topic, JSON.stringify(message)) ;
}
Le dernier extrait de code utilisée pour l’abonnement pour tous les messages venant de forme Lelylan, mettre à jour dynamiquement à la limite de température depuis le web. De cette façon nous pouvons varier sa valeur directement à partir de Lelylan tableau de bord ou n’importe quelle application mobile.
client.Subscribe(in_topic) ;
client.on ('message', fonction (sujet, message) {}
var prop = JSON.parse (message) .properties [0] ;
Console.log ("Message reçu", statut) ; / * Définir la limite de température * /
Si (prop.id == typelight.tempLimit.id) {}
tempLimit = prop.value ;
boardLight.write(255) ;
Console.log ('la limite de température a été définie sur', tempLimit) ;
}
client.Publish (out_topic, JSON.stringify(message)) ;
Console.log ("Message reçu (sujet)", sujet, « (message) », message) ;
});