Tasmota szkriptek
Hogyan küldjünk adatokat ESP32-ről Teams-re

Többször hangoztattam ugyan, hogy a Tasmota nem igazán alkalmas szenzorok készítésére, hiszen kapcsolónak készült, és az egész logikája így is épül fel, ellenben az utóbbi évek során sok érdekes képességet belefejlesztettek, valamint egészen jó a támogatása a régi 1MB méretű flash-el szerelt ESP8266-okra.

Különösen az integrálható automatizmusok, a szkriptelhetőség terén fejlődött sokat. Nehezítés egy kicsit, hogyha valami extrát szeretne az ember, jó eséllyel forrásból kell fordítania. 

Lássuk hát!

A szkripteknek három fajtáját támogatja a Tasmota, de nem mindet egyszerre és nem mindegyik eszközön.

1. Rules ("Szabályok")

Ezt minden előre fordított hivatalos bináris tartalmazza, aki ismeri az ESPEasy-t, hallatlan hasonlóságokat fedezhet fel az ON - DO - ENDON eseménykezelőkön alapuló működésben. Nincs új a nap alatt? :)

Például így veszünk fel egy szabályt, ami induláskor az RGBW izzót max fehér színre állítva bekapcsolja: (Consoles-Console alatt)

Rule1 on Dimmer#Boot do white 100; endon

És így engedélyezzünk ezt az az egyes számú szabályt:

Rule1 1

2. Scripting

Ez nincs belefordítva alapértelmezetten egyetlen Tasmota kiadásba sem, magunknak kell fordítanunk. Ez viszont kicsit más, működésében hasonlít a Rules-ra, de annál bővebb és más a szintaxisa. A blokkok/eseménykezelők nevei rövidek pl a >B blokk indításkor hajtódik végre a >S pedig másodpercenként, stb. Elég komplex dolgokat hozhatunk létre, ezzel oldottam meg például az áramkimaradást jelző e-mail küldő eszközömet.

3. Berry

Minden hivatalos Tasmota32 bináris tartalmazza. A Berry szkriptek már inkább valóságos programok, sokrétű dolgokat meg lehet vele oldani, akár egy új I2C eszköz támogatását is megoldhatjuk ilyen módon, tetszőleges ütemezést állíthatunk be, akár még új szabályokat is hozhatunk létre futásidőben.. 
Némileg hasonlít a nyelv a python-ra, így aki ismeri, előnyben van a használatakor.

Ami nagyon fontos:

  • Rules vagy Scripting! A kettő közül egy időben csak az egyiket tudjuk belefordítani a Tasmotába, választanunk kell
  • a Berry kizárólag ESP32-n működik

 script.jpg

Akadt is egy feladat, nosza próbáljuk megoldani:

Arra gondoltam mi lenne, ha hőmérséklet adatokat küldenék át egy Teams csoportba. Megoldható a dolog, egy Incoming Webhook-ot kell felvenni a Teams-ben egy adott csoportra és már mehet is a küldés. A Webhook szolgáltat egy HTTPS címet, amire POST metódussal lehet JSON formában küldeni az adatokat.

HTTPS?

Nos igen, jellemzően ahhoz, hogy a saját belső hálózatunkban elérjük a helyileg telepített szerverünket, a sima HTTP teljesen elegendő, viszont ha támadna egy olyan gondolatunk, hogy milyen jó lenne egy önálló Tasmota eszköz, ami e-mailt küld vagy más módon jelez nekünk közvetlenül (Teams, Pushover, Thingspeak...), ahhoz már bizony kell az SSL támogatás.
Nem célom teljes tanfolyamot tartani az SSL-ről, fogadjuk el, hogy ez egy olyan titkosítási forma, ami az eszközünk és a szerver közti kommunikációt titkosítja, így külső figyelő nem láthatja például a jelszavainkat... egyúttal a kulcs egy tanúsítvány is, ami csak az adott webhelyre érvényes, ez a HTTPS (SSL+HTTP) lényege.
Hasonlóan működik ez az IoT eszközök által használt kétirányú MQTT / MQTTS kommunikáció, illetve a GMail által megkövetelt SMTPS (SMTP+SSL) esetén is.

A Tasmotával kapcsolatban azt kell tudni, hogy az ESP8266 esetén olyan kevés erőforrás áll rendelkezésre, hogy ez a valós idejű titkosítás nem csak lassítja, de a rendelkezésre álló memória is igen szűk, tehát csak korlátozottan alkalmas ezekre a dolgokra. Ellenben a fejlesztők beleégettek egy minimális MQTTS és SMTPS támogatást, így képesek lehetünk kapcsolódni olyan publikus MQTT szerverekre, mint például a HiveMQ vagy az AWS IOT, illetve GMail szolgáltatón keresztül e-mailt küldeni.

Az ESP32 erőforrásai sokkal jobbak, és gyorsabb is az eszköz (ráadásul az SHA/AES/RSA titkosítást hardveresen gyorsítja), így a fenti MQTTS és SMTPS támogatáson kívül a HTTPS is működik benne!

Fontos dolog még, hogy a fenti képességeket tipikusan a Tasmota forrásból történő fordításával és megfelelő paraméterezésével tudjuk elérni, mert ezek nem a normál kiadások képességei.

Ezek alapján aki HTTPS kérést szeretne elérni egyedi címre, csak ESP32-vel fog boldogulni. Illetve szólok előre, hogy a Rules nem tud POST-ot, csak GET-et, a Scripting tud POST-ot, de levágja a 120 karakternél hosszabb szövegek végét, a Teams webhook pedig hosszú, és amikor azt írom hosszú, úgy értem 200 karakter feletti... amit viszont a Berry kitűnően kezel, tehát meg is van az irányvonal, ESP32 + Berry!

A szkript készítése

Ugyan aránylag sok leírás van a Berry-vel kapcsolatban a Tasmota online dokumentációban, viszont a legtöbb elég általános, nagyon kevés példakóddal, pedig azokat én nagyon szeretem, érthetőbb mi, miért, mit csinál és hogyan kell paraméterezni. Különösen a Tasmota-specifikus dolgokra nehéz rábukkanni, azt például csak a github hibajelzések közt találtam meg véletlenül, hogy kell a szenzorinformációkat kinyerni. :D

Íme a szkript:

import json
import string

var wurl = 'https://webhook.site/ce7ffa2b-b5af-4233-8884-4163ece1862c'

def callweb(url, text)
 var cl = webclient()
 cl.begin(url)
 cl.add_header('Content-Type','application/json')
 var payload = string.format('{"text": "%s C"}',text)
 var r = cl.POST(payload)
 cl.close()
end

def gettemp()
 var sensors=json.load(tasmota.read_sensors())
 return sensors['ESP32']['Temperature']
end

def report()
 callweb(wurl,gettemp())
end

tasmota.add_cron("*/30 * * * * *", report, "every_30_s")

Feltettem github-ra is, hátha még lesz néhány ötlet, ami elfér mellette:

https://github.com/enesbcs/tasmota-custom-scripts

És akkor némi magyarázat a szkripthez:

A "wurl" változóba kell bemásolni az egyedi webhook címet, amit a Teams-ben létrehoztunk. A "callweb()" eljárás a paraméterként kapott "text" változó tartalmát egy JSON "text" mező értékévé teszi, és POST módon elküldi a megadott webcímre, ami ennyit fog kapni:

{"text": "21.2 C"}

A "gettemp()" eljárás az, ami kinyeri a SENSOR tömbből a hőmérsékletadatot. A Tasmota Consoles-Console menüpont alatt lehet parancsokat beadni, illetve az eseménynaplót megtekinteni, ebben láthatjuk például, hogy az adott TelePeriod által meghatározott időben milyen szenzoradatok érkeztek, alapból az ESP32 belső hőmérője látszik csak, valahogy így:

11:32:12.673 RSL: SENSOR = {"Time":"2023-02-10T11:32:12","ESP32":{"Temperature":39.4},"TempUnit":"C"}

Ám ha kötünk rá egy I2C hőmérőt, példának okáért egy HTU21-est, akkor azt is látni fogjuk a SENSOR nevű JSON-ban: (persze ha olyan firmware-t használunk, ami tartalmazza az I2C hőmérők támogatását és a Berryt is)

11:34:12.673 RSL: SENSOR = {"Time":"2023-02-10T11:32:12","ESP32":{"Temperature":39.4},"HTU21":{"Temperature":21.4,"Humidity":"50.2"},"TempUnit":"C"}

Tehát, ha egy HTU21 hőmérő adatait szeretnénk továbbítani, akkor a .be szkriptben erre kell módosítani a gettemp() megfelelő sorát:

return sensors['HTU21']['Temperature']

Az utolsó sor pedig az add_cron segítségével beütemezi, hogy 30 másodpercenként történjen meg az adatküldés. Ezt egyébként talán célszerű ritkítani 5-10 percre, attól függően mennyire szeretnénk, hogy a Microsoft korlátozza a Teams szerverhez való hozzáférésünket. :D ("0 */10 * * * *")

Ha a "Manage File system" menüponton keresztül feltöltöttük a szkriptet, akkor az alábbi konzolparanccsal tudjuk is tesztelni:

br load('teams_webhook.be')

Ha jól működik, akkor automatikusan indítani egy szabály segítségével tudjuk:

Rule1 ON System#Boot DO br load('teams_webhook.be') ENDON
Rule1 1

Vagy ha Scripting támogatású binárisunk van, akkor az alábbi szkripttel:

>D

>BS
=>br load("teams_webhook.be")

Ez persze csak egy egyszerű példa volt, rengeteg lehetőség van még a Berry-ben, saját I2C driver írásától kezdve a webes felület futásközbeni átalakításán át, akár egy saját UDP kezelő démon írásáig.

A bejegyzés trackback címe:

https://bitekmindenhol.blog.hu/api/trackback/id/tr418046040

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

krump_lee 2023.04.02. 08:31:21

Kedves eNeS!

ESP8266 tasmota-val szenvedek, hiemq kapcsolat sehogy nem jön össze, sehol nem találok egy épkézláb leírást...
MQTT parameters HOST host-hoz a hiveMQ cluster url-t írom, majd web client usrname és pwd, portokat 1883, 8883, 8884-t is próbálom, de mindig csak
Connect failed to....
Lehetséges egyáltalán ?
kösz

eNeS 2023.04.02. 08:43:19

Lehetséges, bár az ESP8266-ot lassan ideje elfelejteni, ha nem helyi hálózatra akarsz vele forgalmazni. Milyen paraméterekkel fordítottad a binárist? Ugyanis a TLS támogatást külön kell belefordítani (kivéve ESP32-nél ami tartalmazza), addig nem is fogsz tudni csatlakozni HiveMQ-hoz.

Támogatók:
okosotthon.jpg
allterco.jpg

Utolsó kommentek

  • szenorb: Hello. Bekötöttem 12V-ra , a bemetére egy mozgás érzékelőt kötöttem. Szépen kapcsol a relé a késle... (2023.06.14. 06:48) Shelly okosrelé (Shelly1)
  • Melanoheliophobia: Üdv! Kb. 2 éve vásároltam két ugyanilyen okos izzót. Sajnos az egyik még garancia idő alatt eltávo... (2023.05.03. 16:50) Shelly Vintage okosizzó
  • eNeS: Lehetséges, bár az ESP8266-ot lassan ideje elfelejteni, ha nem helyi hálózatra akarsz vele forgalm... (2023.04.02. 08:43) Tasmota szkriptek
  • eNeS: @tomih: Thonnyban rebootot nyomva nekem se megy az NTP. De mikor lekapcsoltam a Thonnyt és rebooto... (2023.04.02. 08:40) Raspberry Pico és a LAN (W5100S-EVB-Pico)
  • krump_lee: Kedves eNeS! ESP8266 tasmota-val szenvedek, hiemq kapcsolat sehogy nem jön össze, sehol nem talál... (2023.04.02. 08:31) Tasmota szkriptek
  • Utolsó 20

Címkék

433mhz (12) alkatrész (22) alternatív kapcsoló (2) amg8833 (1) analóg (2) android (1) arduinoeasy (5) audio (1) automatizálás (3) bemenet (3) bk7231n (1) ble (1) blitzwolf (4) bluetooth (9) bridge (2) camhi (2) csináld magad (22) dimmer (1) diy (28) do-it-yourself (27) domoticz (11) ds18b20 (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (11) esp8266 (21) espeasy (2) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) fogyasztásmérő (5) ftdi (1) füstérzékelő (1) gázérzékelő (1) gpio (1) hang (4) hangjelző (1) hőmérséklet (22) https (1) ikea (1) impulzus relé (1) izzó (2) javascript (1) jelenlétérzékelő (3) kamera (18) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (21) konnektor (8) lan (9) lángérzékelő (2) led (3) linux (4) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) micropython (1) mikrovezérlő (2) milkv (1) mobil (1) mosfet (1) mozgás (5) mpyeasy (4) mq-2 (2) mqtt (3) működtető rendszer (5) multiroom (1) nedvesség (1) neo (1) neopixel (1) Node-RED (1) nvr (4) nyitás (7) okosház (4) okosizzó (3) okosotthon (8) oled (1) onvif (8) openbeken (1) opencv (1) openwrt (4) orange pi (4) páratartalom (6) php (1) pico (1) pi pico (2) poe (1) programozás (9) projekt (25) proximity olvasó (1) python (2) raspberry (14) raspberry projekt (6) raspbian (1) reed (1) relé (27) rf (2) rgb (6) rock pi (1) rögzítő (2) rp2 (1) rpieasy (1) rtc (1) shelly (24) smartwise (1) solid state relay (1) sonoff (20) SonOTA (1) soros (1) ssl (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (3) szünetmentesítés (4) t1 (1) tasmota (8) távirányító (3) Telegram (1) termékteszt (85) termosztát (2) touch (2) ups (5) usb (7) usb hub (1) valós idejű óra (1) vezérlések (20) vezérlő (5) világítás (5) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (32) ws2812 (1) xiaomi (5) xm (4) xmeye (4) yoosee (1) zigbee (16) zwave (3) Címkefelhő
süti beállítások módosítása