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?
Wysyłanie danych to przez RS-485 podczas załączania przekaźnika
-
vajera
- Posts: 7290
- Joined: Wed Oct 31, 2018 7:58 am
- Location: Biedrusko
- Has thanked: 289 times
- Been thanked: 161 times
Musisz wykorzystać klasę VirtualRelay, która pozwala na stworzenie wirtualnego przekaźnika. Możesz to zrobić na kilka sposobów: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?
A) najprostszy ( i najmniej elegancki
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
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
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?
-
klew
- Posts: 13908
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
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:
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 
-
Irq00
- Posts: 5
- Joined: Mon Nov 17, 2025 9:15 am
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();
}
-
Irq00
- Posts: 5
- Joined: Mon Nov 17, 2025 9:15 am
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)
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.
-
veeroos
- Posts: 1081
- Joined: Sun Mar 20, 2022 9:30 am
- Location: Głogów
- Has thanked: 1 time
- Been thanked: 9 times
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
https://github.com/v33r005
-
Irq00
- Posts: 5
- Joined: Mon Nov 17, 2025 9:15 am
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?
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.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
Skoro w Readme jest stary opis to jak to zrobić poprawnie?
