Amazon. It seems to go in and out of stock fairly frequently.
Ok thanks. I feel like itâs been out of stock forever on amazon. And now your link shows it available. Thanks for the quick responses.
It can be hard to catch at times.
I just received my ZFM-80 in the mail and installed it last night. It was super easy. For my needs, I just replaced the old switch with this one and then pigtailed a hot wire and a neutral wire from the junction box to the new switch. Pairing was really easy and I used @Mike_Maxwell device handler (Big thanks). Works great! As several other people have mentioned, the size of the switch is just larger than the normal wall plate opening, so get your dremmel charged.
Guys, my ZFM-80 is arriving in a couple of days. I read through the thread and understand (more or less) how to update the device with the custom device driver. Probably a dumb question, but as I never did this before, can someone explain how one goes about setting the initialization parameters? Iâm particularly interested in setting the value for how long the fireplace can be on. Is this somewhere in the code or the initialization parameters become available when I associate device with the driver. Thanks!
Itâs just a setting once you have the custom handler installed with the switch.
Anyone know if there is away to stop the LED from flashing every time it gets polled from the hub (even when the switch is off)? Mine is in by bedroom and the bright blue light is really annoying in a dark bedroom. Iâll probably have to cover it with some duct tape in the mean time, but it would be nice to disable the flashing.
Update: I cut out a circle of black electrical tape and placed that over the LED and then I cut out three layers of white electrical tape and placed them consecutively over the black tape. Essentially no light gets through the tape, but because the whole switch is white plastic, the blue glow permeates the whole switch a little when it flashes. Its not remotely as bright now and I donât notice it at all unless Iâm looking directly at the switch when it flashes. Its not ideal, but its considerably better than without the tape.
HI all, is this handler still available, or is a similar one out? I just got everything set and iâm just missing the connection to smartthings.
Thanks for any help!
Where is the full code? I cannot get my ZFM-80 to work again even though it was working fine for 5 months.
Please provide a link to the full code and tell me where/how to implement it. Thanks.
/* Remotec ZFM-80 specific device V1.2
*
- Variation of the stock SmartThings Relay Switch
- âauto re-configure after setting preferences
- âpreference settings for switch type and automatic shutoff features.
- Mike Maxwell
- madmax98087@yahoo.com
- 2015-02-16
- change log
2015-02-16 added delay between configuration changes, helps with devices further away from the hub.
2015-02-21 fixed null error on initial install
*/
metadata {
definition (name: "remotecZFM80", namespace: "mmaxwell", author: "mike maxwell") {
capability "Actuator"
capability "Switch"
capability "Polling"
capability "Refresh"
capability "Sensor"
capability "Relay Switch"
fingerprint deviceId: "0x1003", inClusters: "0x20, 0x25, 0x27, 0x72, 0x86, 0x70, 0x85"
}
preferences {
input name: "param1", type: "enum", title: "Set external switch mode:", description: "Switch type", required: true, options:["Disabled","Momentary NO","Momentary NC","Toggle NO","Toggle NC"]
input name: "param2", type: "enum", title: "Auto shutoff minutes:", description: "Minutes?", required: false, options:["Never","1","5","30","60","90","120","240"]
}
// simulator metadata
simulator {
status "on": "command: 2003, payload: FF"
status "off": "command: 2003, payload: 00"
// reply messages
reply "2001FF,delay 100,2502": "command: 2503, payload: FF"
reply "200100,delay 100,2502": "command: 2503, payload: 00"
}
// tile definitions
tiles {
standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) {
state "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821"
state "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff"
}
standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") {
state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
}
main "switch"
details(["switch","refresh"])
}
}
def installed() {
zwave.manufacturerSpecificV1.manufacturerSpecificGet().format()
}
def parse(String description) {
def result = null
def cmd = zwave.parse(description, [0x20: 1, 0x70: 1])
if (cmd) {
result = createEvent(zwaveEvent(cmd))
}
if (result?.name == âhailâ && hubFirmwareLessThan(â000.011.00602â)) {
result = [result, response(zwave.basicV1.basicGet())]
log.debug âWas hailed: requesting state updateâ
} else {
log.debug âParse returned ${result?.descriptionText}â
}
return result
}
def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) {
[name: âswitchâ, value: cmd.value ? âonâ : âoffâ, type: âphysicalâ]
}
def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
[name: âswitchâ, value: cmd.value ? âonâ : âoffâ, type: âdigitalâ]
}
//def zwaveEvent(physicalgraph.zwave.commands.configurationv1.ConfigurationReport cmd) {
// def value = âwhen offâ
// if (cmd.configurationValue[0] == 1) {value = âwhen onâ}
// if (cmd.configurationValue[0] == 2) {value = âneverâ}
// [name: âindicatorStatusâ, value: value, display: false]
//}
def zwaveEvent(physicalgraph.zwave.commands.hailv1.Hail cmd) {
[name: âhailâ, value: âhailâ, descriptionText: âSwitch button was pressedâ, displayed: false]
}
def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) {
if (state.manufacturer != cmd.manufacturerName) {
updateDataValue(âmanufacturerâ, cmd.manufacturerName)
}
final relays = [
//[manufacturerId:0x0113, productTypeId: 0x5246, productId: 0x3133, productName: "Evolve LFM-20"],
//[manufacturerId:0x0113, productTypeId: 0x5246, productId: 0x3133, productName: "Linear FS20Z-1"],
[manufacturerId:0x5254, productTypeId: 0x8000, productId: 0x0002, productName: "Remotec ZFM-80"]
]
def productName = null
for (it in relays) {
if (it.manufacturerId == cmd.manufacturerId && it.productTypeId == cmd.productTypeId && it.productId == cmd.productId) {
productName = it.productName
break
}
}
if (productName) {
//log.debug "Relay found: $productName"
updateDataValue("productName", productName)
}
else {
//log.debug "Not a relay, retyping to Z-Wave Switch"
setDeviceType("Z-Wave Switch")
}
[name: "manufacturer", value: cmd.manufacturerName]
}
def zwaveEvent(physicalgraph.zwave.Command cmd) {
// Handles all Z-Wave commands we arenât interested in
[:]
}
def on() {
delayBetween([
zwave.basicV1.basicSet(value: 0xFF).format(),
zwave.switchBinaryV1.switchBinaryGet().format()
])
}
def off() {
delayBetween([
zwave.basicV1.basicSet(value: 0x00).format(),
zwave.switchBinaryV1.switchBinaryGet().format()
])
}
def poll() {
zwave.switchBinaryV1.switchBinaryGet().format()
}
def refresh() {
delayBetween([
zwave.switchBinaryV1.switchBinaryGet().format(),
zwave.manufacturerSpecificV1.manufacturerSpecificGet().format()
])
}
//capture preference changes
def updated() {
//log.debug âbefore settings: ${settings.inspect()}, state: ${state.inspect()}â
//âDisabledâ,âMomentary NOâ,âMomentary NCâ,âToggle NOâ,âToggle NCâ
//external switch function settings
def Short p1 = 0
switch (settings.param1) {
case "Disabled":
p1 = 0
break
case "Momentary NO":
p1 = 1
break
case "Momentary NC":
p1 = 2
break
case "Toggle NO":
p1 = 3
break
case "Toggle NC":
p1 = 4
break
}
//auto off
def Short p2 = 0
if ("${settings.param2}" == "Never") {
p2 = 0
} else {
p2 = (settings.param2 ?: 0).toInteger()
}
if (p1 != state.param1) {
state.param1 = p1
return response(zwave.configurationV1.configurationSet(parameterNumber: 1, size: 1, configurationValue: [p1]).format())
}
if (p2 != state.param2) {
state.param2 = p2
if (p2 == 0) {
return response (delayBetween([
zwave.configurationV1.configurationSet(parameterNumber: 2, size: 1, configurationValue: [0]).format(),
zwave.configurationV1.configurationSet(parameterNumber: 3, size: 1, configurationValue: [0]).format(),
zwave.configurationV1.configurationSet(parameterNumber: 4, size: 1, configurationValue: [0]).format()
]))
} else {
return response (delayBetween([
zwave.configurationV1.configurationSet(parameterNumber: 2, size: 1, configurationValue: [p2]).format(),
zwave.configurationV1.configurationSet(parameterNumber: 3, size: 1, configurationValue: [232]).format(),
zwave.configurationV1.configurationSet(parameterNumber: 4, size: 1, configurationValue: [0]).format()
]))
}
}
//log.debug "after settings: ${settings.inspect()}, state: ${state.inspect()}"
}
def configure() {
delayBetween([
zwave.configurationV1.configurationSet(parameterNumber: 1, size: 1, configurationValue: [3]).format(),
zwave.configurationV1.configurationSet(parameterNumber: 2, size: 1, configurationValue: [0]).format(),
zwave.configurationV1.configurationSet(parameterNumber: 3, size: 1, configurationValue: [0]).format(),
zwave.configurationV1.configurationSet(parameterNumber: 4, size: 1, configurationValue: [0]).format()
])
}
did Something happen to the DH? Itâs not located in GitHub anymore?
The author moved onto a different home automation platform a couple of years ago.