Supla Pushover x4 cd

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
nebraska
Posts: 101
Joined: Thu Dec 08, 2022 3:00 pm

Post

zzrr wrote: Sat Apr 22, 2023 3:31 pm Ale jak nic??? :shock:
Zastosowałem takie samo Arduino, Board manager i dalej cisza.
Zrobiłem na esp32 i wszystko działa od strzała.
zzrr dziękuję za pomoc i wsparcie.
Może Krzysztof coś poradzi, bo już nie mam cierpliwości.
zzrr
Posts: 525
Joined: Wed Oct 26, 2022 7:35 pm

Post

A tak zapytam jeszcze w takim razie... A ten kod mój bez zmieniania czegokolwiek sprawdziłeś najpierw czy idzie?
nebraska
Posts: 101
Joined: Thu Dec 08, 2022 3:00 pm

Post

zzrr wrote: Sat Apr 22, 2023 6:33 pm A tak zapytam jeszcze w takim razie... A ten kod mój bez zmieniania czegokolwiek sprawdziłeś najpierw czy idzie?
Szczerze mówiąc to nie, pod przycisk go przerobiłem jutro rano sprawdzę. Mam prośbę mógłbyś sprawdzić mój kod na poprzedniej stronie tego tematu czy u ciebie zadziała?
zzrr
Posts: 525
Joined: Wed Oct 26, 2022 7:35 pm

Post

Sprawdziłem. Coś jest faktycznie nie tak.
zzrr
Posts: 525
Joined: Wed Oct 26, 2022 7:35 pm

Post

nebraska wrote: Sat Apr 22, 2023 7:06 pm Mam prośbę mógłbyś sprawdzić mój kod na poprzedniej stronie tego tematu czy u ciebie zadziała?
Cześć. Wiem w czym jest problem. Ale ja go nie potrafię rozwiązać, czy Ty sam też nie wiem. Może @klew.
W przypadku tego kodu na którym Ty chciałeś przetestować jest różnica w odniesieniu do mojego taka że zamieniłeś wyzwolenie akcji w klasie obsługującej Pushover z wyzwalania sensorem na buttona. Na logikę też powinno działać ale faktycznie nie działa i tutaj to mogła by być chyba jedynie wskazówka dla @klewa czy coś z tym należało by zrobić. Bo z drugiej strony podchodząc do tego przypadku to ja wiem że każdy sobie może robić co mu się podoba i to jego sprawa jak sobie wymyśli obsługę. Ale czy powiadomienie z buttona na pushover ma tak naprawdę zastosowanie w praktyce??? No chyba że to robiłeś tylko żeby przetestować. Jeśli by się uprzeć to zrobiłem taką próbę że w kodzie dodałem wirtualny sensor. np. brama jak w Twoim przypadku. Zrobiłem w obsłudze buttona włączenie lub wyłączenie nie akcji bezpośrednio z pushover tylko tego wirtualnego sensora. Na Supli masz wtedy ikonkę czy brama otwarta czy zamknieta. Dodatkowo dodałem akcję dla tego wirtualnego sensora która w przypadku włączenia sensora uruchamia akcję w klasie obsługującej pushover. I wtedy masz obsługę buttona i pushover działa. Nie mam pojęcia dlaczego z klasy Supla::Sensor działa a Supla::Control nie. Sprawdziłem ile jest wolnej pamięci przed samym wykonaniem Pushover po = Pushover(); w obu przypadkach i jest identyczna ilość wolnej pamięci. W razie czego jeśli będziesz chciał temat "rozkminić" to co będę mógł też się dołączę.
nebraska
Posts: 101
Joined: Thu Dec 08, 2022 3:00 pm

Post

Wywaliłem przycisk ustawiłem milisa w pętli co 20s powiadomienie, też nic.
Problem z RAM ewidentnie ponieważ na esp32 działa.
Zobaczymy co napisze @klew tylko on coś może z tym zrobić.
zzrr
Posts: 525
Joined: Wed Oct 26, 2022 7:35 pm

Post

nebraska wrote: Sun Apr 23, 2023 3:22 pm Wywaliłem przycisk ustawiłem milisa w pętli co 20s powiadomienie, też nic.
To było już przerabiane że w pętli tez nie pójdzie.
Ale... jak w pętli dasz z "milisem" to "custAkcja->handleAction(0, MOJA_AKCJA);" to wtedy pushover zadziała. Bo też sprawdzałem już wcześniej. Po za tym mam dokładnie to wpisane w obecnie skończonym kodzie, własnie w millis() co minutę do powtarzania kumunikatu pushover jeśli nie wyłączę alarmu ręcznie w telefonie albo na centralce.
Masz racje że problem jest chyba z pamięcią. Ale dlaczego działa z Supla::sensor a z Supla::control nie chce??? :shock:
No to już by musiał @klew podziałać
zzrr
Posts: 525
Joined: Wed Oct 26, 2022 7:35 pm

Post

@nebraska... jeśli chcesz to wrzuć sobie poniższy kod i nic nie zmieniaj na początku. To nie rozwiązuje tego o czym pisaliśmy ale kod generalnie realizuje takie coś... button na D3(ten sam co od configa bo nowego już mi się nie chciało dodawać ) 1xclick brama otwarta + komunikat Pushover, 2xclick brama zamknięta +komunikat pushover. . Dodatkowo żeby od razu był efekt, w pętli loop jest wpis który wysyła wiadomości pushover co 10s. Później możesz to wyrzucić. Jeżeli by @klew z jakiegoś powodu nie podjął tematu to masz alternatywę.
Kod sprawdziłem. Kod działa Pushover na 100%. Jeśli zadziała i zechcesz to pododajesz sobie co Tam Ci będzie potrzebne typu przekaźnik, button czy co tam będzie trzeba.

Code: Select all

#include <Arduino.h>
#include <SuplaDevice.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/relay.h>
#include <supla/control/button.h>
#include <supla/control/action_trigger.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/network/html/custom_text_parameter.h>
//// #include <supla/device/supla_ca_cert.h>
//// #include <supla/events.h>
#include <supla/storage/eeprom.h>
#include <supla/sensor/binary.h>
#include <supla/sensor/virtual_binary.h>

#include <Pushover.h>

Supla::Eeprom eeprom;
Supla::ESPWifi wifi;
Supla::LittleFsConfig configSupla;
Supla::EspWebServer suplaServer; // po zakomentowaniu działa PUSHOVER
Supla::Html::DeviceInfo htmlDeviceInfo(&SuplaDevice);
Supla::Html::WifiParameters htmlWifi;
Supla::Html::ProtocolParameters htmlProto;
Supla::Html::StatusLedParameters htmlStatusLed;

#define RELAY_GPIO 12           // D6
#define BUTTON_CFG_RELAY_GPIO 0 // D3
#define LED 13                  // D7
#define BUTT 5                  // D1

bool stan_alarmu = false;

char PUSH_USER[200] = {};
char PUSH_API_KEY[200] = {};
const char PARAM1[] = "param1"; // PUSH_API_KEY
const char PARAM2[] = "param2"; // PUSH_USER

// Supla::Control::Relay *r1 = nullptr;
Supla::Sensor::VirtualBinary *r2 = nullptr;
// Supla::Control::ActionTrigger *at1 = nullptr;
// RH_ASK driver(2000, 4, NOT_A_PIN); // ESP8266: do not use pin 11  D2


enum NoweAkcje
{
    MOJA_AKCJA_1,
    MOJA_AKCJA_2
};

class MojaAkcja : public Supla::ActionHandler
{
public:
    MojaAkcja(){};

    void handleAction(int event, int action) override
    {
        if (action == MOJA_AKCJA_1)
        {
            Pushover po = Pushover(PUSH_API_KEY, PUSH_USER, UNSAFE);
            po.setMessage("Testnotification");
            //po.setDevice("galaxynote8");
            po.setTitle("kuku");
            po.setSound("bike");
            if (po.send())
            {
                SUPLA_LOG_DEBUG("Pushover send success!");
            }
            else
            {
                SUPLA_LOG_DEBUG("Pushover send failed!");
            }
        }
        if (action == MOJA_AKCJA_2)
        {
            digitalWrite(LED, LOW);
            SUPLA_LOG_DEBUG("MOJA_AKCJA_1_STOP!");
        }
    }
};
MojaAkcja *custMojaAkcja = new MojaAkcja;

void setup()
{
    Serial.begin(9600);
    wifi.enableSSL(false);
    new Supla::Html::CustomTextParameter(PARAM1, "Pushover API Key", 100);
    new Supla::Html::CustomTextParameter(PARAM2, "Pushover USER Key", 100);
    // new Supla::Html::CustomTextParameter(PARAM2, "Pushover Sound", 100);
    pinMode(LED, OUTPUT);
    //Supla::Sensor::VirtualBinary *r2 = new Supla::Sensor::VirtualBinary();
    r2 = new Supla::Sensor::VirtualBinary();
    auto buttonCfgRelay =
        new Supla::Control::Button(BUTTON_CFG_RELAY_GPIO, true, true);
    r2->addAction(MOJA_AKCJA_1, custMojaAkcja, Supla::ON_TURN_ON);
    r2->addAction(MOJA_AKCJA_2, custMojaAkcja, Supla::ON_TURN_OFF);
    buttonCfgRelay->setHoldTime(5000);
    buttonCfgRelay->setMulticlickTime(500);
    buttonCfgRelay->addAction(Supla::TOGGLE_CONFIG_MODE, SuplaDevice, Supla::ON_HOLD);
    buttonCfgRelay->addAction(Supla::SET, r2, Supla::ON_CLICK_1); 
    buttonCfgRelay->addAction(Supla::CLEAR, r2, Supla::ON_CLICK_2);
        SuplaDevice.setName("Pushover Garaż_brama");
    SuplaDevice.begin();

    if (Supla::Storage::ConfigInstance()->getString(PARAM1, PUSH_API_KEY, 200))
    {
        SUPLA_LOG_DEBUG(" **** Param[%s]: %s", PARAM1, PUSH_API_KEY);
    }
    else
    {
        SUPLA_LOG_DEBUG(" **** Param[%s] is not set", PARAM1);
    }

    if (Supla::Storage::ConfigInstance()->getString(PARAM2, PUSH_USER, 200))
    {
        SUPLA_LOG_DEBUG(" **** Param[%s]: %s", PARAM2, PUSH_USER);
    }
    else
    {
        SUPLA_LOG_DEBUG(" **** Param[%s] is not set", PARAM2);
    }
}
unsigned long czas2;
void loop()
{
    SuplaDevice.iterate();
if (millis() - czas2 >= 10000UL)
{
    custMojaAkcja->handleAction(0, MOJA_AKCJA_1);
    czas2= millis();
}
}
User avatar
klew
Posts: 9704
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Nie przyglądałem się jeszcze szczegółowo tym co pisaliście, ale obsługa przycisków jest realizowana na timerach i tam raczej nie powinno się robić takich operacji, jak nawiązywanie szyfrowanego połączenia z pushover. Kojarzę że ktoś kiedyś pisał o tym, że to nie działa.

Spróbujcie, zamiast robić wysłanie pusha z tej klasy MojeAkcje, wstawić jakąś flagę, którą sprawdzacie w iterate i tam wysyłacie push.
Kiedy będzie Supla Offline Party / SOP#2025 ?
User avatar
lukfud
Posts: 2267
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

klew wrote: Sun Apr 23, 2023 5:08 pm Nie przyglądałem się jeszcze szczegółowo tym co pisaliście, ale obsługa przycisków jest realizowana na timerach i tam raczej nie powinno się robić takich operacji, jak nawiązywanie szyfrowanego połączenia z pushover. Kojarzę że ktoś kiedyś pisał o tym, że to nie działa.

Spróbujcie, zamiast robić wysłanie pusha z tej klasy MojeAkcje, wstawić jakąś flagę, którą sprawdzacie w iterate i tam wysyłacie push.
ktoś o tym pisał ;)
https://www.facebook.com/groups/supladiy/

Return to “Pomysły i koncepcje”