Roleta - wysyłanie polecenia.

amprsun
Posts: 23
Joined: Sat Jul 29, 2023 5:19 am

Post

Tak jak w tytule potrzebuje pomocy z tym o to kodem:

Code: Select all

    rs = new Supla::Control::RollerShutter(30, 31, false);
    Supla::Control::Button *buttonOpen = new Supla::Control::Button(28, true, true);
    Supla::Control::Button *buttonClose = new Supla::Control::Button(29, true, true);

    // Dodaj dwie diody LED, aby informować o statusie przekaźnika rolety
    // Jeśli wymagane jest odwrócenie wartości, dodaj trzeci parametr z wartością true
    new Supla::Control::PinStatusLed(30, 24); // pin 30 status na pinie 24
    new Supla::Control::PinStatusLed(31, 25); // pin 31 status na pinie 25

    buttonOpen->addAction(Supla::OPEN_OR_STOP, *rs, Supla::ON_PRESS);
    buttonClose->addAction(Supla::CLOSE_OR_STOP, *rs, Supla::ON_PRESS);

    // Dodanie akcji otwierania rolety
    rs->addAction(Supla::OPEN_OR_STOP, onRollerShutterOpen);

    /*
     * Inicjalizacja urządzenia Supla.
     * Adres serwera dostępny jest na https://cloud.supla.org 
     * Jeśli nie masz konta, możesz je utworzyć na https://cloud.supla.org/account/create
     * SUPLA i SUPLA CLOUD są bezpłatne
     */
    SuplaDevice.begin(GUID,              // Global Unique Identifier 
                      "svr1.supla.org",  // Adres serwera SUPLA
                      "email@address",   // Adres email użyty do logowania w Supla Cloud
                      AUTHKEY);          // Klucz autoryzacyjny
}

void loop() {
    SuplaDevice.iterate();

    if (startOpening) { // Sprawdź, czy roleta zaczyna się otwierać
        somfyRemote.sendCommand(Command::Up, 1);
#ifdef DEBUG
        Serial.println("Somfy command sent: Up");
#endif
      startOpening= false; // Resetowanie flagi po wysłaniu komendy
    }

    if (Serial.available() > 0) {
        somfyRemote.sendCommand(Command::Up, 1);
#ifdef DEBUG
        Serial.println("finished sending");
#endif
    }
}
Nie wiem jak ugryźć temat, chodzi o funkcje. Gdy roleta sie zamyka bądź otwiera to jakaś czynność jest wykonywana w ty przypadku chce zrealizować somfyRemote.sendCommand(Command::Up, 1); ale tylko błędy w kompilatorze na razie.
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

amprsun wrote: Tue Jun 18, 2024 9:19 pm Nie wiem jak ugryźć temat, chodzi o funkcje. Gdy roleta sie zamyka bądź otwiera to jakaś czynność jest wykonywana w ty przypadku chce zrealizować somfyRemote.sendCommand(Command::Up, 1); ale tylko błędy w kompilatorze na razie.
A błędy?
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
amprsun
Posts: 23
Joined: Sat Jul 29, 2023 5:19 am

Post

Próbuje jeszcze inaczej ale dalej błędy nie wiem gdzie popełniam błąd.

Code: Select all

void loop() {
    SuplaDevice.iterate();

    static bool lastOpeningState = false;
    bool currentOpeningState = rs->getCurrentPosition() != 0 && rs->lastDirectionWasOpen();

    if (currentOpeningState && !lastOpeningState) {
        somfyRemote.sendCommand(Command::Up, 1);
#ifdef DEBUG
        Serial.println("Somfy command sent: Up");
#endif
BŁĄD:
Compilation error: 'bool Supla::Control::RollerShutter::lastDirectionWasOpen() const' is protected within this context
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

Implementację tych komend wysyłanych do Somfy, powinieneś wstawić w swojej klasie dziedziczącej po RollerShutter.

Powinieneś dodać własną implementację przynajmniej tych metod:

Code: Select all

  void onInit() override;
  
  virtual void relayDownOn();
  virtual void relayUpOn();
  virtual void relayDownOff();
  virtual void relayUpOff();
Obecny kod się nie kompiluje, bo próbujesz wywołać metodę, która jest protected, a więc mogą jej używać tylko metody z klasy RollerShutter, a nie z zewnątrz.
Najlepsze suple dla Twojego domu :mrgreen:
radzik_r
Posts: 468
Joined: Sun Aug 11, 2019 5:32 pm
Has thanked: 1 time
Been thanked: 2 times

Post

Kod ma się wykonać raz w momencie uruchomienia rolety czy cały czas jak roleta jest w ruchu?

Return to “Pomoc”