Myślę, że jeden Wemos wystarczy.
Masz już jakiś konwerter RS232 do UART?
Przesyłanie po UDP/RS232 wartości liczbowych.
-
- Posts: 9704
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
Kiedy będzie Supla Offline Party / SOP#2025 ?
-
- Posts: 1934
- Joined: Wed Aug 24, 2016 7:26 pm
- Location: Opole
O część sprzętową nie trzeba się martwić.
-
- Posts: 9704
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
Nie robiłem jeszcze nic na RS232, ale robiłem na RS435 i tam inaczej wygląda implementacja w zależności od rodzaju użytego konwertera.
Także założyłem, że będziemy to tworzyć pod konkretny sprzęt
Urządzenia trzeba odpytywać o dane, czy wysyłają je cyklicznie bez pytania? Ile urządzeń mamy na magistralę? Jedno czy więcej? Jeśli więcej, to jak wygląda adresacja?
Kiedy będzie Supla Offline Party / SOP#2025 ?
-
- Posts: 1934
- Joined: Wed Aug 24, 2016 7:26 pm
- Location: Opole
A nie lepiej bez kombinacji zrobić jaką daną odbierze ze wskazanym prefiksem to ma ją wyświetlić i tyle. Wysyłanie może być cykliczne co 1 sekundę. Danych nie więcej niż 16.
-
- Posts: 9704
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
Można to zrobić najprościej jak się da, ale najpierw trzeba to jakoś określić .Duch__ wrote: Mon Aug 09, 2021 12:28 pm A nie lepiej bez kombinacji zrobić jaką daną odbierze ze wskazanym prefiksem to ma ją wyświetlić i tyle. Wysyłanie może być cykliczne co 1 sekundę. Danych nie więcej niż 16.
Z powyższego opisu wnioskuję, że na RS232 będzie podłączone jedno urządzenie do Wemosa. To urządzenie będzie np. co 1 s wysyłać paczkę danych, w ktorej będzie przesyłane kilkanaście parametrów, tak?
Co do samych wartości przesyłanych w parametrach - najłatwiej jest przesyłać liczby całkowite jako int16, lub int32 (zależnie jaki zakres danych tam może się pojawić). W zależności od tego jaką chcesz mieć precyzję, można np wysyłać "temperatura * 100" (dla dokładności 0.01), wtedy liczba 250 oznacza 2.5 stopnia. Int w formacie u2 complement (domyślny na większości platform/procesorów), wtedy ramka miałaby postać:
FE,FE,01,temperatura ,FE,F0
gdzie temperatura to 4 bajty (dla int32) kodowana j/w.
Kiedy będzie Supla Offline Party / SOP#2025 ?
-
- Posts: 1934
- Joined: Wed Aug 24, 2016 7:26 pm
- Location: Opole
Kilkanaście pojedynczych parametrów. Czyli transmisja wszystkich 16 parametrów zajmie mniej niż 16 sekund.klew wrote: Mon Aug 09, 2021 12:53 pm Z powyższego opisu wnioskuję, że na RS232 będzie podłączone jedno urządzenie do Wemosa. To urządzenie będzie np. co 1 s wysyłać paczkę danych, w ktorej będzie przesyłane kilkanaście parametrów, tak?
Pasuje mi to jak najbardziej.
To również.klew wrote: Mon Aug 09, 2021 12:53 pm "temperatura * 100" (dla dokładności 0.01), wtedy liczba 250 oznacza 2.5 stopnia.
-
- Posts: 1934
- Joined: Wed Aug 24, 2016 7:26 pm
- Location: Opole
Nieśmiało podbiję temat i zapytam czy coś ruszyło w temacie?
-
- Posts: 5417
- Joined: Fri Nov 16, 2018 7:25 am
Jeżeli umiesz wyciągnąć te wartości to przesłanie ich za pomocą SuplaDevice jest już proste
https://gui-generic-builder.supla.io/
-
- Posts: 12
- Joined: Thu Mar 03, 2022 8:03 am
WItam
Trafiłem na podobny problem i nie umiem sobie poradzić
Po kolei...chyba rzuciłem się z motyką na słońce, bo w ogóle z Suplą i jakimkolwiek programowaniem zacząłem 2 mies temu, a wszystko dlatego, że chciałbym mieć podgląd parametrów instalacji solarnej Rotex w Supla.
Kupiłem moduł ESP2866 NodeMCU v3.0, po wielu przebojach udało mi się dojść do momentu, że dzięki GUI Generic wgrałem obsługę czujnika temperatury, licznika impulsów itp i dzięki temu po naprawdę wielu morderczych godzinach w końcu w aplikacji działa wszystko jak powinno dla takich urządzeń. Z drugiej strony że nie mam słów podziwu dla tych którzy stworzyli GUI....mistrzostwo świata!!!
Niestety tego co mnie naprawdę interesuje nie znalazłem więc doszedłem do wniosku, że muszę sam coś stworzyć, ale jestem zupełnie zielony jak aplikacja Supla. Doczytuję i szukam więc doprowadziło mnie to do tego, że zainstalowałem Arduino IDE i zaczynam coś pisać Udało mi się umęczyć program który o dziwo łączy się z suplą i poprzez proste wł/wył steruję niebieską diodą na NodeMCU i na to byłby koniec moich możliwości (dane wrażliwe zaznaczyłem jako ********
#include <SuplaDevice.h>
#include <supla/control/relay.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/button.h>
Supla::ESPWifi wifi("******", "******");
const char* srv_addr = "***********";
const char* srv_email = "*************";
char znak;
Supla::Control::Relay relay(LED_BUILTIN); // zapalanie diody z supli
Supla::Control::Button button(D5, false);
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output
uint8_t mac[6];
WiFi.macAddress(mac);
char GUID[SUPLA_GUID_SIZE] = {******************************************************};
char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {**********************************************};
SuplaDevice.begin(GUID,srv_addr,srv_email,AUTHKEY);
}
void loop() {
SuplaDevice.iterate();
if (Serial.available ()>0){
znak = Serial.read ();
//Serial.print ("Otrzymano: ");
Serial.print (znak);
}
}
Do rzeczy: Sterownik instalacji solarnej rotex Solaris R3 jest wyjście RS232, poziom napięć 5 V więc dostosowałem go do poziomu NodeMCU 3,3V. W rotex ustawiam pr transmisji 9600, okres wysyłania np co 10s. Przykładowe dane które teoretycznie jestem w stanie dostać znalazłem gdzieś na francuskim forum mają postać (czyli wartości liczbowe oddzielone średnikiem):
0 ; 0 ; 0 ; 0 ; 38 ; 17 ; 22 ; 12 ; 0,0
0 ; 0 ; 100 ; 1 ; 39 ; 17 ; 22 ; 12 ; 0,0
0 ; 1 ; 100 ; 1 ; 36 ; 18 ; 22 ; 25 ; 7, 7
0 ; 1 ; 88 ; 0 ; 31 ; 18 ; 22 ; 22 ; 5,3
0 ; 0 ; 75 ; 0 ; 28 ; 18 ; 23 ; 21 ; 3,8
0 ; 0 ; 63 ; 0 ; 28 ; 18 ; 23 ; 22 ; 3,1
0 ; 0 ; 50 ; 0 ; 28 ; 18 ; 23 ; 24 ; 2,5
itd ........
Dokładnie są to:
0;0; P1; P2; Tk; Tr; Ts,Tv; V
P1: prędkość obrotowa pompy P1 w % (63%, 75%, 83% , 100% itd)
P2: pompa P2 włączona/wyłączona, 0 lub 1
Tk: Temperatura kolektorów
Tr: Temperatura w dolnej części zbiornika (tak naprawdę ta woda idzie do paneli
Ts: Temperatura górnej części zbiornika
Tv: Temperatury wody która wraca do zbiornika
V: przepływ wody powracającej do zbiornika (l / min)
O ile mam nadzieję, że taką ramkę danych uda mi się uzyskać to nie wiem co dalej. Jak to w ogóle ugyżć żeby dostać te wartości w SUPLA. Czy trzeba to rozbić na pojedyncze zmienne czy też jako całość Supla jest w stanie to jakoś rozróżnić? Powiem szczerze, że dalej stoję przy ścianie.
Pomożecie ruszyć dalej?
jeszcze sam program odnośnie odbioru danych z Rotex bez elementów SUPLA:
char array[] = "0;0;P1;P2;Tk;Tr;Ts;Tv;V";
char *strings[10];
char *ptr = NULL;
String odebraneDane="";
void setup()
{
Serial.begin(9600);
//Serial.print(array);
byte index = 0;
ptr = strtok(array, ":;"); // takes a list of delimiters
while(ptr != NULL)
{
strings[index] = ptr;
index++;
ptr = strtok(NULL, ":;"); // takes a list of delimiters
}
//Serial.println(index);
// print the tokens
for(int n = 0; n < index; n++)
{
Serial.println(strings[n]);
}
}
void loop()
{
if (Serial.available()>0)//czy arduino odebrało dane?
//Serial.available(). Funkcja ta zwraca ilość bajtów,
//które zostały odebrane i czekają na obsługę przez Arduino.
{
odebraneDane = Serial.readStringUntil('\n');
Serial.println("\nRotex "+odebraneDane);
// put your main code here, to run repeatedly:
}
}
Trafiłem na podobny problem i nie umiem sobie poradzić
Po kolei...chyba rzuciłem się z motyką na słońce, bo w ogóle z Suplą i jakimkolwiek programowaniem zacząłem 2 mies temu, a wszystko dlatego, że chciałbym mieć podgląd parametrów instalacji solarnej Rotex w Supla.
Kupiłem moduł ESP2866 NodeMCU v3.0, po wielu przebojach udało mi się dojść do momentu, że dzięki GUI Generic wgrałem obsługę czujnika temperatury, licznika impulsów itp i dzięki temu po naprawdę wielu morderczych godzinach w końcu w aplikacji działa wszystko jak powinno dla takich urządzeń. Z drugiej strony że nie mam słów podziwu dla tych którzy stworzyli GUI....mistrzostwo świata!!!
Niestety tego co mnie naprawdę interesuje nie znalazłem więc doszedłem do wniosku, że muszę sam coś stworzyć, ale jestem zupełnie zielony jak aplikacja Supla. Doczytuję i szukam więc doprowadziło mnie to do tego, że zainstalowałem Arduino IDE i zaczynam coś pisać Udało mi się umęczyć program który o dziwo łączy się z suplą i poprzez proste wł/wył steruję niebieską diodą na NodeMCU i na to byłby koniec moich możliwości (dane wrażliwe zaznaczyłem jako ********
#include <SuplaDevice.h>
#include <supla/control/relay.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/button.h>
Supla::ESPWifi wifi("******", "******");
const char* srv_addr = "***********";
const char* srv_email = "*************";
char znak;
Supla::Control::Relay relay(LED_BUILTIN); // zapalanie diody z supli
Supla::Control::Button button(D5, false);
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT); // Initialize the LED_BUILTIN pin as an output
uint8_t mac[6];
WiFi.macAddress(mac);
char GUID[SUPLA_GUID_SIZE] = {******************************************************};
char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {**********************************************};
SuplaDevice.begin(GUID,srv_addr,srv_email,AUTHKEY);
}
void loop() {
SuplaDevice.iterate();
if (Serial.available ()>0){
znak = Serial.read ();
//Serial.print ("Otrzymano: ");
Serial.print (znak);
}
}
Do rzeczy: Sterownik instalacji solarnej rotex Solaris R3 jest wyjście RS232, poziom napięć 5 V więc dostosowałem go do poziomu NodeMCU 3,3V. W rotex ustawiam pr transmisji 9600, okres wysyłania np co 10s. Przykładowe dane które teoretycznie jestem w stanie dostać znalazłem gdzieś na francuskim forum mają postać (czyli wartości liczbowe oddzielone średnikiem):
0 ; 0 ; 0 ; 0 ; 38 ; 17 ; 22 ; 12 ; 0,0
0 ; 0 ; 100 ; 1 ; 39 ; 17 ; 22 ; 12 ; 0,0
0 ; 1 ; 100 ; 1 ; 36 ; 18 ; 22 ; 25 ; 7, 7
0 ; 1 ; 88 ; 0 ; 31 ; 18 ; 22 ; 22 ; 5,3
0 ; 0 ; 75 ; 0 ; 28 ; 18 ; 23 ; 21 ; 3,8
0 ; 0 ; 63 ; 0 ; 28 ; 18 ; 23 ; 22 ; 3,1
0 ; 0 ; 50 ; 0 ; 28 ; 18 ; 23 ; 24 ; 2,5
itd ........
Dokładnie są to:
0;0; P1; P2; Tk; Tr; Ts,Tv; V
P1: prędkość obrotowa pompy P1 w % (63%, 75%, 83% , 100% itd)
P2: pompa P2 włączona/wyłączona, 0 lub 1
Tk: Temperatura kolektorów
Tr: Temperatura w dolnej części zbiornika (tak naprawdę ta woda idzie do paneli
Ts: Temperatura górnej części zbiornika
Tv: Temperatury wody która wraca do zbiornika
V: przepływ wody powracającej do zbiornika (l / min)
O ile mam nadzieję, że taką ramkę danych uda mi się uzyskać to nie wiem co dalej. Jak to w ogóle ugyżć żeby dostać te wartości w SUPLA. Czy trzeba to rozbić na pojedyncze zmienne czy też jako całość Supla jest w stanie to jakoś rozróżnić? Powiem szczerze, że dalej stoję przy ścianie.
Pomożecie ruszyć dalej?
jeszcze sam program odnośnie odbioru danych z Rotex bez elementów SUPLA:
char array[] = "0;0;P1;P2;Tk;Tr;Ts;Tv;V";
char *strings[10];
char *ptr = NULL;
String odebraneDane="";
void setup()
{
Serial.begin(9600);
//Serial.print(array);
byte index = 0;
ptr = strtok(array, ":;"); // takes a list of delimiters
while(ptr != NULL)
{
strings[index] = ptr;
index++;
ptr = strtok(NULL, ":;"); // takes a list of delimiters
}
//Serial.println(index);
// print the tokens
for(int n = 0; n < index; n++)
{
Serial.println(strings[n]);
}
}
void loop()
{
if (Serial.available()>0)//czy arduino odebrało dane?
//Serial.available(). Funkcja ta zwraca ilość bajtów,
//które zostały odebrane i czekają na obsługę przez Arduino.
{
odebraneDane = Serial.readStringUntil('\n');
Serial.println("\nRotex "+odebraneDane);
// put your main code here, to run repeatedly:
}
}
-
- Posts: 9704
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
Czy udało Ci się zrobić odczyt tych danych w programie?LakiLuck wrote: Fri Mar 04, 2022 7:38 am Dokładnie są to:
0;0; P1; P2; Tk; Tr; Ts,Tv; V
P1: prędkość obrotowa pompy P1 w % (63%, 75%, 83% , 100% itd)
P2: pompa P2 włączona/wyłączona, 0 lub 1
Tk: Temperatura kolektorów
Tr: Temperatura w dolnej części zbiornika (tak naprawdę ta woda idzie do paneli
Ts: Temperatura górnej części zbiornika
Tv: Temperatury wody która wraca do zbiornika
V: przepływ wody powracającej do zbiornika (l / min)
Jeśli tak, to mogę pomóc dalej (o ile jeszcze tego nie ogarnąłeś). Tylko daj znać na jakich kanałach chciałbyś to mieć widoczne. Ja bym proponował:
P1 - kanał wilgotności (daje nam wartość w %)
P2 - sensor binarny? Widziałbyś stan on/off
Tx - termometry (4 osobne kanały)
V - na to chyba nie ma kanału z jednostką (l/min) - także albo czekamy na "kanał pomiarowy ogólnego przeznaczenia", albo można dane wrzucić do kanału termometru.
Wklej tutaj lub wyślij do mnie kod, który poprawnie odczytuje dane, a pomogę z resztą.
Kiedy będzie Supla Offline Party / SOP#2025 ?