Intel Edison Trabajando con Intel IoT Analytics Cloud: Administración de dispositivos

Administración de dispositivos de Intel IoT Analytics

El trabajo continuo con la nube Intel IoT Analytics se centrará en los comentarios del dispositivo, enviando comandos para administrar el dispositivo. La primera parte de Intel Edison. Trabaje con la nube Intel IoT Analytics: registro y envío de datos . Nos damos cuenta de la operación de encender / apagar el LED y el relé. Para demostrarlo, toma una posición de una publicación anterior.
Para enviar comandos al dispositivo, se utiliza un tipo de componente especial: Actuación . En una publicación anterior, consideramos el tipo de componente "sensor", que le permite enviar datos desde el dispositivo. La actuación transmite datos a través del protocolo MQTT y WebSocket. Este tipo de componente llama al comando cadena de comandos y sus parámetros de nombre / valor.

Registro de la actuación en la nube Intel IoT Analytics
Considere la actuación predeterminada , que se ajustará sin cambios para el LED. Abra la sección Cuenta , la sección Catálogo , el componente Powerswitch.v1.0 .
Administración de dispositivos de Intel IoT Analytics
Ventana Propiedades del
Administración de dispositivos de Intel IoT Analytics
componente Powerswitch.v1.0 . Tipo de componente actuador . Porque El LED solo puede estar en dos estados, entonces el tipo de datos es booleano . LED.v1.0 : comando para el LED. Tecla / valor, nombre - LED , el valor aceptado es 0 o 1 .
El relé es del mismo tipo de componente con un LED, por lo que también creamos un actuador para el relé.
Administración de dispositivos de Intel IoT Analytics
Tipos de componentes creados.

Configuración del agente iotkit en Intel Edison
Ahora debe iniciar sesión a través de SSH en Intel Edison. En una publicación anterior, se configuró Wi-Fi, por lo que puede conectarse al dispositivo a través de LAN. El soporte del
componente de actuación se ha anunciado solo con la versión 1.5.2 y superior del agente. Se recomienda que actualice el agente a la última versión actual.

Averigüe la versión del agente:
# iotkit-admin -V
Comando de actualización del agente:
# npm update iotkit-agent

En la última versión del agente, fue posible trabajar en WebSocket. Para trabajar en WebSocket, debe configurar el agente con el comando:
# iotkit-admin protocol rest + ws

Vuelva al modo MQTT:
# iotkit-admin protocol mqtt

Registre el actuador para el LED y el relé en Intel Edison.
El registro de los sensores se realiza con el comando # iotkit-admin register [sensor_name] [sensor_type] .
Ejecutamos los comandos: # iotkit-admin register led1 powerswitch.v1.0
# iotkit-admin register relay1 relay.v1.0
Administración de dispositivos de Intel IoT Analytics

Preparando un boceto para Arduino
Los componentes están registrados. Ahora prepararemos un boceto para Arduino, tome el ejemplo IoTKitActuationExample.

Considere el código:
la función void setup () no es diferente del ejemplo anterior.
En la función void loop () , se introduce una función para verificar periódicamente los mensajes recibidos, donde json es un puntero a un mensaje en formato JSON.
void loop() {
  iotkit.receive(callback);
  delay(5000);
}

Función de devolución de llamada nula (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 los datos recibidos están presentes, los analizamos más a fondo.
  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

Comprobación de los comandos LED.v1.0 recibidos y los valores "0" o "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);
        }
      }
    }
  }


Boceto final con sensores y controles:
//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);
        }
      }
    }
  }  
}


Envío de
equipos de administración Envíe equipos de administración desde la nube Intel IoT Analytics. Abre la sección de Control . Elija un dispositivo y componente.
Administración de dispositivos de Intel IoT Analytics

Agregue acciones para encender y apagar el LED. Después de completar los campos, haga clic en el botón Agregar acción.
Administración de dispositivos de Intel IoT Analytics

Hacemos lo mismo para los relevos. Como resultado, aparecen cuatro entradas en la tabla. Para encender el LED, seleccione la última línea y haga clic en el enlace Enviar .
Administración de dispositivos de Intel IoT Analytics

Después de un par de segundos, el LED se encenderá.
Administración de dispositivos de Intel IoT Analytics

En resumen, la
administración de dispositivos no es más complicada que recibir datos de sensores. El desarrollador debe analizar la solicitud entrante en formato JSON y aplicar la lógica adecuada.

Referencias
  1. Bosquejo de listado de código de IoTkit
  2. github.com - enableiotcom
  3. Guía de inicio de Edison - Windows
  4. Intermitente Intel Edison (cableado) - Windows
  5. Cloud Intel IoT Analytics
  6. Intel Internet of Things (IoT) Developer Kit IoT Cloud-Based Analytics Guía del usuario Noviembre de 2014

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


All Articles