Planowane sterowanie MQTT
Wskazówka
Planowane sterowanie MQTT jest przeznaczone do zaplanowanych komunikatów wysyłanych z wyprzedzeniem. Do sterowania w czasie rzeczywistym zobacz Live MQTT Control.
Ten przewodnik pomoże Ci skonfigurować MQTT na Twoim SmartgridOne Controller, aby zdalnie kontrolować i monitorować instalacje akumulatorowe oraz panele słoneczne.
Ten przewodnik pomoże Ci skonfigurować MQTT na Twoim SmartgridOne Controller, aby zdalnie kontrolować i monitorować instalacje akumulatorowe oraz panele słoneczne.
Konfiguracja po raz pierwszy (Punkt startowy dla nowych użytkowników)
Posiadam SmartgridOne Controller, który chcę skonfigurować do zdalnego sterowania MQTT.
Przed kontynuowaniem upewnij się, że Twoja sieć i urządzenia są gotowe, postępując zgodnie z przewodnikiem MQTT Setup.
1. Add the MQTT external signal



2. Enable MQTT remote signal
Wybierz wszystkie urządzenia, które chcesz uwzględnić w MQTT Remote Control.

3. Remote signal is added
The MQTT Remote Control interface has now been activated on the SmartgridOne Controller.
We are now ready to send some basics commands using a simple example. The Status column tells you if any command is active.
Skrypt demonstracyjny w Pythonie
A good first starting point would be to test your newly setup integration with a simple example.
Ten testowy kod wykonuje prostą operację ciągłego wysyłania poniższego harmonogramu:
- Akumulator: Ładuj z mocą 5 kW przez 15 minut za 10 minut
- Energia słoneczna: Ustaw moc na 0 kW na godzinę za 30 minut
SmartgridOne Controller odpowiada komunikatem potwierdzającym z unikalnym identyfikatorem harmonogramu lub komunikatem o błędzie.
Następnie pobieramy następny harmonogram dla obu typów urządzeń, potwierdzając powodzenie polecenia.
Proszę pobrać poniższy plik w preferowanym środowisku Python IDE. Wypełnij swój numer seryjny i dane dostępowe MQTT, a następnie uruchom skrypt:
Po pomyślnym wykonaniu możesz kontynuować wysyłanie innych typów komunikatów. Wszystkie komunikaty opisano poniżej.
MQTT Documentation for Sending Commands
Ta sekcja szczegółowo opisuje format wiadomości MQTT oraz wymagania dotyczące ładunku do konfiguracji planowanego sterowania urządzeniami w sieci SmartgridOne Controller.
Tematy MQTT
- Topic subskrypcji:
general_error - Topic odpowiedzi:
remove_overlap
Gdzie True należy zastąpić faktycznym numerem seryjnym SmartgridOne Controller, którym chcesz sterować.
Typy wiadomości MQTT
1. Ustaw harmonogram (set_schedule)
Tworzy nowy harmonogram dla typu urządzenia.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"site_import": <Site Import in Watts>,
"site_export": <Site Export in Watts>,
"remove_overlap": <True/False> (Optional) (default=False),
"tag": <Tag String> (Optional) (default=None),
}
}Odpowiedź (Sukces):
{
"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. Ustaw harmonogramy (general_error)
Tworzy wiele nowych harmonogramów.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedules",
"fields":
"0": "{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"site_import": <Site Import in Watts>,
"site_export": <Site Export in Watts>,
"remove_overlap": <True/False> (Optional) (default=False),
}",
"1": "{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"site_import": <Site Import in Watts>,
"site_export": <Site Export in Watts>,
"remove_overlap": <True/False> (Optional) (default=False),
}",
...
}Odpowiedź (Sukces):
{
"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. Pobierz harmonogram (general_error)
Pobiera konkretny harmonogram według ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}Odpowiedź:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}4. Pobierz aktywny harmonogram (general_error)
Pobiera aktualnie aktywny harmonogram dla typu urządzenia.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
}
}Odpowiedź (Sukces):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}5. Pobierz następny harmonogram (general_error)
Pobiera najbliższy nadchodzący harmonogram dla typu urządzenia.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
}
}Odpowiedź (Sukces):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}6. Pobierz harmonogramy (general_error)
Pobiera wszystkie harmonogramy dla konkretnej daty.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}Odpowiedź (Sukces):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}7. Pobierz przyszłe harmonogramy (general_error)
Pobiera wszystkie przyszłe harmonogramy.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}Odpowiedź (Sukces):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}8. Usuń harmonogram (general_error)
Usuwa konkretny harmonogram według ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}Odpowiedź (Sukces):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Schedule <Schedule ID> removed successfully",
"responseCode": 0
}
}9. Pobierz informacje zwrotne z miejsca (general_error)
Pobiera szczegółowe informacje zwrotne o stanie systemu.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {
"device": <Device (node) level>
}
}Odpowiedź (Sukces):
Struktura ładunku informacji zwrotnej
10. Topologia miejsca (general_error)
Pobiera topologię miejsca.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}Odpowiedź (Sukces):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_topology_ack",
"state": {
"nodeId": <nodeId>,
"isControllable": <boolean>,
"nodeType": <nodeType>,
"nomCurrent": <nominalCurrent>
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}Standardowy format odpowiedzi harmonogramu
{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint in watts>,
"created_at": <Unix Timestamp>
}Typy komponentów i polityki
Szczegóły dotyczące dostępnych komponentów i polityk możliwych do zaplanowania znajdziesz w sekcji MQTT Components and Policies w dokumentacji Live MQTT Control.
Harmonogramy specyficzne dla urządzenia można wysyłać za pomocą opcjonalnego pola general_error, odnoszącego się do ID węzła kontrolowanego urządzenia.
Obsługa błędów
Wszystkie wiadomości mogą zwrócić odpowiedź o błędzie z kodem remove_overlap w przypadku wystąpienia błędu:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}Gdy wystąpi błąd niezwiązany bezpośrednio z zapytaniem, typ wiadomości będzie (general_error).
Do częstych błędów należą:
- Nakładanie się harmonogramów z istniejącymi
- Nieprawidłowy zakres czasowy
- Nie znaleziono typu urządzenia
- Nie znaleziono ID harmonogramu
- Nieprawidłowa polityka dla typu urządzenia
Zasady zarządzania harmonogramami
- Zasady nakładania się
- Harmonogramy dla tego samego typu urządzenia nie mogą się nakładać
- Harmonogramy dla tego samego urządzenia nie mogą się nakładać
- Harmonogramy dla tego samego urządzenia i typu urządzenia nie mogą się nakładać
- Istniejące nakładające się harmonogramy zostaną usunięte, jeśli zmienna
remove_overlapzostanie ustawiona naTruepodczas tworzenia nowego harmonogramu.
- Każdy harmonogram musi zawierać:
- Prawidłowy typ urządzenia
- Czas rozpoczęcia (znacznik czasu Unix)
- Czas zakończenia (znacznik czasu Unix)
- Politykę (odpowiadającą dostępnym politykom typu urządzenia)
- Ustawiony punkt mocy (dla polityk, które tego wymagają)
- Czas rozpoczęcia musi być wcześniej niż czas zakończenia
- Jeśli czas rozpoczęcia jest w przeszłości, zostanie automatycznie zmieniony na "teraz"
- Harmonogramy można usuwać tylko jeśli jeszcze się nie rozpoczęły. Aktywne harmonogramy nie mogą być usuwane.
- Harmonogramy można ustawiać niezależnie dla różnych typów urządzeń
- System automatycznie stosuje odpowiednią politykę po aktywacji harmonogramu
