SmartgridOne logo
SmartgridOne logo
Démarrage rapideInstallationRéseauDirectives de câblage et de connectivitéApp
AgrolaAutarcoAxpoBEE ÉnergieCompanion EnergyCommerce Énergétique DynamiqueDexterContrôle de relais DNOEdmijSolutions de flexibilité énergétique (SFE)EliaEnervalisEngieAPI de planificationEPEX Spot SolaireCommodités européennesFleurFrank EnergieBoîte à fusiblesGreenchoiceHallostroomImbyJoulenKratTradeNouvelles intégrationsÉnergie SuivanteOpinumParagraphe 14a IntégrationPleeviRenouveléScholtTrevionÉnergie VGTYuso - Contrôle de batterieYuso - Réduction de l'énergie solaire
Live MQTT controlContrôle MQTT programméUsine de Production Virtuelle
SpécificationsLEDs de statutTemps de réponse de contrôleTutoriels vidéoCertificatsLicenceSécurité, maintenance et avis légaux
External SignalsMQTT
Tip

Le contrôle MQTT programmé est destiné aux messages planifiés à l'avance. Pour le contrôle en direct, consultez plutôt Contrôle MQTT en Direct.

Ce guide vous aidera à configurer MQTT sur votre SmartgridOne Controller pour contrôler et surveiller à distance les installations de batteries et de panneaux solaires.

Ce dont vous avez besoin

  1. SmartgridOne Controller avec connectivité Internet.
  2. Identifiants MQTT : Cela peut être demandé à notre Équipe de Support.
  3. Environnement de développement Python (ou tout autre client MQTT). Ce guide utilise un exemple de base écrit en Python pour vous aider à démarrer avec MQTT et l'envoi de commandes. Nous recommandons d'utiliser Python pour sa facilité d'utilisation, mais tout autre client MQTT est supporté.

Informations supplémentaires

MQTT est un protocole de communication rapide sur Internet. C'est un système de messagerie de publication/abonnement, qui permet une connexion directe entre votre machine et le SmartgridOne Controller. Vos actifs sont classés en groupes solaires, batteries, VE et CVC. Pour le moment, cette intégration permet un contrôle par groupe, pas par appareil.

Configuration initiale (Point de départ pour les nouveaux utilisateurs)

J'ai un SmartgridOne Controller que j'aimerais configurer pour le Contrôle à Distance MQTT.

1. Vérifiez votre réseau

Assurez-vous que votre réseau autorise le trafic réseau mqtt sur le port 1883. Vous pouvez le faire en utilisant la commande :

nc -zv mqtt.eniris.be 1883

Lorsque cette commande n'est pas disponible, vous pouvez alternativement télécharger et exécuter ce code python.

En cas de doute, consultez votre ingénieur réseau ou utilisez temporairement le point d'accès 4G/5G de votre téléphone en cas d'erreurs de connexion.

Note

Lorsque le port 1883 n'est pas accessible depuis votre réseau, nous offrons une sauvegarde sur le port 80. Cela peut être configuré dans votre client MQTT à une étape ultérieure de ce manuel.

2. Ajoutez vos appareils

Connectez-vous à l'interface de mise en service et assurez-vous que les appareils sont ajoutés au SmartgridOne Controller.

3. Ajoutez le signal externe MQTT

Image 1
Image 1
Image 1

4. Activez le signal MQTT à distance

Sélectionnez tous les appareils que vous souhaitez inclure dans le Contrôle à Distance MQTT.

Image 1

5. Le signal à distance est ajouté

L'interface de Contrôle à Distance MQTT a maintenant été activée sur le SmartgridOne Controller.

Nous sommes maintenant prêts à envoyer quelques commandes de base à l'aide d'un exemple simple. La colonne Statut vous indique si une commande est active.

Script de démonstration Python

Un bon point de départ serait de tester votre nouvelle intégration avec un exemple simple.

Ce code de test effectue un travail simple en envoyant en continu le planning suivant :

  • Batterie : Charge à 5 kW pendant 15 minutes dans 10 minutes
  • Solaire : Définit la puissance sur 0 kW pendant une heure dans 30 minutes

Le SmartgridOne Controller répond avec un message d'accusé de réception contenant l'identifiant unique du planning, ou un message d'erreur.

Nous récupérons ensuite le prochain planning pour les deux types de dispositifs, confirmant que la commande a été réussie.

Veuillez télécharger le fichier ci-dessous dans votre IDE Python préféré. Remplissez votre numéro de série et vos identifiants MQTT et exécutez le script :

Lorsque cela réussit, vous pouvez continuer à envoyer d'autres types de messages. Tous les messages sont décrits ci-dessous.

Documentation MQTT pour l'envoi de commandes

Cette section détaille le format de messagerie MQTT et les exigences de charge utile pour configurer le contrôle programmé des appareils au sein du réseau du SmartgridOne Controller.

Thèmes MQTT

  • Topic d'abonnement : standard1/rp_one_s/remoteScheduleMetrics/<controller SN>
  • Topic de retour : standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>

Où <controller SN> doit être remplacé par le numéro de série réel du SmartgridOne Controller que vous souhaitez contrôler.

Types de messages MQTT

1. Définir le planning (set_schedule)

Crée un nouveau planning pour un type de dispositif.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "set_schedule",
    "fields": {
        "device_type": "<Device Type>",
        "node_id": "<Node ID>" (Optionnel),
        "start_time": <Unix Timestamp>,
        "end_time": <Unix Timestamp>,
        "policy": "<Policy>",
        "power_setpoint_w": <Setpoint en watts>,
        "site_import": <Site Import en Watts>,
        "site_export": <Site Export en Watts>,
        "remove_overlap": <True/False> (Optionnel) (default=False),
        "tag": <Tag String> (Optionnel) (default=None),
    }
}

Réponse (Succès) :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "set_schedule_ack",
        "state": {
            "schedule_id": <Schedule ID>,
            "deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
            "tag": <Tag String> (default=None),
        },
        "responseCode": 0
    }
}

2. Définir les plannings (set_schedules)

Crée plusieurs nouveaux plannings.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "set_schedules",
    "fields": 
        "0": "{
            "device_type": "<Device Type>",
            "node_id": "<Node ID>" (Optionnel),
            "start_time": <Unix Timestamp>,
            "end_time": <Unix Timestamp>,
            "policy": "<Policy>",
            "power_setpoint_w": <Setpoint en watts>,
            "site_import": <Site Import en Watts>,
            "site_export": <Site Export en Watts>,
            "remove_overlap": <True/False> (Optionnel) (default=False),
        }",
        "1": "{
            "device_type": "<Device Type>",
            "node_id": "<Node ID>" (Optionnel),
            "start_time": <Unix Timestamp>,
            "end_time": <Unix Timestamp>,
            "policy": "<Policy>",
            "power_setpoint_w": <Setpoint en watts>,
            "site_import": <Site Import en Watts>,
            "site_export": <Site Export en Watts>,
            "remove_overlap": <True/False> (Optionnel) (default=False),
        }",
        ...
}

Réponse (Succès) :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "set_schedules_ack",
        "state": {
            "schedule_ids": <Schedule IDs>,
            "deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
        },
        "responseCode": 0
    }
}

3. Obtenir le planning (get_schedule)

Récupère un planning spécifique par ID.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_schedule",
    "fields": {
        "id": <Schedule ID>
    }
}

Réponse :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_schedule_ack",
        "state": <Schedule>,
        "responseCode": 0
    }
}

4. Obtenir le planning actif (get_active_schedule)

Récupère le planning actuellement actif pour un type de dispositif.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_active_schedule",
    "fields": {
        "device_type": "<Device Type>",
        "node_id": "<Node ID>" (Optionnel),
    }
}

Réponse (Succès) :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_active_schedule_ack",
        "state": <Schedule>,
        "responseCode": 0
    }
}

5. Obtenir le prochain planning (get_next_schedule)

Récupère le prochain planning à venir pour un type de dispositif.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_next_schedule", 
    "fields": {
        "device_type": "<Device Type>",
        "node_id": "<Node ID>" (Optionnel),
    }
}

Réponse (Succès) :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_next_schedule_ack",
        "state": <Schedule>,
        "responseCode": 0
    }
}

6. Obtenir les plannings (get_schedules)

Récupère tous les plannings pour une date spécifique.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_schedules",
    "fields": {
        "date": "<Date String au format dd/mm/yyyy>"
    }
}

Réponse (Succès) :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_schedules_ack",
        "state": {
            "schedules": [<Schedule>, ...]
        },
        "responseCode": 0
    }
}

7. Obtenir les plannings futurs (get_future_schedules)

Récupère tous les plannings futurs.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_future_schedules",
    "fields": {}
}

Réponse (Succès) :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_future_schedules_ack",
        "state": {
            "schedules": [<Schedule>, ...]
        },
        "responseCode": 0
    }
}

8. Supprimer un planning (remove_schedule)

Supprime un planning spécifique par ID.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "remove_schedule",
    "fields": {
        "id": <Schedule ID>
    }
}

Réponse (Succès) :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "remove_schedule_ack",
        "state": "Le planning <Schedule ID> a été supprimé avec succès",
        "responseCode": 0
    }
}

9. Obtenir des retours sur le site (get_feedback)

Récupère des retours détaillés sur l'état du système.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_feedback",
    "fields": {
        "device": <Dispositif (niveau noeud)>
    }
}

Réponse (Succès) :

Structure de la charge utile de retour

10. Topologie du site (get_toplogy)

Obtient la topologie du site.

{
    "extraTags": {
        "nodeId": "<Controller SN>_site_0"
    },
    "time": <Unix Timestamp>,
    "message_type": "get_topology",
    "fields": {}
}

Réponse (Succès) :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "get_topology_ack",
        "state": {
            "nodeId": <nodeId>,
            "nodeType": <nodeType>,
            "nomCurrent": <nominalCurrent>
            "children": [{<ChildObject>}]
            },
        "responseCode": 0
    }
}

Format de réponse standard des plannings

{
    "id": <Schedule ID>,
    "device_type": "<Device Type>",
    "node_id": "<Node ID>" (Optionnel),
    "start_time": <Unix Timestamp>,
    "end_time": <Unix Timestamp>,
    "policy": "<Schedule Policy>",
    "power_setpoint_w": <Setpoint en watts>,
    "created_at": <Unix Timestamp>
}

Types de composants et politiques

Pour des détails concernant les composants disponibles et les politiques pouvant être programmées, référez-vous à la section Composants et Politiques MQTT dans la documentation de Contrôle MQTT en Direct.

Des plannings spécifiques aux dispositifs peuvent être envoyés en utilisant le champ optionnel node_id, se référant à l'ID du noeud du dispositif contrôlable.

Gestion des erreurs

Tous les messages peuvent renvoyer une réponse d'erreur avec responseCode: 1 lorsqu'une erreur se produit :

{
    "requestTime": <Unix Timestamp>,
    "time": <Unix Timestamp>,
    "siteNodeId": "<Controller SN>_site_0",
    "data": {
        "message_type": "<Message Type>_ack",
        "error": <Error Body>,
        "responseCode": 1
    }
}

Lorsque se produit une erreur non liée, le type de message sera (general_error).

Les erreurs courantes incluent :

  • Chevauchement de planning avec des plannings existants
  • Plage horaire invalide
  • Type de dispositif non trouvé
  • ID de planning non trouvé
  • Politique invalide pour le type de dispositif

Règles de gestion des plannings

  1. Règles de chevauchement
    • Les plannings ne peuvent pas se chevaucher pour le même type de dispositif
    • Les plannings ne peuvent pas se chevaucher pour le même dispositif
    • Les plannings pour le même dispositif et le même type de dispositif ne peuvent pas se chevaucher
    • Les plannings existants qui se chevauchent seront supprimés si la variable remove_overlap est définie sur True lors de la création d'un nouveau planning.
  2. Chaque planning doit avoir :
    • Un type de dispositif valide
    • Une heure de début (timestamp Unix)
    • Une heure de fin (timestamp Unix)
    • Une politique (correspondant aux politiques disponibles selon le type de dispositif)
    • Un niveau de puissance (pour les politiques qui l'exigent)
  3. L'heure de début doit être antérieure à l'heure de fin
  4. Si l'heure de début est dans le passé, elle est automatiquement changée pour commencer maintenant
  5. Les plannings ne peuvent être supprimés que s'ils n'ont pas encore commencé. Les plannings actifs ne peuvent pas être supprimés.
  6. Les plannings peuvent être établis pour différents types de dispositifs de manière indépendante
  7. Le système applique automatiquement la politique appropriée lorsque le planning devient actif

Live MQTT control

Previous Page

Usine de Production Virtuelle

Next Page

On this page

Ce dont vous avez besoinInformations supplémentairesConfiguration initiale (Point de départ pour les nouveaux utilisateurs)1. Vérifiez votre réseau2. Ajoutez vos appareils3. Ajoutez le signal externe MQTT4. Activez le signal MQTT à distance5. Le signal à distance est ajoutéScript de démonstration PythonDocumentation MQTT pour l'envoi de commandesThèmes MQTTTypes de messages MQTT1. Définir le planning (set_schedule)2. Définir les plannings (set_schedules)3. Obtenir le planning (get_schedule)4. Obtenir le planning actif (get_active_schedule)5. Obtenir le prochain planning (get_next_schedule)6. Obtenir les plannings (get_schedules)7. Obtenir les plannings futurs (get_future_schedules)8. Supprimer un planning (remove_schedule)9. Obtenir des retours sur le site (get_feedback)10. Topologie du site (get_toplogy)Format de réponse standard des planningsTypes de composants et politiquesGestion des erreursRègles de gestion des plannings