Intel Edison Utilisation d'Intel IoT Analytics Cloud: gestion des appareils

Gestion des appareils Intel IoT Analytics

La poursuite du travail avec le cloud Intel IoT Analytics se concentrera sur les commentaires de l'appareil, en envoyant des commandes pour gérer l'appareil. La première partie d' Intel Edison. Travailler avec le cloud Intel IoT Analytics: enregistrement et envoi de données . Nous réalisons l'opération d'allumer / éteindre la LED et le relais. Pour démontrer, prenez position dans un post précédent.
Pour envoyer des commandes à l'appareil, un type de composant spécial est utilisé - Actionnement . Dans un article précédent, nous avons considéré le type de «capteur» de composant, qui vous permet d'envoyer des données depuis l'appareil. L'activation transmet des données via le protocole MQTT et WebSocket. Ce type de composant appelle la commande chaîne de commande et ses paramètres nom / valeur.

Enregistrement de l'activation dans le cloud Intel IoT Analytics
Considérez l' activation par défaut , qui restera inchangée pour la LED. Ouvrez la section Compte , la section Catalogue , le composant Powerswitch.v1.0 .
Gestion des appareils Intel IoT Analytics
Fenêtre des propriétés du
Gestion des appareils Intel IoT Analytics
composant Powerswitch.v1.0 . Type de composant actionneur . Parce que La LED ne peut être que dans deux états, alors le type de données est booléen . LED.v1.0 - commande pour la LED. Clé / valeur, nom - LED , la valeur acceptée est 0 ou 1 .
Le relais est le même type de composant avec une LED, nous créons donc également un actionneur pour le relais.
Gestion des appareils Intel IoT Analytics
Types de composants créés.

Configuration de l'agent iotkit sur Intel Edison
Vous devez maintenant vous connecter via SSH à Intel Edison. Dans un article précédent, le Wi-Fi a été configuré, vous pouvez donc vous connecter à l'appareil via LAN. La prise en charge du
composant d' activation n'a été annoncée qu'avec la version 1.5.2 et supérieure de l'agent. Il est recommandé de mettre à niveau l'agent vers la dernière version actuelle.

Découvrez la version de l'agent:
# iotkit-admin -V
Commande de mise à jour de l'agent:
# npm update iotkit-agent

Dans la dernière version de l'agent, il est devenu possible de travailler sur WebSocket. Pour travailler sur WebSocket, vous devez configurer l'agent avec la commande:
# iotkit-admin protocol rest + ws

Revenez en mode MQTT:
# iotkit-admin protocol mqtt

Actuator Intel Edison.
# iotkit-admin register [_] [_]. :
# iotkit-admin register led1 powerswitch.v1.0
# iotkit-admin register relay1 relay.v1.0
Gestion des appareils Intel IoT Analytics

Arduino
. Arduino, IoTKitActuationExample

:
void setup(), .
void loop(), , json — JSON.
void loop() {
  iotkit.receive(callback);
  delay(5000);
}

Fonction de rappel nul (char * json)
void callback(char* json) {
  Serial.println(json);
  aJsonObject* parsed = aJson.parse(json);
  if (&parsed == NULL) {
    // invalid or empty JSON
    Serial.println("recieved invalid JSON");
    return;
  }

Si les données reçues sont présentes, nous les analysons plus en détail.
  aJsonObject* component = aJson.getObjectItem(parsed, "component");
  aJsonObject* command = aJson.getObjectItem(parsed, "command");
  aJsonObject* argv = aJson.getObjectItem(parsed, "argv");
  aJsonObject* argvArray = argv->child;
  aJsonObject* name = argvArray->child; // name : on
  aJsonObject* value = name->next; // value: 1/0

Vérification des commandes LED.v1.0 reçues et des valeurs «0» ou «1»
  if ((component != NULL)) {
    if (strcmp(component->valuestring, "power") == 0) {
      if ((command != NULL)) {
        if (strcmp(command->valuestring, "LED.v1.0") == 0 && strcmp(value->valuestring, "0") == 0) {
          Serial.println("Light Off!");
          pinMode(13, OUTPUT);
          digitalWrite(13, false);
        }
        if (strcmp(command->valuestring, "LED.v1.0") == 0 && strcmp(value->valuestring, "1") == 0) {
          Serial.println("Light on!");
          pinMode(13, OUTPUT);
          digitalWrite(13, true);
        }
      }
    }
  }


Croquis final avec capteurs et commandes:
//LCD 
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define LCD_I2C_ADDR    0x20 // Define I2C Address where the PCF8574T is
#define BACKLIGHT     7
#define LCD_EN  4
#define LCD_RW  5
#define LCD_RS  6
#define LCD_D4  0
#define LCD_D5  1
#define LCD_D6  2
#define LCD_D7  3
LiquidCrystal_I2C       lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7);
//BMP085 Barometric Pressure & Temp Sensor
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;

//for Intel Cloud
#include <IoTkit.h>    // include IoTkit.h to use the Intel IoT Kit
#include <Ethernet.h>  // must be included to use IoTkit
// create an object of the IoTkit class
IoTkit iotkit;
float temperature1;
int pressure1;
int moisturevalue1;
bool led1,relay1;

void setup() {  
  iotkit.begin();
  Serial.begin(9600);
  bmp.begin();
  //init LCD
  lcd.begin (20,4);
  lcd.setBacklightPin(BACKLIGHT,NEGATIVE); // init the backlight
  lcd.setBacklight(HIGH); // Backlight on
  lcd.home ();                  // go home
  lcd.setCursor ( 0, 0 );        
  lcd.print("Edison. Habrahabr");
  //Current state Actiator
  //LED  DFRobot  
  pinMode(8, OUTPUT);
  digitalWrite(8, !false);
  pinMode(9, OUTPUT);
  digitalWrite(9, false);
  //Send state Actiator
  iotkit.send("led1", 0);
  iotkit.send("relay1", 0);
}

void loop() {
  lcd.setCursor ( 0, 1 );  
  lcd.print("Tempera. = ");
  lcd.print(bmp.readTemperature());
  lcd.print(" *C");
  //
  lcd.setCursor ( 0, 2 );        
  lcd.print("Pressure = ");
  lcd.print(bmp.readPressure());
  lcd.print(" Pa");
  //
  lcd.setCursor ( 0, 3 );        
  lcd.print("Moisture Value = ");
  lcd.print(analogRead(0));
  //read
  temperature1=bmp.readTemperature();
  pressure1=bmp.readPressure();
  moisturevalue1=analogRead(0);
  //Console and Send to Intel Cloud
  Serial.println("Sensors");
  Serial.print("temperature1=");
  Serial.println(temperature1);
  iotkit.send("temperature1", temperature1);
  delay(2000); 
  Serial.print("pressure1=");
  Serial.println(pressure1);
  iotkit.send("pressure1", pressure1);
  delay(2000); 
  Serial.print("moisturevalue1=");
  Serial.println(moisturevalue1);
  moisturevalue1=20;
  iotkit.send("moisturevalue1", moisturevalue1);
  //Get command for Actiator
  iotkit.receive(callback);
  //
  delay(1000);               // wait for a second
}

void callback(char* json) {
  Serial.println(json);
  aJsonObject* parsed = aJson.parse(json);
  if (&parsed == NULL) {
    // invalid or empty JSON
    Serial.println("recieved invalid JSON");
    return;
  }   
  aJsonObject* component = aJson.getObjectItem(parsed, "component");
  aJsonObject* command = aJson.getObjectItem(parsed, "command"); 
  aJsonObject* argv = aJson.getObjectItem(parsed, "argv");
  aJsonObject* argvArray = argv->child;
  aJsonObject* name = argvArray->child; // name : on
  aJsonObject* value = name->next; // value: 1/0
  //LED
  if ((component != NULL)) {
    if (strcmp(component->valuestring, "led1") == 0) {
      if ((command != NULL)) {
        if (strcmp(command->valuestring, "LED.v1.0") == 0 && strcmp(value->valuestring, "0") == 0) {
          Serial.println("Light Off!");
          digitalWrite(8, !false);
          //Send state Actiator
          iotkit.send("led1", 0);
        }
        if (strcmp(command->valuestring, "LED.v1.0") == 0 && strcmp(value->valuestring, "1") == 0) {
          Serial.println("Light on!");
          digitalWrite(8, !true);
          //Send state Actiator
          iotkit.send("led1", 0);
        }
      }
    }
  }
  //RELAY
  if ((component != NULL)) {
    if (strcmp(component->valuestring, "relay1") == 0) {
      if ((command != NULL)) {
        if (strcmp(command->valuestring, "RELAY.v1.0") == 0 && strcmp(value->valuestring, "0") == 0) {
          Serial.println("Relay Off!");
          digitalWrite(9, false);
          //Send state Actiator
          iotkit.send("relay1", 0);
        }
        if (strcmp(command->valuestring, "RELAY.v1.0") == 0 && strcmp(value->valuestring, "1") == 0) {
          Serial.println("Relay on!");
          digitalWrite(9, true);
          //Send state Actiator
          iotkit.send("relay1", 0);
        }
      }
    }
  }  
}


Envoi d'
équipes de gestion Envoyez des équipes de gestion à partir du cloud Intel IoT Analytics. Ouvrez la section Contrôle . Choisissez un appareil et un composant.
Gestion des appareils Intel IoT Analytics

Ajoutez des actions pour allumer et éteindre la LED. Après avoir rempli les champs, cliquez sur le bouton Ajouter une action.
Gestion des appareils Intel IoT Analytics

Nous faisons de même pour les relais. Par conséquent, quatre entrées apparaissent dans le tableau. Pour allumer la LED, sélectionnez la dernière ligne et cliquez sur le lien Envoyer .
Gestion des appareils Intel IoT Analytics

Après quelques secondes, la LED s'allume.
Gestion des appareils Intel IoT Analytics

Pour résumer, la
gestion des appareils n'est pas plus compliquée que la réception de données de capteurs. Le développeur doit analyser la demande entrante au format JSON et appliquer la logique appropriée.

Références
  1. Croquis de la liste des codes IoTkit
  2. github.com - enableiotcom
  3. Guide de démarrage d'Edison - Windows
  4. Flash Edison Intel (câblé) - Windows
  5. Cloud Intel IoT Analytics
  6. Intel Internet of Things (IoT) Developer Kit IoT Cloud-Based Analytics User Guide November 2014

Source: https://habr.com/ru/post/fr384631/


All Articles