UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Witam Serdecznie zapaleńców,
Od jakiegoś czasu zgłębiam tajniki Arduino w połączeniu z biblioteką MySensors oraz Domoticzem. Posiadam dwie płytki Arduino 2560 mega. Pierwsza płytka steruje oświetleniem wraz z ekspanderami pinów MCP23017 i działa to poprawnie. Druga płytka przygotowana jest pod rolety i również posiada powyższe ekspandery. Samo sterowanie roletami z poziomu Arduino działa poprawnie. Problemy mam z powiązaniem tego z domoticzem. Domowicz wykrywa rolety, ale tylko do ID 15. Są to rolety obsługiwane z pinów natywnych mikrokontrolera. Nie widać tych obsługiwanych przez ekspandery. W konfiguracji sprzętu (dodanego przez USB Gateway MySensors) widać wszystkie ID zadeklarowanych 21 rolet:
Lecz w zakładce z urządzeniami widać rolety tylko do ID 15 (te natywnie obsługiwane).
Pomyślałem, aby dodać nie wykryte rolety przez ręcznie wykrywanie w zakładce przełączniki, ale domoticz informuje, że urządzenie jest już dodane. Faktycznie uruchamiając nie wykrytą roletę z ID 16 (pinem wejściowym na Expanderze) domoticz wyświetla informację o zmianie statusu dla rolety ID 0. Dla ID 17 z ID 1 itp. Kolejnym krokiem było zweryfikowanie jakie rozkazy wysyłane są przez port USB. I tutaj również wszystko wygląda poprawnie. Zarówno deklaracja urządzeń jak i późniejsza komunikacja odbywa się z uwzględnieniem poprawnych ID.
Czy może miał ktoś z szanownych koleżanek i kolegów podobny przypadek? Weryfikowałem parokrotnie czy ID urządzeń się nie nakładają i nie znalazłem w komunikacji USB ani kodzie programu błędu aby dwa urządzenia posiadały taki sam ID.
Pozdrawiam
Tomek
Witam
nie wiem czy aktualne ale moje spostrzeżenie (dawno nie używałem mysensors po prostu działa i nie ruszam chwilowo)...
to co jest na liście "węzły" w konfiguracji sprzętu nie do końca ma przełożenie na to co się znajduje w zakładce z urządzeniami.
by urządzenie się tam pojawiło musi się przedstawić i podać swój stan.
po liście z portu szeregowego wygląda mi to jak byś sam pisał do niego nie przez bibliotekę mysensors zgadza się?(pytam z ciekawości bo jak biblioteka mysensors wysyła jeszcze dodatkowe dane a tu masz czysto. i jeśli tak jest to po prostu daj kod z arduino i poszukamy błędu)
możesz zrobić tak dodaj ten kod w programie w setup na końcu i zobacz czy się pojawi.
Serial.println("0;20;1;0;5;31"); // u ciebie jest ustawienie stanu 0;20;1;0;31;1 ale mi to nie pasuje ponieważ S_COVER = 5
V_UP = 29
V_DOWN = 30
V_STOP = 31
do czego zmierzam typ urządzenia cover = 5 polecenie stop =31 czyli 5;31
tylko dziwne, że działają inne...
daj znać omieść kod temat ciekawy
Witam i dzięki za zainteresowanie. Jak najbardziej korzystam z biblioteki MySensors (wesja 2.3.2). Po kolejnej weryfikacji kodu poszperałem trochę na zagranicznych forach. Znalazłem kilka wpisów użytkowników, którzy mają identyczny problem. Nie można dodać więcej niż 16 rolet do Domoticza. Wygląda to jakby tablica przechowująca zmienną "cover" była za krótka. Uruchamiając roletę 17 (fizycznie z arduino) w domoticzu sygnalizowana jest roleta 1 i tak dalej z kolejnymi numerami (tablica się zapętla). Postanowiłem uruchomić drugi serwer z wykorzystaniem Home Assistant'a (bardziej skomplikowany na początku, ale bardziej konfigurowalny i ładniejszy z wyglądu). Home Assistant wspiera bibliotekę MySensors. Po drobnych modyfikacjach kodu (np. prezentacja wszystkich urządzeń w głównej pętli loop() ) wszystkie rolety są widoczne i działają bez problemu. Co do MySensors mam wyłączoną opcję debug w kodzie programu dlatego nie wysyła dodatkowych informacji (nie są potrzebne). Obecnie rozbudowuję Home Assistant'a o kolejne sensory (temp, wilg itp). Co do kodu programu jest strasznie długi (nie korzystałem z pętli do generowania kolejnych rolet). Jeśli będą osoby zainteresowane mogę wrzucić okrojoną wersję z jedną roletą (kolejne rolety to powielenie tego samego).
Pozdrawiam
Tomek
Witam,
jestem zainteresowany przykładem doku do Arduino zarówno do obsługi oświetlenia jak również dla rolet. Na razie dość mocno zraziłem się do ESP i chyba przejdę na Arduino Mega. Będę bardzo wdzięczny za dobrze jak widzę działający przykład.
Witam,
Poniżej kod dla jednej rolety (będzie bardziej czytelny), dla kolejnych wystarczy je powielić. Należy oczywiście zwrócić uwagę na unikalną numeracją rolet oraz pinów I/O.
Pozdrawiam
Tomek
// Enable debug prints to serial monitor
//#define MY_DEBUG
#define MY_NODE_ID 98
// Enable and select radio type attached
//#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69
// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
//#define MY_RF24_PA_LEVEL RF24_PA_LOW
// Enable serial gateway
#define MY_GATEWAY_SERIAL
// Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
#if F_CPU == 8000000L
#define MY_BAUD_RATE 38400
#endif
// Flash leds on rx/tx/err
// #define MY_LEDS_BLINKING_FEATURE
// Set blinking period
// #define MY_DEFAULT_LED_BLINK_PERIOD 300
// Inverses the behavior of leds
// #define MY_WITH_LEDS_BLINKING_INVERSE
// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE
// Enable Inclusion mode button on gateway
#define MY_INCLUSION_BUTTON_FEATURE
// Inverses behavior of inclusion button (if using external pullup)
//#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
// Set inclusion mode duration (in seconds)
#define MY_INCLUSION_MODE_DURATION 60
// Digital pin used for inclusion mode button
#define MY_INCLUSION_MODE_BUTTON_PIN A1
// Uncomment to override default HW configurations
//#define MY_DEFAULT_ERR_LED_PIN 4 // Error led pin
//#define MY_DEFAULT_RX_LED_PIN 6 // Receive led pin
//#define MY_DEFAULT_TX_LED_PIN 5 // the PCB, on board LED
#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>
// Enable repeater functionality for this node
#define MY_REPEATER_FEATURE
//Ogolna definacja jakim stanem wlaczany jest przekaznik w tym przypadku zalaczany jest 1
#define RELAY_ON 1 // GPIO value to write to turn on attached relay
#define RELAY_OFF 0 // GPIO value to write to turn off attached relay
//Definicja włączników światła dla zespołu przekaźników (liczone od prawej od samego dołu)
//Sposób opisywanie buttonow B-button, P0,1,2-poziom_budynku, Miejsce, sw-światło, 1,2 lewe_prawe,_PORT_A11 (nr portu)
//Sposób opisywania relay R-Relay, P0,1,2-poziom_budynku, Miejsce, sw-światło, 1,2 lewe_prawe,_PORT_A11 (nr portu)
//UWAGA UNIKAMY PIN 0,1, 20,21
//Uwaga STATUS ---- 0=cover is down, 1=cover is up
// czyli np C_R_P0_PRZEDSIONEK_ROL1_UP = 0 rol down
//P0_PRZEDSIONEK_ROL1
#define ID_P0_PRZEDSIONEK_ROL1 0 //Id przekąźnika oraz pamięc położenia rolety 0% (close) - 100% (up) zapisywana w pamięci stałej.
#define B_P0_PRZEDSIONEK_ROL1_DOWN A2
#define R_P0_PRZEDSIONEK_ROL1_DOWN 2
Bounce BO_B_P0_PRZEDSIONEK_ROL1_DOWN = Bounce();
#define B_P0_PRZEDSIONEK_ROL1_UP A3
#define R_P0_PRZEDSIONEK_ROL1_UP 3
Bounce BO_B_P0_PRZEDSIONEK_ROL1_UP = Bounce();
unsigned short STATUS_P0_PRZEDSIONEK_ROL1 = 0; //0-Stop, 1-Down, 2-Up
unsigned long FULL_TIME_P0_PRZEDSIONEK_ROL1 = 12000; //czas do zamkniecia/otwarcia całkowitego rolety - ms
unsigned long PREV_TIME_P0_PRZEDSIONEK_ROL1;
unsigned long TEMP_TIME_P0_PRZEDSIONEK_ROL1 = 0;
unsigned long OFFSET_TIME_P0_PRZEDSIONEK_ROL1 = 2000; //ms offset
//Wszelkie połączenia z urządzeniami zewnętrzymi, przed uruchomieniem mysensors
void before()
{
}
//Prezentacja przekaźników dla domoticza
void presentation()
{
sendSketchInfo("Ard_2", "2.1");
//ZESPOL 1 ----
present(ID_P0_PRZEDSIONEK_ROL1, S_COVER, "P0_PRZEDSIONEK_ROL1");
}
void setup()
{
delay(1000);
//ZESPOL 1 ----
//Ustawianie button P0_PRZEDSIONEK_ROL1_
//*** DOWN ***
pinMode(R_P0_PRZEDSIONEK_ROL1_DOWN,OUTPUT);
pinMode(B_P0_PRZEDSIONEK_ROL1_DOWN, INPUT_PULLUP);
BO_B_P0_PRZEDSIONEK_ROL1_DOWN.attach(B_P0_PRZEDSIONEK_ROL1_DOWN);
BO_B_P0_PRZEDSIONEK_ROL1_DOWN.interval(5);
//*** UP ***
pinMode(R_P0_PRZEDSIONEK_ROL1_UP,OUTPUT);
pinMode(B_P0_PRZEDSIONEK_ROL1_UP, INPUT_PULLUP);
BO_B_P0_PRZEDSIONEK_ROL1_UP.attach(B_P0_PRZEDSIONEK_ROL1_UP);
BO_B_P0_PRZEDSIONEK_ROL1_UP.interval(5);
//Zerowanie pinów wyj.
digitalWrite(R_P0_PRZEDSIONEK_ROL1_DOWN, RELAY_OFF);
digitalWrite(R_P0_PRZEDSIONEK_ROL1_UP, RELAY_OFF);
}
//definicja wiadomości - przekazywane dla domoticza
//ZESPOL 1 ---
MyMessage msg_P0_PRZEDSIONEK_ROL1_UP(ID_P0_PRZEDSIONEK_ROL1, V_UP);
MyMessage msg_P0_PRZEDSIONEK_ROL1_DOWN(ID_P0_PRZEDSIONEK_ROL1, V_DOWN);
MyMessage msg_P0_PRZEDSIONEK_ROL1_STOP(ID_P0_PRZEDSIONEK_ROL1, V_STOP);
MyMessage msg_P0_PRZEDSIONEK_ROL1_PERC(ID_P0_PRZEDSIONEK_ROL1, V_PERCENTAGE);
//ZESPOL 3 ---
void run_once()
{
send(msg_P0_PRZEDSIONEK_ROL1_UP.set(1));
send(msg_P0_PRZEDSIONEK_ROL1_DOWN.set(1));
send(msg_P0_PRZEDSIONEK_ROL1_STOP.set(1));
send(msg_P0_PRZEDSIONEK_ROL1_PERC.set(loadState(ID_P0_PRZEDSIONEK_ROL1)));
}
void cover_perc_down_up(unsigned short ID_COVER, unsigned short &STATUS_COVER, unsigned short R_COVER_DOWN, unsigned short R_COVER_UP, MyMessage msg_COVER_DOWN, MyMessage msg_COVER_UP,
MyMessage msg_COVER_STOP, MyMessage msg_COVER_PERC, unsigned short TARGET_PERC,
unsigned long FULL_TIME_COVER, unsigned long &PREV_TIME_COVER, unsigned long OFFSET_TIME_COVER, unsigned long &TEMP_TIME_COVER)
{
//Relay is up or down already
if(STATUS_COVER != 0)
{
time_to_stop(STATUS_COVER, R_COVER_DOWN, R_COVER_UP, msg_COVER_STOP, msg_COVER_PERC, ID_COVER, PREV_TIME_COVER, FULL_TIME_COVER, OFFSET_TIME_COVER, TEMP_TIME_COVER);
}
else
{
unsigned short cover_percentage = loadState(ID_COVER);
if(cover_percentage > TARGET_PERC) //DOWN
{
cover_down_up(ID_COVER, true, STATUS_COVER, R_COVER_DOWN, R_COVER_UP, msg_COVER_DOWN, msg_COVER_UP, msg_COVER_STOP, msg_COVER_PERC , FULL_TIME_COVER, PREV_TIME_COVER, OFFSET_TIME_COVER, TEMP_TIME_COVER);
TEMP_TIME_COVER = ((cover_percentage - TARGET_PERC)*(FULL_TIME_COVER - OFFSET_TIME_COVER))/100;
}
if(cover_percentage < TARGET_PERC) //UP
{
cover_down_up(ID_COVER, false, STATUS_COVER, R_COVER_DOWN, R_COVER_UP, msg_COVER_DOWN, msg_COVER_UP, msg_COVER_STOP, msg_COVER_PERC , FULL_TIME_COVER, PREV_TIME_COVER, OFFSET_TIME_COVER, TEMP_TIME_COVER);
TEMP_TIME_COVER = ((TARGET_PERC - cover_percentage)*(FULL_TIME_COVER - OFFSET_TIME_COVER))/100;
}
if(cover_percentage == TARGET_PERC) //STOP
{
TEMP_TIME_COVER = 0;
}
if(TARGET_PERC == 100 || TARGET_PERC == 0) // Full open or close
{
TEMP_TIME_COVER += OFFSET_TIME_COVER; //Dodajemy czas offset dla pewności o całkoitym zamknięciu/otwarciu
}
}
}
void time_to_stop(unsigned short &STATUS_COVER, unsigned short R_COVER_DOWN, unsigned short R_COVER_UP, MyMessage msg_COVER_STOP, MyMessage msg_COVER_PERC, unsigned short ID_COVER, unsigned long PREV_TIME_COVER, unsigned long FULL_TIME_COVER, unsigned long OFFSET_TIME_COVER, unsigned long &TEMP_TIME_COVER)
{
unsigned long current_time = millis();
//check percent time
if(STATUS_COVER != 0)
{
if(TEMP_TIME_COVER > 0)
{
if(current_time - PREV_TIME_COVER > TEMP_TIME_COVER)
{
cover_stop(ID_COVER, STATUS_COVER, R_COVER_DOWN, R_COVER_UP, msg_COVER_STOP, msg_COVER_PERC, FULL_TIME_COVER, PREV_TIME_COVER, OFFSET_TIME_COVER, TEMP_TIME_COVER);
}
}
}
if(STATUS_COVER == 1) //Cover DOWN
{
//check total time
if(current_time - PREV_TIME_COVER > FULL_TIME_COVER)
{
digitalWrite(R_COVER_DOWN, RELAY_OFF);
digitalWrite(R_COVER_UP, RELAY_OFF);
saveState(ID_COVER,0); // COVER closed percentage 0
send(msg_COVER_PERC.set(loadState(ID_COVER)));
STATUS_COVER = 0;
TEMP_TIME_COVER = 0;
}
}
if(STATUS_COVER == 2) //Cover UP
{
if(current_time - PREV_TIME_COVER > FULL_TIME_COVER)
{
digitalWrite(R_COVER_DOWN, RELAY_OFF);
digitalWrite(R_COVER_UP, RELAY_OFF);
saveState(ID_COVER,100); // COVER open percentage 100
send(msg_COVER_PERC.set(loadState(ID_COVER)));
STATUS_COVER = 0;
TEMP_TIME_COVER = 0;
}
}
}
void time_percentage(unsigned long FULL_TIME_COVER, unsigned long OFFSET_TIME_COVER, unsigned long PREV_TIME_COVER, unsigned short ID_COVER, MyMessage msg_COVER_PERC, bool Is_DOWN)
{
unsigned short temp = ((millis() - PREV_TIME_COVER)*100)/(FULL_TIME_COVER - OFFSET_TIME_COVER);
if(Is_DOWN == true) //IF cover down
{
if(loadState(ID_COVER) < temp)
{
saveState(ID_COVER, 0); // Closed
}
else
{
saveState(ID_COVER,(loadState(ID_COVER) - temp));
}
}
else //Open
{
if(loadState(ID_COVER) + temp >100)
{
saveState(ID_COVER, 100); // Closed
}
else
{
saveState(ID_COVER,(loadState(ID_COVER) + temp));
}
}
send(msg_COVER_PERC.set(loadState(ID_COVER)));
}
void cover_stop(unsigned short ID_COVER, unsigned short &STATUS_COVER, unsigned short R_COVER_DOWN, unsigned short R_COVER_UP,MyMessage msg_COVER_STOP, MyMessage msg_COVER_PERC ,
unsigned long FULL_TIME_COVER, unsigned long PREV_TIME_COVER, unsigned long OFFSET_TIME_COVER, unsigned long &TEMP_TIME_COVER)
{
digitalWrite(R_COVER_UP, RELAY_OFF);
digitalWrite(R_COVER_DOWN, RELAY_OFF);
send(msg_COVER_STOP.set(1));
if(STATUS_COVER == 1) //already down, so percent send
{
time_percentage(FULL_TIME_COVER, OFFSET_TIME_COVER, PREV_TIME_COVER, ID_COVER, msg_COVER_PERC, true);
}
if(STATUS_COVER == 2) //already up, so percent send
{
time_percentage(FULL_TIME_COVER, OFFSET_TIME_COVER, PREV_TIME_COVER, ID_COVER, msg_COVER_PERC, false);
}
STATUS_COVER = 0; // STOP
TEMP_TIME_COVER = 0;
}
void cover_down_up(unsigned short ID_COVER, bool Is_DOWN, unsigned short &STATUS_COVER, unsigned short R_COVER_DOWN, unsigned short R_COVER_UP, MyMessage msg_COVER_DOWN, MyMessage msg_COVER_UP,
MyMessage msg_COVER_STOP, MyMessage msg_COVER_PERC , unsigned long FULL_TIME_COVER, unsigned long &PREV_TIME_COVER, unsigned long OFFSET_TIME_COVER, unsigned long &TEMP_TIME_COVER)
{
if(STATUS_COVER !=0) //already down or up then stop.
{
cover_stop(ID_COVER, STATUS_COVER, R_COVER_DOWN, R_COVER_UP, msg_COVER_STOP, msg_COVER_PERC, FULL_TIME_COVER, PREV_TIME_COVER, OFFSET_TIME_COVER, TEMP_TIME_COVER);
}
else
{
if(Is_DOWN) //cover down
{
digitalWrite(R_COVER_UP, RELAY_OFF);
digitalWrite(R_COVER_DOWN, RELAY_ON);
send(msg_COVER_DOWN.set(1));
STATUS_COVER = 1; // DOWN
PREV_TIME_COVER = millis();
}
else //cover up
{
digitalWrite(R_COVER_DOWN, RELAY_OFF);
digitalWrite(R_COVER_UP, RELAY_ON);
send(msg_COVER_UP.set(1));
STATUS_COVER = 2; // UP
PREV_TIME_COVER = millis();
}
}
}
bool initialValueSent = false;
//currentTime = millis();
void loop()
{
//Uruchomione raz do inicjalizacji dla HA
if(!initialValueSent)
{
run_once();
initialValueSent = true;
}
//***** P0_PRZEDSIONEK_ROL1 *****//
//DOWN
if(BO_B_P0_PRZEDSIONEK_ROL1_DOWN.update())
{
if(BO_B_P0_PRZEDSIONEK_ROL1_DOWN.read() == LOW)
{
cover_down_up(ID_P0_PRZEDSIONEK_ROL1, true, STATUS_P0_PRZEDSIONEK_ROL1, R_P0_PRZEDSIONEK_ROL1_DOWN, R_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_DOWN,
msg_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_STOP, msg_P0_PRZEDSIONEK_ROL1_PERC , FULL_TIME_P0_PRZEDSIONEK_ROL1, PREV_TIME_P0_PRZEDSIONEK_ROL1, OFFSET_TIME_P0_PRZEDSIONEK_ROL1, TEMP_TIME_P0_PRZEDSIONEK_ROL1);
}
}
//UP
if(BO_B_P0_PRZEDSIONEK_ROL1_UP.update())
{
if(BO_B_P0_PRZEDSIONEK_ROL1_UP.read() == LOW)
{
cover_down_up(ID_P0_PRZEDSIONEK_ROL1, false, STATUS_P0_PRZEDSIONEK_ROL1, R_P0_PRZEDSIONEK_ROL1_DOWN, R_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_DOWN,
msg_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_STOP, msg_P0_PRZEDSIONEK_ROL1_PERC , FULL_TIME_P0_PRZEDSIONEK_ROL1, PREV_TIME_P0_PRZEDSIONEK_ROL1, OFFSET_TIME_P0_PRZEDSIONEK_ROL1, TEMP_TIME_P0_PRZEDSIONEK_ROL1);
}
}
// Time check
time_to_stop(STATUS_P0_PRZEDSIONEK_ROL1, R_P0_PRZEDSIONEK_ROL1_DOWN, R_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_STOP, msg_P0_PRZEDSIONEK_ROL1_PERC, ID_P0_PRZEDSIONEK_ROL1, PREV_TIME_P0_PRZEDSIONEK_ROL1, FULL_TIME_P0_PRZEDSIONEK_ROL1, OFFSET_TIME_P0_PRZEDSIONEK_ROL1, TEMP_TIME_P0_PRZEDSIONEK_ROL1);
//_______________________________________
}//main loop()
void receive(const MyMessage &message)
{
// We only expect one type of message from controller. But we better check anyway.
// ACK for initial sent
if (message.type == V_STATUS)
{
if (!initialValueSent)
{
initialValueSent = true;
}
}
if (message.type==V_UP)
{
//Zespół 1
if(message.sensor==ID_P0_PRZEDSIONEK_ROL1)
{
cover_down_up(ID_P0_PRZEDSIONEK_ROL1, false, STATUS_P0_PRZEDSIONEK_ROL1, R_P0_PRZEDSIONEK_ROL1_DOWN, R_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_DOWN,
msg_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_STOP, msg_P0_PRZEDSIONEK_ROL1_PERC , FULL_TIME_P0_PRZEDSIONEK_ROL1, PREV_TIME_P0_PRZEDSIONEK_ROL1, OFFSET_TIME_P0_PRZEDSIONEK_ROL1, TEMP_TIME_P0_PRZEDSIONEK_ROL1);
}
}
if (message.type==V_DOWN)
{
//Zespół 1
if(message.sensor==ID_P0_PRZEDSIONEK_ROL1)
{
cover_down_up(ID_P0_PRZEDSIONEK_ROL1, true, STATUS_P0_PRZEDSIONEK_ROL1, R_P0_PRZEDSIONEK_ROL1_DOWN, R_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_DOWN,
msg_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_STOP, msg_P0_PRZEDSIONEK_ROL1_PERC , FULL_TIME_P0_PRZEDSIONEK_ROL1, PREV_TIME_P0_PRZEDSIONEK_ROL1, OFFSET_TIME_P0_PRZEDSIONEK_ROL1, TEMP_TIME_P0_PRZEDSIONEK_ROL1);
}
}
if (message.type==V_STOP)
{
if(message.sensor==ID_P0_PRZEDSIONEK_ROL1)
{
cover_stop(ID_P0_PRZEDSIONEK_ROL1, STATUS_P0_PRZEDSIONEK_ROL1, R_P0_PRZEDSIONEK_ROL1_DOWN, R_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_STOP, msg_P0_PRZEDSIONEK_ROL1_PERC, FULL_TIME_P0_PRZEDSIONEK_ROL1,
PREV_TIME_P0_PRZEDSIONEK_ROL1, OFFSET_TIME_P0_PRZEDSIONEK_ROL1, TEMP_TIME_P0_PRZEDSIONEK_ROL1);
}
}
if (message.type==V_PERCENTAGE)
{
if(message.sensor==ID_P0_PRZEDSIONEK_ROL1)
{
cover_perc_down_up(ID_P0_PRZEDSIONEK_ROL1, STATUS_P0_PRZEDSIONEK_ROL1, R_P0_PRZEDSIONEK_ROL1_DOWN, R_P0_PRZEDSIONEK_ROL1_UP, msg_P0_PRZEDSIONEK_ROL1_DOWN, msg_P0_PRZEDSIONEK_ROL1_UP,
msg_P0_PRZEDSIONEK_ROL1_STOP, msg_P0_PRZEDSIONEK_ROL1_PERC, message.getByte(), FULL_TIME_P0_PRZEDSIONEK_ROL1, PREV_TIME_P0_PRZEDSIONEK_ROL1, OFFSET_TIME_P0_PRZEDSIONEK_ROL1, TEMP_TIME_P0_PRZEDSIONEK_ROL1);
}
}
}
Bardzo dziękuję. Może w weekend uda się sprawdzić ten przykład na mojej płytce.
Cześć, pozwolę sobie odgrzać tego kotleta..
Wrzuciłem powyższy szkic do Arduino. Połączyłem Arduino z Domoticzem, i zamiast jednego urządzenia (rolety) widzę dwa: roleta i światło.
Czy coś muszę jeszcze w Domoticzu poprawić? Może jakieś sub device ustawić?
Pozdrawiam, Kamil