Definitywny koniec z pushover(?)… w moich projektach:)

User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Cześć, właśnie się zorientowałem, że mam jeszcze jedno powiadomienie nie suplowe. Wodomierz i info o nadmiernym wycieku.
Powiadomienie jeśli w ciągu 1 minuty stan licznika wodomierza zwiększy się o więcej niż np.: 30.
Jak połączyć sceny(?), harmonogramy(?) i reakcje(?) by coś takiego osiągnąć?
Last edited by SOYER on Tue Jan 30, 2024 5:35 am, edited 1 time in total.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

SOYER wrote: Mon Jan 29, 2024 8:04 pm Jak połączyć sceny(?), harmonogramy(?) i reakcje(?) by coś takiego osiągnąć?
Chcesz poprzez clouda wysyłać komunikaty na Pushover czy mówisz o GG?
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Chcę wysyłać powiadomienie z Supli(chcę zrezygnować z pushovera).
Powiadomienie jeśli w ciągu minuty stan licznika zwiększy się o więcej niż 30.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Może jeszcze inaczej.
@klew. mam w ardu taką funkcję:

Code: Select all

void kontrlolaWody(){
  stanLicznika = licznikWody->getCounter();
  if(stanLicznika > (chLicznikWody + progWody)){
    // pushover("Przekroczono limit wylanej wody"); 
     chLicznikWody = stanLicznika;
     minut1.restart();
  }
  else if(minut1.available()){
    chLicznikWody = stanLicznika;
    minut1.restart();
  }
}
co wstawić zamiast zakomentowanej linijki, odnoszącej się do pushovera, by to supla wysłała powiadomienie. Czyli jak wstawić powiadomienie suplowskie do ardu. Nie widzę w przykładach dla supla device. Ciekawe czy to łyknie MEGA.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

No sam ciekawy jestem jak to się robi... bo pierwsze co mi przyszło do głowy to dodać zamiast komentarza uruchomienie wirtualnego sensora. Wtedy można zrobić reakcję z powiadomieniem już na cloudzie. Ale to jest nie do końca to o co zapytałeś
Pytanie czy to się da w ogóle zrobić bezpośrednio z kodu programu.
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

Jest przykład DSWithNotification.

Powiadomienie trzeba zarejestrować podając jakiego kanału ono dotyczy, lub -1 jeśli dotyczy urządzenia.
A potem w loop są trzy przykłady powiadomień.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

klew wrote: Mon Jan 29, 2024 8:55 pm Jest przykład DSWithNotification.

Powiadomienie trzeba zarejestrować podając jakiego kanału ono dotyczy, lub -1 jeśli dotyczy urządzenia.
A potem w loop są trzy przykłady powiadomień.
Jest faktycznie.
"Powiadomienie trzeba zarejestrować podając jakiego kanału ono dotyczy, lub -1 jeśli dotyczy urządzenia."
Czyli w:
Supla::Notification::RegisterNotification(0);
w nawiasie muszę podać numer kanału(ten z cloud?) mojego wodomierza?
czy po prostu numeracja powiadomień na tym urządzeniu, 0 to pierwsze, 1 to drugie itd...?
co to znaczy, że -1 "jeśli dotyczy urządzenia"?
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Code: Select all

if (!greetingsSend) {
      greetingsSend = true;
      Supla::Notification::Send(
          -1, "The Device", "Hello World! I'm your device with notifications!");
    }

    Supla::Notification::SendF(0, "Home", "Current temperature %0.2f",
        t1->getChannel()->getValueDouble());
    if (t2->getChannel()->getValueDouble() < 5) {
      Supla::Notification::Send(1, "Outside", "It is cold outside!");
    }
Chyba jest literówka...
"...tification::SendF(0, "Home", "Curre..."
SendF?
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Ok skompilowały się powiadomienia na MEGA, jest mega:).
Jutro testy.

Code: Select all

#include <SuplaDevice.h>
#include <supla/sensor/impulse_counter.h>
#include <supla/sensor/DS18B20.h>
#include <supla/control/relay.h>
#include <supla/sensor/binary.h>
#include <supla/storage/eeprom.h>
Supla::Eeprom eeprom(0);
#include <supla/network/ethernet_shield.h>
uint8_t mac[6] = {x};
Supla::EthernetShield ethernet(mac);
#include <Timers.h>
#include <supla/device/notifications.h>


const int analogInPin = A7;
#define ONE_WIRE A5
#define kran_wjazd 41
#define lampa_plac_wlacznik 22
#define lampa_ogrod_wlacznik 24
boolean placRF = false;
boolean ogrodRF = false;
boolean placON = false;
boolean placOFF = false;
boolean ogrodON = false;
boolean ogrodOFF = false;
int chLicznikWody;
int progWody = 30;
int stanLicznika;

class AnalogValue : public Supla::Sensor::Thermometer {
  public:
    AnalogValue(int pin) : pin(pin) {
    }
    
    void onInit() {
      pinMode(pin, INPUT); 
      channel.setNewValue(getValue());
    }

    double getValue() {
      return analogRead(pin);
    }

  protected:
    int pin;

};
Supla::Control::Relay *lampa_plac = nullptr;
Supla::Control::Relay *lampa_ogrod = nullptr;
Supla::Sensor::ImpulseCounter *licznikWody = nullptr;

Timer minut1;

void setup() {

  Serial.begin(9600);

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

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

  /*
   * Having your device already registered at cloud.supla.org,
   * you want to change CHANNEL sequence or remove any of them,
   * then you must also remove the device itself from cloud.supla.org.
   * Otherwise you will get "Channel conflict!" error.
   */
  pinMode(lampa_plac_wlacznik, INPUT);
  pinMode(lampa_ogrod_wlacznik, INPUT);
  
  DeviceAddress term_grunt = {0x28, 0xC4, 0x85, 0x40, 0x5, 0x0, 0x0, 0x91};
  lampa_plac = new Supla::Control::Relay(27, false);
  lampa_ogrod = new Supla::Control::Relay(37, false); // było 29
  auto brama = new Supla::Control::Relay(25, false);
  auto kompresor = new Supla::Control::Relay(33, false);
  auto furtka = new Supla::Control::Relay(31, false);

  new Supla::Sensor::DS18B20(ONE_WIRE);
  new Supla::Sensor::Binary(kran_wjazd, false);//wjazd
  
  Supla::Notification::RegisterNotification(-1);
  
  new AnalogValue(analogInPin);

  licznikWody = new Supla::Sensor::ImpulseCounter(48, true, false, 100);
  
  minut1.begin(59998); 
  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    "svrxx.supla.org",  // SUPLA server address
                    "xxx",   // Email address used to login to Supla Cloud
                    AUTHKEY);          // Authorization key
    
}

void loop() {
  lampyPodjazd();
  kontrlolaWody();
  radiowka();
  SuplaDevice.iterate();
}
void lampyPodjazd(){
  
}
void radiowka(){
  if(digitalRead(lampa_ogrod_wlacznik) == HIGH){
    ogrodRF=true;
  }
  else if(digitalRead(lampa_ogrod_wlacznik) == LOW){
    ogrodRF=false;
  }
  if(digitalRead(lampa_plac_wlacznik) == HIGH){
    placRF=true;
  }
  else if(digitalRead(lampa_plac_wlacznik) == LOW){
    placRF=false;
  }
  if((ogrodRF) && (ogrodON == false)){
   lampa_ogrod->turnOn();
   ogrodON = true;
   ogrodOFF = false;
  }
  else if((ogrodRF==false) && (ogrodOFF==false)){
   lampa_ogrod->turnOff();
   ogrodON = false;
   ogrodOFF = true;
  }
  if((placRF) && (placON == false)){
   lampa_plac->turnOn();
   placON = true;
   placOFF = false;
  }
  else if((placRF==false) && (placOFF==false)){
   lampa_plac->turnOff();
   placON = false;
   placOFF = true;
  }
}
void kontrlolaWody(){
  stanLicznika = licznikWody->getCounter();
  if(stanLicznika > (chLicznikWody + progWody)){
    Supla::Notification::Send(-1, "WODOMIERZ", "Przekroczono limit wylanej wody w 1 minutę");
     chLicznikWody = stanLicznika;
     minut1.restart();
  }
  else if(minut1.available()){
    chLicznikWody = stanLicznika;
    minut1.restart();
  }
}
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
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

Kanały na urządzeniu są numerowane od 0 w górę. W Cloud widać numer kanału oraz oraz ID kanału. ID jest z bazy, a numer kanału z urządzenia.

SendF jest dla wersji "senda", który działa podobnie do printf. Można wstawiać te %f, %s, %d itd.
Najlepsze suple dla Twojego domu :mrgreen:

Return to “Pomoc”