Support
Firmware v0.29.20 Release
Firmware version 0.29.20 has been released, and includes fixes to firmware bugs which could prevent successful pairing and boot looping in some situations.
To apply this firmware upgrade to an existing device, please follow the Firmware Update Procedure in the user manual.
Presence Z1 Advanced Configuration Guide
Your Presence Z1 has been tuned out-of-the-box to provide the best balance between responsiveness and accuracy based on hundreds of hours of testing. However we recognize that everyone’s homes and needs are different, so we provide advanced configuration options which allow detection thresholds, timeout durations, and zone exclusion settings to be modified.
To access advanced settings, follow these steps:
Remove the lower cover and rapidly press the reset button 5 times
The sensor will display a double-pulse indicator light pattern to indicate that it is in advanced configuration mode
Use a wifi-enabled device such as a smartphone, tablet, or laptop to connect to the WiFi network named “Tapestry Presence Z1 XXXXXX”, where the Xs represent a device-specific value
Navigate to http://tapestry.local or http://192.168.4.1/
Click the ‘Advanced Options’ dropdown menu
Zone Exclusion
The Zone Exclusion feature can be used to disable detection in certain ‘zones’, where each zone is a range of distances from the sensor. This can be used to prevent triggering caused by objects on the other side of a window or thin wall, limit the sensor to trigger on only part of a room, or to exclude specific objects such as ceiling fans or appliances.
The Zone Exclusion plot shows detection values for the three detection algorithms over the last several minutes. Higher values within a given zone indicate a greater chance that detection was triggered in that zone recently, and can be used to inform choices about which zones to disable. Zones can be disabled by unchecking the corresponding checkbox. Changes are saved automatically, and apply once the unit is restarted.
For example, if a specific object was causing false triggers, the following procedure could be followed to determine which zones need to be disabled:
Activate the appliance or fan, and wait for the sensor to trigger. Leave it active for several minutes
Press the reset button 5x to put the sensor in advanced configuration mode
Inspect the Zone Exclusion Plot to see which zones were activated
Disable all zones which showed elevated readings
Restart sensor
Threshold Tuning
Note that this feature is only available on the V0.29.19 firmware version and newer. If your device is using an older firmware version, go here to upgrade it.
The threshold tuning feature can be used to increase or decrease sensitivity to reduce response times or improve tolerance to false positives. The plot shows scores from the different algorithms over time, with the most recent readings on the left side of the plot and readings from approximately 7 minutes before the sensor was put into advanced configuration mode on the far right.
The legend near the top of the screen shows which colors correspond to which detection algorithm; the boxes in the legend can be clicked to toggle visibility for that color line, which can be useful to improve clarity. The dashed lines represent the current threshold value for the corresponding algorithm color.
Adjust the threshold values so that the sensor triggers at the appropriate times, judging based on the recorded data shown on the plot. Note that lower threshold values make the device more sensitive, while higher threshold values make it less sensitive. Values are automatically saved as they are adjusted
Algorithm Overview
The sensor runs three algorithms in parallel at all times.
The Slow algorithm uses a neural network to process radar data and is very accurate, but slow to respond
The Intraframe algorithm has the fastest response time, but has limited range and cannot detect still individuals on its own
The Kernel algorithm has a response time between the Intraframe and Slow algorithms, but also has an intermediate range
Timeout Overview
The device uses a dynamic timeout period to determine when a room is empty for the best balance between responsiveness and accuracy. The Min and Max Timeout values can be adjusted to make the device respond faster or slower than the default.
MQTT Firmware Image Upgrade
This firmware image can be applied to any Presence Z1 to report over MQTT/WiFi instead of Zigbee. To apply it, follow the Firmware Update Procedure in the user manual.
After applying the update, the unit will boot up and go straight into DFU mode. Connect to the sensor’s wifi network and enter your WiFi credentials and MQTT Broker IP address, as well as a custom MQTT reporting path if desired. Reboot the sensor to apply the settings. The light will stay off if the sensor successfully connects to WiFi and the MQTT broker, and will display the pairing light code (slow pulsing) if it fails to connect to WiFi or the MQTT broker. This MQTT implementation implements Homeassistant-style autodiscovery. Like the standard firmware image, the reset button can be pressed 5x times to enter DFU mode for advanced configuration or to change network settings.
v0.29.19 Presence Z1 Firmware Upgrade
The v0.29.19 firmware version will be applied to all devices shipping after 5/14/24 and is available here to upgrade existing devices. Among other bug fixes and adjustments, this update adds the following features
Advanced configuration options to adjust no-occupancy timeout and trigger thresholds
New sensor reading visualizations to help with advanced configuration threshold setting
7x faster polling rate on fast motion detection algorithm
To apply this firmware upgrade to an existing device, please follow the Firmware Update Procedure in the user manual.
The previous firmware image, v0.29.17, is provided in case a downgrade is required. Note that downgrading has not been tested as thoroughly and is not recommended.
SmartThings Edge Driver
We are excited to announce the release of a SmartThings Edge driver which adds compatibility between the Presence Sensor Z1 and the SmartThings ecosystem! Simply use the following link to enroll your SmartThings hub before pairing.
Once enrolled, click the ‘Available Drivers’ button, then ‘Install’ to install the Tapestry Zigbee Release edge driver.
Presence Z1 Zigbee2MQTT Support
Zigbee2MQTT uses converter files to add support for various devices within the Zigbee network. The latest versions of Zigbee2MQTT include support for the Tapestry Presence Z1, and we recommend updating existing installations for use with this device.
If you do not wish to update your installation for any reason, a custom converter file is available below to add support without performing an upgrade.
const {occupancy, temperature, humidity} = require('zigbee-herdsman-converters/lib/modernExtend');
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const e = exposes.presets;
const definition = {
zigbeeModel: ['Presence Z1'],
model: 'Presence Z1',
vendor: 'Tapestry',
description: 'Tapestry Presence Sensor Z1 Occupancy and Temperature/Humidity Sensor',
extend: [],
fromZigbee: [fz.temperature, fz.humidity, fz.occupancy],
toZigbee: [],
exposes: [e.occupancy(), e.temperature(), e.humidity()],
meta: {},
};
module.exports = definition;
Presence Z1 DeCONZ Support
DeCONZ, the first-party coordinator software for the Dresden Elektronic Conbee, Conbee II, and other devices, relies on device-specific configuration files called Device Descriptor Files (DDFs) to accurately recognize and map Zigbee devices. Our team is actively integrating this support into the DeCONZ software package. During this transition phase or if you have an older version of DeCONZ installed, you can use the following DDF to add support for your smarthome setup.
{
"schema": "devcap1.schema.json",
"manufacturername": "Tapestry",
"modelid": "THPZ1",
"vendor": "Tapestry",
"product": "Presence Z1 (THPZ1)",
"sleeper": false,
"status": "Gold",
"subdevices": [
{
"type": "$TYPE_PRESENCE_SENSOR",
"restapi": "/sensors",
"uuid": [
"$address.ext",
"0x01",
"0x0406"
],
"items": [
{
"name": "attr/id"
},
{
"name": "attr/lastannounced"
},
{
"name": "attr/lastseen"
},
{
"name": "attr/manufacturername"
},
{
"name": "attr/modelid"
},
{
"name": "attr/name"
},
{
"name": "attr/swversion"
},
{
"name": "attr/type"
},
{
"name": "attr/uniqueid"
},
{
"name": "config/on"
},
{
"name": "config/reachable"
},
{
"name": "state/lastupdated"
},
{
"name": "state/presence",
"parse": {
"at": "0x0000",
"cl": "0x0406",
"ep": 1,
"eval": "Item.val = Attr.val"
},
"default": false
}
]
},
{
"type": "$TYPE_HUMIDITY_SENSOR",
"restapi": "/sensors",
"uuid": [
"$address.ext",
"0x01",
"0x0405"
],
"items": [
{
"name": "attr/id"
},
{
"name": "attr/lastannounced"
},
{
"name": "attr/lastseen"
},
{
"name": "attr/manufacturername"
},
{
"name": "attr/modelid"
},
{
"name": "attr/name"
},
{
"name": "attr/swversion"
},
{
"name": "attr/type"
},
{
"name": "attr/uniqueid"
},
{
"name": "config/offset",
"description": "Relative offset to the main measured value.",
"default": 0
},
{
"name": "config/on"
},
{
"name": "config/reachable"
},
{
"name": "state/humidity",
"parse": {
"at": "0x0000",
"cl": "0x0405",
"ep": 1,
"eval": "Item.val = Attr.val"
},
"default": 0
},
{
"name": "state/lastupdated"
}
]
},
{
"type": "$TYPE_TEMPERATURE_SENSOR",
"restapi": "/sensors",
"uuid": [
"$address.ext",
"0x01",
"0x0402"
],
"items": [
{
"name": "attr/id"
},
{
"name": "attr/lastannounced"
},
{
"name": "attr/lastseen"
},
{
"name": "attr/manufacturername"
},
{
"name": "attr/modelid"
},
{
"name": "attr/name"
},
{
"name": "attr/swversion"
},
{
"name": "attr/type"
},
{
"name": "attr/uniqueid"
},
{
"name": "config/offset",
"description": "Relative offset to the main measured value.",
"default": 0
},
{
"name": "config/on"
},
{
"name": "config/reachable"
},
{
"name": "state/lastupdated"
},
{
"name": "state/temperature",
"parse": {
"at": "0x0000",
"cl": "0x0402",
"ep": 1,
"eval": "Item.val = Attr.val"
},
"default": 0
}
]
}
],
"bindings": [
{
"bind": "unicast",
"src.ep": 1,
"cl": "0x0406",
"report": [
{
"at": "0x0000",
"dt": "0x18",
"min": 10,
"max": 600
}
]
},
{
"bind": "unicast",
"src.ep": 1,
"cl": "0x0402"
},
{
"bind": "unicast",
"src.ep": 1,
"cl": "0x0405"
}
]
}