Switch case do ster...
 
Powiadomienia
Wyczyść wszystko

Switch case do sterowania scenami

4 Wpisów
3 Użytkownicy
0 Reactions
1,216 Wyświetleń
(@fb_-janmatuszak)
Wpisów: 12
Praktykant
Autor tematu
 

Cześć wszystkim. Mój ESP-12E i cały zestaw zamówiony na Alliexpress na próby jest coraz bliżej, ja trochę, zwiększyłem zasób swojej wiedzy i małymi krokami zbliżam się do rozpoczęcia przygody ze sterowaniem wszelkimi urządzeniami w domu. 

Pierwszym projektem który chciałbym osiągnąć jest to aby za pomocą przycisku dzwonkowego (monostabilnego) sterować odpowiednimi scenami w OH. 

Domyślnie dla każdego z pomieszczeń chciałbym zrealizować odpowiednio sceny: OFF, Światło główne, światło główne + dekoracyjne, światło główne + dekoracyjne + światło poboczne, światło dekoracyjne+poboczne, światło dekoracyjne

Moje pytanie jest takie, czy ktoś z was realizował coś podobnego i chciałby podzielić się kodem funkcji która: za pomocą funkcji switch case zmienia wybór sceny, a dłuższe np. 2 sek naciśnięcie przycisku spowoduje powrót do sceny OFF. 

Czyli 0 - OFF, 1 - światło główne, 2 - światło główne + dekoracyjne itd.... długie przytrzymanie przycisku = OFF przy każdej konfiguracji.

 
Dodane : 23/02/2019 10:58 pm
adrian
(@adrian)
Wpisów: 4035
Szefu Admin Zasłużony dla Forum, Patron Strony
 

Wyjeżdżam na 4 dni - jak nikt nie odpowie to podsunę Ci pare pomysłów jak wrócę. 

Wnioskuje ze openhab ?

 
Dodane : 23/02/2019 11:56 pm
(@fb_-janmatuszak)
Wpisów: 12
Praktykant
Autor tematu
 

Witam. Dziękuję za zainteresowanie i odpowiedź. Tak jest. Wybór padł na openhab'a 2. 

 
Dodane : 24/02/2019 8:41 am
(@g_adrian)
Wpisów: 34
Praktykant
 

Moja propozycja. Przytrzymanie przycisku scene_switch poniżej 2s przełącza źródło światła, przytrzymanie przycisku powyżej 2s spowoduje wyłączenie wszystkich świateł.

.rules
rule "scene pressed"
when
Item scene_switch changed from OFF to ON
then
whenStarted=now.millis
end

rule "scene released"
when
Item scene_switch changed to OFF
then
val whenStopped = now.millis
val timeTaken = whenStopped-whenStarted

if (timeTaken < 2000) {
if (dekor.state==OFF && main.state==OFF && side_light.state==OFF) {
main.sendCommand(ON)
}
else if (dekor.state==OFF && main.state==ON && side_light.state==OFF){
dekor.sendCommand(ON)
}
else if (dekor.state==ON && main.state==ON && side_light.state==OFF) {
side_light.sendCommand(ON)
}
else if (dekor.state==ON && main.state==ON && side_light.state==ON) {
main.sendCommand(OFF)
}
else if (dekor.state==ON && main.state==OFF && side_light.state==ON) {
dekor.sendCommand(OFF)
}
else if (dekor.state==OFF && main.state==OFF && side_light.state==ON) {
side_light.sendCommand(OFF)
}
}
else if (timeTaken > 2000) {
dekor.sendCommand(OFF)
main.sendCommand(OFF)
side_light.sendCommand(OFF)
}
end
 
Dodane : 26/02/2019 2:22 pm
Udostępnij: