Wysyłanie danych to przez RS-485 podczas załączania przekaźnika

Irq00
Posts: 5
Joined: Mon Nov 17, 2025 9:15 am

Post

Witam wszystkich.

Potrzebuję wykonać moduł Supla na ESP8266, który podczas załączania przekaźnika przez aplikację wyśle dane przez RS-485. Sama strona RS-485 jest dla mnie do ogarnięcia, użyję MAX485 i odpowiedniej biblioteki. Nie wiem tylko jak ugryźć samo wysyłanie danych, tzn. potrzebuję zmienić funkcję załączania przekaźnika tak żeby zamiast zmiany stanu GPIO była wywoływana moja funkcja. Może ktoś robił coś takiego?
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

Irq00 wrote: Mon Nov 17, 2025 10:12 am Witam wszystkich.

Potrzebuję wykonać moduł Supla na ESP8266, który podczas załączania przekaźnika przez aplikację wyśle dane przez RS-485. Sama strona RS-485 jest dla mnie do ogarnięcia, użyję MAX485 i odpowiedniej biblioteki. Nie wiem tylko jak ugryźć samo wysyłanie danych, tzn. potrzebuję zmienić funkcję załączania przekaźnika tak żeby zamiast zmiany stanu GPIO była wywoływana moja funkcja. Może ktoś robił coś takiego?
Musisz wykorzystać klasę VirtualRelay, która pozwala na stworzenie wirtualnego przekaźnika. Możesz to zrobić na kilka sposobów:

A) najprostszy ( i najmniej elegancki ;)) - tworzysz wirtualny przekaźnik w setup() a następnie sprawdzasz jego stan w loop(), np. co 500 ms;
B) tworzysz klasę dziedziczącą po VirtualRelay i nadpisujesz metody turnOn() i turnOff() a w mich ogarnisz wysyłkę przez RS-485;
C) tworzysz klasę dziedziczącą po ActionHandler, dla przekaźnika ustawiasz zdarzenia ON_TURN_ON i ON_TURN_OFF z akcjami na Twoją klasę a w jej metodzie handle Action() ogarniasz RS.

Protip - rozważ ESP32 ;)
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
Irq00
Posts: 5
Joined: Mon Nov 17, 2025 9:15 am

Post

Ok - właśnie rozważałem ESP32. Robiłem wcześniej projekt na ESP32 z wykorzystaniem GUI Buildera i chodziło fajnie. Używałem tylko GUI Buildera więc mam pytanie czy przykład VirtualRelay z biblioteki SuplaDevice będzie do tego odpowiedni? Co trzeba z nim zrobić (poza tym co jest napisane w Readme na GitHubie) aby urządzenie dało się dodać przez apke Supla i do Supla Cloud?
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Takie rzeczy z reguły wygodniej robi się tworząc własny interfejs Supla::Io.

Wtedy w nim implementujesz metody customDigitalWrite i customDigitalRead i wszystko powinno działać.
Trzeba tylko pamiętać, że "digital write/read" może być wywoływane często i z różnych kontekstów, więc warto te stany buforować i samo wysyłanie po RS realizować poza tymi metodami read/write.

Wtedy kod wygląda jakoś tak:

Code: Select all

 auto rs485Io = new MyRs485IoInterface(tx, rx, ...);
 auro r1 = new Supla::Control::Relay(rs485Io, jakis_identyfikator_gpio, true);
 itd.
Najlepsze suple dla Twojego domu :mrgreen:
Irq00
Posts: 5
Joined: Mon Nov 17, 2025 9:15 am

Post

Zanim zaczne robić przrkaźnik to mam pytanie czy ten szkielet zadziała. Konstruktor wifi dostaje SSID i hasło. Pytanie czy po wgraniu czegoś takiego będzie się dało dodać urządzenie przez apke?

Code: Select all


#define STATUS_LED_GPIO 2

#include <SuplaDevice.h>
#include <supla/network/esp_wifi.h>
#include <supla/device/status_led.h>
#include <supla/storage/littlefs_config.h>
#include <supla/network/esp_web_server.h>
#include <supla/network/html/device_info.h>
#include <supla/network/html/protocol_parameters.h>
#include <supla/network/html/status_led_parameters.h>
#include <supla/network/html/wifi_parameters.h>
#include <supla/control/virtual_relay.h>
#include <supla/storage/eeprom.h>

Supla::Eeprom eeprom;

Supla::ESPWifi wifi("SSID", "PASS");
Supla::LittleFsConfig configSupla;

Supla::Device::StatusLed statusLed(STATUS_LED_GPIO, true); // inverted state
Supla::EspWebServer suplaServer;

void setup() {
  Serial.begin(115200);

  // HTML www component
  new Supla::Html::DeviceInfo(&SuplaDevice);
  new Supla::Html::WifiParameters;
  new Supla::Html::ProtocolParameters;
  new Supla::Html::StatusLedParameters;

  // Channel #0 Virtual Relay
  auto vr = new Supla::Control::VirtualRelay();
  vr->setDefaultFunction(SUPLA_CHANNELFNC_POWERSWITCH);
  // Enable state restore after device restart:
  vr->setDefaultStateRestore();

  SuplaDevice.setInitialMode(Supla::InitialMode::StartInCfgMode);
  SuplaDevice.begin();
}

void loop() {
  SuplaDevice.iterate();
}

User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Powinno być bez parametrów wifi. Skąd wziąłeś ten kod?
Najlepsze suple dla Twojego domu :mrgreen:
Irq00
Posts: 5
Joined: Mon Nov 17, 2025 9:15 am

Post

Z GitHuba SuplaDevice, przykład VirtualRelay

https://github.com/SUPLA/supla-device/b ... lRelay.ino

Parametry dodałem zgodnie z Readme (o ile dobrze to rozumiem)

Code: Select all

Supported network interface for ESP32:

There is a native WiFi controller. Include <supla/network/esp_wifi.h> and add Supla::ESPWifi wifi(ssid, password); as a global variable and provide SSID and password in a constructor.
User avatar
veeroos
Posts: 1081
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

No właśnie kolega chyba za bardzo zaszalał, bo w przykładzie nie ma ustawień wifi. Musiał kolega połączyć jakieś 2 przykłady, bo przykład dla virtualrelay jest z webserwerem
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

W readme jest stary opis.
Najlepsze suple dla Twojego domu :mrgreen:
Irq00
Posts: 5
Joined: Mon Nov 17, 2025 9:15 am

Post

klew wrote: Mon Nov 17, 2025 4:10 pm W readme jest stary opis.
Czyli rozumiem, że trzeba wywalić dane z konstruktora i ESP uruchomi sie w trybie konfiguracji i będzie sie dało go dodać do apki?

veeroos wrote: Mon Nov 17, 2025 3:40 pm No właśnie kolega chyba za bardzo zaszalał, bo w przykładzie nie ma ustawień wifi. Musiał kolega połączyć jakieś 2 przykłady, bo przykład dla virtualrelay jest z webserwerem
Mógłbyś podać ten przykład? Skopiowałem 1:1 to co było na GitHub i jedyne co zmieniłem to dodałem dane dla konstruktora wg. Readme.

Skoro w Readme jest stary opis to jak to zrobić poprawnie?

Return to “Ogólna dyskusja”