Gui-Generic Builder Desktop

[email protected]
Posts: 1584
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

LukiSpajder wrote: Sat Aug 01, 2026 2:48 pm
[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 8-)
U mnie to zero jest w numerze wersji na końcu może od nowa uruchomić GGBD .
Skąd taki numer wersji się mógł wziąć ? To tylko jest w opcji aktualizacji na pasku u góry poprawnie pokazuje
To zero to chyba się tylko źle pokazuje a nie jest użyte w logice, popatrzę jak siądę do komputera
[email protected]
Posts: 1584
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

robertklepacki94 wrote: Sat Aug 01, 2026 10:34 am
[email protected] wrote: Fri Jul 31, 2026 6:01 pm
robertklepacki94 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 :D
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 :D
Zrobiłem tak, że jak zaznaczysz ptaszka to przelicza % pomiędzy min a max, jak tego nie zrobisz to surowa wartość.
Na 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'' :)
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ść 😁
LukiSpajder
Posts: 1548
Joined: Tue Aug 18, 2020 2:22 pm
Has thanked: 25 times
Been thanked: 34 times

Post

[email protected] wrote: Sat Aug 01, 2026 3:22 pm
robertklepacki94 wrote: Sat Aug 01, 2026 10:34 am
[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 :D
Zrobiłem tak, że jak zaznaczysz ptaszka to przelicza % pomiędzy min a max, jak tego nie zrobisz to surowa wartość.
Na 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'' :)
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ść 😁
Chyba że tylko u mnie coś nie tak 🙂😉, dostawca internetu może mieć wpływ ? Ciekawe jak u innych się to zachowuje .
User avatar
george1255
Posts: 426
Joined: Fri Sep 02, 2022 8:48 pm
Location: Włodawa
Has thanked: 12 times
Been thanked: 7 times

Post

jak odpalic ten builder na macOS w platformio ?
[email protected]
Posts: 1584
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

george1255 wrote: Sat Aug 01, 2026 7:16 pm jak odpalic ten builder na macOS w platformio ?
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

Post

@robertklepacki94
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

Post

[email protected] wrote: Mon Aug 03, 2026 5:52 pm @robertklepacki94
Kolejna iteracja, aktualizuj GG tylko w GGBD
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 :D
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

Post

robertklepacki94 wrote: Mon Aug 03, 2026 7:32 pm
[email protected] wrote: Mon Aug 03, 2026 5:52 pm @robertklepacki94
Kolejna iteracja, aktualizuj GG tylko w GGBD
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 :D
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
Posts: 1931
Joined: Thu Sep 02, 2021 1:06 pm
Has thanked: 5 times
Been thanked: 14 times

Post

[email protected] wrote: Mon Aug 03, 2026 7:39 pm
robertklepacki94 wrote: Mon Aug 03, 2026 7:32 pm
[email protected] wrote: Mon Aug 03, 2026 5:52 pm @robertklepacki94
Kolejna iteracja, aktualizuj GG tylko w GGBD
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 :D
Wg mnie to kwestia perspektywy czy patrzymy od czujnika - tak jest w tej chwili - czy od obiektu obserwowanego , jakiś pomysł jak to inaczej zaprogramować?
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 %.

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

Post

robertklepacki94 wrote: Mon Aug 03, 2026 7:44 pm
[email protected] wrote: Mon Aug 03, 2026 7:39 pm
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 :D
Wg mnie to kwestia perspektywy czy patrzymy od czujnika - tak jest w tej chwili - czy od obiektu obserwowanego , jakiś pomysł jak to inaczej zaprogramować?
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 %.

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);
    }
  }
}
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ć.

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... :lol:

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;
      }
      

Return to “GUI Generic”