Ciężkie nowego początki

User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

Taka kolejna zagwozdka. Uruchomiłem stan baterii ale nie mogę tam wrzucić wartości, cały czas w aplikacji mam 0%, to samo w debug "# OnBoard battery level: 0.000 V". Czego brakuje tutaj? (to jest wycinek kodu dla czytelności, mogłem coś za dużo usunąć to będę uzupełniał ;) )

Code: Select all


#define HC12_RX_PIN D1
#define HC12_TX_PIN D2

#include <SuplaDevice.h>
#include <supla/network/esp_wifi.h>
Supla::ESPWifi wifi;
#include <supla/device/status_led.h>
#include <supla/storage/littlefs_config.h>
Supla::LittleFsConfig configSupla;
#include <supla/network/esp_web_server.h>
Supla::EspWebServer suplaServer;
#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/device/supla_ca_cert.h>
#include <supla/sensor/general_purpose_measurement.h>
Supla::Sensor::GeneralPurposeMeasurement *batt = nullptr;
Supla::Sensor::GeneralPurposeMeasurement *hygro = nullptr;
#include <supla/sensor/virtual_hygromometer.h>
#include <SoftwareSerial.h>
SoftwareSerial hc12(HC12_RX_PIN, HC12_TX_PIN);
#include <supla/control/button.h>
Supla::Control::Button *cfgButton = nullptr;
#include <supla/device/notifications.h>


struct Data {
  int numer;
  int bateria;
  int pomiar;
} dane;



// --------------------------------------------------------------------------------------------------
class ShowBatteryLevel : public Supla::Element {
 public: ShowBatteryLevel() {}

  void onInit() override {
    getBatteryLevel();
  }

  void getBatteryLevel() {
    double batLevel = (dane.bateria * 0.01);
    SUPLA_LOG_DEBUG("# OnBoard battery level: %.3f V", batLevel);
    if (hygro != nullptr) {
      hygro->getChannel()->setBatteryLevel(batLevel);
    }
  };

  void iterateAlways() override {
    if (millis() - lastReadTime > 10000) {
      lastReadTime = millis();
      getBatteryLevel();
    }
  };

 protected:
  uint32_t lastReadTime = 0;
};
// --------------------------------------------------------------------------------------------------------

// HTML www component (they appear in sections according to creation
// sequence)
Supla::Html::DeviceInfo htmlDeviceInfo(&SuplaDevice);
Supla::Html::WifiParameters htmlWifi;
Supla::Html::ProtocolParameters htmlProto;
Supla::Html::StatusLedParameters htmlStatusLed;

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

  hygro = new Supla::Sensor::GeneralPurposeMeasurement();
  hygro->getChannel()->setFlag(SUPLA_CHANNELSTATE_FIELD_BATTERYLEVEL);


  // Set some initial value of measurement
  hygro->setValue(NAN);

  new ShowBatteryLevel();

  // configure defualt Supla CA certificate
  SuplaDevice.setSuplaCACert(suplaCACert);
  SuplaDevice.setSupla3rdPartyCACert(supla3rdCACert);
  SuplaDevice.begin();
}

void loop() {
  SuplaDevice.iterate();
  
  if (hc12.available()) {
    String dane1 = hc12.readStringUntil('\n');
    
    if (dane1.indexOf('|') == -1) {
      Serial.println(dane1);
    } else {
      Data dane;



      int parsedItems = sscanf(dane1.c_str(), "%d|%d|%d", &dane.numer, &dane.bateria, &dane.pomiar);

       Serial.print("Sensor: ");
        Serial.print(dane.numer);
        Serial.print(" | ");
        Serial.print("Bateria: ");
        Serial.print(dane.bateria);
        Serial.print(" | ");
        Serial.print("Pomiar: ");
        Serial.print(dane.pomiar);

     
      }
    }
  }


YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
[email protected]
Posts: 1585
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

YoMan wrote: Fri Aug 30, 2024 8:45 pm Taka kolejna zagwozdka. Uruchomiłem stan baterii ale nie mogę tam wrzucić wartości, cały czas w aplikacji mam 0%, to samo w debug "# OnBoard battery level: 0.000 V". Czego brakuje tutaj? (to jest wycinek kodu dla czytelności, mogłem coś za dużo usunąć to będę uzupełniał ;) )

Code: Select all


#define HC12_RX_PIN D1
#define HC12_TX_PIN D2

#include <SuplaDevice.h>
#include <supla/network/esp_wifi.h>
Supla::ESPWifi wifi;
#include <supla/device/status_led.h>
#include <supla/storage/littlefs_config.h>
Supla::LittleFsConfig configSupla;
#include <supla/network/esp_web_server.h>
Supla::EspWebServer suplaServer;
#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/device/supla_ca_cert.h>
#include <supla/sensor/general_purpose_measurement.h>
Supla::Sensor::GeneralPurposeMeasurement *batt = nullptr;
Supla::Sensor::GeneralPurposeMeasurement *hygro = nullptr;
#include <supla/sensor/virtual_hygromometer.h>
#include <SoftwareSerial.h>
SoftwareSerial hc12(HC12_RX_PIN, HC12_TX_PIN);
#include <supla/control/button.h>
Supla::Control::Button *cfgButton = nullptr;
#include <supla/device/notifications.h>


struct Data {
  int numer;
  int bateria;
  int pomiar;
} dane;



// --------------------------------------------------------------------------------------------------
class ShowBatteryLevel : public Supla::Element {
 public: ShowBatteryLevel() {}

  void onInit() override {
    getBatteryLevel();
  }

  void getBatteryLevel() {
    double batLevel = (dane.bateria * 0.01);
    SUPLA_LOG_DEBUG("# OnBoard battery level: %.3f V", batLevel);
    if (hygro != nullptr) {
      hygro->getChannel()->setBatteryLevel(batLevel);
    }
  };

  void iterateAlways() override {
    if (millis() - lastReadTime > 10000) {
      lastReadTime = millis();
      getBatteryLevel();
    }
  };

 protected:
  uint32_t lastReadTime = 0;
};
// --------------------------------------------------------------------------------------------------------

// HTML www component (they appear in sections according to creation
// sequence)
Supla::Html::DeviceInfo htmlDeviceInfo(&SuplaDevice);
Supla::Html::WifiParameters htmlWifi;
Supla::Html::ProtocolParameters htmlProto;
Supla::Html::StatusLedParameters htmlStatusLed;

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

  hygro = new Supla::Sensor::GeneralPurposeMeasurement();
  hygro->getChannel()->setFlag(SUPLA_CHANNELSTATE_FIELD_BATTERYLEVEL);


  // Set some initial value of measurement
  hygro->setValue(NAN);

  new ShowBatteryLevel();

  // configure defualt Supla CA certificate
  SuplaDevice.setSuplaCACert(suplaCACert);
  SuplaDevice.setSupla3rdPartyCACert(supla3rdCACert);
  SuplaDevice.begin();
}

void loop() {
  SuplaDevice.iterate();
  
  if (hc12.available()) {
    String dane1 = hc12.readStringUntil('\n');
    
    if (dane1.indexOf('|') == -1) {
      Serial.println(dane1);
    } else {
      Data dane;



      int parsedItems = sscanf(dane1.c_str(), "%d|%d|%d", &dane.numer, &dane.bateria, &dane.pomiar);

       Serial.print("Sensor: ");
        Serial.print(dane.numer);
        Serial.print(" | ");
        Serial.print("Bateria: ");
        Serial.print(dane.bateria);
        Serial.print(" | ");
        Serial.print("Pomiar: ");
        Serial.print(dane.pomiar);

     
      }
    }
  }


Moim zdaniem kwestia zasięgów zmiennych , loop deklarujesz Data dane i do niej przypisujesz wartości , ale Twój kanał o tym nic nie wie. Dodał bym sobie funkcje setValue w klasie ShowBatteryLevel, w celu przekazania wartości do tej klasy i ja wywoływał w loopie po odczycie danych , w klasie zadeklarował prywatna zmienna Data _dane i przypisywal jej ta wartość i z niej potem ustawiał wartość kanału. To wymaga deklaracji auto bateryLevel = new ShowBatteryLevel nad setup, a w loop odwołania bateryLevel->setValue
User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

[email protected] wrote: Sat Aug 31, 2024 6:27 am Moim zdaniem kwestia zasięgów zmiennych , loop deklarujesz Data dane i do niej przypisujesz wartości , ale Twój kanał o tym nic nie wie. Dodał bym sobie funkcje setValue w klasie ShowBatteryLevel, w celu przekazania wartości do tej klasy i ja wywoływał w loopie po odczycie danych , w klasie zadeklarował prywatna zmienna Data _dane i przypisywal jej ta wartość i z niej potem ustawiał wartość kanału. To wymaga deklaracji auto bateryLevel = new ShowBatteryLevel nad setup, a w loop odwołania bateryLevel->setValue
Dzięki za podpowiedź. Co prawda zbyt wysoko oceniłeś moje umiejętności i zbyt skrótowo to opisałeś ale dało wskazówki, które z pomocą @LukFud (thx) rozwiązały problem ... jeszcze muszę tylko to do końca zrozumieć. Na razie działam trochę po omacku ale jak to ktoś powiedział "i tak mi szybko idzie" :) mam nadzieję że to tylko w 50% grzeczność ;)
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
[email protected]
Posts: 1585
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

YoMan wrote: Sun Sep 01, 2024 6:53 pm
[email protected] wrote: Sat Aug 31, 2024 6:27 am Moim zdaniem kwestia zasięgów zmiennych , loop deklarujesz Data dane i do niej przypisujesz wartości , ale Twój kanał o tym nic nie wie. Dodał bym sobie funkcje setValue w klasie ShowBatteryLevel, w celu przekazania wartości do tej klasy i ja wywoływał w loopie po odczycie danych , w klasie zadeklarował prywatna zmienna Data _dane i przypisywal jej ta wartość i z niej potem ustawiał wartość kanału. To wymaga deklaracji auto bateryLevel = new ShowBatteryLevel nad setup, a w loop odwołania bateryLevel->setValue
Dzięki za podpowiedź. Co prawda zbyt wysoko oceniłeś moje umiejętności i zbyt skrótowo to opisałeś ale dało wskazówki, które z pomocą @LukFud (thx) rozwiązały problem ... jeszcze muszę tylko to do końca zrozumieć. Na razie działam trochę po omacku ale jak to ktoś powiedział "i tak mi szybko idzie" :) mam nadzieję że to tylko w 50% grzeczność ;)
Oj tam oj tam 😉
Staram się odpisywać konkretnie ale z telefonu to gotowego kodu nie podam 😉 ale też nie znam c++ jakoś dobrze , raczej podstawy więc Twoje umiejętności mogą być podobne do moich 😁
User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

[email protected] wrote: Sun Sep 01, 2024 7:01 pm Oj tam oj tam 😉
Staram się odpisywać konkretnie ale z telefonu to gotowego kodu nie podam 😉 ale też nie znam c++ jakoś dobrze , raczej podstawy więc Twoje umiejętności mogą być podobne do moich 😁
to nie miało zabrzmieć jak zarzut :) czyste podziękowanie
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
[email protected]
Posts: 1585
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

YoMan wrote: Sun Sep 01, 2024 7:11 pm
[email protected] wrote: Sun Sep 01, 2024 7:01 pm Oj tam oj tam 😉
Staram się odpisywać konkretnie ale z telefonu to gotowego kodu nie podam 😉 ale też nie znam c++ jakoś dobrze , raczej podstawy więc Twoje umiejętności mogą być podobne do moich 😁
to nie miało zabrzmieć jak zarzut :) czyste podziękowanie
Wiem wiem, ja chciałem powiedzieć że Ci dobrze idzie 😁
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

(proszę tego nie brać do siebie :P)

Ogólnie temat deklarowania zmiennych i zakresy ich widoczności, to już na poziomie zwykłego C powinien być ogarnięty.
Ja wiem, że C++, klasy, dziedziczenie, to tematy należące do "trudniejszych" (do momentu, aż się załapie o co w tym chodzi), ale są też podstawy praktycznie niezależne od C++.

W sieci jest naprawdę sporo tutoriali, które przeprowadzają przez podstawy języka (chociażby dla C) z omówieniem takich tematów jak "proces kompilacji", "jednostki kompilacji", "widoczność zmiennych" itd. Mocno polecam poświęcić kilka godzin (naprawdę więcej nie trzeba) i przerobić sobie taki kursik (z robieniem zadań).

Kod supla-device nie jest napisany w sposób wymagający zaawansowanej znajomości C++. Tam z uwagi na wiele ograniczeń jakie mają mikrokontrolery, kod jest pisany raczej przy użyciu podstaw języka. Żadnych zaawansowanych funkcji z nowszych wydań C++ tutaj nie ma (czasem są użyte pewne uproszczenia, które wprwadzają wydania z lat 2010-2020, ale to raczej do pojedynczych linijek kodu się sprowadza).
Najlepsze suple dla Twojego domu :mrgreen:
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

Spróbujcie chociaż małą część osiągnąć w starej bibliotece w porównaniu co potrafi aktualna ;)
https://gui-generic-builder.supla.io/
User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

klew wrote: Mon Sep 02, 2024 8:13 am (proszę tego nie brać do siebie :P)
dlaczego nie? Chyba po to to napisałeś :)
Ja biorę do siebie i w miarę czasu próbuję ogarnąć. Jest to dla mnie terra incognita ale chyba znowu nie rocket science. Człowiek stworzył - drugi człowiek ogarnie. Kwestia czasu.
To co zaczynam ogarniać nie jest trudne ... logicznie poukładane ... tylko w mojej głowie muszę to tak samo poukładać
Na razie tylko @LukFud ma ze mną urwanie głowy :lol: :lol: :lol:
klew wrote: Mon Sep 02, 2024 8:13 am W sieci jest naprawdę sporo tutoriali
to fakt ... wrzuciłem na start kilka ... przy jednym prawie usnąłem ;) taka charyzma prowadzącego była. Możesz podrzucić coś co twoim zdaniem jest najlepsze w sensie przekazania tych podstaw i wstępu do dalszego rozwoju.
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
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

Nie jestem na czasie w tutorialach, ale osobiście nie lubię niczego z audio i wideo ;)
Jeśli będę pamiętał, to spróbuję coś jutro znaleźć i podrzucić.
Najlepsze suple dla Twojego domu :mrgreen:

Return to “supla-dev”