Modyfikacja przykładu WebInterface Arduino

iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Spróbowałem wstawić do mojego szkicu:

Code: Select all

    auto kpop9 = new Supla::Sensor::GeneralPurposeMeasurement(); // kanał do Vmax Wiatru/24h
    auto r1 = new Supla::Control::Relay(12); 		// z przykładu CMI
auto selectCmd =
    new Supla::Html::SelectCmdInputParameter(PARAM_CMD2, "Relay control");  // z przykładu CMI
 // dalej z przykładu CMI
  selectCmd->registerCmd("ON", Supla::ON_EVENT_1);
 // tu nie ma błędów - linia z przykładu CMI:
  selectCmd->addAction(Supla::RESET, r1, Supla::ON_EVENT_1, true);
// tu jest podkreślenie błędu, szczegóły poniżej 
  selectCmd->addAction(Supla::RESET, kpop9, Supla::ON_EVENT_1, true);
w ostatniej linii jest podkreślone "addAction" i komentarz:
żadne wystąpienie elementu funkcja przeciążona "Supla::Html::SelectCmdInputParameter::addAction" nie jest zgodne z listą argumentówC/C++(304)
WI-240901-0030-E4.ino(606, 14): typy argumentów: (Supla::Action, Supla::Sensor::GeneralPurposeMeasurement *, Supla::Event, bool)
WI-240901-0030-E4.ino(606, 14): typ obiektu to: Supla::Html::SelectCmdInputParameter
addAction
Przeciążenia: +2
Chyba typ elementu GPM mu nie pasuje...

Przy "r1" jest ok, przy "kpop9" już nie jest ok.
Gdzie robię błąd?
Aha: nie wiem, czy to ma znaczenie, ale ten mój kanał to KPOP, a nie KLOP, którego Klew używałeś w odpowiedzi na moje pytanie

*****
EDIT: nie doczytałem: KLOP - KPOP - ma znaczenie:
Jeśli chcesz to dodać do KPOP, to musisz napisać własną klasę, która dziedziczy po GeneralPurposeMeasurement oraz po Supla::ActionHandler (ona ma wirtualną metodę handleAction, pod którą możesz podstawić własną implementację).
User avatar
klew
Posts: 13906
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

iM@rek wrote: Mon Sep 02, 2024 7:49 pm *****
Metoda "addAction" przyjmuje wskaźnik na klasę "ActionHandler". KPOP po niej nie dziedziczy, bo nie ma w nim obsługi żadnych akcji, więc nie da się rzutować wskaźnika na KPOP na wskaźnik do ActionHandler.
KLOP dziedziczy po ActionHandler, bo ma chociażby obsługę tej akcji Supla::RESET. Dlatego ten wskaźnik można tam wstawić, bo wskaśniki na klasy pochodne (np. KLOP, Relay, ImpulseCounter) można rzutować na wskaźniki na klasy bazowe - czyli na ActionHandler.
Najlepsze suple dla Twojego domu :mrgreen:
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Dziękuję za info, dotarło. Muszę jakoś z tym żyć ;-)
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Mam problem z napisaniem funkcji.
Zapytałem na forum "Pomoc":

Code: Select all

https://forum.supla.org/viewtopic.php?p=185271#p185271
Proszę, może któryś z kolegów rzuci okiem i pomoże?
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Jak odczytać do zmiennej zawartość kanału?
Coś jak:
zmienna = wartość(KPOP0); (jakiś get?)
Czyli odwrotność ustawiania wartości kanału: KPOP0 = setValue(wartość).
User avatar
klew
Posts: 13906
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

iM@rek wrote: Mon Sep 16, 2024 11:20 am Jak odczytać do zmiennej zawartość kanału?
Coś jak:
zmienna = wartość(KPOP0); (jakiś get?)
Czyli odwrotność ustawiania wartości kanału: KPOP0 = setValue(wartość).
Na kanale GPM masz metody:

Code: Select all

  // Return calculated value
  double getCalculatedValue();
  // Returns formatted value as char array (including units, precision, etc.)
  void getFormattedValue(char *result, int maxSize);

  // For custom sensor, please provide either class that inherits from
  // Supla::Sensor::MeasurementDriver or override below getValue() method
  virtual double getValue();
Najlepsze suple dla Twojego domu :mrgreen:
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Dzięki,

Dołożyłem do szkicu:
#include <supla/sensor/general_purpose_channel_base.h>
ale przy wpisaniu:
getCalculatedValue();
VSC podkreśla tę funkcję z komunikatem:
|| identifier "getCalculatedValue" is undefined ||

Proszę podaj jakiś prosty przykład.
User avatar
klew
Posts: 13906
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

iM@rek wrote: Mon Sep 16, 2024 11:58 am Dzięki,

Dołożyłem do szkicu:
#include <supla/sensor/general_purpose_channel_base.h>
ale przy wpisaniu:
getCalculatedValue();
VSC podkreśla tę funkcję z komunikatem:
|| identifier "getCalculatedValue" is undefined ||

Proszę podaj jakiś prosty przykład.
To są metody z klasy HvacBase, więc możesz je wywołać tylko na konkretnej instancji klasy HvacBase (lub na wskaźniku na nią).

Czyli, zakładając, że "hvac" to wskaźnik na konkretną instancję klasy, to:

Code: Select all

  double currentValue = hvac->getCalculatedValue();
Najlepsze suple dla Twojego domu :mrgreen:
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Ok, dziękuję.
myślałem, że to będzie proste, typu: jakaś_zmienna = getValue(kpop0)
Zrobię to inaczej.
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Widzę w terminalu, że po podłączeniu się do sieci lokalnej pojawiają się dane:
WiFi: establishing connection with SSID: "xxxxxxx"
Connected BSSID: xx:xx:xx:xx
local IP: 192.168.xx.yy
subnetMask: 255.255.255.0
gatewayIP: 192.168
Jak można w skrypcie odczytać, a potem przypisać do zmiennej wartość "local IP"?

Return to “Pomoc”