Akcje warunkowe w Arduino IDE

SOYER
Posty: 819
Rejestracja: śr sie 10, 2022 12:29 pm
Lokalizacja: Kryry

Dalej nie działa, założyłem nowy temat tu:
viewtopic.php?t=11312
Adamo28
Posty: 138
Rejestracja: ndz lis 08, 2020 2:54 pm

Kod: Zaznacz cały

#include <supla/action_handler.h>

#define MOJA_AKCJA_1 1;
#define MOJA_AKCJA_2 2;

class MojaAkcja : public Supla::ActionHandler {
  public:
    void handleAction(int event, int action) {
      if (action == MOJA_AKCJA_1) {
        // zadania dla akcji 1
      } else if (action == MOJA_AKCJA_2) {
       // zadania dla akcji 2
      }  
    }
};

// setup:
MojaAkcja egzekutor;
button->addAction(MOJA_AKCJA_1, egzekutor, ON_PRESS);
Czy korzystając z tego przykładu i AT można zrobić wykonywanie MOJA_AKCJA_1 dla załączenia wirtualnego przekaźnika ?

Kod: Zaznacz cały

auto r1 = new Supla::Control::VirtualRelay();
r1->addAction(MOJA_AKCJA_1, MojaAkcja, Supla::TURN_ON);
Dla buttonów to działa, ale dla przekaźników już nie. Czy trzeba w loop robić:
if (r1->isOn()) {//rób coś}
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

Adamo28 pisze: czw paź 06, 2022 9:13 pm

Kod: Zaznacz cały

r1->addAction(MOJA_AKCJA_1, MojaAkcja, Supla::ON_TURN_ON)
https://www.facebook.com/groups/supladiy/
Adamo28
Posty: 138
Rejestracja: ndz lis 08, 2020 2:54 pm

Dzięki, działa. Patrzyłem na actions.h a to schowane jest w events.h
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

Adamo28 pisze: ndz paź 09, 2022 7:02 pm Dzięki, działa. Patrzyłem na actions.h a to schowane jest w events.h
Poprawiłeś post, a już Ci odpisywałem na dodatkowe pytanie ;)
https://www.facebook.com/groups/supladiy/
nebraska
Posty: 93
Rejestracja: czw gru 08, 2022 3:00 pm

@klew jak ustawić akcję warunkową dla tego kanału? Dałem warunekw setup, ale dalej nie wiem jak to ustawić :roll:

Kod: Zaznacz cały

#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/control/relay.h>
#include <supla/network/esp_wifi.h>
#include <supla/uptime.h>
#include <supla/sensor/therm_hygro_meter.h>
#include <supla/sensor/hygro_meter.h>
#include <supla/storage/eeprom.h>
#define STORAGE_OFFSET 100
Supla::Eeprom eeprom(STORAGE_OFFSET);

Supla::Uptime mojeUptime;

const char* host = "svr.supla.org";
const char* ssid = "xxxx";
const char* pass = "xxxx";

auto pompa = new Supla::Control::Relay(5);


Supla::ESPWifi wifi(ssid, pass);

class CSM : public Supla::Sensor::HygroMeter {
  public:

    double getHumi() override {
      return humidity;
    }

    void setHumi(double val) {
      humidity = val;
    }
  protected:

    double humidity = HUMIDITY_NOT_AVAILABLE;
};

CSM *vth1;

void setup() {

  Serial.begin(115200);

  // Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
  char GUID[SUPLA_GUID_SIZE] = {0x6E                                                                     };

  // Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
  char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {0x01                                                               };


  vth1 = new CSM;
  vth1->setHumi(tnk_lvl);

  termometr.addAction(Supla::TURN_ON, pompa, OnLess(25));
  termometr.addAction(Supla::TURN_OFF, pompa, OnGreater(90));


  SuplaDevice.begin(GUID,  // Global Unique Identifier
                    host,  // SUPLA server address
                    "email",   // Email address used to login to Supla Cloud
                    AUTHKEY);                        // Authorization key

}

void loop() {
  SuplaDevice.iterate(); 

  if (millis() - times >= 20000) {
    times = millis();

    vth1->setHumi(tnk_lvl);
  }
}
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

nebraska pisze: śr maja 03, 2023 7:13 pm @klew jak ustawić akcję warunkową dla tego kanału? Dałem warunekw setup, ale dalej nie wiem jak to ustawić :roll:
Dla którego kanału? W kodzie masz wstawiony warunek na obiekcie "termometr", który nigdzie nie jest zdefiniowany.

Chodzi Ci o ten "HygroMeter"?
Wilgotność w Supli leci zawsze w formacie takim jak kanał "termometru + wilgotności". Pomiar "temperatury" określam jako "główny", a "wilgotności" jako "alternatywny".
Warunki do "alternatywnych" wartości, czyli np. do wilgotności, ustawia się dodając dodatkowe "true" na końcu:

Kod: Zaznacz cały

 vht1->addAction(Supla::TURN_ON, pompa, OnLess(25, true));
 vht1->addAction(Supla::TURN_OFF, pompa, OnGreater(90, true));
Ponadto, od jakiegoś czasu w bibliotece jest dostępny wirtualny kanał wilgotności:
https://github.com/SUPLA/supla-device/b ... omometer.h

Możesz go używać zamiast tego CSM - chyba, że robisz tam znacznie więcej rzeczy, a wkleiłeś tylko fragment.
Widzimy się na Supla Offline Party vol. 2 :!:
nebraska
Posty: 93
Rejestracja: czw gru 08, 2022 3:00 pm

klew pisze: czw maja 04, 2023 8:00 am
nebraska pisze: śr maja 03, 2023 7:13 pm @klew jak ustawić akcję warunkową dla tego kanału? Dałem warunekw setup, ale dalej nie wiem jak to ustawić :roll:
Dla którego kanału? W kodzie masz wstawiony warunek na obiekcie "termometr", który nigdzie nie jest zdefiniowany.

Chodzi Ci o ten "HygroMeter"?
Wilgotność w Supli leci zawsze w formacie takim jak kanał "termometru + wilgotności". Pomiar "temperatury" określam jako "główny", a "wilgotności" jako "alternatywny".
Warunki do "alternatywnych" wartości, czyli np. do wilgotności, ustawia się dodając dodatkowe "true" na końcu:

Kod: Zaznacz cały

 vht1->addAction(Supla::TURN_ON, pompa, OnLess(25, true));
 vht1->addAction(Supla::TURN_OFF, pompa, OnGreater(90, true));
Ponadto, od jakiegoś czasu w bibliotece jest dostępny wirtualny kanał wilgotności:
https://github.com/SUPLA/supla-device/b ... omometer.h

Możesz go używać zamiast tego CSM - chyba, że robisz tam znacznie więcej rzeczy, a wkleiłeś tylko fragment.
Tak chodzi o HygroMeter nie wiem właśnie jak zdefiniować ten

Kod: Zaznacz cały

 vht1->addAction(Supla::TURN_ON, pompa, OnLess(25, true));
 vht1->addAction(Supla::TURN_OFF, pompa, OnGreater(90, true));
Załączniki
mm.png
mm.png (4.89 KiB) Przejrzano 303 razy
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

nebraska pisze: czw maja 04, 2023 9:14 am Tak chodzi o HygroMeter nie wiem właśnie jak zdefiniować ten

Kod: Zaznacz cały

 vht1->addAction(Supla::TURN_ON, pompa, OnLess(25, true));
 vht1->addAction(Supla::TURN_OFF, pompa, OnGreater(90, true));
Musisz podać nazwę wskaśnika na obiekt "CMS". U Ciebie to vth1 (zrobiłem literówkę w poprzednim poście).

Błąd z kompilatora jest dość jasny i nawet podpowiada jak poprawić.
Widzimy się na Supla Offline Party vol. 2 :!:
nebraska
Posty: 93
Rejestracja: czw gru 08, 2022 3:00 pm

Przepraszam za moje nie dopatrzenie.
Bardzo dziękuje za szybką pomoc. Działa elegancko.
ODPOWIEDZ

Wróć do „Arduino IDE”