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ąć?
Definitywny koniec z pushover(?)… w moich projektach:)
-
SOYER
- Posts: 1623
- Joined: Wed Aug 10, 2022 12:29 pm
- Location: Kryry
- Been thanked: 2 times
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
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
-
SOYER
- Posts: 1623
- Joined: Wed Aug 10, 2022 12:29 pm
- Location: Kryry
- Been thanked: 2 times
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.
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
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
-
SOYER
- Posts: 1623
- Joined: Wed Aug 10, 2022 12:29 pm
- Location: Kryry
- Been thanked: 2 times
Może jeszcze inaczej.
@klew. mam w ardu taką funkcję:
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.
@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();
}
}https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
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.
Pytanie czy to się da w ogóle zrobić bezpośrednio z kodu programu.
-
klew
- Posts: 13908
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
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ń.
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 
-
SOYER
- Posts: 1623
- Joined: Wed Aug 10, 2022 12:29 pm
- Location: Kryry
- Been thanked: 2 times
Jest faktycznie.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ń.
"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
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
-
SOYER
- Posts: 1623
- Joined: Wed Aug 10, 2022 12:29 pm
- Location: Kryry
- Been thanked: 2 times
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!");
}"...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
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
-
SOYER
- Posts: 1623
- Joined: Wed Aug 10, 2022 12:29 pm
- Location: Kryry
- Been thanked: 2 times
Ok skompilowały się powiadomienia na MEGA, jest mega:).
Jutro testy.
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
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
-
klew
- Posts: 13908
- Joined: Thu Jun 27, 2019 12:16 pm
- Location: Wrocław
- Has thanked: 134 times
- Been thanked: 137 times
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.
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 
