To zero to chyba się tylko źle pokazuje a nie jest użyte w logice, popatrzę jak siądę do komputeraLukiSpajder wrote: Sat Aug 01, 2026 2:48 pmU mnie to zero jest w numerze wersji na końcu może od nowa uruchomić GGBD .[email protected] wrote: Fri Jul 31, 2026 6:07 pm @LukiSpajder
Sprawdzałem aktualizację z 2.0.20 na 2.0.22 to mi się zaktualizował bez problemu![]()
Skąd taki numer wersji się mógł wziąć ? To tylko jest w opcji aktualizacji na pasku u góry poprawnie pokazuje
Gui-Generic Builder Desktop
-
[email protected]
- Posts: 1584
- Joined: Mon Feb 06, 2023 8:56 am
- Has thanked: 18 times
- Been thanked: 26 times
-
[email protected]
- Posts: 1584
- Joined: Mon Feb 06, 2023 8:56 am
- Has thanked: 18 times
- Been thanked: 26 times
Ok , dzięki za info działam dalej, muszę sobie zrobić jakiś tryb symulacji żeby nie potrzebować faktycznego hardware'u to wtedy sprawdzę sam całośćrobertklepacki94 wrote: Sat Aug 01, 2026 10:34 amNa szybko wgrałem na ESP32C6, w ustawieniach wybieram GPIO ale w cloud nie poakzuje się wogole kanał czujnika, w ustawieniach urzadzenia nie po zapisaniu nie zapamiętuje ptaszka ,,przelicz''[email protected] wrote: Fri Jul 31, 2026 6:01 pmwersja 2.0.22 , zaktualizuj też GG, sprawdzałem pod C6 to się nie wywala niczym przy konfiguracji, a czy działa i dobrze liczy to już nie wiemrobertklepacki94 wrote: Mon Jul 27, 2026 7:02 pm
Jak będziesz miał coś do testowania to daj znać, wygrzebałem czujnik odległości z szuflady i mam gotowy zestaw![]()
Zrobiłem tak, że jak zaznaczysz ptaszka to przelicza % pomiędzy min a max, jak tego nie zrobisz to surowa wartość.![]()
-
LukiSpajder
- Posts: 1548
- Joined: Tue Aug 18, 2020 2:22 pm
- Has thanked: 25 times
- Been thanked: 34 times
Chyba że tylko u mnie coś nie tak[email protected] wrote: Sat Aug 01, 2026 3:22 pmOk , dzięki za info działam dalej, muszę sobie zrobić jakiś tryb symulacji żeby nie potrzebować faktycznego hardware'u to wtedy sprawdzę sam całośćrobertklepacki94 wrote: Sat Aug 01, 2026 10:34 amNa szybko wgrałem na ESP32C6, w ustawieniach wybieram GPIO ale w cloud nie poakzuje się wogole kanał czujnika, w ustawieniach urzadzenia nie po zapisaniu nie zapamiętuje ptaszka ,,przelicz''[email protected] wrote: Fri Jul 31, 2026 6:01 pm
wersja 2.0.22 , zaktualizuj też GG, sprawdzałem pod C6 to się nie wywala niczym przy konfiguracji, a czy działa i dobrze liczy to już nie wiem
Zrobiłem tak, że jak zaznaczysz ptaszka to przelicza % pomiędzy min a max, jak tego nie zrobisz to surowa wartość.![]()
![]()
-
[email protected]
- Posts: 1584
- Joined: Mon Feb 06, 2023 8:56 am
- Has thanked: 18 times
- Been thanked: 26 times
Nie da się na MacOS
-
[email protected]
- Posts: 1584
- Joined: Mon Feb 06, 2023 8:56 am
- Has thanked: 18 times
- Been thanked: 26 times
@robertklepacki94
Kolejna iteracja, aktualizuj GG tylko w GGBD
Kolejna iteracja, aktualizuj GG tylko w GGBD
-
robertklepacki94
- Posts: 1931
- Joined: Thu Sep 02, 2021 1:06 pm
- Has thanked: 5 times
- Been thanked: 14 times
Dzięki za kolejną wersję[email protected] wrote: Mon Aug 03, 2026 5:52 pm @robertklepacki94
Kolejna iteracja, aktualizuj GG tylko w GGBD
Teraz już poprawnie widać kanał w cloud, odległość w cm pod podania mini i max też wydaje się pokazać poprawnie.
Jedynie przeliczanie jednostek mini i max powinno działać na odwrót, bo w definicji czujnik wisi zawieszony od podłoża np. 100 cm to jego mini powinno być bliżej podłoża a max bliżej czujnika. Teraz działa to odwrotnie, ale procenty przelicza poprawnie
Wziąłem udział w Supla Offline Party 2023
-
[email protected]
- Posts: 1584
- Joined: Mon Feb 06, 2023 8:56 am
- Has thanked: 18 times
- Been thanked: 26 times
Wg mnie to kwestia perspektywy czy patrzymy od czujnika - tak jest w tej chwili - czy od obiektu obserwowanego , jakiś pomysł jak to inaczej zaprogramować?robertklepacki94 wrote: Mon Aug 03, 2026 7:32 pmDzięki za kolejną wersję[email protected] wrote: Mon Aug 03, 2026 5:52 pm @robertklepacki94
Kolejna iteracja, aktualizuj GG tylko w GGBD
Teraz już poprawnie widać kanał w cloud, odległość w cm pod podania mini i max też wydaje się pokazać poprawnie.
Jedynie przeliczanie jednostek mini i max powinno działać na odwrót, bo w definicji czujnik wisi zawieszony od podłoża np. 100 cm to jego mini powinno być bliżej podłoża a max bliżej czujnika. Teraz działa to odwrotnie, ale procenty przelicza poprawnie![]()
-
robertklepacki94
- Posts: 1931
- Joined: Thu Sep 02, 2021 1:06 pm
- Has thanked: 5 times
- Been thanked: 14 times
Załóżmy że chce mierzyć pomiar lustra wody w zbiorniku, to albo ja już dzisiaj logicznie nie myśle albo tego przy tej konfiguracji nie da się ustawić żeby przeliczało na %.[email protected] wrote: Mon Aug 03, 2026 7:39 pmWg mnie to kwestia perspektywy czy patrzymy od czujnika - tak jest w tej chwili - czy od obiektu obserwowanego , jakiś pomysł jak to inaczej zaprogramować?robertklepacki94 wrote: Mon Aug 03, 2026 7:32 pmDzięki za kolejną wersję[email protected] wrote: Mon Aug 03, 2026 5:52 pm @robertklepacki94
Kolejna iteracja, aktualizuj GG tylko w GGBD
Teraz już poprawnie widać kanał w cloud, odległość w cm pod podania mini i max też wydaje się pokazać poprawnie.
Jedynie przeliczanie jednostek mini i max powinno działać na odwrót, bo w definicji czujnik wisi zawieszony od podłoża np. 100 cm to jego mini powinno być bliżej podłoża a max bliżej czujnika. Teraz działa to odwrotnie, ale procenty przelicza poprawnie![]()
P.S.
Ja kiedyś dla siebie z moją walką i pomocą chata napisałem taki soft który działa dość stabilnie.
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/sensor/general_purpose_measurement.h>
Supla::ESPWifi wifi;
Supla::LittleFsConfig configSupla;
Supla::Device::StatusLed statusLed(STATUS_LED_GPIO, true);
Supla::EspWebServer suplaServer;
Supla::Sensor::GeneralPurposeMeasurement *gpm = nullptr;
const int trigPin = 16;
const int echoPin = 17;
// 🔧 Kalibracja zbiornika soli (stałe wartości)
const float TANK_EMPTY_DISTANCE = 60.0; // cm – pusty zbiornik
const float TANK_FULL_DISTANCE = 20.0; // cm – pełny zbiornik
// 🔹 Bufor do filtr medianowego
#define BUFFER_SIZE 10
float distanceBuffer[BUFFER_SIZE];
int bufferIndex = 0;
bool bufferFilled = false;
// ================== FUNKCJE ==================
float readDistanceCm() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH, 30000); // timeout 30ms
if (duration == 0) return -1;
return duration * 0.0343 / 2.0; // przeliczanie na cm
}
float calculateLevelPercent(float distance) {
float level = (TANK_EMPTY_DISTANCE - distance) * 100.0 / (TANK_EMPTY_DISTANCE - TANK_FULL_DISTANCE);
//if (level > 100) level = 100;
//if (level < 0) level = 0;
return level;
}
// 🔹 Funkcja licząca medianę z bufora
float medianDistance() {
int count = bufferFilled ? BUFFER_SIZE : bufferIndex;
if (count == 0) return -1;
float temp[BUFFER_SIZE];
for (int i = 0; i < count; i++) temp[i] = distanceBuffer[i];
// Proste sortowanie bąbelkowe
for (int i = 0; i < count - 1; i++)
for (int j = i + 1; j < count; j++)
if (temp[j] < temp[i]) {
float t = temp[i]; temp[i] = temp[j]; temp[j] = t;
}
if (count % 2 == 0)
return (temp[count/2 - 1] + temp[count/2]) / 2.0;
else
return temp[count/2];
}
// ================== SETUP ==================
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// WebInterface SUPLA
new Supla::Html::DeviceInfo(&SuplaDevice);
new Supla::Html::WifiParameters;
new Supla::Html::ProtocolParameters;
new Supla::Html::StatusLedParameters;
// Kanał GPM
gpm = new Supla::Sensor::GeneralPurposeMeasurement();
gpm->setDefaultUnitAfterValue(" %");
gpm->setDefaultValuePrecision(1);
SuplaDevice.setInitialMode(Supla::InitialMode::StartInCfgMode);
SuplaDevice.begin();
}
// ================== LOOP ==================
void loop() {
SuplaDevice.iterate();
static uint32_t lastRead = 0;
if (millis() - lastRead > 3000) { // pomiar co 3 sekundy
lastRead = millis();
float distance = readDistanceCm();
if (distance > 0) {
// Dodanie odczytu do bufora
distanceBuffer[bufferIndex] = distance;
bufferIndex++;
if (bufferIndex >= BUFFER_SIZE) {
bufferIndex = 0;
bufferFilled = true;
}
// Obliczenie mediany i poziomu w %
float medianDist = medianDistance();
float level = calculateLevelPercent(medianDist);
Serial.print("Median Distance: ");
Serial.print(medianDist);
Serial.print(" cm Level: ");
Serial.print(level);
Serial.println(" %");
gpm->setValue(level);
}
}
}Wziąłem udział w Supla Offline Party 2023
-
[email protected]
- Posts: 1584
- Joined: Mon Feb 06, 2023 8:56 am
- Has thanked: 18 times
- Been thanked: 26 times
to wg mnie zrobiłeś odwrócenie bo ja mam tak jak niżej, więc zgadza się to też z tym co pisałem, że kwestia perspektywy, mogę dodać checkbox "inverse" który policzy wg Twojego wzoru, tylko musze pomyśleć jak to lepiej nazwać.robertklepacki94 wrote: Mon Aug 03, 2026 7:44 pmZałóżmy że chce mierzyć pomiar lustra wody w zbiorniku, to albo ja już dzisiaj logicznie nie myśle albo tego przy tej konfiguracji nie da się ustawić żeby przeliczało na %.[email protected] wrote: Mon Aug 03, 2026 7:39 pmWg mnie to kwestia perspektywy czy patrzymy od czujnika - tak jest w tej chwili - czy od obiektu obserwowanego , jakiś pomysł jak to inaczej zaprogramować?robertklepacki94 wrote: Mon Aug 03, 2026 7:32 pm
Dzięki za kolejną wersję
Teraz już poprawnie widać kanał w cloud, odległość w cm pod podania mini i max też wydaje się pokazać poprawnie.
Jedynie przeliczanie jednostek mini i max powinno działać na odwrót, bo w definicji czujnik wisi zawieszony od podłoża np. 100 cm to jego mini powinno być bliżej podłoża a max bliżej czujnika. Teraz działa to odwrotnie, ale procenty przelicza poprawnie![]()
P.S.
Ja kiedyś dla siebie z moją walką i pomocą chata napisałem taki soft który działa dość stabilnie.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/sensor/general_purpose_measurement.h> Supla::ESPWifi wifi; Supla::LittleFsConfig configSupla; Supla::Device::StatusLed statusLed(STATUS_LED_GPIO, true); Supla::EspWebServer suplaServer; Supla::Sensor::GeneralPurposeMeasurement *gpm = nullptr; const int trigPin = 16; const int echoPin = 17; // 🔧 Kalibracja zbiornika soli (stałe wartości) const float TANK_EMPTY_DISTANCE = 60.0; // cm – pusty zbiornik const float TANK_FULL_DISTANCE = 20.0; // cm – pełny zbiornik // 🔹 Bufor do filtr medianowego #define BUFFER_SIZE 10 float distanceBuffer[BUFFER_SIZE]; int bufferIndex = 0; bool bufferFilled = false; // ================== FUNKCJE ================== float readDistanceCm() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration = pulseIn(echoPin, HIGH, 30000); // timeout 30ms if (duration == 0) return -1; return duration * 0.0343 / 2.0; // przeliczanie na cm } float calculateLevelPercent(float distance) { float level = (TANK_EMPTY_DISTANCE - distance) * 100.0 / (TANK_EMPTY_DISTANCE - TANK_FULL_DISTANCE); //if (level > 100) level = 100; //if (level < 0) level = 0; return level; } // 🔹 Funkcja licząca medianę z bufora float medianDistance() { int count = bufferFilled ? BUFFER_SIZE : bufferIndex; if (count == 0) return -1; float temp[BUFFER_SIZE]; for (int i = 0; i < count; i++) temp[i] = distanceBuffer[i]; // Proste sortowanie bąbelkowe for (int i = 0; i < count - 1; i++) for (int j = i + 1; j < count; j++) if (temp[j] < temp[i]) { float t = temp[i]; temp[i] = temp[j]; temp[j] = t; } if (count % 2 == 0) return (temp[count/2 - 1] + temp[count/2]) / 2.0; else return temp[count/2]; } // ================== SETUP ================== void setup() { Serial.begin(115200); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // WebInterface SUPLA new Supla::Html::DeviceInfo(&SuplaDevice); new Supla::Html::WifiParameters; new Supla::Html::ProtocolParameters; new Supla::Html::StatusLedParameters; // Kanał GPM gpm = new Supla::Sensor::GeneralPurposeMeasurement(); gpm->setDefaultUnitAfterValue(" %"); gpm->setDefaultValuePrecision(1); SuplaDevice.setInitialMode(Supla::InitialMode::StartInCfgMode); SuplaDevice.begin(); } // ================== LOOP ================== void loop() { SuplaDevice.iterate(); static uint32_t lastRead = 0; if (millis() - lastRead > 3000) { // pomiar co 3 sekundy lastRead = millis(); float distance = readDistanceCm(); if (distance > 0) { // Dodanie odczytu do bufora distanceBuffer[bufferIndex] = distance; bufferIndex++; if (bufferIndex >= BUFFER_SIZE) { bufferIndex = 0; bufferFilled = true; } // Obliczenie mediany i poziomu w % float medianDist = medianDistance(); float level = calculateLevelPercent(medianDist); Serial.print("Median Distance: "); Serial.print(medianDist); Serial.print(" cm Level: "); Serial.print(level); Serial.println(" %"); gpm->setValue(level); } } }
tempo moich działań jak żałosne, ale pogoda albo na rower albo na leżenie w basenie, i komputera prawie nie włączam a z telefonu to nie robota...
Code: Select all
float percent = (distance - _minRange) / (float)(_maxRange - _minRange) * 100.0f;
if (percent < 0.0f) {
percent = 0.0f;
}
if (percent > 100.0f) {
percent = 100.0f;
}
