Temat: arduino+openWRT+sms

Muszę zrobić coś takiego.
Przesyłam poprzez arduino leonardo podłączone do poru USB routera komendę np "sms1".
Router odbiera transmisję i wysyła przypisanego sms-a na telefon.
Musi być co najmniej 30 różnych sms-ów i 5 telefonów na które wysyłamy.
Arduino mam oprogramowane.
Router odbiera transmisje.
Wiem, że powinienem napisać skrypt, który odbierze z portu komendę i wyśle określonego sms-a.
Niestety w skryptach raczkuje. Jak można proszę o pomoc.

2

Odp: arduino+openWRT+sms

Polecenie jest tekstowo?

CMD=$(cat /dev/ttyUSB0)
if [ $CMD = "costam" ]; then
  wyslij_sms...
fi

Google dużo o skryptach podowie.

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

3

Odp: arduino+openWRT+sms

OK rozumie.
Tylko gdzie mam taki plik ze skryptem umieścić żeby po wysłaniu komendy na port routera od razy się wykonał.

4

Odp: arduino+openWRT+sms

Np. w /etc/rc.local musisz umieścić jego wywołanie i żeby wykonywał się cały czas w tle.

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

5

Odp: arduino+openWRT+sms

Czyli jeżeli umieszczę go tam to wystarczy, czy muszę jeszcze coś zrobić żeby wykonywał się cały czas?

6

Odp: arduino+openWRT+sms

Musi się wykonywać cały czas. No chyba że chcesz żeby się wykonał jeden raz tylko.

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

7

Odp: arduino+openWRT+sms

Jak odbierze komendę ma wysłać sms-a i czekać na kolejną komendę. Komend może być kilka i mogą się powtarzać. Załóżmy że komenda przychodzi raz na kilka lub kilkanaście sekund, może być też przerwa kilku godzin bez komend.

8

Odp: arduino+openWRT+sms

Mam jeszcze jedno pytanie. Czy router może przegapić wysłaną komendę? Jeżeli tak to jak można się przed tym zabezpieczyć.

9

Odp: arduino+openWRT+sms

Musisz cały czas nasłuchiwać na polecenia po prostu.

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

10

Odp: arduino+openWRT+sms

Ostatnie pytanie.
Czy nie można zrobić tak jak przy obsłudze mikroprocesorów, czyli jeżeli coś przyjdzie na port uruchomi się procedura obsługi przerwania od takiego zdarzenia i wywoła skrypt.

11

Odp: arduino+openWRT+sms

Jak sobie napiszesz. Dokładnie to co pisałem wcześniej: musisz sobie oprogramować to, coś co słucha i cyklicznie odbiera dane. Jak jesteś dobry to napiszesz sobie i moduł kernela która na przerwania obsługuje.

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

12

Odp: arduino+openWRT+sms

Próbuję uruchomić taki skrypt

#!/bin/sh
CMD=$(cat /dev/ttyACM0)
if [ $CMD = "sms1" ]; then
echo "działa" | gnokii --sendsms numer tel
echo "petla"
fi

niestety wszystko zatrzymuje się na linii - CMD=$(cat /dev/ttyACM0) i nieważne co zrobię nie idzie już dalej.
Możesz mi podpowiedzieć co ewentualnie mogę z tym zrobić.

13

Odp: arduino+openWRT+sms

Ponieważ cat działa bez przerwy. Jeżeli na wyjściu interfejsu szeregowego jest generowany znak nowej linii to możesz to zrobić

CMD=$(grep -m1 "sms" /dev/ttyACM0)

Ale musisz wiedzieć co przychodzi. Jak nie wiesz, albo jest tego dużo to musisz kombinować inaczej - grepować po jakimś stałym czymś w komunikacie a potem zrobić ładnego case/ifa z rozejściem na poszczególne polecenia.
Jeżeli dane na interfejsie szeregowym nie kończą się znakiem nowej linii - to musisz sobie coś sam nadpisać co będzie na bieżąco odbierało dane i je analizowało. Wszystko zależy więc od tego jakie dane są wysyłane.

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

14

Odp: arduino+openWRT+sms

Dzięki
Działa.
Na szczęście wiem dokładnie co wysyłam.

15

Odp: arduino+openWRT+sms

Zastosowałem komendę while[1] w skrypcie, żeby działało cały czas. Będzie dobrze. Czy będzie problem z innymi programami?

16

Odp: arduino+openWRT+sms

Uruchom to w tle i tyle.

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