node-red-contrib-tapo-new-api 0.5.4
Unofficial node-RED node for connecting to TP-Link Tapo devices with new API. Currently limited to the P100 & P105 & P110 smart plugs and L510E smart bulbs.
node-red-contrib-tapo-new-api
Unofficial node-RED node for connecting to TP-Link Tapo devices with new interface (KLAP) and previous one (PASSTHROUGH). Currently limited to the:
- P100, P105, P110, P115 smart plugs
- L510E, L530E smart bulbs
- L900-10 smart strip
Node command options
power
This node command provides the ability to power (on / off) the device by input
"msg.payload"
(boolean)toggle
This node command provides the ability to toggle (on / off) the power of tapo smart plugs.
turn-on
This node command provides the ability to power on tapo smart plugs.
turn-off
This node command provides the ability to power off tapo smart plugs.
brightness
This node command provides the ability to set the brightness of tapo smart bulbs.
color
This node command provides the ability to set the color of tapo smart bulbs.
status
This node command provides the ability to get the device infomation of tapo smart plugs. Models that can monitor energy acquire energy information.
"output: msg.payload.tapoDeviceInfo, msg.payload?.tapoEnergyUsage(P110 only)"
will provide the device information and usage (if device can measure energy).components
This node command provides the ability to get the device components information.
command
This node command provides the ability to set a customized request to the device by input
"msg.payload"
(TapoRequest object):{"method": string, "params": {"key": value, ...}}
should be provided as valid request.
Node configuration by message (msg
)
You can always override the node command configuration by means of the following message properties:
"msg.config.command"
takes an string with one of the following valid command optionstype command_type = "status" | "power" | "on" | "off" | "toggle" | "color" | "brightness" | "components" | "command";
"msg.config.version"
takes a number indicating the protocol(1 - PASSTHROUGH, 2 - KLAP, 3 - AUTO)
"msg.config.verbose"
takes a boolean indicating the error verbose.When verbose is selected a
"msg.payload.errorInf.track"
object is included."msg.config.terninal_random"
takes a boolean indicating the terminal to use.When terminal_random is
true
a random terminal valid UUID is used (useful when various buttons are configured to attack same device).
Pre-requisites
The node-red-contrib-tapo-new-api requires Node.js v15.0.0 or higher
to be installed.
Install
npm install node-red-contrib-tapo-new-api
Usage
Properties
Name
Set the node name displayed in the flow.
Email
Set the email address registered with Tp Link.
Password
Set the password registered with Tp Link.
Protocol
Set the protocol to be used in the communication with Tapo device.
Command
Set the kind of command the node will take as initial configuration.
Search mode
Select a search mode for the tapo device.
Usage
- ip : search by ip. (It's fast.)
- alias: search by alias and ip range.
Tapo ipaddress(
selected: ip
)Set the IP address to the Tapo device.
Tapo alias(
selected: alias
)Set the tapo device alias registered with Tp Link.
Tapo find ip range(
selected: alias
)Set the IP range to search for Tapo device.
Usage
- case1: "192.168.0.1 to 192.168.0.25"
- case2: "192.168.0.0/24"
Inputs
msg
type search_mode_type = "ip" | "alias";
type command_type = "status" | "power" | "on" | "off" | "toggle" | "color" | "brightness" | "components" | "command";
type config {
email: string;
password: string;
deviceIp: string;
deviceAlias: string;
deviceIpRange: string;
searchMode : search_mode_type;
command?: command_type; /* Default: "status" */
version?: TapoProtocolType; /* Default: AUTO */
verbose?: boolean; /* Default: false */
terminal_random?: boolean; /* Default: false */
}
type payload: boolean /* power */ || string /* color */ || number /* brightness */ || TapoRequest /* command */
[example1]
msg.config = {
"email": "[email protected]",
"password": "password",
"deviceIp": "192.168.0.xxx",
"command": "power",
"version": 3 /* AUTO */
}
msg.paylaod = true;
[example2]
msg.config = {
"email": "[email protected]",
"password": "password",
"deviceIp": "192.168.0.xxx",
"command": "toggle",
"version": 2, /* KLAP */
"verbose": true
}
[example3]
msg.config = {
"email": "[email protected]",
"password": "password",
"deviceIp": "192.168.0.xxx",
"command": "color"
}
msg.paylaod = "white";
Outputs
The processing result is passed by msg.payload. It consists of an object that contains the following properties:
type TapoResuls = {
result: boolean; /* true: success, false: failure */
tapoDeviceInfo?: TapoDeviceInfo; /* Tapo device infomation */
tapoEnergyUsage?: TapoDeviceInfo | undefined; /* Tapo device energy if compatible */
tapoComponents?: Components | undefined; /* Tapo device components information */
tapoCommand?: Json_T | undefined; /* Tapo device results from "command" */
errorInf?: Error;
}
[smart plug device infomation]
You can tell if the device is on or off by getting "device_on".
true: smart plug power on
false: smart plug power off
{
result: true,
tapoDeviceInfo: {
device_id: "*************"
fw_ver: "1.2.10 Build 20200609 Rel. 33394"
hw_ver: "1.0.0"
type: "SMART.TAPOPLUG"
model: "P105"
mac: "XX-XX-XX-XX-XX-XX"
hw_id: "*************"
fw_id: "*************"
oem_id: "*************"
specs: "JP"
device_on: false
on_time: 0
overheated: false
nickname: "3d printer power supply"
location: "XXXXXXXXXXXXXXXX"
avatar: "plug"
time_usage_today: 0
time_usage_past7: 0
time_usage_past30: 0
longitude: 0
latitude: 0
has_set_location_info: true
ip: "192.168.0.XXX"
ssid: "SSID"
signal_level: 0
rssi: 0
region: "Europe/Madrid"
time_diff: 0
lang: "es_ES"
},
tapoEnergyUsage: {
????
}
}
npm-scripts
There are some npm-scripts to help developments.
- npm install - Install the testing environment in your project.
- npm run build - Make
./data/my-node
directory from thesrc
directory and Install the my-node in Node-RED. - npm run start - Start Node-RED.
"http://localhost:1880"
File tree
[root]
│ package.json
│ README.md
│ tsconfig.json
│
├─data -> `Node-Red work files`
│ │
│ ├─my-node -> `project files` The resource files and built files should be placed here.
│ │ │ package.json
│ │ │
│ │ └─nodes -> The resource files and built files should be placed here.
│ │ └─...
│ │
│ └─node_modules
│ └─...
│
├─dist -> `The project built files`
├─examples -> `node-RED flow files`
├─figs
└─src
└─nodes -> project files
├─icons
├─lib
├─locales
│ ├─en-US
│ └─es-ES
└─test