Jakiś czas temu przy pomocy płytki Mega 2560 i poprzedniej wersji biblioteki Supli do Arduino zrobiłem oświetlenie w salonie. Wszystko działało poza tym że czasem jak znikało zasilanie zapalały się niektóre lampy .
Chciałem dodać do kodu przycisk action-tigger żeby dodatkowo sterować choinką. Niestety z braku odpowiedniej wiedzy nie zadziałało to jak trzeba.
Postanowiłem powrócić do wcześniejszej kompilacji
Lokalnie działa jak trzeba. Niestety po podpięciu lanu zapętla się i cały czas włącza i wyłącza wszystkie światła po kolei.
Próbowałem wygenerować nowy Guid i AUth. Niestety to nie pomaga.
W programie zdeklarowane mam 8 przekaźników a w chmurze jest widzianych 12 urządzeń do zdefiniowania, tak jak by część kodu z Action-tiger gdzieś została. (po dodaniu kodu do action-tiger dodało dwa nowe urządzenia do zdefiniowania w chmurze.)
Na pewno gdzieś mam błąd ale nie potrafię go zlokalizować.
Poniżej mój program ten co wcześniej działał przed aktualizacją biblioteki.
Code: Select all
#include <SuplaDevice.h>
#include <supla/control/relay.h>
#include <supla/control/button.h>
#include <supla/control/virtual_relay.h>
#include <supla/sensor/binary.h>
// Choose where Supla should store counter data in persistant memory
// We recommend to use external FRAM memory
#define STORAGE_OFFSET 100
#include <supla/storage/eeprom.h>
Supla::Eeprom eeprom(STORAGE_OFFSET);
// #include <supla/storage/fram_spi.h>
// Supla::FramSpi fram(STORAGE_OFFSET);
// Choose proper network interface for your card:
#ifdef ARDUINO_ARCH_AVR
// Arduino Mega with EthernetShield W5100:
#include <supla/network/ethernet_shield.h>
// Ethernet MAC address
uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
Supla::EthernetShield ethernet(mac);
#endif
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] = {xxxxx,xxxxx,xxxx,xxxx,xxx......};
// Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {xxxxx,xxxxx,xxxx,xxxx,xxx......}};
/*
* 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.
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// INSTRUKCJA PRZEKAŹNIKÓW (viewtopic.php?f=61&t=7263)
//auto r1 = new Supla::Control::Relay(x); // sterowany stanem wysokim -bez true, false -stan niskim
//r1->setDefaultStateOn(); // po uruchomieniu urządzenia, przekaźnik będzie włączony
//r1->setDefaultStateOff(); // po uruchomieniu urządzenia, przekażnik będzie wyłączony (domyślne ustawienie)
//r1->setDefaultStateRestore(); // po uruchomieniu urządzenia, przekaźnik wróci do stanu sprzed
// wyłączenia zasilania urządzenia (wymaga Storage)
//r1->keepTurnOnDuration(); // przekaźnik zapamięta czas wysłany ostatnio przez serwer i będzie używał go przy
// włączeniu przekaźnika z lokalnego przycisku, lub z kodu. Aby urządzenie
// zapamiętał czas włączenia, wymagany jest Storage. Bez Storage, czas
// będzie zapamiętany tylko do resetu.
//r1->turnOn(); // włącza przekaźnik. Jeśli mamy ustawione "keepTurnOnDuration", to zostanie użyty zapisany wcześniej czas włączenia
//r1->turnOn(czas_w_milisekundach); // włącza przekaźnik na określony czas
//r1->turnOff(); // wyłącza przekaźnik
//r1->toggle(); // przeałącza przekaźnik
//r1->isOn(); // zwraca true/false w zależności od tego czy przekaźnik jest włączony czy nie
// INSTRUKCJA BUTTON (viewtopic.php?f=61&t=7512)
//auto bx = new Supla::Control::Button (x, true ); //true dla pulldown
//bx->setHoldTime(1000); // po 1 s od przytrzymania przycisku zostanie wywołane zdarzenie ON_HOLD
//bx->setMulticlickTime(400 ); // program zlicza kliknięcia i po upływie 400 ms od puszczenia przycisku, wywoła odpowiednią akcję ON_CLICK_1 do ON_CLICK_9
//dla przekaźnika bistabilnego (włącz-wyłącz)
//bx->addAction(Supla::TOGGLE, r1, Supla::ON_PRESS);
//dla wielokliku (klik-włącza relay1,klik-przytrzymanie włącza relay1+realy2 ,kolejne przytrzymanie wyłacza relay1+realy2 )
//bx->addAction(Supla::TOGGLE, r1, Supla::ON_PRESS);
//bx->addAction(Supla::TOGGLE, r2, Supla::ON_HOLD);
//dla wielokliku (klik 1-włącza relay1, klik 2-włącza realy2)
//bx->addAction(Supla::TOGGLE, r1, Supla::ON_CLICK_1);
//bx->addAction(Supla::TOGGLE, r2, Supla::ON_HOLD);
//nie przezuca relay1 oraz ralay2 , po przytrzymaniu przezuca realy2 i relay1
//bx->addAction(Supla::TOGGLE, r1, Supla::ON_HOLD);
//bx->addAction(Supla::TOGGLE, r2, Supla::ON_HOLD);
//INSTRUKCJA OPISU PINÓW MEGA
// D0 i D1 - to uart dla połączenia USB - pojawiają się tam różne stany przy starcie więc lepiej ich nie używać.
// D13 - to niebieska dioda na płytce i sygnalizuje różne stany więc też odpada (chyba taki odpowiednik led config w ESP)
// D10 - pin wykorzystywany przez ethernet scheld (SS)
// D50,D51,D52- interfejs SPI wykorzystywany przec ethernet scheld i pamięć FRAM ( MISO,MOSI,SCK.)
// D53 - pin wykorzystywany standatdowo dla pamięci FRAM z interfejsem SPI (SS) - pozostałe piny magistrali wspólne z etchernet scheld.
///////////////////////////////////////////////////////////////
//SEKCJA PRZEKAŹNIKÓW OŚWIETLENIE SALON
///////////////////////////////////////////////////////////////
auto r0 = new Supla::Control::Relay(26, false); //1
auto r1 = new Supla::Control::Relay(27, false); //2
auto r2 = new Supla::Control::Relay(28, false); //3
auto r3 = new Supla::Control::Relay(29, false); //4
auto r4 = new Supla::Control::Relay(30, false); //5
auto r5 = new Supla::Control::Relay(31, false); //6
auto r6 = new Supla::Control::Relay(32, false); //7
auto r7 = new Supla::Control::Relay(33, false); //8
auto b0 = new Supla::Control::Button(17, true ); //1
b0->addAction(Supla::TOGGLE, r0, Supla::ON_PRESS);
auto b1 = new Supla::Control::Button(18, true ); //2
b1->addAction(Supla::TOGGLE, r1, Supla::ON_PRESS);
auto b2 = new Supla::Control::Button(19, true ); //3
b2->addAction(Supla::TOGGLE, r2, Supla::ON_PRESS);
auto b3 = new Supla::Control::Button(20, true ); //4
b3->addAction(Supla::TOGGLE, r3, Supla::ON_PRESS);
auto b4 = new Supla::Control::Button(21, true ); //5
b4->addAction(Supla::TOGGLE, r4, Supla::ON_PRESS);
auto b5 = new Supla::Control::Button(22, true ); //6
b5->addAction(Supla::TOGGLE, r5, Supla::ON_PRESS);
auto b6 = new Supla::Control::Button(23, true ); //7
b6->addAction(Supla::TOGGLE, r6, Supla::ON_PRESS);
auto b7 = new Supla::Control::Button(24, true ); //8
b7->addAction(Supla::TOGGLE, r7, Supla::ON_PRESS);
auto b8 = new Supla::Control::Button(16, true ); //9
b8->setMulticlickTime(200, true);
b8->addAction(Supla::TURN_OFF, r0, Supla::ON_CLICK_1);
b8->addAction(Supla::TURN_OFF, r1, Supla::ON_CLICK_1);
b8->addAction(Supla::TURN_OFF, r2, Supla::ON_CLICK_1);
b8->addAction(Supla::TURN_OFF, r3, Supla::ON_CLICK_1);
b8->addAction(Supla::TURN_OFF, r4, Supla::ON_CLICK_1);
b8->addAction(Supla::TURN_OFF, r5, Supla::ON_CLICK_1);
b8->addAction(Supla::TURN_OFF, r6, Supla::ON_CLICK_1);
b8->addAction(Supla::TURN_OFF, r7, Supla::ON_CLICK_1);
b8->addAction(Supla::TOGGLE, r6, Supla::ON_CLICK_2);
auto b9 = new Supla::Control::Button(15, true ); //10
b9->addAction(Supla::TURN_ON, r0, Supla::ON_PRESS);
b9->addAction(Supla::TURN_ON, r1, Supla::ON_PRESS);
b9->addAction(Supla::TURN_ON, r2, Supla::ON_PRESS);
b9->addAction(Supla::TURN_ON, r3, Supla::ON_PRESS);
b9->addAction(Supla::TURN_ON, r4, Supla::ON_PRESS);
b9->addAction(Supla::TURN_ON, r5, Supla::ON_PRESS);
/*
* Server address is available at https://cloud.supla.org
* If you do not have an account, you can create it at https://cloud.supla.org/account/create
* SUPLA and SUPLA CLOUD are free of charge
*/
SuplaDevice.setName("Salon");
SuplaDevice.begin(GUID, // Global Unique Identifier
"svrx.supla.org", // SUPLA server address
"[email protected]", // Email address used to login to Supla Cloud
AUTHKEY); // Authorization key
}
void loop() {
SuplaDevice.iterate();
}
Code: Select all
#include <supla/control/action_trigger.h>
// w setup:
auto relay = new Supla::Control::Relay(33);
auto button = new Supla::Control::Button(15, true, true);
auto at = new Supla::Control::ActionTrigger();
button->setMulticlickTime(800, false); // use true for bistable button
button->addAction(Supla::TOGGLE, relay, Supla::ON_CLICK_3);
at->setRelatedChannel(relay); // action trigger will show under relay channel in Cloud
at->attach(button);

