Cześć, temat poświęcony przykładowym .RULES.
Potrzebuję pomocy z tym skryptem
rule "PIR"
when
Item pir changed
then
if (pir.state == OPEN) {
sendCommand(sonoff_5, ON)
Thread::sleep(10)
}
else
{
sendCommand(sonoff_5, OFF)
}
end
I wyjaśniam:
Kiedy czujnik ruchu wykryje ruch
Wtedy włączy Sonoff 5, poczeka 10s
Jeśli już nie ma ruchu wtedy wył Sonoff_5
Problem mam w tym, że chciałbym aby ta reguła działała od wartości Sunset do Sunrise, czyli z pogody bierze mi zachód i wschód słońca (nie mam czujnika światła)
Pir jest zamontowany w przedpokoju gdzie jest włącznik scienny, nie wiem czy przy wykorzystaniu PIR w sumie jest potrzebny ale tutaj muszę jego funkcję przemyśleć, chyba że macie pomysł?
przy wł wł sciennego co powinno się wykonywać wł i wył światło a czujnik ruchu uśpiony np na 1min?
Np. to zmienić
var Number hour = now.getHourOfDay
if ((hour >= 22) || (hour <= 5)) {
// ... do stuff here
}
Trzeba dorobić item który z sunrise i sunset wybierze tylko godzinę? a co z minutami ? 🙁
czy item >= sunset ) || ( item <=sunrise, ale chyba to nie tak łątwe 😛
mam cos takiego zrobione na sunset i sunrise - wieczorkiem podesle jak bede w domu
jedna z reguł mam, że włącza mi pastucha elektrycznego na dachu bo mam agresywnego zwierzaka ktory mi zjada dach 😉
pastuch odpala sie na 1h przed zmrokiem i wyłącza pastucha 2h po świcie
I chyba mam dokładnie też taką regułę, z sunset + PIR + swiatło - na schodach.
Czego nie mam to jak długo mam swieciś się swiatło ma schodach. To mi reguluje sam PIR jak dostanie OPEN to trzyma go przez 20sek, a jak dostanie CLOSE to gasi mi światło inną regułą
Fajnie jakby timer był odnawialny 😉
Jesli widzi ruch zeruje timer i znowu x-sekund , chce uniknąć mikagnia światła jak timer upada a jestem dłużej w pomieszeniu.
Albo tak jak napisane wyzej ze trzyma 10s i sprawdza ponownie jesli Open znowu 10s jeśli close to wył 🙂
jestem zainteresowany zrobieniem czegos takiego, wiec zrobimy
na razie same odpalanie reguł powiązane z astro czyli wschodami / zachodami słońca
- po pierwsze używam astro binding w wersji 1 nie od openHab 2. Astro do openHAB 2 przestało działać z regułami po aktualizacji openHAB 2.1
- tego używam: Astro Binding (1.x) binding-astro1 - 1.10.0
- Binding skonfigurowany w /etc/openhab2/services
Konfigurujemy switch które dostają ON jak wystąp zdarzenie
// Rozpoczyna się wschód słońca
Switch becomes_bright {astro="planet=sun, type=rise, property=start"}
// 30 min przed rozpoczęciem zachodu słońca
Switch becomes_dark {astro="planet=sun, type=set, property=start, offset=-30"}
// 30 min po rozpoczęciu się zachodu słońca
Switch is_dark {astro="planet=sun, type=set, property=start, offset=30"}
// 60 min przed rozpoczęciem zachodu słońca
Switch hour_before_sunset {astro="planet=sun, type=set, property=start, offset=-60"}
tutaj
- type: set - zachód słońca, rise - wschód słońca i jest wile innych kombinacji np noc
- https://github.com/openhab/openhab1-addons/wiki/Astro-binding
- kolejność odpalania ; https://github.com/openhab/openhab1-addons/wiki/Astro-Binding---Schedules
- property: możliwości to start lub end i odpowiedni czy switch ma dostac ON na początku np. wschodu słońca (start) czy na końcu (end)
- offset: w minutach przesuwa odpalenie switch w jedną lub drugą stronę
przykładowe reguły
rule "Turn outside lights on"
when
Item is_dark received update ON
then
if (switch_outside_1A.state==OFF) { sendCommand(switch_outside_1A, ON) }
if (switch_outside_terrace_light.state==OFF) sendCommand(switch_outside_terrace_light,ON)
end
teraz w Twoim przypadku musisz pewnie zrobić dodatkowy item / switch który będzie miał stan ON w okresie kiedy chcesz zeby lampa zapalała się po wykrycia ruchu przez PIR
przyład: lampa ma zapalać się zawsze po wykryciu ruchu przez PIR i kiedy jest 60 min przez zachodem i 60 po wschodzie słońca
*.items
Switch zrobilo_sie_ciemno {astro="planet=sun, type=set, property=start, offset=-60"}
Switch zrobilo_sie_jasno {astro="planet=sun, type=rise, property=start, offset=60"}
Switch jest_ciemno
*.rules
rule "Ustaw jest ciemno"
when
Item zrobilo_sie_ciemno received update ON
then
postUpdate(jest_ciemno, ON) }
end
rule "Ustaw jest jasno"
when
Item zrobilo_sie_jasno received update ON
then
postUpdate(jest_ciemno, OFF) }
end
rule "PIR"
when
Item pir changed
then
if (jest_ciemno.state==ON && pir.state == OPEN) {
sendCommand(sonoff_5, ON)
Thread::sleep(10)
} else if (pir.state == CLOSED && sonoff_5.state == ON ) {
sendCommand(sonoff_5, OFF)
}
end
Ok dzięki 🙂 czytałem na necie jakieś przykłady ale w sumie ten jest ławy, podoba mi się też to
else if (pir.state == CLOSED && sonoff_5.state == ON )
Bo nie będzie mi migać (mam nadzieje bo zmieniam z 501 na 2x 505) a on nie ma regulacji podania czasu/sygnału po wykryciu ruchu. Ew jak nie będzie działać to Thread::sleep(10) będzie trzeba na jakiś timer zmienić, jesli wykryje ruch to doda do timer np 5s
Jeszcze inna beczka będę chciał zrobić .items -> switch i aktywacja wł wył daną regułę. I aktywacje tego przez ALEXA bo jest teraz możliwość dodania Rutines a tam już można wykryć w Smart Home switch z .items i wł/wył sceny 😉 np
Włączyć radio rano na Alexa + wł światła w sypialni na 40%.
adri@n masz pomysł jak zrobić w Basic UI powiadomienie np. Przez ostatnie 5 minut był wykryty ruch? 5,10,30,60min ? Albo W ostatnich X minutach był wykryty ruch i co 5 minut np do godziny czasu co kończy się Ostatni ruch ponad godzinę temu
pomyśle, ale tutaj trzeba będzie jaką kombinacje zrobić
Z tym zmierzchem nie zadziałało u mnie 🙁 zbyt często zapala się swiatło. I tutaj uwaga na przyszłość 😉 zmieniam koncepcję.
Korzystam z automatycznego wł/wył ( tzn będe bo jeszcze nie działa ) ale oddzielne światło pasek ledowy w przedpokoju z uwagi na to że przedpokój łaczy wszystko i zbyt często ktoś przechodzi a główne oświetlenie tak miga że.... :]
- Pasek ledowy ( ok 3-5 pasków na 2m) na czujnik ruchu
- Główne światło wł/wył z włącznika sciennego lub openhab/alexa Ale JEŚLI nie wykryje ruchu przez 1min to wył automatycznie światło.
I teraz przydały by się timery 😀
Adrian, może byś zrobił cały dział pod OpenHAB do Rules?
Ustalilibyśmy, że jeden temat jeden rules. Może stałaby się to kopalnia wiedzy.
Adrian, może byś zrobił cały dział pod OpenHAB do Rules?
Ustalilibyśmy, że jeden temat jeden rules. Może stałaby się to kopalnia wiedzy.
zrobione - ten temat już tam przesunięty, dzięki za sugestię.
Z tym zmierzchem nie zadziałało u mnie 🙁 zbyt często zapala się swiatło.
ale, problem był z samym zmierzchem czy już z PIR - jego lokalizacja, ruch dookoła?
Aktualnie zrobiłem coś takiego i testuję
rule "Wyl przedpokoju po 20s nie aktywnosci"
when
Item pir changed to CLOSED
then
Thread::sleep(20000)
if (pir.state == CLOSED && sonoff_5.state == ON ) {
sendCommand(sonoff_5, OFF)
}
end
Tylko nie wiem czy Thread::Sleep(20) to 20 sekund ? chyba powinno być 20000 ?
Aktualnie zdalnie wprowadziłem zmiany.
//Astro
Switch Night_State
Mam OpenHab nie zaktualizowany. Astro binding 2.1.0
.rules
rule "Aktywowanie sciany na ruch "
when
Item pir changed to OPEN
then
if (sonoff_6.state == OFF && sonoff_5.state == OFF && Night_State.state == ON) {
sendCommand(sonoff_10_status, ON)
sendCommand(sonoff_10, ON)
}
end
rule "OpenHAB system started - astro"
when System started
then createTimer(now.plusSeconds(180)) [ |
logInfo("RULE", "--> astro init") if (now.isAfter((SunsetTime.state as DateTimeType).calendar.timeInMillis) ||
now.isBefore((SunriseTime.state as DateTimeType).calendar.timeInMillis)
) {
logInfo("RULE", "--> Night_State ON") postUpdate(NightState, ON)
} else {
logInfo("RULE", "--> Night_State OFF") postUpdate(NightState, OFF)
}
]
end
rule "Update NightState"
when Item SunElevation changed
then
if(SunElevation.state > 0){ if(NightState.state != OFF) postUpdate(NightState, OFF)
} else {
if(NightState.state != ON) postUpdate(NightState, ON)
}
end
Jak wróce światło powinno się zapalać 😉 jeśli nie będzie to coś nie Halo :(. Po testach napiszę czy wsio ok.
A to też jest ciekawe
rule "Example Rule at sunrise"
when
Channel 'astro:sun:home:rise#event' triggered START
then
sendCommand(Switch_Landscape, OFF)
end
ja robię reguły na astro związane z oświetleniem w ten sposób
Przykład poniżej działa tak, że OH ma mi wyłączyć oświetlenie na zewnątrz 30 minut przed tym zanim rozpocznie się wschód słońca
1. Definiuje sobie w pliku konfiguracyjnym *.things - "rzecz" którą nazwałem day_state_becomes_bright - "robi się jasno"
Zdefiniowane : 30min przed tym zanim w mojej lokalizacji rozpocznie się wschód słońca
astro:sun:day_state_becomes_bright [ geolocation="52.xxxxxx,20.xxxxxxx", interval=60] {
Channels:
Type rangeEvent : rise#event [
offset=-30
]
}
a do tego mam regułę wyłączającą światła
rule "Turn off outside lights because it becomes bright"
when
Channel "astro:sun:day_state_becomes_bright:rise#event" triggered START
then
if (all_lights_outside.state!=OFF) sendCommand(all_lights_outside, OFF)
end
Kolejny problem 🙂
AFE T2 z Temp i wilgocią, dodatkowo kontaktron na GPIO3
RULES
rule "Brama Garażu open/close"
when
Item sonoff_garaz_status changed
then
sendBroadcastNotification("Brama Garażu Otwarta")
end
rule "Brama Garażu open/close"
when
Item sonoff_garaz changed to ON
then
sendBroadcastNotification("Brama Garażu Otwarta1")
end
rule "Garaz on-off do 1-0"
when
Item sonoff_garaz_status changed
then
if (sonoff_garaz_status.state.toString.contains("OFF")) {
postUpdate(sonoff_garaz_status_liczbowy, 0)
} else {
postUpdate(sonoff_garaz_status_liczbowy, 1)
}
end
rule "Garaz Status"
when
Item sonoff_garaz_status changed
then
if (sonoff_garaz_status.state!=sonoff_garaz.state) {
if (sonoff_garaz_status.state==ON) {
sendCommand(sonoff_garaz, ON)
} else {
sendCommand(sonoff_garaz, OFF)
}
}
end
rule "Garaz Status z garazu"
when
Item sonoff_garaz changed
then
if (sonoff_garaz.state!=sonoff_garaz_status.state) {
if (sonoff_garaz.state==ON) {
sendCommand(sonoff_garaz_status, ON)
} else {
sendCommand(sonoff_garaz_status, OFF)
}
}
end
ITEMS
Switch sonoff_garaz "[MAP(garaz.map):%s]" {mqtt=">[broker:/device/garaz/switch/cmd:command:on:on],>[broker:/device/garaz/switch/cmd:command:off:off]"}
Switch sonoff_garaz_status "[MAP(garaz.map):%s]" {mqtt=">[broker:/device/garaz/switch/state:state:on:on],>[broker:/device/garaz/switch/state:state:off:off]"}
Number sonoff_garaz_humidity "Bathroom Humidity [%.1f %%]" { mqtt="<[broker:/device/garaz/humidity:state:default]"}
Number sonoff_garaz_temperature "Bathroom Temperature [%.1f °C]" { mqtt="<[broker:/device/garaz/temperature:state:default]"}
Number sonoff_garaz_status_liczbowy
sonoff_garaz_status_liczbowy jest to grafany ( tak samo reguła )
sendBroadcastNotification w rules żeby mieć powiadomienia na telefon ( dwie bo testowałem czy duże ON czy małe działa 😀 )
I problem rozchodzi się że gdy na status w sitemaps czy coś ustawiam sonoff_garaz to nie aktualizuje się status, ale jak używał do swich sonoff_garaz_status to z Openhab działa, do grafany zapisuje itd. ale w garażu jak wł/wył manualnie po GPIO0 lub przez GPIO3 to status się nie zmienia ;( przez co jak steruję przez Openhab itd jest ok ale już z poziomu garazu to nie działa, kombinowałem itd czy ktoś może mi pomóc?
zmień > na < w .... _status
Switch sonoff_garaz_status "[MAP(garaz.map):%s]" {mqtt="<[broker:/device/garaz/switch/state:state:on:on],<[broker:/device/garaz/switch/state:state:off:off]"}
O to chodzi? niestety dalej nie działa :/ z Basic UI wszystko ok jak zmieniam status ale z sonoff nie mam info :/