Zaplanujna kontrola MQTT
Zarządzanie zaplanowanym MQTT jest przeznaczone do przesyłania zaplanowanych wiadomości z wyprzedzeniem. W przypadku kontroli na żywo, zobacz Kontrola MQTT na żywo zamiast tego.
Niniejszy przewodnik pomoże Ci skonfigurować MQTT na Twoim SmartgridOne Controller, aby zdalnie zarządzać i monitorować instalacje baterii i paneli słonecznych.
Co potrzebujesz
- SmartgridOne Controller z dostępem do internetu.
- Poświadczenia MQTT: Można je uzyskać, wysyłając e-mail na adres support@eniris.be.
- Środowisko deweloperskie Python (lub dowolny inny klient MQTT). Ten przewodnik używa podstawowego przykładu napisanego w Pythonie, aby pomóc Ci zacząć z MQTT i wysyłaniem poleceń. Zalecamy użycie Pythona ze względu na łatwość obsługi, ale wspierane są również inne klientów MQTT.
Dodatkowe informacje
MQTT to szybki protokół komunikacyjny przez internet. Jest to system przesyłania wiadomości publish/subscribe, który umożliwia bezpośrednie połączenie między Twoją maszyną a SmartgridOne Controller. Twoje zasoby są klasyfikowane w grupy: energia słoneczna, baterie, EV i HVAC. W tej chwili ta integracja umożliwia kontrolę według grupy, a nie według urządzeń.
Konfiguracja po raz pierwszy (punkty wyjścia dla nowych użytkowników)
Mam SmartgridOne Controller, który chciałbym skonfigurować do zdalnej kontroli MQTT.
1. Sprawdź swoją sieć
Upewnij się, że Twoja sieć pozwala na ruch sieciowy mqtt przez port 1883. Możesz to zrobić, używając polecenia:
nc -zv mqtt.eniris.be 1883
Jeśli to polecenie nie jest dostępne, możesz alternatywnie pobrać i uruchomić ten kod w Pythonie.
W razie wątpliwości skonsultuj się ze swoim inżynierem sieciowym lub tymczasowo skorzystaj z mobilnego hotspotu 4G/5G, gdy występują błędy połączenia.
Gdy port 1883 nie jest dostępny w Twojej sieci, oferujemy alternatywę na porcie 80. Może to być skonfigurowane w Twoim kliencie MQTT na późniejszym etapie tego podręcznika.
2. Dodaj swoje urządzenia
Zaloguj się do interfejsu uruchamiania i upewnij się, że urządzenia zostały dodane do SmartgridOne Controller.
3. Dodaj zewnętrzny sygnał MQTT



4. Włącz zdalny sygnał MQTT
Wybierz wszystkie urządzenia, które chciałbyś uwzględnić w zdalnej kontroli MQTT.

5. Zdalny sygnał został dodany
Interfejs zdalnej kontroli MQTT został teraz aktywowany na SmartgridOne Controller.
Jesteśmy gotowi do wysyłania podstawowych poleceń za pomocą prostego przykładu. Kolumna statusu informuje, czy jakieś polecenie jest aktywne.
Skrypt demonstracyjny Pythona
Dobrym początkiem byłoby przetestowanie nowo skonfigurowanej integracji za pomocą prostego przykładu.
Ten kod testowy wykonuje prostą pracę, ciągle wysyłając następujący harmonogram:
- Bateria: Ładować przy 5 kW przez 15 minut co 10 minut
- Energia słoneczna: Ustawić moc na 0 kW przez godzinę co 30 minut
SmartgridOne Controller odpowiada wiadomością potwierdzającą zawierającą unikalny identyfikator harmonogramu lub wiadomością o błędzie.
Następnie pobieramy następny harmonogram dla obu typów urządzeń, potwierdzając, że polecenie zostało zrealizowane.
Proszę pobrać plik poniżej w preferowanej IDE Pythona. Wprowadź swój numer seryjny i poświadczenia MQTT oraz uruchom skrypt:
Gdy powyższe zakończy się sukcesem, możesz kontynuować wysyłanie innych typów wiadomości. Wszystkie wiadomości są opisane poniżej.
Dokumentacja MQTT dotycząca wysyłania poleceń
Ta sekcja szczegółowo opisuje format wiadomości MQTT i wymagania dotyczące ładunku dla ustawienia zaplanowanej kontroli urządzeń w sieci SmartgridOne Controller.
Tematy MQTT
- Temat subskrypcji:
standard1/rp_one_s/remoteScheduleMetrics/<numer seryjny kontrolera>
- Temat informacji zwrotnej:
standard1/outbound/remoteScheduleMetrics/feedback/<numer seryjny kontrolera>
Gdzie <numer seryjny kontrolera>
powinien być zastąpiony rzeczywistym numerem seryjnym SmartgridOne Controller, którym zamierzasz sterować.
Typy wiadomości MQTT
1. Ustaw harmonogram (set_schedule
)
Tworzy nowy harmonogram dla typu urządzenia.
{
"extraTags": {
"nodeId": "<Numer seryjny kontrolera>_site_0"
},
"time": <Znacznik Unix>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Typ urządzenia>",
"node_id": "<ID węzła>" (Opcjonalne),
"start_time": <Znacznik Unix>,
"end_time": <Znacznik Unix>,
"policy": "<Polityka>",
"power_setpoint_w": <Ustalona moc w watach>,
"remove_overlap": <Prawda/Fałsz> (Opcjonalne) (domyślnie=False),
"tag": <Tag stringowy> (Opcjonalne) (domyślnie=None),
}
}
Odpowiedź (Sukces):
{
"requestTime": <Znacznik Unix>,
"time": <Znacznik Unix>,
"siteNodeId": "<Numer seryjny kontrolera>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Id harmonogramu>,
"deleted_ids": <Id harmonogramów usuniętych, jeśli remove_overlap=True>
"tag": <Tag stringowy> (domyślnie=None),
},
"responseCode": 0
}
}
2. Ustaw harmonogramy (set_schedules
)
Tworzy wiele nowych harmonogramów.
{
"extraTags": {
"nodeId": "<Numer seryjny kontrolera>_site_0"
},
"time": <Znacznik Unix>,
"message_type": "set_schedules",
"fields":
"0": {
"device_type": "<Typ urządzenia>",
"node_id": "<ID węzła>" (Opcjonalne),
"start_time": <Znacznik Unix>,
"end_time": <Znacznik Unix>,
"policy": "<Polityka>",
"power_setpoint_w": <Ustalona moc w watach>,
"remove_overlap": <Prawda/Fałsz> (Opcjonalne) (domyślnie=False),
},
"1": {
"device_type": "<Typ urządzenia>",
"node_id": "<ID węzła>" (Opcjonalne),
"start_time": <Znacznik Unix>,
"end_time": <Znacznik Unix>,
"policy": "<Polityka>",
"power_setpoint_w": <Ustalona moc w watach>,
"remove_overlap": <Prawda/Fałsz> (Opcjonalne) (domyślnie=False),
},
...
}
Odpowiedź (Sukces):
{
"requestTime": <Znacznik Unix>,
"time": <Znacznik Unix>,
"siteNodeId": "<Numer seryjny kontrolera>_site_0",
"data": {
"message_type": "set_schedules_ack",
"state": {
"schedule_ids": <Id harmonogramów>,
"deleted_ids": <Id harmonogramów usuniętych, jeśli remove_overlap=True>
},
"responseCode": 0
}
}
3. Pobierz harmonogram (get_schedule
)
Pobiera konkretny harmonogram według ID.
{
"extraTags": {
"nodeId": "<Numer seryjny kontrolera>_site_0"
},
"time": <Znacznik Unix>,
"message_type": "get_schedule",
"fields": {
"id": <Id harmonogramu>
}
}
Odpowiedź:
{
"requestTime": <Znacznik Unix>,
"time": <Znacznik Unix>,
"siteNodeId": "<Numer seryjny kontrolera>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Harmonogram>,
"responseCode": 0
}
}
4. Pobierz aktywny harmonogram (get_active_schedule
)
Pobiera aktualnie aktywny harmonogram dla typu urządzenia.
{
"extraTags": {
```json
{
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opcjonalnie),
}
}
Response (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 (get_next_schedule
)
Pobiera następny nadchodzący harmonogram dla danego 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>" (Opcjonalnie),
}
}
Response (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 (get_schedules
)
Pobiera wszystkie harmonogramy dla określonej daty.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}
Response (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 (get_future_schedules
)
Pobiera wszystkie przyszłe harmonogramy.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}
Response (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 (remove_schedule
)
Usuwa określony harmonogram według ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}
Response (Sukces):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Harmonogram <Schedule ID> został pomyślnie usunięty",
"responseCode": 0
}
}
9. Pobierz Opinie o Stronie (get_feedback
)
Pobiera szczegółowe opinie o stanie systemu.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {
"device": <Device (node) level>
}
}
Response (Sukces):
10. Topologia Strony (get_toplogy
)
Pobiera topologię strony.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}
Response (Sukces):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_topology_ack",
"state": {
"nodeId": <nodeId>,
"nodeType": <nodeType>,
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}
Standardowy Format Odpowiedzi Harmonogramu
{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opcjonalnie),
"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
Aby uzyskać szczegóły na temat dostępnych komponentów i polityk, które można zaplanować, zapoznaj się z sekcją Komponenty i Polityki MQTT w dokumentacji Live MQTT Control.
Harmonogramy specyficzne dla urządzenia mogą być wysyłane z wykorzystaniem opcjonalnego pola node_id
, odnosząc się do ID węzła sterowanego urządzenia.
Obsługa Błędów
Wszystkie wiadomości mogą zwracać odpowiedź na błąd z responseCode: 1
, gdy występuje błąd:
{
"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 niepowiązany, typ wiadomości będzie (general_error
).
Typowe błędy to:
- Nakładanie się harmonogramów z istniejącymi harmonogramami
- Invalidny zakres czasowy
- Typ urządzenia nie znaleziony
- ID harmonogramu nie znaleziony
- Invalidna polityka dla typu urządzenia
Zasady Zarządzania Harmonogramem
- Zasady nakładania się
- Harmonogramy nie mogą się nakładać dla tego samego typu urządzenia
- Harmonogramy nie mogą się nakładać dla tego samego urządzenia
- Harmonogramy dla tego samego urządzenia i typu urządzenia nie mogą się nakładać
- Istniejące harmonogramy, które się nakładają, zostaną usunięte, jeśli zmienna
remove_overlap
jest ustawiona naTrue
podczas tworzenia nowego harmonogramu.
- Każdy harmonogram musi mieć:
- Ważny typ urządzenia
- Czas rozpoczęcia (znacznik czasowy Unix)
- Czas zakończenia (znacznik czasowy Unix)
- Politykę (odpowiadającą dostępnych politykom typu urządzenia)
- Punkt ustawienia mocy (dla polityk, które tego wymagają)
- Czas rozpoczęcia musi być przed czasem zakończenia
- Jeśli czas rozpoczęcia jest w przeszłości, automatycznie zmienia się na rozpoczęcie teraz
- Harmonogramy mogą być usuwane tylko, jeśli jeszcze się nie rozpoczęły. Aktywne harmonogramy nie mogą być usunięte.
- Harmonogramy mogą być ustawiane dla różnych typów urządzeń niezależnie
- System automatycznie stosuje odpowiednią politykę, gdy harmonogram staje się aktywny