[DEPRECATED] Remotec ZFM-80 specific device

Amazon. It seems to go in and out of stock fairly frequently.

1 Like

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.

1 Like

It can be hard to catch at times. :slight_smile:

1 Like

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.

1 Like

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.