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.
Wyjeżdżam na 4 dni - jak nikt nie odpowie to podsunę Ci pare pomysłów jak wrócę.
Wnioskuje ze openhab ?
Witam. Dziękuję za zainteresowanie i odpowiedź. Tak jest. Wybór padł na openhab'a 2.
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