node-red-contrib-tasmotas 2.0.3

Use and control Tasmota devices in NodeRed

npm install node-red-contrib-tasmotas

node-red-contrib-tasmotas

Support for Tasmota devices in SmartHome projects using Node-RED.

The goal of the project is to allow using and configure devices flashed with Tasmota firmware in Node-Red

Getting Started

Prerequisites: Node-RED installation. For details see here.

Install via npm

$ cd ~/.node-red
$ npm install node-red-contrib-tasmotas

then restart node-red

The Tasmota devices are represented by config Nodes (single Node per device). The flow Nodes references a device node and can exists multiple times in different flows. It can be defined a project object to group and control all Tasmota devices in the local network. The management functions can be accessed over an "Config" nodes. The devices can be accessed over MQTT or HTTP. The IP addresses of the devices will be detect automaticaly. The device configurations will be downloded and cached localy.

Available Nodes

  • Switch Represents a Tasmota Power channel
  • Shutter Represents a Tasmota Shutter device shutter flow
    Shutter node example flow [ { "id": "6a5b4f7667dd5e93", "type": "tab", "label": "Shutter", "disabled": false, "info": "", "env": [] }, { "id": "4a234e775ccbd052", "type": "tasmota-shutter", "z": "6a5b4f7667dd5e93", "device": "1a88b745512d3c2f", "name": "relais_01_2", "outputs": 1, "sendDevice": true, "uidisabler": false, "idx": "1", "swapSwitches": false, "x": 530, "y": 120, "wires": [ [ "173b7fc0310f7798" ] ] }, { "id": "54ad039d5c179adb", "type": "ui_button", "z": "6a5b4f7667dd5e93", "name": "btnOpen", "group": "371d8c5139241499", "order": 4, "width": "2", "height": "1", "passthru": true, "label": "Open", "tooltip": "", "color": "", "bgcolor": "", "className": "", "icon": "", "payload": "Open", "payloadType": "str", "topic": "topic", "topicType": "msg", "x": 300, "y": 80, "wires": [ [ "4a234e775ccbd052" ] ] }, { "id": "fe89380a84ee2180", "type": "ui_button", "z": "6a5b4f7667dd5e93", "name": "btnStop", "group": "371d8c5139241499", "order": 5, "width": "2", "height": "1", "passthru": true, "label": "Stop", "tooltip": "", "color": "", "bgcolor": "", "className": "", "icon": "", "payload": "Stop", "payloadType": "str", "topic": "topic", "topicType": "msg", "x": 300, "y": 120, "wires": [ [ "4a234e775ccbd052" ] ] }, { "id": "bf703ba05b46bd54", "type": "ui_button", "z": "6a5b4f7667dd5e93", "name": "btnClose", "group": "371d8c5139241499", "order": 6, "width": "2", "height": "1", "passthru": true, "label": "Close", "tooltip": "", "color": "", "bgcolor": "", "className": "", "icon": "", "payload": "Close", "payloadType": "str", "topic": "topic", "topicType": "msg", "x": 300, "y": 160, "wires": [ [ "4a234e775ccbd052" ] ] }, { "id": "28bd8cdef12145c0", "type": "inject", "z": "6a5b4f7667dd5e93", "name": "Open", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 110, "y": 80, "wires": [ [ "54ad039d5c179adb" ] ] }, { "id": "4e6548fa30e15d75", "type": "inject", "z": "6a5b4f7667dd5e93", "name": "Stop", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 110, "y": 120, "wires": [ [ "fe89380a84ee2180" ] ] }, { "id": "2a84975211385b32", "type": "inject", "z": "6a5b4f7667dd5e93", "name": "Close", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 110, "y": 160, "wires": [ [ "bf703ba05b46bd54" ] ] }, { "id": "173b7fc0310f7798", "type": "ui_slider", "z": "6a5b4f7667dd5e93", "name": "sldPosition", "label": "Position (%)", "tooltip": "", "group": "371d8c5139241499", "order": 3, "width": 0, "height": 0, "passthru": false, "outs": "end", "topic": "position", "topicType": "str", "min": 0, "max": "100", "step": 1, "className": "", "x": 510, "y": 40, "wires": [ [ "4a234e775ccbd052" ] ] }, { "id": "1a88b745512d3c2f", "type": "tasmota-device", "manager": "f940f2077062977f", "broker": "5aa6ea16b4019c7c", "device": "relais_01", "name": "", "ip": "", "host": "ch4-01", "mac": "", "version": "0x8020003", "module": "6", "relais": "0", "friendlynames": "Office Fenster/Tuer,Tasmota2,Tasmota3,Tasmota4,Tasmota5,Tasmota6,Tasmota7,Tasmota8", "fullTopic": "tasmota/%topic%/%prefix%", "cmndPrefix": "cmnd", "statPrefix": "stat", "telePrefix": "tele", "qos": "1" }, { "id": "371d8c5139241499", "type": "ui_group", "name": "Shutter", "tab": "192fba4f7dfe1303", "order": 3, "disp": true, "width": "6", "collapse": false, "className": "" }, { "id": "f940f2077062977f", "type": "tasmota-manager", "dbUri": "http://192.168.192.200/SmartHome/data/", "name": "hausen", "network": "192.168.13.0/24" }, { "id": "5aa6ea16b4019c7c", "type": "tasmota-mqtt-broker", "name": "sihabro5", "broker": "192.168.192.225", "port": "1883", "clientid": "nodered-pc", "usetls": false, "keepalive": "60", "cleansession": true }, { "id": "192fba4f7dfe1303", "type": "ui_tab", "name": "Home", "icon": "dashboard", "disabled": false, "hidden": false } ]
  • Sensor Represents a Tasmota generic sensor access
  • Button Represents a Tasmota Button device
  • Light Represents a Tasmota Light device
  • Generic Represents a generic Tasmota device
  • Config Can be used to access and control one or more devices control flow
    Config node example flow [ { "id": "77d5c6af1fe840b4", "type": "tab", "label": "Demos", "disabled": false, "info": "", "env": [] }, { "id": "174c17b3de7ab86d", "type": "tasmota-config", "z": "77d5c6af1fe840b4", "manager": "f940f2077062977f", "name": "", "x": 480, "y": 40, "wires": [ [ "e2d9f1385c172bb7" ] ] }, { "id": "e2d9f1385c172bb7", "type": "ui_button", "z": "77d5c6af1fe840b4", "name": "btnListDevices", "group": "2f46a384e76104ab", "order": 2, "width": "3", "height": "1", "passthru": true, "label": "List Devices", "tooltip": "", "color": "", "bgcolor": "", "className": "", "icon": "", "payload": "", "payloadType": "str", "topic": "listDevices", "topicType": "str", "x": 280, "y": 120, "wires": [ [ "6cce4cdb225f4a84" ] ] }, { "id": "dc56ad3bc5b7d983", "type": "inject", "z": "77d5c6af1fe840b4", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 100, "y": 120, "wires": [ [ "e2d9f1385c172bb7" ] ] }, { "id": "316a1f7181cb2b78", "type": "ui_button", "z": "77d5c6af1fe840b4", "name": "btnScanNetwork", "group": "2f46a384e76104ab", "order": 1, "width": "3", "height": "1", "passthru": true, "label": "Scan Network", "tooltip": "", "color": "", "bgcolor": "", "className": "", "icon": "", "payload": "", "payloadType": "str", "topic": "scanNetwork", "topicType": "str", "x": 280, "y": 40, "wires": [ [ "174c17b3de7ab86d" ] ] }, { "id": "c7f3b9d36c15552c", "type": "inject", "z": "77d5c6af1fe840b4", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 100, "y": 40, "wires": [ [ "316a1f7181cb2b78" ] ] }, { "id": "6cce4cdb225f4a84", "type": "tasmota-config", "z": "77d5c6af1fe840b4", "manager": "f940f2077062977f", "name": "", "x": 480, "y": 120, "wires": [ [ "8f0f28a299bc0c1a" ] ] }, { "id": "9c86b2f7206d318c", "type": "ui_dropdown", "z": "77d5c6af1fe840b4", "name": "listDevices", "label": "Devices", "tooltip": "", "place": "Select option", "group": "2f46a384e76104ab", "order": 3, "width": 0, "height": 0, "passthru": true, "multiple": false, "options": [ { "label": "", "value": "", "type": "str" } ], "payload": "", "topic": "topic", "topicType": "msg", "className": "", "x": 270, "y": 180, "wires": [ [ "1a648cda449ab9e2" ] ] }, { "id": "8f0f28a299bc0c1a", "type": "change", "z": "77d5c6af1fe840b4", "name": "selectDevice", "rules": [ { "t": "set", "p": "options", "pt": "msg", "to": "payload", "tot": "msg" }, { "t": "set", "p": "payload", "pt": "msg", "to": "selectedDevice", "tot": "flow" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 650, "y": 120, "wires": [ [ "9c86b2f7206d318c" ] ] }, { "id": "1a648cda449ab9e2", "type": "change", "z": "77d5c6af1fe840b4", "name": "saveSelectedDevice", "rules": [ { "t": "set", "p": "selectedDevice", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 520, "y": 180, "wires": [ [] ] }, { "id": "72723dcceee41964", "type": "ui_button", "z": "77d5c6af1fe840b4", "name": "btnHttpStatus", "group": "2f46a384e76104ab", "order": 4, "width": "3", "height": "1", "passthru": true, "label": "GetStatus", "tooltip": "", "color": "", "bgcolor": "", "className": "", "icon": "", "payload": "", "payloadType": "str", "topic": "Status", "topicType": "str", "x": 280, "y": 260, "wires": [ [ "f2ae1cfd81260ed5" ] ] }, { "id": "36673f844c6a0dde", "type": "inject", "z": "77d5c6af1fe840b4", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 100, "y": 260, "wires": [ [ "72723dcceee41964" ] ] }, { "id": "f2ae1cfd81260ed5", "type": "change", "z": "77d5c6af1fe840b4", "name": "selectDevice", "rules": [ { "t": "set", "p": "action", "pt": "msg", "to": "httpCommand", "tot": "str" }, { "t": "set", "p": "ip", "pt": "msg", "to": "selectedDevice", "tot": "flow" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 490, "y": 260, "wires": [ [ "30cb09640e5e9604" ] ] }, { "id": "30cb09640e5e9604", "type": "tasmota-config", "z": "77d5c6af1fe840b4", "manager": "f940f2077062977f", "name": "", "x": 680, "y": 260, "wires": [ [ "9233e13b42e92bdb" ] ] }, { "id": "9233e13b42e92bdb", "type": "ui_text", "z": "77d5c6af1fe840b4", "group": "2f46a384e76104ab", "order": 5, "width": 0, "height": 0, "name": "txtFriendlyName", "label": "FriendlyName", "format": "{{msg.payload.Status.FriendlyName[0]}}", "layout": "row-spread", "className": "", "x": 280, "y": 320, "wires": [] }, { "id": "f940f2077062977f", "type": "tasmota-manager", "dbUri": "", "name": "house", "network": "192.168.13.0/24" }, { "id": "2f46a384e76104ab", "type": "ui_group", "name": "Control", "tab": "192fba4f7dfe1303", "order": 1, "disp": true, "width": "6", "collapse": false, "className": "" }, { "id": "192fba4f7dfe1303", "type": "ui_tab", "name": "Home", "icon": "dashboard", "disabled": false, "hidden": false } ]

TODO:

  • detailed nodes description
  • provide usage examples

Disclaimer

The software is provided as-is under the MIT license. The author cannot be held responsible for any unintended behaviours.

Thanks

If you like our ideas and want to support further development, you can donate here:
Donate Donate

Node Info

Version: 2.0.3
Updated 1 year, 4 months ago
License: MIT
Rating: not yet rated

Categories

Actions

Rate:

Downloads

26 in the last week

Nodes

  • tasmota-mqtt-broker
  • tasmota-device
  • tasmota-manager
  • tasmota-rf-manager
  • tasmota-switch
  • tasmota-pulsetime
  • tasmota-shutter
  • tasmota-sensor
  • tasmota-light
  • tasmota-button
  • tasmota-generic
  • tasmota-rf-device
  • tasmota-rf-bridge
  • tasmota-config

Keywords

  • node-red
  • tasmota
  • shelly
  • sonoff
  • smart home
  • home automation

Maintainers