ESP32 + MQTT SUPLA + MONITOR ENERGII ZAMEL

przemo_des
Posts: 3
Joined: Tue Jan 30, 2024 10:16 am

Post

Dzień dobry


Próbujemy już dłuższą chwilę odczytać po MQTT poszczególne wątki z ZAMEL LEW-02 / ZAMEL MEW-01.

Przez MQTT Explorer - widzę wszystko.

Łącząc się przy pomocy ESP32 Wroom (WIFI+BT) sytuacja następująca:

- kiedy MQTT broker jest adresowany mqtt101.supla.org (zgodnie z definicją z integracji supla.org):

WiFi: Connecting to Internet_XXXXX ... (0.657000s)
[ 1414][D][WiFiGeneric.cpp:1035] _eventCallback(): Arduino Event: 4 - STA_CONNECTED
[ 1865][D][WiFiGeneric.cpp:1035] _eventCallback(): Arduino Event: 7 - STA_GOT_IP
[ 1865][D][WiFiGeneric.cpp:1098] _eventCallback(): STA IP: 192.168.0.3, MASK: 255.255.255.0, GW: 192.168.0.1
WiFi: Connected (1.871000s), ip : 192.168.0.3
WEB: Updater ready, open http://akukukuku.local in your browser and login with username 'dc8d9b9c4XXXXXXXXXXXf3045597a' and password 'UU5jm0xXXXXXXXXXXXXXXXX@RQPB)XdEe'.
[ 1916][ArduinoOTA.cpp:141] begin(): OTA server at: akukukuku.local:3232
MQTT: Connecting to broker "mqtt101.supla.org" with client name "akukukuku" and username "dc8d9b9c4XXXXXXXXXXXf3045597a" ... (2.416000s)unable to connect (17.582000s),
reason: MQTT_CONNECTION_TIMEOUT
MQTT: Retrying to connect in 15 seconds.
MQTT!: Failed MQTT connection count: 1


- kiedy MQTT broker jest adresowany po adresie IP 116.203.235.162



WiFi: Connecting to Internet_XXXXXXXXXXXXX... (0.681000s)
[ 1419][D][WiFiGeneric.cpp:1035] _eventCallback(): Arduino Event: 4 - STA_CONNECTED
[ 1493][D][WiFiGeneric.cpp:1035] _eventCallback(): Arduino Event: 7 - STA_GOT_IP
[ 1493][D][WiFiGeneric.cpp:1098] _eventCallback(): STA IP: 192.168.0.3, MASK: 255.255.255.0, GW: 192.168.0.1
WiFi: Connected (1.498000s), ip : 192.168.0.3
WEB: Updater ready, open http://akukukuku.local in your browser and login with username 'dc8d9b9c4XXXXXXXXXXXXXf3045597a' and password 'UU5jm0xjSutlfkmMQK0DN-@RQPB)XdEe'.
[ 1543][ArduinoOTA.cpp:141] begin(): OTA server at: akukukuku.local:3232
MQTT: Connecting to broker "116.203.235.162" with client name "akukukuku" and username "dc8d9b9c4XXXXXXXXXXXXXf3045597a" ... (2.043000s)unable to connect (19.948000s),
reason: MQTT_CONNECTION_TIMEOUT
MQTT: Retrying to connect in 15 seconds.
MQTT!: Failed MQTT connection count: 1


Na kontcie aktywowane MQTT broker, znany user i hasło wygenerowane przez Supla.

Korzystamy z:

https://github.com/plapointe6/EspMQTTCl ... Client.ino

konfiguracja:

EspMQTTClient client(
"Internet_XXXXXXXXXXXXX",
"XXXXXXXXXXXXX", // WIFI password
"116.203.235.162", // MQTT Broker server ip
"dc8d9b9c4XXXXXXXXXXXXXXf3045597a", // MQTT username Can be omitted if not needed
"UU5jm0xjSXXXXXXXXXXXXXXRQPB)XdEe", // MQTT password Can be omitted if not needed
"akukukuku", // Client name that uniquely identify your device
8883 // The MQTT port, default to 1883. this line can be omitted
);



Przykładowy wątek jaki chcemy odczytać (napięcie z monitora energii):

"supla/dc8d9b9c4XXXXXXXXXXXXXXXXXf3045597a/devices/1615/channels/4841/state/phases/1/power_active"

alternatywnie z drugiego urządzenia:
"supla/dc8d9b9c4XXXXXXXXXXXXXXXXXf3045597a/devices/3471/channels/10842/state/phases/1/power_active"


MQTT Explorer działa, czyta dokładnie bez problemu.

Pozdrawiam
Przemek
User avatar
klew
Posts: 9713
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

przemo_des wrote: Tue Jan 30, 2024 12:53 pm Dzień dobry
Hej, nie znam tych bibliotek, ale na pierwszy rzut oka nie widzę tam nigdzie ustawień odnośnie szyfrowania połączenia z serwerem.
Broker MQTT na serwerze Supli akceptuje tylko połączenia szyfrowane na porcie 8883. Samo ustawienie portu w kliencie, bez włączenia szyfrowania, nic tutaj nie da.
Kiedy będzie Supla Offline Party / SOP#2025 ?
przemo_des
Posts: 3
Joined: Tue Jan 30, 2024 10:16 am

Post

Pierwszy trop, istotna informacja.

Może masz jakieś biblioteki jakie są sprawdzone i możesz coś polecić?
lukim37
Posts: 1
Joined: Tue Jan 30, 2024 3:18 pm

Post

Jeśli mogę się połączyć za pomocą programu MQTT Explorer, podając mu dane mqtt brokera, czyli host, protokół, port, nazwę użytkownika i hasło, to nie musze mu dodatkowo podawać żadnych certyfikatów. Czy w przypadku tego programu, te certyfikaty są w jakiś sposób tworzone podczas uzyskiwania połączenia? Bo korzystając z podstawowego kodu na esp32 i podając mu dokładnie takie same dane, nie mogę uzyskać połączenia MQTT. Czy do esp32, muszę dostarczyć jakieś certyfikaty? Jeśli tak, to w jaki sposób je wygenerować lub skąd je wziąć?
User avatar
klew
Posts: 9713
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Certyfikaty nie są konieczne. Powinno dać się wyłączyć ich sprawdzanie.
Certyfikaty służą do potwierdzenia, że połączyliśmy się z serwerem z których chcieliśmy, a nie z jakimś podszywającym się.
Jeśli ktoś chce to sprawdzać, to może pzygmunt by podał skąd wziąć klucz publiczny CA dla brokerów MQTT.

Ja osobiście używałem tylko klienta MQTT z esp-idf. Także z niczego typowo pod Arduino ide nie korzystałem
Kiedy będzie Supla Offline Party / SOP#2025 ?
przemo_des
Posts: 3
Joined: Tue Jan 30, 2024 10:16 am

Post

Sprawdzałem MQQT Explorer i jeżeli wyłączam certyfikat to się łączy bez problemu, nie pozwala bez szyfrowania (TLS) się połączyć.

Czyli trzeba wysłać jakiś komunikat / komendę żeby nie żądał MQTT broker certyfikatu?
User avatar
klew
Posts: 9713
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

przemo_des wrote: Tue Jan 30, 2024 4:47 pm Sprawdzałem MQQT Explorer i jeżeli wyłączam certyfikat to się łączy bez problemu, nie pozwala bez szyfrowania (TLS) się połączyć.

Czyli trzeba wysłać jakiś komunikat / komendę żeby nie żądał MQTT broker certyfikatu?
To powinno się ustawiać w kliencie.
Musisz wybrać jakąś bibliotekę i przeczytać jej dokumentację. Takie ustawienia powinny być opisane (choć w tej bibliotece z pierwszego postu nie ma o tym ani słowa)
Kiedy będzie Supla Offline Party / SOP#2025 ?
Adamo28
Posts: 179
Joined: Sun Nov 08, 2020 2:54 pm

Post

Spróbuj biblioteki PubSubClient i przykładu z strony https://forum.arduino.cc/t/problem-with ... /1151546/2 Tylko zamiast wstawiania certyfikatu zrób tak:

Code: Select all

//wifiClient.setTrustAnchors(new BearSSL::X509List(rootCACertificate));
wifiClient.setInsecure();
Próbowałem z ustawianiem czasu ale wygląda na to że jest to niepotrzebne aby się połączyć z suplą. Terminal zwraca connected ale nie wiem jeszcze czy działa subskrybowanie topików i co tam się jeszcze z tym robi bo za cholerę nie rozumie tego całego mqtt...jeszcze.
You do not have the required permissions to view the files attached to this post.

Return to “MQTT”