1

Temat: "przypominacz" przez GG

jeżeli są tu jacyś leniwi sklerotycy (tacy jak ja), to pewnie się tym zaineresują wink

jeżeli nic nie spaprasz po drodze, to po wykonaniu wszystkich instrukcji router (albo inny zwierz z linuxem) będzie ci przypominał o czym tylko chcesz wink

wymagania:
- najprawdopodobniej ext-root
- maszyna z dostępem do sieci i działającą synchronizacją czasu
- ekg (konsolowe gg dla linuxa)
- numerek gg
- at (bardzo sprytny programik do planowania zadań)
- kilka (tak z 15) szarych komórek
- trochę czasu do zmarnowania wink

1. instalujemy ekg
w konsoli:

opkg update
opkg install ekg

2. konfigurujemy ekg
- uruchamiamy ekg wydając komende 'ekg'
- wydajemy komendę 'set uin <numerek_gg>' (np. 'set uin 1234567')
- następnie 'set password <hasło_do_konta>'
- 'set email <jaliś@tam.adres.com>'
- 'save'
- 'connect'
(oczywiście wszystko jest napisane i to po polsku)
jeżeli ekg podłączy się do serwera, to możemy z niego wyjść komendą 'quit'

3. instalujemy at

opkg install at

I z at jest problem, bo w OpenWrt zadania są przechowywane w pamięci operacyjnej, więc żeby at nam po restarcie pamiętał zaplanowane zadania musimy zrobić taki myk:
- tworzymy sobie katalog '/etc/at/atjobs'

mkdir /etc/at
mkdir -r 777 /etc/at/atjobs

- tworzymy drugi katalog '/etc/at/atspool'

mkdir -r 777 /etc/at/atspool

- tworzymy plik '/etc/at/atjobs/.SEQ' o zawartości 00000

echo 00000 > /etc/at/atjobs/.SEQ

- ustawiany uprawnienia szatańską komendą big_smile

chmod 666 /etc/at/atjobs/.SEQ

- modyfikujemy plik '/etc/init.d/atd', żeby wyglądał mniej więcej tak:

#!/bin/sh /etc/rc.common
# Copyright (C) 2008 OpenWrt.org
START=90

start() {
#    [ -d /var/spool/cron/atjobs ] || mkdir -p /var/spool/cron/atjobs
#    [ -d /var/spool/cron/atspool ] || mkdir -p /var/spool/cron/atspool
#    [ -f /var/spool/cron/atspool ] || > /var/spool/cron/atjobs/.SEQ
#    chown -R nobody:nogroup /var/spool/cron/atjobs /var/spool/cron/atspool
    ln -s /etc/at/atjobs /var/spool/cron/atjobs
    ln -s /etc/at/atspool /var/spool/cron/atspool
    sleep 5
    atd
}

stop() {
    killall atd
}

'sleep 5' dodałem bo parę razy mi się zdarzyło, ze atd uruchamiał się przed utworzeniem linków - dziwne....
- teraz uruchamiamy atd

/etc/init.d/atd enable
/etc/init.d/atd start

4. testujemy
- ekg z wiersza poleceń:

ekg msg <twój_nr_gg> 'treść wiadomości'

jeżeli przyszła wiadomość na Twoje gg, to ok. Jeżeli nie, to wracamy do konfiguracji ekg

- at
tu małe howto....
podstawowa składnia komendy at to 'at hh:mm [mm/dd/rrrr]'. data jest opcjonalna. jeżeli jej nie ma, zadanie zostanie wykonane o podanej godzinie w ciągu najbliższej doby.
Po wydaniu komendy pojawi nam się taki mini-edytor. możemy w nim napisać skrypt, czy co tam sobie chcemy. Po wklepaniu komend do wykonania wciskamy ALT+D, żeby opuścić edytor. wygląda to mniej więcej tak:

root@gate:/# at 12:00 1/12/2015
warning: commands will be executed using /bin/sh
at> /skrypty/skrypt.sh
at> <EOT>
job 18 at Mon Jan 12 12:00:00 2015
root@gate:/#

ten konkretny przykład uruchomi skrypt '/skrypty/skrypt.sh' 12-go stycznia 2015 o godzinie 12:00. proste, nie? wink

komenda 'at -l' wyświetla wszystkie zaplanowane zadania i ich numery.
komenda 'at -c <nr_zadania>' pokazuje szczegóły konkretnego zadania.
komenda 'atrm <numer_zadania>' usuwa zadanie.

- co do samego testowania, to prosta sprawa. planujemy zadanie ( np. 'ekg msg <numer> test') na "za parę minut" i czekamy (pamiętaj, ze ekg potrzebuje kilka sekund, żeby się zalogować). jeżeli działa, to jesteśmy w domu. jeżeli nie, to znowu wracamy do konfiguracji.

i tak na dobrą sprawę można by na tym skończyć, ale ponieważ jestem leniwy jak mało kto, napisałem sobie jeszcze super skomplikowany skrypt do szybkiego dodawania powiadomień:

#!/bin/ash
echo ekg msg 12345678 $2 | at $1

(zmienić 12345678 na swój nr gg)
nazwałem go  'przypomnij', wrzuciłem go do /bin i nadałem mu 777, wiec żeby dodać przypomnienie pisze sobie po prostu w terminalu na przykład:

przypomnij '12:00 1/1/2011' 'jeżeli czytasz tą wiadomość, to gratuluje - nie zapiłeś się na śmierć w Sylwestra :D'

Więcej grzechów nie pamiętam. Jak sobie przypomne, to nie omieszkam zaśmiecić forum wink

2

Odp: "przypominacz" przez GG

wyszło przy próbie pisania bota:
jeżeli odpalimy ekg w screenie w tle, definiując "rurke", nie musimy czekać na połączenie z serwerem przy każdej wiadomości.
komenda wygląda mniej-więcej tak:

screen -dmS quasidemon ekg -c /tmp/rurka.ekg

w takim przypadku wiadomości wysyła się pisząc do potoku. np:

echo "msg 123456 to jest wiadomość" > /tmp/rurka.ekg

plusem jest szybkość. ekg potrzebuje czasem kilkanaście sekund zeby się połączyć. minusy to konieczność instalacji screena i dodatkowe pracujące procesy.

w drugą stronę komunikację rozwiązałem przy pomocy skryptu parsującego plik historii(ale to już zupełnie nie na temat) wink

3

Odp: "przypominacz" przez GG

Drodzy,

Nie wiedziałem czy to w tym temacie mogę zawrzeć, ale interesuje mnie kwestia, czy można wykorzystać protokół GG na routerze, do powiadamiania np o spadku temperatury poniżej jakiegoś zakresu, co poskutkuje wysłaniem informacji na GG. Temperatura jest  generowana przez 1wire i zapisuje się do pliku temperature.txt co 5 minut. Załóżmy że na piecu ma być temperatura 46 stopni, w pewnym momencie kończy się paliwo i spada np. Do 42 i wtedy wysyłana jest automatyczna wiadomosc o niskiej temperaturze. Ew podobna zasada przy np. 70 stopni i więcej. Ze zagrożenie zwgotowania wody. Chciałbym to rozbudować później o panele grzewcze na wzór solarnych.

4

Odp: "przypominacz" przez GG

Proszę: http://eko.one.pl/?p=openwrt-gg

o ile znajdziesz jeszcze te programy i o ile sieć gg działa (bo nie mam pojęcia).

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

5

Odp: "przypominacz" przez GG

@Cezary Dzięki, natomiast GG już mam zainstalowane. Nie bardzo mogę znaleźć informacji, jak zczytywać z pliku ostatnią temperature i jesli jest ponizej jakiegos poziomu, wysyla monit na podany numer GG, że paliwo się kończy w piecu, czy coś w tym stylu. Jeśli to się uda zrobić, to będe chciał rozbudować to o sterowanie piecem i wysyłanie monitów

6 (edytowany przez Cezary 2016-02-07 19:01:09)

Odp: "przypominacz" przez GG

Ostatnią linię poda np. tail -n1 nazwa_pliku - zobacz w manualu o tym poleceniu. Jak już masz linię to możesz skryptem obrobić to, wyciągnąć co chcesz i porównać wartości ze sobą. Zwykły skrypt.

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

7

Odp: "przypominacz" przez GG

@Cezary

Próbuję to sobie jakoś poukładać, żeby wiedzieć jak to ugryźć. Tail faktycznie wywala mi ostatnią linie przez argument - n1. Niestety moja wiedza nt. Skryptów jest mocno uboga i  w sumie nie wiem od czego by zacząć.

Wiem że tail musi pobrać ostatnią linię która wygląda tak :

2016-02-07 22:30:02 41.88 

Teraz kolejna czynność to wartość ta musi być porównana z jakąś liczba i jeśli będzie mniejsza od X to uruchamia skrypt GG.sh z informacją że wygasa piec. Myślę teraz, że tail można by dodać do wpisu crona dotyczącego pobierania temperatury. Pytanie tylko czy muszę stworzyć kolejny plik żebym mógł porównać liczbę? Czy można to w jednym skrypcie i miejscu zrobić? Jeśli można to teraz kluczowe pytanie...  Jak

8

Odp: "przypominacz" przez GG

Podpowiedź:

A=$(echo "2016-02-07 22:30:02 41.88 " | awk '{print $3*100}'); if [ $A -lt 4500 ]; then echo "Temperatura poniżej 45!"; fi

Wykonaj to w konsoli i zobaczysz. Mnożone jest *100 bo porównywać w shellu możesz liczby całkowite tylko, inaczej się buntuje

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

9

Odp: "przypominacz" przez GG

@Cezary czytam teraz o podstawach skryptów. Już wiem jak wrzucać wynik z tail do osobnego pliku. Wiem że to najprostsza wiedza jednakże trzeba mocno przysiąść żeby ogarnąć. Dziękuję za cierpliwość i wyrozumiałość.

Teraz podczas pobierania wrzuca mi to do pliku wynik.txt

Rozumiem że mam z tego stworzyc skrypt?

10

Odp: "przypominacz" przez GG

Masz zrobić skrypt, tak.

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

11

Odp: "przypominacz" przez GG

@Cezary

moj gettemp.sh wygląda teraz tak

#!/bin/sh                                                                            
echo `digitemp_DS9097U -t 0 -q -o "%Y-%m-%d %H:%M:%S %.2C" | grep -v Found` >> /usr/s
bin/centralne/dane/temperature.txt                                                   
/usr/sbin/gnutemp.sh                                                                 
tail -n1 /usr/sbin/centralne/dane/temperature.txt > /usr/sbin/centralne/dane/wynik.txt             

Teraz żeby realizował powyższe założenie, jak wpisać podpowiedź od Ciebie, żeby działo się tak jak chcę?

A=$(echo "2016-02-07 22:30:02 41.88 " | awk '{print $3*100}'); if [ $A -lt 4500 ]; then echo "Temperatura poniżej 45!"; fi 

Dobrze myślę, że trzeba w skrypcie zawrzeć pobranie ostatniej wartości z pliku wynik.txt?

A=$(echo /usr/sbin/centralne/wynik.txt | awk '{print $3*100}'); if [ $A -lt 4500 ]; then echo "Temperatura poniżej 45!"; fi

Pewnie nie jest to takie proste hmm

12

Odp: "przypominacz" przez GG

Prawie:

A=$(tail -n1 /usr/sbin/centralne/wynik.txt | awk '{print $3*100}')
if [ $A -lt 4500 ]; then
  echo "Temperatura poniżej 45!"
fi

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

13

Odp: "przypominacz" przez GG

Teraz to wygląda tak

 
#/bin/sh                                                                                    
echo `digitemp_DS9097U -t 0 -q -o "%Y-%m-%d %H:%M:%S %.2C" | grep -v Found` >> /usr/sbin/cen
/usr/sbin/gnutemp.sh                                                                        
tail -n1 /usr/sbin/centralne/dane/temperature.txt > /usr/sbin/centralne/dane/wynik.txt      
A=$(tail -n1 /usr/sbin/centralne/dane/wynik.txt | awk '{print $3*100}')                     
if [ $A -lt 3800 ]; then                                                                    
  gg.sh koniec paliwa                                                                       
  fi                                                                                        
if [ $A -lt 3500 ]; then                                                                    
 gg.sh stan krytyczny                                                                       
                                                                                            
                                                                                            
  fi                                                                                        

Rozumiem że analogicznie można wykorzystać modem 3g jako bramkę SMS?

Cezary jesteś niezastąpiony smile

14

Odp: "przypominacz" przez GG

Możesz użyć dowolnego powiadomienia jaki chcesz i możesz zrobić.

Ten pierwszy tail jest zbędny, od razu możesz wstawić /usr/sbin/centralne/dane/temperature.txt  do polecenia.

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