NETIO FABRIQUE DES PRISES DE COURANT INTELLIGENTES POUR LES ENTREPRISES... ET LES GEEKS !

● Les prises Wi-Fi ne viennent pas toutes de Chine !
● Attrait des développeurs, grâce à l'API JSON simple (et d'autres API)
● Le fabricant travaille sur une application mobile et contrôle les sorties dans le cloud

Pour une démo en ligne :

http://pc-rest.netio-products.com:22888/

ID : demo/demo

NETIO PowerCable REST 101x

Netio a récemment testé une prise Wi-Fi vendue sur un célèbre magasin en ligne chinois, en ayant conscience de la difficulté de porter plainte contre celui-ci si jamais ses locaux venaient à partir en flammes...

C'est ce que l'on entend fréquemment à propos de ce type de "gadget" bon marché, qui demeure un bon argument pour ne pas l'acheter ! Certes ils fonctionnent, peuvent être facilement connectés aux assistants vocaux de Google et Amazon voire complètement reprogrammés en un rien de temps par un geek, mais il s’agit toujours d’une production bon marché avec tous les inconvénients qui y sont liés.


Prises Wi-Fi professionnelles tchèques de NETIO

Aujourd'hui, avec  les prises Wi-Fi professionnelles de NETIO fabriquées en République tchèque, c'est l'extrême opposé puisque c'est un État membre de l'UE et que ces prises sont conformes à toutes les normes de sécurité applicables. Avec leur API (Application Programming Interface), elles sont destinées à être intégrées à un système existant, tel qu'un équipement de maison intelligente ou des salles de serveurs.

Dans la catégorie supérieure, NETIO propose une PDU complète (unité de distribution d'alimentation) pouvant allumer et éteindre automatiquement jusqu'à quatre appareils en 230V et communiquer (selon le modèle) via une connexion Wi-Fi, Ethernet ou série à l'aide de protocoles tels que Modbus, SNMP, MQTT, et plus. Certains modèles peuvent également mesurer très précisément les paramètres électriques.


Famille PowerCable

La gamme NETIO comprend également des unités PowerCable moins chères, qui ressemblent à un câble de rallonge d’alimentation et peuvent commuter un appareil 230V / 16A. Ils sont contrôlés par Wi-Fi (802.11n à 2,4 GHz) ou par le protocole tchèque IQRF à 868 MHz.

PowerCable REST - une prise de courant Wi-Fi de fabrication tchèque

Le prix de vente de ces prises pour le client final est d'environ 99 EUR + TVA, ce qui signifie le monde des gadgets asiatiques est dépassé, y compris au niveau tarifs, et nous examinerons de plus près deux appareils : PowerCable REST et PowerCable MQTT. C'est le PowerCable REST auquel nous nous intéressons ici, ce qui rend ce produit unique par son prix et ses capacités.


Prise de courant avec compteur de consommation

Une fois connectée à un réseau local et ayant acquis une adresse IP, la prise fournit une interface Web simple où elle peut être activée et désactivée, tout en affichant la consommation d'énergie immédiate.

La prise d’alimentation dispose de deux voyants indiquant l’état de la connexion Wi-Fi et de la prise.

En temps réel, on peut voir les valeurs immédiates de la tension électrique (V), du courant (mA), de la puissance d'entrée de l'appareil connecté (W), de l'énergie totale consommée (Wh) ainsi que la fréquence du réseau (Hz).

En plus de l'administrateur principal, l'interface Web permet de créer de nouveaux utilisateurs et de leur attribuer différents droits. Par exemple, ils peuvent soit n'accéder qu'aux mesures, soit contrôler totalement le commutateur.

Interfaces Web de la prise PowerCable REST Wi-Fi

Les modèles de gamme supérieure proposent également une commutation marche / arrêt et peuvent être contrôlés via une application mobile. La famille PowerCable n'a pas encore son application propre car elle est en cours de développement et devrait être prête dans quelques mois.

Sockets avec API pour les développeurs

Certains pourraient avancer que le modèle de base PowerCable ne peut pas vraiment faire grand chose, et c'est en adéquation avec l'objectif visé. Plutôt que d'assurer une automatisation complexe, au domicile par exemple, il propose une API de communication. Ainsi il est vraiment conçu pour être connecté à un système de maison intelligente existant - il ne s'agit en aucun cas d'un système de maison intelligente à lui tout seul.

C’est également un bon produit pour les technophiles, qui hésitent peut-être à introduire un périphérique asiatique non fiable dans leur réseau domestique, sans pour autant s’appuyer sur une application du fabricant propriétaire pour leur maison intelligente future, par exemple (on pense à Fibaro ou le communautaire Domoticz), voire d’autres systèmes ouverts aux périphériques tiers.

Toutefois, le groupe cible principal est constitué d’opérations plus importantes qui souhaitent s’occuper elles-mêmes de l’automatisation avec une solution personnalisée.


Contrôler le socket en utilisant une adresse Web

Comme son nom l'indique, PowerCable REST propose une API HTTP REST simple. La prise peut être activée en accédant à son adresse Web spécifique. De la même manière, les données de consommation peuvent être obtenues au format JSON, ou au format XML (quelque peu vieillissant).

Activer l'API URL avec une adresse locale spéciale pour changer de socket

Tout d'abord, essayons l'API la plus simple possible et commutons le socket en accédant à son URL. Pour ce faire, il est nécessaire d'activer l'API URL et de définir un mot de passe dans les paramètres de l'appareil.

Attention, le mot de passe est placé parmi les autres paramètres de l'URL et le périphérique socket exécute un serveur basé HTTP non crypté, de sorte que le password n'est pas crypté sur le réseau. Il s'agit d'une simple protection de base, pour empêcher par exemple quelqu'un d'éteindre la prise par erreur.

EXEMPLE DE MISE EN PRATIQUE

Mon périphérique de prise intelligente utilise l'URL pc-rest.netio-products.com et écoute sur le port 22888 avec le mot de passe «mops». Je peux ainsi changer de socket en accédant à cette adresse :

http://pc-rest.netio-products.com:22888/netio.cgi?pass=mops&output1=1


Comme nous pouvons le constater, outre le mot de passe, il existe un deuxième paramètre, output1, qui indique la sortie à commuter. Le PowerCable n'ayant qu'une sortie, son numéro est 1. Le paramètre a la valeur 1, ce qui signifie qu'on allume la prise.

Pour éteindre la prise, je peux simplement accéder à :

http://pc-rest.netio-products.com:22888/netio.cgi?pass=mops&output1=0

L'API de base prend également en charge une commande permettant de basculer l'état actuel :

http://pc-rest.netio-products.com:22888/netio.cgi?pass=mops&output1=4

Enfin, il existe deux commandes particlières que l'on trouve rarement ailleurs. La prise peut s’allumer ou s’éteindre pendant une courte période, puis revenir à l’état précédent. De cette manière, il crée une impulsion de puissance avec une durée configurable en millisecondes.


Réglage du délai d'activation / désactivation rapide en une seule étape

Quel est l'avantage ? Un court arrêt peut être utilisé pour redémarrer à froid un ordinateur qui a cessé de répondre. C'est aussi simple que d'accéder à :

http://pc-rest.netio-products.com:22888/netio.cgi?pass=mops&output1=2

Dans le cas contraire - la prise est éteinte mais vous devez l'activer brièvement, puis la réactiver, le tout en une seule étape - l'URL d'accès est :

http://pc-rest.netio-products.com:22888/netio.cgi?pass=mops&output1=3

Ceci est utile par exemple pour sonner l'alarme pendant 10 secondes en cas d’alerte, puis l’éteindre à nouveau. Le système peut simplement appeler une adresse similaire à celle ci-dessus. Autre exemple: un système intelligent peut accéder à cette adresse périodiquement, par exemple une fois par heure, pour mettre en service l’appareil connecté qui mesure certaines données, les envoie quelque part puis s’éteint à nouveau.

Soit dit en passant, les commutations fréquentes ne peuvent pas surcharger le circuit 230V grâce à la technologie ZCS (Zero Current Switching): l’alimentation de l’appareil est connectée ou déconnectée lorsque la forme d’onde du courant alternatif dépasse le niveau zéro.


API JSON

En plus de l'API URL la plus simple, il existe également une API JSON et une API XML. Ces API utilisent HTTP POST au lieu de HTTP GET. Cela signifie que les commandes sont envoyées dans le corps de la demande et non dans l'URL. Dans ce mode, la prise intelligente communique également tout ce qu'elle sait sur son état.

Activer l'API JSON afin de télécharger les données de consommation

Il est également important de noter que le PowerCable ne peut «parler» qu’une API à la fois. Ainsi, lorsque vous activez l'API JSON, l'API URL simple est automatiquement désactivée, et inversement.

Qu'est-ce que JSON ?

JSON signifie historiquement JavaScript Object Notation; Toutefois, il s’agit aujourd’hui d’une norme de facto pour la transmission de données entre différentes technologies. En réalité, il n'est pas lié à Javascript et remplace progressivement XML.

La notation utilise des accolades pour les paires clé valeur et les crochets pour les tableaux. Voici un exemple d’objet contenant les données personnelles d’une personne:
{
   "name": "John",
   "sex": male,
   "weight": 83
}

Contrairement au XML, la notation est plus condensée car il n'y a pas de balises de début et de fin, telles que <name> John </ name>. Mais le plus gros avantage est qu'un analyseur JSON est désormais inclus par défaut dans pratiquement tous les langages de programmation modernes (Javascript, Python, etc.) et que des bibliothèques externes sont disponibles pour les autres, y compris des bibliothèques pour Arduino et d'autres microcontrôleurs où chaque octet de RAM compte.


Données JSON sur le socket et sa consommation

Après cette brève récapitulation (excuses des codeurs chevronnés), revenons à l’API JSON sur la prise PowerCable Wi-Fi. Dans ce cas, JSON est utilisé pour transférer des données de consommation d'électricité et d'autres informations.

Requête HTTP authentifiée GET pour les données de socket en JSON

Donc, j’active JSON au lieu de l’API URL et pointe mon navigateur sur http://pc-rest.netio-products.com:22888/netio.json. Je dois d'abord m'authentifier avec un nom d'utilisateur et un mot de passe, puis les données JSON complètes sur le socket apparaissent:

{
  "Agent": {
    "Model": "101x",
    "DeviceName": "pc-rest-onlinedemo",
    "MAC": "24: A4: 2C: 38: D3: 8Q",
    "JSONVer": "2.0",
    "Time": "2019-10-12T15: 18: 41 + 01: 00",
    "Uptime": 10108,
    "Version": "2.2.1",
    "OemID": "5",
    "VendorID": "0",
    "NumOutputs": 1
  },
  "GlobalMeasure": {
    "Tension": 236,
    "TotalLoad": 34,
    "TotalEnergy": 970,
    "OverallPowerFactor": 0,96,
    "Frequency": 50,
    "EnergyStart": "2019-05-03T11: 11: 10 + 01: 00"
  },
  "Outputs": [
    {
      "ID": 1,
      "Name": "Puissance de sortie1",
      "State": 1,
      "Action": 6,
      "Delay": 2000,
      "Current": 149,
      "PowerFactor": 0,96,
      "Energy": 970,
      "Load": 34
    }
  ]
}

Puisque tout le monde, y compris les débutants complets, peut maintenant lire JSON, limitons-nous à un bref résumé.

Au début, il y a quelques informations de base sur le socket. Cependant, ce qui nous intéresse le plus, c'est l'objet GlobalMeasure et le tableau Outputs. La section GlobalMeasure affiche les statistiques de consommation totale ; ceci étant, notre PowerCable ne disposant que d’une sortie de puissance commutée, les données s’appliquent également à la sortie. Cette sortie est également le seul élément du champ Sorties où vous pouvez également voir l'état actuel (State) et le courant immédiat (Current) en milliampères.

 

PowerCable contrôle le ventilateur de notre bureau et mesure sa consommation

Ainsi, nous pouvons voir que le PowerCable contrôlant notre ventilateur lit actuellement 236V à 50Hz à sa sortie. Un courant de 149mA circule dans le circuit et le ventilateur consomme environ 34W. Depuis la dernière réinitialisation, le socket a fourni 970Wh d'énergie et, comme l'indique la variable State, il est maintenant allumé.

Ces données lisibles par machine peuvent être lues par n’importe quel système automatisé pouvant accéder à cette URL, telle qu’une application fonctionnant sur votre Raspberry Pi, puis traitées, stockées dans une base de données, tracées dans un graphique chronologique ou utilisées pour calculer les coûts quotidiens de fonctionnement du ventilateur.

Authentification HTTP basique

Comme déjà mentionné, lorsque vous accédez à l'adresse de l'API JSON avec un navigateur Web, une boîte de dialogue de connexion apparaît. Les informations d'identification de connexion sont configurées dans la configuration du périphérique pour cette API.

Le serveur Web intégré au périphérique Smart Socket utilise l'authentification HTTP basique. Donc, si nous voulons récupérer les données, par exemple en accédant à l'adresse depuis notre propre programme, nous devons inclure l'en-tête correspondant dans la requête HTTP. Par exemple:

Autorisation: Basic d3JpdGU6ZGVtbw==


La séquence de caractères de la troisième partie correspond  à la paire username:password (y compris les deux points) en codage Base64. Le serveur Web le décode et si les informations d'identification sont correctes, les données JSON sont renvoyées.

 

En-tête de la requête HTTP pour les données du socket JSON, indiqué dans les outils de développement de Chrome. L'enregistrement d'authentification est également inclus, de sorte que le périphérique accepte la demande et envoie une réponse.

Essayons-le en pratique. Tout d’abord, utilisons le client cURL basé sur le texte, qui est actuellement disponible dans toutes les distributions Linux, y compris Raspbian sur Raspberry Pi. Une version Windows est également disponible.


Récupération des données à l'aide de cURL et de la ligne de commande

Curl, bien sûr, supporte l'authentification HTTP Basic ; Le même JSON que dans l'exemple de navigateur peut être récupéré avec cette commande:

curl --utilisateur admin:mops http://pc-rest.netio-products.com:22888/netio.json

Notez le paramètre --user suivi de login: mot de passe paire dans la commande.

 

Récupération de données JSON du smart socket à l'aide de cURL et de la ligne de commande


Récupération de données et enregistrement au format CSV en Python

Essayons à nouveau dans un langage de programmation. Peut-être avons-nous déjà un minuscule Raspberry Pi Zero W dans notre réseau local. Il ne coûte presque rien et exécute la Raspbian basée sur Linux avec Python. Alors, écrivons un script dans cette langue. Nous allons également utiliser la bibliothèque Requests.

 

Un simple script se connecte au socket, récupère les données de consommation et les enregistre dans une nouvelle ligne dans un fichier CSV

Le code Python simple ci-dessous se connecte au socket, télécharge des données JSON, les analyse pour obtenir les valeurs immédiates de tension, de courant, d'alimentation et de consommation, et stocke toutes ces valeurs (séparées par des points-virgules) sur une nouvelle ligne dans un fichier .csv. Ce fichier peut être ouvert ultérieurement, par exemple dans MS Excel.

import requests
from datetime import datetime

http = requests.get ("http://pc-rest.netio-products.com:22888/netio.json", auth = ("write", "demo"))
si http.status_code == 200:
    data = http.json ()
    my_voltage = data ["GlobalMeasure"] ["Voltage"]
    my_current = data ["Outputs"] [0] ["Current"]
    my_load = data ["Outputs"] [0] ["Load"]
    my_consumption = data ["Outputs"] [0] ["Energy"]

    print ("Voltage:" + str (my_voltage) + "V")
    print ("Current:" + str (my_current) + "mA")
    print ("Load:" + str (my_load) + "W")
    print ("Energy consumption:" + str (my_consumption) + "Wh")

    with open ("data.csv", "a") as my_file:
        mon_fichier.write (datetime.today (). strftime ("% H:% M:% S% d.% m.% Y") + ";")
        mon_fichier.write (str (my_voltage) + ";")
        mon_fichier.write (str (my_current) + ";")
        mon_fichier.write (str (my_load) + ";")
        mon_fichier.write (str (my_consumption) + "n")
        print ("Saved into data.csv")

Lorsque le script est exécuté, une nouvelle ligne est ajoutée au fichier texte. Cela peut ressembler à ceci:
15:39:45 12.10.2019; 237; 113; 40; 952

Il ne reste plus qu’à exécuter périodiquement ce code pour obtenir un aperçu complet de l’état de l’appareil connecté et de l’historique de sa consommation énergétique. Lorsque la charge est nulle, l'appareil est probablement éteint; lorsqu'il est au maximum, l'appliance fonctionne à pleine charge.

 

Enregistrement de la consommation à la minute du vendredi après-midi. La consommation d'énergie variable indique les périodes de temps pendant lesquelles le ventilateur a été allumé et à quelle vitesse.


Contrôler le socket depuis la ligne de commande

Jusqu'à présent, nous avons pu lire toutes les données intéressantes du socket, mais comment pouvons-nous les contrôler? Avec l'API JSON active, nous ne pouvons plus utiliser l'API URL primitive. Au lieu de cela, nous devons envoyer les commandes via HTTP POST, qui fonctionne comme la soumission d'un formulaire Web.

Essayons d’abord avec le cURL textuel :

curl --user admin: mops -d "{"Outputs": [{"ID": 1, "Action": 4}]}" http: //pc-rest.netio-products. com: 22888 / netio.json

La commande ci-dessus envoie des données au socket au format JSON dans le corps d'une requête HTTP POST (paramètre -d). La structure de valeurs suivante a été envoyée:

{
  "Les sorties":
  [
    {
      "ID": 1,
      "Action": 4
    }
  ]
}

Avec cela, nous demandons au PowerCable d'effectuer l'action no. 4 avec le numéro de sortie 1. Cela peut sembler un peu compliqué, mais rappelez-vous que toutes les boîtes Netio ont la même API et que les modèles supérieurs ont plusieurs sockets. Par conséquent, nous devons identifier le socket, même si le modèle en question n'en possède qu'un.

Les codes d’action numériques ont déjà été expliqués avec l’API d’URL. Nous savons donc que l’action 4 consiste à basculer l’état - le socket est activé ou désactivé en fonction de son activation ou de son activation, respectivement.


Contrôler le socket depuis Python

Faisons maintenant la même chose avec Python et la bibliothèque Requests. Nous allons écrire un script qui bascule l’état du socket et l’imprime.


Changer l'état du socket avec un script Python simple

Le code ressemble à ceci :

import requests
import json

make_me_switch = {
  "Outputs":
  [
    {
      "ID": 1,
      "Action": 4
    }
  ]
}

 

http = requests.post("http://pc-modbus.netio-products.com:22888", auth=("demo", "mops"), data=json.dumps(make_me_switch))

if http.status_code == 200:

    data = http.json()

    my_state = data["Outputs"][0]["State"]

    if my_state == 0:

        print("Socket is off")

    elif my_state == 1:

        print("Socket is on")

    
La communication est à nouveau très simple. La méthode POST de la bibliothèque Requests est appelée en lieu et place de la méthode GET. Les données JSON en texte brut que nous souhaitons envoyer sont spécifiées en tant que paramètre. Dès que le script Python est démarré, le socket est basculé sur l'autre état.


Programmeur et prise d'intégration

La prise intelligente PowerCable REST et son API universelle sont donc conçues pour être facilement connectées à vos systèmes maison ou entreprise sans avoir besoin de flasher un micrologiciel personnalisé et autres tracas similaires.

Comme indiqué dans l'introduction, le fabricant travaille également sur une application mobile pour PowerCable qui permettra de contrôler la prise à distance, sans qu'aucun système de maison intelligente ne soit installé.

Nous examinerons également de plus près le modèle PowerCable MQTT, qui utilise le très populaire et complexe protocole MQTT pour l'Internet des objets. Nous n’avons pas encore couvert MQTT sur notre portail, nous allons donc conserver le PowerCable MQTT plus tard, après avoir expliqué en détail ce qui peut être fait avec MQTT et pourquoi il est si populaire.


Newsletter