Odp: Power Switch - najtańszy sterownik ON/OFF
https://dl.eko.one.pl/projekty/usbrelay/hidapi/ czy działa nie wiem, opis jak tego używasz masz na stronie którą podałeś. Pakiet hidapi musisz dodatkowo zainstalować.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
eko.one.pl → Oprogramowanie / Software → Power Switch - najtańszy sterownik ON/OFF
Strony Poprzednia 1 … 12 13 14 15 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
https://dl.eko.one.pl/projekty/usbrelay/hidapi/ czy działa nie wiem, opis jak tego używasz masz na stronie którą podałeś. Pakiet hidapi musisz dodatkowo zainstalować.
Dla potomnych.U mnie z tym chińskim cudakiem zadziałało to:
https://openwrt.org/start?id=docs/guide … ion/crelay
Dzięki Cezary
Chciałbym osiągnąć cel w którym w routerze wndr4300 wciśnięcie przycisku wps powoduje wykonanie polecenia: crelay 1 on a jego ponowne wciśnięcie jeśli jest już załączony powoduje wyłącznie i na odwrót. Obsługę przycisku mam opanowaną umiem zrobić żeby włączył lub wyłączył ale nie umiem zrobić żeby odczytał stan. Polecenie które to realizuje w przykładzie poniżej:
root@OpenWrt:~# crelay 1 on #załącza przekaźnik
root@OpenWrt:~# crelay 1 #sprawdza stan
Relay 1 is on # to jest to co wyświetla się po wpisaniu crelay 1
Próbowałem tego:
if [ "$BUTTON" = "wps" ] ; then
if [ "$ACTION" = "pressed" ] ; then
SW=`uci -q get crelay 1 is`
if [ $SW == 'on' ]; then
uci set crelay 1 off
else
uci set crelay 1 on
fi
fi
fi
Niestety nie działa. Cezary pomożesz?
SW=$(crelay 1)
case "$SW" in
*on*)
crelay 1 off
;;
*off*)
crelay 1 on
;;
esacOd razu załącza i wyłącza
czyli póki trzymam to przekaźnik włączony jak puszczam to wyłącza się. A ja bym chciał że jak raz wcisnę to mi się załącza a następne wciśniecie go wyłącza. Lub jeśli jest załączony to wyłącza
To zrób inaczej:
SW=$(crelay 1)
if [ "$SW" = "Relay 1 is on" ]; then
crelay 1 off
exit 0
fi
if [ "$SW" = "Relay 1 is off" ]; then
crelay 1 on
exit 0
fi
Cezary sprawdziłem ten to samo realizuje co poprzedni
Ja też cały czas kombinuje ale mi nie wychodzi
Tam jest wyjście ze skryptu i nie ma co go znów ponownie przełączać. Jesteś pewien że nie wykonujesz skryptu dwa razy?
Zrób sobie
logger $BUTTON
logger $ACTION
echo $SW | logger
Przed pierwszym ifem i zobacz co będziesz miał w logu jak raz naciśniesz przycisk.
To się stało:
Tue Nov 6 22:09:25 2018 user.notice root: wps
Tue Nov 6 22:09:25 2018 user.notice root: pressed
Tue Nov 6 22:09:25 2018 user.notice root: Relay 1 is on
Tue Nov 6 22:09:25 2018 user.notice root: wps
Tue Nov 6 22:09:25 2018 user.notice root: released
Tue Nov 6 22:09:25 2018 user.notice root: Relay 1 is off
Czy masz źle skrypt zrobiony bo reaguje na naciśniecie i puszczenie. Gdzie masz if [ "$ACTION" = "pressed" ] ; then ?
Hmm ale to ja mam połączyć ten Twój skrypt mi zrobiłeś z czymś jeszcze bo zamotałem się troszeczkę?
Ja ci napisałem tylko środek, masz to przecież wsadzić w to co sam zrobiłeś:
if [ "$BUTTON" = "wps" ] ; then
if [ "$ACTION" = "pressed" ] ; then
... i tu umieszczasz to co jak napisałem.
fi
fi
Działa Cezary. Dziękuję. Bez Ciebie te forum by zginęło
Bardzo Ci dziękuję
To w takim razie napisz mi proszę jeszcze czy w ogóle jest to możliwe żeby zrobić coś takiego. Napiszę praktyczne rozwiązanie do którego dążę. W jednym budynku będzie stał router z tym przekaźnikiem. Chodzi o to, że z pierwszego budynku zasilany jest kolejny budynek ale tylko okazjonalnie. Generalnie aby podczas nieobecności nikt nie korzystał z gniazdek na zewnątrz, na chwile obecną wykręcany jest bezpiecznik z którego są zasilane tamte obwody. Już Twoje rozwiązanie odnośnie załączania i wyłączania działa. Teraz wyprowadzę sobie z routera przewody i podepnę to tytułowego przycisku-grzybka.Czy da się tak zrobić, że po wciśnięciu grzybka oprócz tego, że można go od razu wcisnąć i wyłączyć obwód to czy można jeszcze w to wcisnąć komendę sleep, żeby w razie zapomnienia router odliczył stosowny czas i zrobił crelay 1 off. Da się jakoś zmodyfikować skrypt?
Oczywiście zaraz odezwą się elektrycy - od razu sprostuję przekaźnik steruje stycznikiem o odpowiednik prądzie znamionowym stosownie obliczonym do obciążenia
(sleep 180; relay 1 off) &
Dla potomnych takie coś zadziałało:
if [ "$BUTTON" = "wps" ] ; then
if [ "$ACTION" = "pressed" ] ; then
SW=$(crelay 1)
if [ "$SW" = "Relay 1 is on" ]; then
crelay 1 off
exit 0
fi
if [ "$SW" = "Relay 1 is off" ]; then
(crelay 1 on; sleep 5; crelay 1 off) &
exit 0
fi
fi
fi
Cezary to troszkę odbiegnę od tematu ale niedaleko bo związany jest trochę z tym przekaźnikiem. Na początku wstęp. Załóżmy, że chcę tym odpalać pompę do podlewania ogrodu. Te chińskie cudo nie wie jaki był jego stan jeśli np router się zrestartuje. Zakładamy, ze podlewanie ma się odbywać codziennie w godzinach 12-16. Któregoś dnia o godzinie 13 wyłączają na 5 minut napięcie. Czy cron na podstawie przedziału czasowego jest w stanie wykonać zadania które jest w przedziale czasu w którym akurat router się uruchomił? Czy też będzie czekał do kolejnego zaplanowanego zadania?
Możesz sobie zapisywać flagę do flasha przy rozpoczęciu zadania, a po zakończeniu ją kasować. Po niespodziewanym restarcie sprawdzać jej istnienie podczas bootowania.
Nie, cron nie wie że coś miało być uruchomione czy że coś było uruchomione. Więc jak pisze przedmówca - musisz sobie sam zachowywać na stałe stan urządzenia.
Nowe wieści odnośnie Twojego skryptu Cezary. Jest jeden mankament na którego może będziesz znał lekarstwo. Otóż jeśli klikniemy ten przycisk na przykład w skrypcie komenda sleep ma 20 sekund. I teraz wcisnęliśmy przycisk i po 5 sekundach go wyłączyliśmy a po kolejnych 5 znowu załączyliśmy. Reakcja openwrt jest taka, że po tym ostatnim załączeniu przekaźnik działa jeszcze przez 10 sekund czyli tyle ile pozostało czasu od wykonania przedostatniego wciśnięcia. Jak wydam komendę ps to widze jeszcze przez te 10 sekund wpisy dotyczącego tego właśnie wciśnięcia. Na mój rozum to trzeba by było chyba coś zmienić aby ponowne wciśniecie przycisku powodowało zabicie poprzednie odliczania. Ewentualnie może inne jakieś rozwiązanie....Proszę o pomoc
No przecież ty to programujesz, więc działa tak jak zrobiłeś.
Pomyśl, jeżeli wciśniesz przycisk jeszcze raz to albo sprawdź czy czasami nie jest proces uruchomiony (ps, pidof) i go killuj, lub zignoruj wciśnięcie przycisku. Jak zrobisz tak będzie działało.
A jak wskazać dla openwrt który proces ma ubić? Nowe procesy dostają losowe numerki...
Masz go poszukać. I napisałem ci jak - np. poleceniami ps czy pidof
No dobra polecenie: "pidof sleep 600" (nastawione 600 sekund) wyświetla mi w konsoli numer procesu. Jak teraz mam w skrypcie zdefiniować żeby po wyświetleniu tego zrobił kill tego procesu
A=$(pidof sleep 600)
[ -n "$A" ] && kill -9 $A
i pewnie kilkanaście innych sposobów
Strony Poprzednia 1 … 12 13 14 15 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
eko.one.pl → Oprogramowanie / Software → Power Switch - najtańszy sterownik ON/OFF
Forum oparte o PunBB, wspierane przez Informer Technologies, Inc