Jakiś czas temu, kiedy to Adrian odrobinę krytycznie odniósł się do serwera domoticz, a raczej do braku info o stanie modułu i o zdalnym potwierdzeniu wykonania akcji, zacząłem kombinować, jak w prosty sposób zrealizować takie powiadomienie.
Jak to często bywa chciałem osiągnąć jedno, a przy okazji zrodziło się drugie.
Do rzeczy, ponieważ powiadomienia drogą e-mail, dochodzą, ale wiąże się to z większym, lub mniejszym opóźnieniem szukałem innej bez kosztowej drogi i tak natrafiłem na Telegram.
Telegram to taki WhatsApp, czyli komunikator, ale posiada on możliwość tworzenia swoich prywatnych API Bot-ów, dzięki czemu możemy takiego bota spersonalizować i nakazać mu wysyłanie do nas wiadomości o ważnych zdarzeniach w naszym systemie automatyki.
Całą instalację Telegramu i tworzenie własnego bota pominę, gdyż wszystko można znaleźć na stronie https://telegram.org/
Ważne jest aby po stworzeniu swojego bota uzyskać dwa ważne parametry
Pierwszy to HTTP API TOKEN , drugi to CHAT ID.
Dla użytkowników Domoticza wszystko jest opisane na stronie
https://www.domoticz.com/wiki/Telegram_Bot#Creating_Your_Bot_and_Getting_Your_Token
Po uzyskaniu „tokena” i chat ID możemy sobie tworzyć adresy URL z dowolną wiadomością tekstową wyglądające np. tak
https://api.telegram.org/bot[TOKEN]/sendMessage?chat_id=12345678&text=dowolny tekst
Oczywiście nie tylko użytkownicy domoticza mogą to wykorzystać.
Kolejną fajną rzeczą jest możliwość otrzymywania oprócz wiadomości tekstowych, zrzutów z kamery – er, tak zwanych snapshotów.
Tworząc prosty skrypt wyglądający np. tak
Nazwijmy go sobie dowolnie np. brama.sh
#!/bin/sh SnapFile="/var/tmp/image.jpg" # Get snapshot via Domoticz server wget -O $SnapFile "http://adresIP kamery/cgi-bin/snapshot.cgi" # Send Telegram message with image curl -s -X POST "https://api.telegram.org/bot[TOKEN]/sendMessage?chat_id=12345678&text=Otwarta brama" curl -s -X POST "https://api.telegram.org/bot[TOKEN]/sendPhoto?chat_id=12345678" -F photo="@$SnapFile" # Remove Image /bin/rm $SnapFile
Co robi powyższy skrypt?
- Najpierw robi fotkę z widoku naszej kamery
- Zapisuje ją w plikach tymczasowych
- Wysyła wiadomość tekstową o treści ”Otwarta brama” a zaraz po niej wysyła zrobioną fotkę
- Usuwa fotkę z plików tymczasowych
Po wykonaniu powyższego skryptu w ciągu kilku sekund otrzymujemy wiadomości od naszego bota, wyglądające tak jak na poniższym foto.
Otwarta brama to jedno, ale wykorzystując „zdolności” naszego bota można np. mając zwykły domofon, lub tylko dzwonek przy furtce, zrobić sobie coś ala wideodomofon.
Montujemy kamerę IP obserwującą furtkę
Pod przycisk dzwonka, lub domofonu podpinamy np. ESP 01 (najmniejszy), zmiana stanu GPIO 0 w ESP uruchamia skrypt . Jak nie ma nas w domu dostajemy po krótkiej chwili wiadomość, że ktoś dzwoni i fotkę z widokiem kto to jest .
Jeżeli to znajomy, który przyszedł z piwem trochę za wcześnie, to dzwonimy do niego lub wysyłamy sms, prosząc, żeby zaczekał na tarasie, otwieramy mu za pomocą GPIO 2 tego samego ESP furtkę i szybko jedziemy do domu, bo najlepsze piwo, to zimne piwo.
Macie inne pomysły, to piszcie, na pytania i wątpliwości, też postaram się w miarę możliwości odpowiedzieć.
PS 1 Żeby do ESP 01 wgrać firmware AFE T5 i wykorzystać je do tego otwierania furtki, muszę poprosić adriana , żeby zwiększył zakres czasowy podtrzymania, bo dwie sekundy dla rygla w furtce to tak zdąży albo nie, 4 sekundy było by super.
Najlepiej moim zdaniem zrobić od 0,5 sek do 4
PS 2 Taki zrzut z kamery oczywiście daje się powiększyć
Instrukcja opracowana przez @isom
@isom, przy następnej okazji zwiększe czas podtrzymania przekaźnika do 9999msek. Tyle mogę tam chyba na maksa dać.
@isom mógłbyś opisać konfiguracje telegramu uzyskałem HTTP API TOKEN ale coś z CHAT ID nie mogę sobie poradzićJuż sobie poradziłem nie było pytania
Wcale tak łatwo nie było skonfigurować Telegram dla kilku użytkowników za snapshotem, ale udało się i działa całkiem fajnie. Pewnie dlatego, że działanie tego komunikatora jest trochę inne niż tych których do tej pory używałem.W skrypcie który jest w pierwszym poście trzeba odkomentować ostatnią linię żeby plik się kasował.
@wo__jo dzięki za zwrócenie uwagi na ostatnią linię w skrypcie , moje niedopatrzenie już poprawiłem.Nie wiem z czym miałeś problemy ale metody są dwie zawsze można stworzyć dla każdego użytkownika oddzielnego bota i rozbudować skrypt o takie same wpisy z innym tokenem , lub dodać bota do grupy i wysyłać do wszystkich
Ja używam Pushbullet i polecam ale niestety nie rozgryzłem jak wysyłać wiadomości na kilka telefonów. Można to zrobić w Telegramie ??
W Telegramie jest to jak najbardziej możliwe , do tego między innymi został stworzony , tworzysz sobie grupę osób do , której dodajesz bota , który ma wysyłać powiadomienia i on wysyła do wszystkich członków grupy.
Tak pomyślałem że mam bramę zwykle otwartą zdarza sie ze ktoś wchodzi bez dzwonieniajeśli by podłączyć pod czujniki fotokomórki i gdy tylko zostanie przerwana linia podczerwieni w bramie to zdjęcie by sie wysyłałoktoś pewnie napisze że miałbym zdjęcia wszystkich piesków z okolicy które się wałęsają hehehehAle ja dopiero zaczynam z domoticzem więc to odległa przyszłość
HTTP API TOKEN już mam ale nie wiem gdzie jest CHAT IDpodpowiesz gdzie go wyszukać?
Jak utworzyłeś już BOTA to w dowolnej przeglądarce wpisz https://api.telegram.org/botxxxxyxyxyxyxyxyxyxyxyxyxy/getUpdateszamiast tych xyxyxy wstaw swój token zaraz po bot bez spacji . JSON powinien zwrócić coś w tym stylu
Gdzie to co zaznaczyłem będzie twoim Chat ID
coś chyba źle robię – czy to na czerwono dobrze odczytuje?w domoticz wpisałem key i to ida czy coś trzeba ustawiać w telegramie na telefonie?
{"ok":true,"result":[{"update_id":20382896, "message":{"message_id":1,"from":{"id":532242320,"is_bot":false,"first_name":"Tom","last_name":"ting"},"chat":{"id":-317204237,"title":"ticz","type":"group","all_members_are_administrators":true},"date":1570627620,"group_chat_created":true}},{"update_id":20382897, "message":{"message_id":2,"from":{"id":532246350,"is_bot":false,"first_name":"Tom","last_name":"ting"},"chat":{"id":-317204237,"title":"ticz","type":"group","all_members_are_administrators":true},"date":1570627629,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":20382898, "message":{"message_id":3,"from":{"id":532246350,"is_bot":false,"first_name":"Tom","last_name":"ting","language_code":"pl"},"chat":{"id":5555650,"first_name":"Tom","last_name":"Sting","type":"private"},"date":1570627728,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":20382899,
W telefonie musisz mieć uruchomiony czat z Botem u mnie Bot nazywa się Domoticz https://drive.google.com/file/d/12tA7WsaeJRyf_GQ67kVWHzHj5P94-qYm/view?usp=sharingale z tego co widzę to ty nie aktywowałeś żadnego bota przeczytaj sobie dokładnie https://www.domoticz.com/wiki/Telegram_Bot#Creating_Your_Bot_and_Getting_Your_Token musisz wysłać wiadomość tekstową do bota zanim wyślesz tą komendę przez przeglądarkę
wysyłam wiadomość a pierwsza wiadomość to była klik na START i wysłało się /startco mogę robić źle?zrobiłen nowego bota i mam nowy token i tak:{„ok":true,"result":[{„update_id":42356133,"message":{„message_id":2,"from":{„id":511116350,"is_bot":false,"first_name":"Tom","last_name":"Sting","language_code":"pl"},"chat":{„id":531146350,"first_name":"Tom","last_name":"Sting","type":"private"},"date":1170647208,"text":"Ggg"}},{„update_id":41356634,"message":{„message_id":3,"from":{„id":531146350,"is_bot":false,"first_name":"Tom","last_name":"Sting","language_code":"pl"},"chat":{„id":531111350,"first_name":"Tom","last_name":"Sting","type":"private"},"date":1170647223,"text":"Gfg"}}]}
Po utworzeniu przez BotFather nowego bota musisz wysłać do tego nowego bota dowolną wiadomość tekstową np witaj bez żadnych znaków czy cudzysłowów , nie dostaniesz odpowiedzi , ale te wiadomości zostaną zapisane w skrzynce bota, żeby odczytać te wiadomości wysyłasz z przeglądarki komendę którą już znasz i w zwrotce dostajesz ciąg bardzo podobny do tego , który wstawiłem , potem żeby sprawdzić wyślij przez przeglądarkę https://api.telegram.org/botxxxxxxxxxxxxxxxxxyxyxyxy/sendMessage?chat_id=abcbcbcbcb&text=Helloi powinieneś dostać coś w tym stylu {„ok”: true, „result”: {„update_id”: 939819608,„message”: {„message_id”: 82, „from”: {„id”: abcbcbcbcb, „first_name”: „Bot”, „last_name”: „Domoticz”, „username”: „Domoticz”}, „chat” : {„id”: abcbcbccb, „first_name”: „Bot”, „last_name”: „Domoticz”, „username”: „Domoticz”}, „date”: 1436104512, „text”: „Hello from your bot”}}Jak tego nie dostaniesz to coś jest nie takI najlepiej opisz krok po kroku co robisz bo trudno jest pomagać jak się nie wie co robisz po kolei
ok zadziałałowielkie dzięki za podpowiedzi!!!!!
Troszkę wczoraj się pobawiłem i odpaliłem Telegram.
Instalujemy aplikacje na telefonie, uwierzytelniamy z telefonem i komunikator już działa .
Wyszukujemy bota za pomocą lupki – BotFather
Klikamy w niego i start następnie wybieramy – /newbot
BotFather prosi nas o podanie nazwy dla naszego nowego bot-a, podajemy jeżeli nie jest zajęta zwraca nam info o utworzeniu wraz z API naszego bota.
Więc już połowa sukcesu teraz potrzebujemy chat ID
Wyszukujemy kolejnego bot-a za pomocą lupki o nazwie: @get_id_bot – w ikonie bot-a jest gość z łukiem 😉 klikamy start i zwraca nam chat ID
Wszystko za pierwszym razem zadziałało.
Napisałem ten poradnik bo wiele osób ma problem z pozyskaniem chat ID, samo API przysparza mniej problemów
Jak / gdzie utworzyć ten skrypt? Wolałbym mieć to po prostu w dzVents. Czy jest taka możliwość? Widzę, że mogę stamtąd zrobić wywołanie, ale raczej nie sam skrypt, racja?
Właśnie z powodzeniem sobie z dzVents wyłałem powiadomienie. Jakby ktoś podpowiedział tylko czy do tego można dorzucić fotkę z tego poziomu, to będę usatysfakcjonowany 🙂
Edit: chyba znalazłem, sprawdzę to.
https://www.domoticz.com/forum/viewtopic.php?t=26729
@bartolomeo To działa na 100%
dz-vent-skrypt-do-zdjecia-przez-telegram.txt
@isom
Cześć, wrzuciłem ten skrypt jako dzVents do domoticza. Podmieniłem dane w „teleTok", „chatId", „domoReq". Gdzie w tym skrypcie wskazuje np. włącznik po załączaniu którego ma się wykonać zdjęcie i wysłać do Telegrama ? Dla próby nazwę przycisku podałem w trzeciej linii w „devices" ale niestety to nie działa 🙁
return {
on = {
devices = {’Ośw. pokój gościnny’},
},
execute = function(domoticz, device)
if(device.state == 'On’) then
local teleTok = 'tu jest token’
local chatId = 'tu jest id’
local snapFile = '/home/pi/domoticz/scripts/camera_’
local domoReq = 'http://192.168.8.106:8081/cgi-bin/snapshot.cgi’
local camName = 'Kamera’
os.execute(’wget -O „’..snapFile..camName..’.jpg" „’..domoReq..'"’)
os.execute(’curl -s -X POST „ https://api.telegram.org/bot’..teleTok..’/sendPhoto?chat_id=’..chatId. .'" -F photo="@’..snapFile..camName..’.jpg"’)
os.execute(„rm " ..snapFile..camName..’.jpg’)
end
end
}
Samo wysyłanie powiadomień tekstowych z domoticza działa. Zrobiłem wirtualny przycisk po wyzwoleniu którego wykonywane jest odpowiednie polecenie https.
@szmydu skrypt na podstawie zdefiniowanego urządzenia – devices , a konkretnie gdy to urządzenie zostanie włączone zapisuje fotkę z kamery i wysyła za pomocą os.execute curl
na konto wskazanego użytkownika telegram , na końcu kasuje tą fotkę za pomocą polecenia rm.
Co dostajesz w logach domoticz po włączeniu Ośw pokój gościnny ?
Działa, musiałem tak zmienić linię:
local domoReq = 'http://192.168.8.106:8081/shot.jpg’
gdzie /shot.jpg mam wpisane w konfiguracji kamery w domoticzu w kolumnie adres url do grafiki.
Witajcie
Mój system trochę się rozrasta i teraz chciałbym w jednym skrypcie umieścić aby domoticz przesyłał mi zdjęcie z 4 kamer
#!/bin/shSnapFile="/var/tmp/image.jpg"
# Get snapshot via Domoticz serverwget -O $SnapFile „ http://adresIP kamery/cgi-bin/snapshot.cgi"
# Send Telegram message with imagecurl -s -X POST „ https://api.telegram.org/bot [TOKEN]/sendMessage?chat_id=12345678&text=zdjecie Kam1″curl -s -X POST „ https://api.telegram.org/bot [TOKEN]/sendPhoto?chat_id=12345678″ -F photo="@$SnapFile"
# Remove Image/bin/rm $SnapFile
jak zmodyfikować ten skrypt zapisywał z 4 kamer zdjęcie i je przesyłał na telegram bo jeśli dodaje 4 dodatkowe linie ze zmienionymi tylko danymi kamer to przesyła i tak 4x to samo zdj z pierwszej kamery.
Dwie kamery
#!/bin/sh
SnapFile1="/var/tmp/image1.jpg"
SnapFile2="/var/tmp/image2.jpg"
# Get snapshot via Domoticz server
wget -O $SnapFile1 „ http://adresIP kamery/cgi-bin/snapshot.cgi"
wget -O $SnapFile2 „ http://adresIP kamery/cgi-bin/snapshot.cgi"
# Send Telegram message with image
curl -s -X POST „ https://api.telegram.org/bot [TOKEN]/sendMessage?chat_id=12345678&text=zdjecie Kam1"
curl -s -X POST „ https://api.telegram.org/bot [TOKEN]/sendPhoto?chat_id=12345678″ -F photo="@$SnapFile1"
curl -s -X POST „ https://api.telegram.org/bot [TOKEN]/sendMessage?chat_id=12345678&text=zdjecie Kam2"
curl -s -X POST „ https://api.telegram.org/bot [TOKEN]/sendPhoto?chat_id=12345678″ -F photo="@$SnapFile2″
# Remove Image
/bin/rm $SnapFile1
/bin/rm $SnapFile2
albo
#!/bin/sh
SnapFile1="/var/tmp/image1.jpg"
SnapFile2="/var/tmp/image2.jpg"
DomoUrl="192.168.x.xxx:8082″
# Get snapshot via Domoticz server
wget -O $SnapFile1 $DomoUrl"/camsnapshot.jpg?idx=1″
wget -O $SnapFile2 $DomoUrl"/camsnapshot.jpg?idx=2″
# Send Telegram message with image
curl -s -X POST „ https://api.telegram.org/botxxxxxxxxxxxxxxxxxxxxxxxxxxyyy/sendMessage?chat_id=12345678&text=Coś tam"
curl -s -X POST „ https://api.telegram.org/botxxxxxxxxxxxxxxxxxxxxxxxxxxyyy/sendPhoto?chat_id=12345678″ -F photo="@$SnapFile1"
curl -s -X POST „ https://api.telegram.org/botxxxxxxxxxxxxxxxxxxxxxyyyyyyy/sendMessage?chat_id=12345678&text=Inna wiadomość"
curl -s -X POST „ https://api.telegram.org/botxxxxxxxxxxxxxxxxxxxxxyyyyyyy/sendPhoto?chat_id=12345678″ -F photo="@$SnapFile2"
# Remove Image
/bin/rm $SnapFile1
/bin/rm $SnapFile2
@isom
jak zwykle szybko zwięźle i na temat bardzo dziękuję
Jeszcze mam takie pytanie w jakiej rozdzielczości telegram otrzymuje zdjęcia z kamer bo u mnie jest to 1280×720 natomiast kamera ma ustawione 1920×1080 ale telegram otrzymuje zmniejszone
Da się aby telegram wyświetlał takie jaką ma rozdzielczość ustawiona kamera?
Podpowiedział by mi ktoś jaki trzeba napisać skrypt aby domoticz wysyłał zdjęcia z kamery na serwer FTP?