351

Odp: Power Switch - najtańszy sterownik ON/OFF

Działa Cezary:

Oto całość:

if [ "$BUTTON" = "wps" ] ; then
        if [ "$ACTION" = "pressed" ] ; then
SW=$(crelay 1)
if [ "$SW" = "Relay 1 is on" ]; then
crelay 1 off
A=$(pidof sleep 600)
[ -n "$A" ] && kill -9 $A
exit 0
fi
if [ "$SW" = "Relay 1 is off" ]; then
(crelay 1 on; sleep 600; crelay 1 off) &
exit 0
fi
fi
fi

352

Odp: Power Switch - najtańszy sterownik ON/OFF

Cezary ale jeśli akurat cron np. będzie wykonywał jakieś polecenie z komendą sleep to ją również ubije. Czy da się jakąś komendą zrobić tak aby akurat znajdowało konkretny proces "sleep 600" a nie wszystkie sleepy jak leci. Czytałem turtoriala ale wpisanie np:

root@LEDE:~# pidof -s sleep 600
pidof: unrecognized option: s
BusyBox v1.25.1 () multi-call binary.

Usage: pidof [NAME]...

List PIDs of all processes with names that match NAMEs
root@LEDE:~#

Powoduje to co wyżej sad

353

Odp: Power Switch - najtańszy sterownik ON/OFF

A skąd wiesz który sleep 600 to własnie ten co chcesz? smile Poszukaj po czymś innym (np. crelay). Jezeli istnieje to go ubij. Albo zapamiętuj pid wykonywanego procesu (echo $! wykonane zaraz za tym poleceniem ze sleepem pokaże pid teg). Jak masz zapamiętany to możesz go ubić.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

354

Odp: Power Switch - najtańszy sterownik ON/OFF

Próbuję tak:

if [ "$BUTTON" = "wps" ] ; then
        if [ "$ACTION" = "pressed" ] ; then
SW=$(crelay 1)
if [ "$SW" = "Relay 1 is on" ]; then
crelay 1 off
kill $!
exit 0
fi
if [ "$SW" = "Relay 1 is off" ]; then
(crelay 1 on; sleep 600; echo $! ; crelay 1 off) &
exit 0
fi
fi
fi

I nie chce działać. Zapewne niewłaściwie interpretuje Twoje wskazówki...

355

Odp: Power Switch - najtańszy sterownik ON/OFF

No źle.
....
A=$(cat /tmp/tu-jest-pid)
[ -n "$A" ] && kill -9 $A
....
(crelay 1 on; sleep 600; crelay 1 off) &
echo $! > /tmp/tu-jest-pid
...

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

356

Odp: Power Switch - najtańszy sterownik ON/OFF

PS. Tylko powstawiaj to sobie w odpowiednie miejsca. Ja pisze z komórki, wiec mi zbytnio sie nie chce pisać całe skryptu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

357 (edytowany przez smereka 2018-11-08 13:57:10)

Odp: Power Switch - najtańszy sterownik ON/OFF

Ten skrypt:

if [ "$BUTTON" = "wps" ] ; then
        if [ "$ACTION" = "pressed" ] ; then
SW=$(crelay 1)
if [ "$SW" = "Relay 1 is on" ]; then
crelay 1 off
A=$(cat /tmp/tu-jest-pid)
[ -n "$A" ] && kill -9 $A
exit 0
fi
if [ "$SW" = "Relay 1 is off" ]; then
(crelay 1 on; sleep 600; crelay 1 off) &
echo $! > /tmp/tu-jest-pid
exit 0
fi
fi
fi

Powoduje, że zapisuje w temp numer procesu ale ten proces jak go podejrzę ma inny numer niż ten od sleep. I potem ten proces z tego numerku o nazwie:

{hotplug-call} /bin/sh /sbin/hotplug-call button

faktycznie zostaje ubity ale przekaźnik i tak działa. Dopiero jak dam kill i ten numer procesu tego sleep 600 to wówczas przekaźnik odpuszcza

Próbowałem zmodyfikować te skrypt na taki:


.......................................
(crelay 1 on; sleep 600; echo $! > /tmp/tu-jest-pid; crelay 1 off) &

Ale wówczas plik w tmp jest pusty sad

358

Odp: Power Switch - najtańszy sterownik ON/OFF

(crelay 1 on; sleep 600; crelay 1 off) & echo $! > /tmp/tu-jest-pid

Sprawdź.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

359 (edytowany przez smereka 2018-11-08 14:03:00)

Odp: Power Switch - najtańszy sterownik ON/OFF

Dalej w tym pliku loguje numer procesu którym po sprawdzeniu pod ps jest:

27393 root      1224 S    {hotplug-call} /bin/sh /sbin/hotplug-call button

natomiast sleep 600 jest pod

27399 root      1184 S    sleep 600


Może jakoś by oddzielić tego sleepa 600 od tych pozostały poleceń to może wtedy go zapamięta jako oddzielny proces...

360

Odp: Power Switch - najtańszy sterownik ON/OFF

Ok czyli tak nie będzie działać bo bierze pid procesu nadrzędnego.  Wróć do pierwotnego skryptu, ustaw sobie jakiś dziwny sleep np sleep 598 i jego po prostu szukaj. Prawdopodobieństwo że trafisz na drugi taki sam jest dość małe.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

361 (edytowany przez smereka 2018-11-08 14:12:15)

Odp: Power Switch - najtańszy sterownik ON/OFF

No tak właśnie próbowałem. Sęk w tym, że tamto:

A=$(pidof sleep 600)
[ -n "$A" ] && kill -9 $A


Ubija wszystkie sleepy

Czyli jak zrobię taki skrypt: (zwróć uwagę na specjalnie dane inne sleepy):

if [ "$BUTTON" = "wps" ] ; then
        if [ "$ACTION" = "pressed" ] ; then
SW=$(crelay 1)
if [ "$SW" = "Relay 1 is on" ]; then
crelay 1 off
A=$(pidof sleep 600)
[ -n "$A" ] && kill -9 $A
exit 0
fi
if [ "$SW" = "Relay 1 is off" ]; then
(crelay 1 on; sleep 598; crelay 1 off) &
fi
fi
fi

I tak ubija  tego 598

W cronie mam kilka innych sleepów do testowania między innymi pingu itp. Jeśli się tak trafi, że np ktoś z domowników załączy mi te przekaźniki w momencie wykonywania polecenia z crona to też mi go ubije jak dobrze rozumiem

362

Odp: Power Switch - najtańszy sterownik ON/OFF

Pakiet procps-ng-pgrep  sobie doinstaluj to będziesz zamiast pidof zrobić pgrep -f i dostaniesz tylko ten konkretny.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

363 (edytowany przez smereka 2018-11-08 14:26:50)

Odp: Power Switch - najtańszy sterownik ON/OFF

Dzięki Cezary. Wieczorem przetestuję na wndr4300 bo ma więcej miejsca. Przed chwilą próbowałem na wdr3600 ale niestety No space left on device. Jak wrócę do domu dam znać.

364 (edytowany przez smereka 2018-11-08 20:12:32)

Odp: Power Switch - najtańszy sterownik ON/OFF

Albo czegoś nie rozumiem albo źle robię sad:

root@OpenWrt:~# pgrep f sleep
pgrep: only one pattern can be provided
Try `pgrep --help' for more information.
root@OpenWrt:~# pgrep -f sleep
13611
root@OpenWrt:~# pgrep -f sleep 600
pgrep: only one pattern can be provided
Try `pgrep --help' for more information.
root@OpenWrt:~# pgrep sleep
13611
root@OpenWrt:~# pgrep -f sleep
13611
root@OpenWrt:~#

Nie działa to co po sleep....

365

Odp: Power Switch - najtańszy sterownik ON/OFF

Ale ty masz problem z googlami.

pgrep -f "sleep 600"

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

366 (edytowany przez smereka 2018-11-08 20:26:45)

Odp: Power Switch - najtańszy sterownik ON/OFF

Masz rację. Źle zastosowałem składnię. Zapomniałem o cudzysłowie. Działa teraz właściwie.

if [ "$BUTTON" = "wps" ] ; then
        if [ "$ACTION" = "pressed" ] ; then
SW=$(crelay 1)
if [ "$SW" = "Relay 1 is on" ]; then
crelay 1 off
A=$(pgrep -f "sleep 600")
[ -n "$A" ] && kill -9 $A
exit 0
fi
if [ "$SW" = "Relay 1 is off" ]; then
(crelay 1 on; sleep 600; crelay 1 off) &
fi
fi
fi

Jak zmienię tą linijkę

(crelay 1 on; sleep 698; crelay 1 off) &

To faktycznie nie ubija procesu 698 a to oznacza, ze faktycznie teraz znajduje właściwy proces
Dziękuję