Pushover aneb dokonalé notifikace
Dnešní článek bude o notifikacích. O takových, které můžete použít z jakéhokoli systému domácí automatizace, ale také z jakýchkoli svých hobby projektů, ze serveru, z emailu, prostě odkudkoli.
Aplikace se jmenuje Pushover. Pokud nevíte, proč je tu teď zrovna tento obrázek, nevadí. Ti co vědí, věřím, že ho ocení :). Každopádně, aplikace, o které dnes bude řeč vypadá takto:
Klientská část aplikace, tzn. to, co Vám zobrazuje notifikace, je dostupná pro Android i iOs a dále pak pro desktop jako browser extension pro Chrome, Firefox i Safari.
Posílat notifikace pak můžete buď skrz REST API, nebo zasláním emailu na speciální emailovou adresu, nebo pomocí jednoho z mraky pluginů, které pushover nabízí (například IFTTT, Zapier, Domoticz, Home Assistant a další).
Co se týká poplatků za používání a zasílání notifikací, myslím, že to mají nastaveno hodně rozumně. Neplatí se žádné měsíční poplatky (což fakt nesnáším), ale platí se jednorázový poplatek za každé zařízení, kde chcete notifikace dostávat.
Poplatek je přátelských $5USD za zařízení a platí pro neomezený počet příchozích zpráv od neomezeného počtu aplikací. Na vyzkoušení máte 7 dnů zdarma na každém zařízení.
To “Aplikací” je zde důležité. Při zasílání zpráv totiž můžete v administraci vytvořit několik různých typů aplikací, které mají svou ikonku, složku a nastavení a z ní pak posílat. Díky tomu si můžete notifikace v aplikaci pěkně kategorizovat.
Co se týká počtu odeslaných zpráv, tak každá aplikace může odeslat měsíčně 7500 zpráv zdarma. Pokud je potřeba více, je pak potřeba přejít z osobního účtu na “Team” účet a nabít si kredit. Pro vlastní potřeby jsou ale limity zdarma naprosto dostačující.
Teď už k samotné aplikaci a jak ji použít. Začněte registrací zde https://pushover.net/login, kde pak získáte přístup jak pro klientskou část (tzn. příjem notifikací), tak pro server-aplikaci k odesílání notifikací.
Na vyzkoušení funkčnosti je dobré začít emailem. Přidáme proto testovací emailový alias “Test email”, pro který dostaneme novou testovací emailovou schránku. V mém případě je to [email protected] (nechávám ji zatím zapnutou, můžete mi psát vzkazy 🙂 ).
Pokud nyní zašlete jakýkoli email na tuto adresu, dorazí Vám to jako notifikace na všechny zaregistrované zařízení (připadně ta zařízení, které si v nastavení emailu zvolíte).
A na mobil či desktop Vám přijde zpráva takto:
Pomocí emailového propojení můžete zprovoznit notifikace v zařízeních, kde není možné REST API volání, případně si notifikovat emaily z Vaší emailové schránky. To hlavní je ale právě REST API.
Začněte tím, že si vytvoříte “Application token”. Ten se pak používá při odesílání zpráv skrz API. Zároveň, každá takto vytvořená aplikace má stránku se statistikama, kde vidíte, kolik jste toho poslali.
V mém případě jsem dostal API token ajz8xt2fmbsnpigyyjw67xeoxuhjbx, který budu používat v dalších ukázkách. Opět, token nechávám zatím zapnutý, takže mi můžete posílat zprávy. Když toho bude moc, tak ho pak zakážu :).
curl --form-string "token=ajz8xt2fmbsnpigyyjw67xeoxuhjbx" --form-string "user=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --form-string "title=Test from curl" --form-string "message=Its working" https://api.pushover.net/1/messages.json
Poznámka: V závislosti na Vašem OS musí být buď celý na jenom řádku, nebo musí být nové řádky adekvátně esacapovány pomocí ^ či \.
Toto je curl příkaz, kterým pošlete notifikaci z příkazové řádky. Na zaslání používám aplikaci “curl“, která slouží k zasílání (nejen) webových požadavků, případně pak PostMan.
V samotném dotazu pak položka “token” je Vaše zaregistrovaná aplikace, položka “user” pak uživatelský klíč (User key) z hlavní obrazovky Vašeho pushover účtu. Title a message jsou nadpis a tělo samotné zprávy.
Kromě těchto základních položek je možné do notifikace předat pár dalších nastavení. Všechny jsou popsány v této dokumentaci. Můžete ke zprávě přiložit obrázek, můžete nastavit, na které konkrétní zařízení má zpráva jít. Dále pak můžete zprávě nastavit nějaký jiný zvuk či její prioritu (ty určují, jak budou zprávy na mobilu zobrazeny a zda se v době klidu má zahrát zvuk).
curl --form-string "token=ajz8xt2fmbsnpigyyjw67xeoxuhjbx" --form-string "user=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --form-string "title=Test from curl" --form-string "message=Its working" --form-string "priority=1" --form-string "sound=magic" https://api.pushover.net/1/messages.json
Takto třeba vypadá příkaz na zaslání prioritní zprávy s konkrétním zvukem. Na desktopu se pak zpráva ukáže takto:
Nyní se pojďme podívat, jak tyto notifikace poslat z aplikací, které umí provést REST API volání. Tzn. například Loxone nebo NodeRED.
Výše uvedený formát curlu je nám totiž zatím k ničemu, protože takto to do Loxone nedostaneme. Naštěstí umí Pushover i XML, JSON formát nebo “UrlEncoded” formát, o kterém se ale na první pohled v dokumentaci nedočtete.
Pojdmě si tyto formáty ukázat tentokrát v Postmanu. Jako první tento “UrlEncoded” formát. Použijeme “RAW” styl odeslání, abychom si museli sami vyplnit i HTTP hlavičky a tím si ověřili, že umíme vše vyplnit správně kvůli Loxone.
Do “Headers” je nutné vyplnit správně “Content-Type”. Toto zmiňuji proto, že Pushover tuto hlavičku striktně kontroluje a pokud hlavička nesedí s obsahem zprávy, tak zprávu ignoruje. Na tomto jsem se minule zasekl na několik hodin. Problém Loxonu totiž je, že i když ve virtuální výstupu posíláte XML či JSON, on to posílá jako “application/text” a Pushover to pak ignoruje.
Ačkoli formát “x-www-form-urlencoded” umožňuje zadat dotaz v relativně krátkém řetězci, není z mého pohledu ideální. Problém totiž je, že musíte ručně nahradit všechny speciální znaky jejich “encoded” variantama. Tzn. místo mezery musíte psát %20 a podobně.
Proto, na poslání dat z Loxonu se více hodí JSON formát, kde se o tyto věci nemusíte starat, ale zase je trochu delší samotný text k odeslání.
Namísto:
token=ajz8xt2fmbsnpigyyjw67xeoxuhjbx&user=xxxxxxxxxxxxx&message=HelloWorld
budeme posílat tento JSON.
{"message":"HelloWorld","token":"ajz8xt2fmbsnpigyyjw67xeoxuhjbx","user":"xxxxxxxxxxxxx"}
A spolu s tím musíme poslat i správnou hlavičku “Content-Type: application/json”
V Postmanu to pak bude vypadat takto
Tímto máme vytvořený a vyzkoušený požadavek na notifikaci. Toto opravdu vřele doporučuju všem, než se pustíte do samotného zadávání do Loxone. Protože jedna věc je rozchodit to v Postmanu, ale druhá věc pak rozchodit to v Loxone.
Pushover v Loxone
I když Vám to v Postmanu bude chodit, stále nemáte vyhráno. Spoustu věcí v Loxone nefunguje a hlavně, nemáte žádnou chybovou odezvu. Prostě se nic nestane.
Pojdmě na to. V Loxone vytvořte “virtuální výstup”, pojmenujte si ho třeba “Pushover Vystup”.
Hned tady číhá velké nebezpečí! Do virtuálního výstupu musíte zadat jeho adresu. POZOR, adresa nesmí obsahovat koncové lomítko, nebo celou URL adresu. Smí obsahovat pouze protokol + název serveru.
Tzn. správně je “http://api.pushover.net“, ale nikoli “http://api.pushover.net/” nebo “http://api.pushover.net/1/messages.json”. Právě jsem Vám ušetřil dvě hodiny trápení. Zamálo :).
Další krok je pak konfigurace samotného příkazu. Ukážeme si, jak odeslat data v obou formátech (url-encoded a json).
Tady těch nebezpečí číhá hned asi tak milión, tak pojdmě na to.
Nebezpečí číslo jedna. Instrukce při zapnutí MUSÍ začínat lomítkem. Pokud si myslíte, že Loxone umí toto lomítko doplnit (nebo použít v případě, že ho dáte do adresy v minulém kroku), jste na omylu. Tzn., instrukce musí být ve formátu “/1/messages.json“, nikoli “1/messages.json” či “http://api.pushover.net/1/messages.json”. Další dvě hodiny trápení. You’re welcome!
Další lahůdka je “HTTP rozšíření při zapnutí”. Už jsem to psal minule, pod tímto názvem se skrývá odeslání HTTP hlaviček. Jak jsem psal, Loxone neumí rozeznat ani základní odesílané typy a proto je nutné Content-type odeslat ručně, jinak se s Vámi Pushover bavit nebude.
Tzn., do HTTP rozšíření při zapnutí vyplňtě “Content-Type: application/x-www-form-urlencoded“.
Dejte si pozor na to, že opravdu zkopírujete přesně jak to zde píšu. Pokud totiž zadáte “Content-Type:application/x-www-form-urlencoded” – tzn. bez mezery, jste opět v háji. Loxone totiž takto zadaný Content-Type ignoruje. Další dvě hodiny trápení ušetřeny.
Samotný HTTP Post příkaz pro zapnutí už naštěstí v případě Loxone další překvapení neskrývá. Zde už zadáte řetězec tak, jak jste si ho vyzkoušeli v Postmanu. Tzn. “token=ajz8xt2fmbsnpigyyjw67xeoxuhjbx&user=xxxxxxxxxxxxxxxxxxxxx&message=HelloWorld”
A do HTTP při zapnutí pak dejte POST.
Tím je hotovo. Pro JSON pak postupujte podobně:
Instrukce: /1/messages.json Rozšíření: Content-Type: application/json Příkaz: {"message":"helloworld","token":"adpddeny9puzybmr1de6vn11yyfc2w","user":"xxxxxxxxxxxxxxxxxx"} HTTP při zapnutí/vypnutí: POST
Tím máte nakonfigurovaný virtuální výstup na zaslání zprávy při zapnutí/vypnutí. Bohužel, budete pravděpodobně potřebovat spoustu virtuální výstupů pro každý řetězec, který chcete z Loxone notifikovat. Není zde totiž příliš mnoho možností, jak takový JSON předpřipravit z dostupných parametrů a ten pak až odeslat.
Částečně se to dá suplovat pomocí prvku Stav, který umožnuje 4 vstupy a z nich vytvořit jeden textový výstup. Pomocí binárního multiplexoru/demultiplexoru jste schopni ze 4 vstupů udělat 16. Bohužel, v podání Loxone sice máme “Binární kódování”, ale už tak nějak neexistuje “Binární dekódování”.
Pushover v NodeRED
V NodeRED je situace s Pusoverem o dost jednodušší a vlastně to bude popis jen na pár řádků. Detekce Content-Type funguje automaticky, stejně tak se snadno zadává i URL dotazu.
Tady je request pro vložení do NodeRED, stačí jen vložit Váš user-key a token do vstupního JSON:
[{"id":"15258bfd.f63314","type":"inject","z":"2d78ae47.c1a9a2","name":"make request","topic":"","payload":"{\"message\":\"HelloWorld\",\"token\":\"ajz8xt2fmbsnpigyyjw67xeoxuhjbx\",\"user\":\"xxxxxxx\"}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":"","x":510,"y":580,"wires":[["e690ef61.8b0f9"]]},{"id":"e690ef61.8b0f9","type":"http request","z":"2d78ae47.c1a9a2","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"http://api.pushover.net/1/messages.json","tls":"","proxy":"","x":710,"y":580,"wires":[["5b512352.6d2b2c"]]},{"id":"5b512352.6d2b2c","type":"debug","z":"2d78ae47.c1a9a2","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":930,"y":580,"wires":[]}]
JSON požadavek pro Pushover vložíme rovnou ze vstupního node jako Payload.JSON:
kde můžeme pěkně JSON rovnou i editovat:
Prostřední node – http request – pak nastavíme tak, aby se dotazoval na cílovou URL adresu Pushoveru (komplet adresa, server + URI):
A třetí node je pak už jen debug výstup, abychom viděli, co nám Pushover vrací jako odpověď.
A to je vše. Máme notifikace zprovozněné i z NodeRED a bolelo to o dost méně než v případě Loxone :).
A to je pro dnes vše. Věřím, že pro Notifikace najdete spoustu využití. Nemusí to být jen o notifikacích z domu samotného. Lze to použít i například pro notifikace z Arduin, které v domě a kolem něj dělají hromadu jiné práce, nebo třeba pro pracovní a hobby projekty, když se někde na serveru něco děje.
Navíc, díky možnosti vytvářet neomezené množství “aplikací” je snadné mít v notifikacích pořádek a využívat je i zpětně pro logování stavu domu.
Pokud si nastavíte, že notifikace nemá pípat (a tuším, že jde nastavit, že se ani na mobilu přímo neukáže v notifikacích), lze to použít i na logování třeba spínání kotle či topení rekuperace a pak se jen zpetně podívat, kdy se to dělo.
Jen upozornění: v obrázku za větou “A do HTTP při zapnutí pak dejte POST.” nemáš rozmazaný parametr ‘user’ 😉
Diky, opraveno. Tentokrat toho na rozmazavani bylo nejak moc 😉
Take jsem koukal, jestli neco podobneho najdu, ze bych to poslal jako notifikaci 🙂
😉
Kdyz to posles pod svym user tokenem na ten token “ajz8xt2fmbsnpigyyjw67xeoxuhjbx”, tak mi to prijde.
Ten “user” je identifikator tebe, zatimco “token” je token te aplikace, ktera to posila. A ty aplikace mam pak pod sebou zaregistrovane zpatky ja, takze to dorazi.
Schvalne sem to tam nechal 😉
takze klidne posli, postnu sem pak screen az to dorazi.
Kriste, clovek by tym “programatorom” z loxone zlamal najradsej obe ruky za tie neosetrene lomitka a http headery.
no nejen za to. Ale i za zbytecny mezery, chybejici debug konzoly, jakekoly logy, atd ;-).
Fakt mne pobavilo, kdyz tam muzes zapnout “ulozit http odpoved”, ale do te se to ulozi jen za predpokladu, ze se to provede uspesne.
Neuspesne pokusy se nikam neukladaji 😉
Ahoj, diky za hezky clanek. Pokud by nekomu stacilo neco jednodussiho, primo v Loxone je Push Notifikace. Je to trochu limitovane, ale na nejaky zaklad to staci (https://www.loxone.com/cscz/kb/push-notifikace/).
Ahoj,
tech duvodu je vic.
Jednak, muj Miniserver ma prisny zakaz komunikace s Loxone webem/cloudem/cokoli ;-). Kdyz to mel naposledy dovoleno cca 2-3 roky zpet, tak vlivem diletantu v Loxone se mi restartoval miniserver kazdych 15min, kdyz checkoval novou verzi na Loxone webu. Nejak tam specialisti pokazily updaty a protoze byly vanoce, tak se na to vykaslali.
Dalsi duvod je, ze nepotrebuju, aby mi smirovali muj dum a co miniserver dela a meli pristup na miniserver (jakmile se muze miniserver pripojit ven, muze prijimat jakekoli prikazy z venku a delat co mu zadaji. A jelikoz to neni open system, nepreju si, aby takovy HW mohl komunikovat s dodavatelem.
K dalsim duvodum pak patri treba to, ze pres Pushover udelam notifikace nejen z Loxone, ale i z NodeRed, Arduina, pracovnich serveru,… a mam vse pohromade, navic vcetne historie a trideni, coz myslim Loxone neumi.
No, a asi by se nasli i dalsi duvody, ale myslim, ze toto staci 😉
Ahoj, diky za hezky clanek. Pro jednoduche notifikace lze pouzit i Push Notifikace primo v Configu. Nebo je nejaky duvod proc zvolit rovnou Pushover?
Vacsina z nas ma dropnutu komunikaciu loxone do sveta firewallom.
Znamena to, ze se z venku pripojujete jen pres VPN nebo vubec?
jj, jen VPN. To je opravdu nezbytny zaklad. Nikdy nikdy nikdy neotvirat Loxone do internetu.
Jedna vec je dovolit Loxonu komunikovat ven, ale komunikace z venku do Loxonu je zaruka velkych problemu.
Pushover asi neumi, odesilat odpovedi zpet na notifikacni server co ? Resp. cist treba odpovedi pres REST API. By se mi hodilo na neco jinyho, potreboval bych obousmernou komunikaci, co by umelo z mobilu ovladat svoji aplikaci. Tohle asi zatim umi jen telegram.
nene, pushover je jen jednosmerny. To co potrebujes ty, na to je asi fakt nejidealnejsi ten Telegram. Tam uz se da pak psat i dalsi navazujici logika.
Vsak to ide riesit akymkolvek chatom, napr. xmpp/jabber.
Ahojte.
Podarilo sa Vam nejako dostat do PushOveru aj dynamicky text? (Napr. spravu o otvorenych oknach z modulu alarmu).
Jedine, ako ma napada to urobit je cez e-mail, ale dam sa nedaju definovat dalsie parametre tej spravy a potrebujem dalsie zariadenie (SMTP server)
jestli myslis pres Loxone, tak tam to jde proste blbe. Tam neni poradna sprava stringu. Castecne to jde pres blok “stav”, kde jdou texty preddefinovat, ale sam to moc nepouzivam.
kdyz poterbuju dynamicke texty, rvu to tam pres NodeRED.
No len ako dostanes ten text z Loxone? Na virtual output sa predsa text poslat neda. Ci hej?
Nie je na to sice nejako vela prilezitosti, kde pouzit, ale napr. ten AQT vystup z modulu Burglar Alarm je super.
No, je fakt, že na to to asi nedostaneš. Jak sem psal, vůbec to takto nepoužívám, protože podpora v loxone je otresna.