MIMOlite sensor as Smoke Detector device

I’m looking for some direction on adding a MIMOlite device to my ST and having it show up as a Smoke Detector. I want to use the MIMOlite to monitor the 3rd interconnect wire on my detectors. Its a 9v trigger output when one of the detectors finds smoke. How would I create a Smoke Detector device and have it talk to the MIMOlite?

Another option…I am looking at adding a BRK RM4 accessory relay and wiring that to the terminals on a Schlage RS100HC. I believe others have been successful with that setup.

Definitely an option. I do prefer the hard-wired power method of the MIMO rather than the battery replacement on the RS100HC.
Also how about making ST treat the MIMO or RS100HC as a Smoke Detector and not a door contact? When I look at the dashboard I want it to show up in the Damage and Danger section. Like This

So I gave the SM120X / RS100HC config a try. It does physically work, but I am not happy with the implementation. For one it is a pain having that surface mount device wired in to the junction box of the smoke detector. Also the battery idea just doesn’t work well with me.
I have placed the RS100HC on another door in the house and bought the MIMOlite.
One thing I think will be really cool about the MIMOlite is that I can wire it up with the SM120X as a “pull alarm” and be able to set off the smoke detectors through smart things. I think it could be cool as a whole house intrusion alarm versus getting a FortrezZ.

The MIMOlite will also power off of the 9v constant coming from the SM120X

1 Like

Here is my first attempt at using the MIMOlite as a smoke detector/activator.
By wiring the SM120X into this unit, I can sense when the interconnect is triggered, and I can also activate the alarms on demand from the app or by a trigger.

One thing I am really hoping to figure out is how to classify this device as a smoke detector so it can show up in the Damage and Danger section of the dashboard.

/**
 *  Fortrezz MIMOlite
 *
 *  Author: Based on SmartThings code
 *  Also based on MIMOlite code from JitJack
 *  Date: 2014-06-8
 */

// for the UI
metadata {
	// Automatically generated. Make future change here.
	definition (name: "MIMOlite Smoke", author: "brian@docwisdom.com") {
		capability "Polling"
		capability "Refresh"
		capability "Switch"
		capability "Contact Sensor"
        
	}

	// 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"

		// status messages
		status "open":  "command: 2001, payload: FF"
		status "closed": "command: 2001, payload: 00"
	}

	// UI tile definitions
	tiles {
        standardTile("contact", "device.contact", width: 2, height: 2, inactiveLabel: false) {
			state "open", label: "clear", icon: "st.alarm.smoke.smoke"
			state "closed", label: "smoke", icon: "st.alarm.smoke.smoke", backgroundColor: "#ffa81e"
		}
        standardTile("switch", "device.switch", canChangeIcon: true) {
			state "on", label: '${name}', action: "switch.off", icon: "st.alarm.alarm", backgroundColor: "#FF0000"
			state "off", label: '${name}', action: "switch.on", icon: "st.alarm.alarm", backgroundColor: "#ffffff"
        }
        standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") {
			state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
		}
        valueTile("alarm", "device.alarm", inactiveLabel: false) {
			state "alarm", label:'${currentValue}'
		}


		main (["switch", "contact"])
		details(["switch", "contact", "refresh", "alarm"])
	}
}

def parse(String description) {
	def result = null
	def cmd = zwave.parse(description, [0x20: 1, 0x84: 1, 0x30: 1, 0x70: 1])
	if (cmd) {
		result = createEvent(zwaveEvent(cmd))
	}
	log.debug "Parse returned ${result?.descriptionText}"
	return result
}

def sensorValueEvent(Short value) {
	if (value) {
		createEvent(name: "contact", value: "open", descriptionText: "$device.displayName is clear")
	} else {
		createEvent(name: "contact", value: "closed", descriptionText: "$device.displayName detects smoke")
	}
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) {
	[name: "switch", value: cmd.value ? "on" : "off", type: "physical"]
}


def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd)
{
	sensorValueEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
	[name: "switch", value: cmd.value ? "on" : "off", type: "digital"]
}

def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd)
{
	sensorValueEvent(cmd.sensorValue)
}

def zwaveEvent(physicalgraph.zwave.commands.alarmv1.AlarmReport cmd)
{
	sensorValueEvent(cmd.sensorState)
}

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() {
	zwave.switchBinaryV1.switchBinaryGet().format()
}

The SM120X is wired to the MIMOlite by the orange and blue wires going to the MIMOlite sensor input. The gray wire feeds to the COM of the switch portion and NC is then wired to the 9v red interconnect.

2 Likes

This part is definitely cool! I like it.

Thanks @mcotis. It works great for this function. I tried it already by setting the mode to away and then opening the front door. All 3 detectors sounded.

1 Like

Anyone out there have thoughts on how to get ST to categorize this Device as a Smoke Detector so it will show up in the appropriate dashboard panel and alert in the same way a smoke detector would?

@docwisdom any luck with getting the device to show as a smoke detector in ST? This is incredibly intriguing and multipurpose. Nice work.

I am a little confused about your wiring? Ive looked at the manual, for both the relay and the MIMOlite and cant seem to understand it. Is there power from the relay to the MIMO? Or does the Grey wire into the COM power it? Sorry im new to ST and still wrapping my head around the relays and wiring possibilities.

Any help to visualize what you did so I can duplicate would be awesome!!!

Power is external via a power brick or any other 9-24v source. The SM120x unfortunately only supplies 5ma of power from the red wire so its not usable.

I took @docwisdom 's code and hacked a couple of lines from the official Smoke Detector device into it. With this new version you can select the MIMOlite Smoke device as a smoke detector in the Dashboard.

Feel free to add on or modify, I just hacked enough into it so it would show up in the dashboard. I did some limited testing and it appears to send the proper notifications when setup in the dashboard as well.

/**
 *  Fortrezz MIMOlite
 *
 *  Author: Based on SmartThings code
 *  Also based on MIMOlite code from JitJack
 *  Date: 2014-06-8
 */

// for the UI
metadata {
	// Automatically generated. Make future change here.
	definition (name: "MIMOlite Smoke", author: "brian@docwisdom.com") {
		capability "Smoke Detector"
		capability "Polling"
		capability "Refresh"
		capability "Switch"
		capability "Contact Sensor"

	}

	// 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"

		// status messages
		status "open":  "command: 2001, payload: FF"
		status "closed": "command: 2001, payload: 00"
	}

	// UI tile definitions
	tiles {
        standardTile("contact", "device.contact", width: 2, height: 2, inactiveLabel: false) {
			state "open", label: "clear", icon: "st.alarm.smoke.smoke"
			state "closed", label: "smoke", icon: "st.alarm.smoke.smoke", backgroundColor: "#ffa81e"
		}
        standardTile("switch", "device.switch", canChangeIcon: true) {
			state "on", label: '${name}', action: "switch.off", icon: "st.alarm.alarm", backgroundColor: "#FF0000"
			state "off", label: '${name}', action: "switch.on", icon: "st.alarm.alarm", backgroundColor: "#ffffff"
        }
        standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") {
			state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
		}
        valueTile("alarm", "device.alarm", inactiveLabel: false) {
			state "alarm", label:'${currentValue}'
		}


		main (["switch", "contact"])
		details(["switch", "contact", "refresh", "alarm"])
	}
}

def parse(String description) {
	def result = null
	def cmd = zwave.parse(description, [0x20: 1, 0x84: 1, 0x30: 1, 0x70: 1])
	if (cmd) {
		result = createEvent(zwaveEvent(cmd))
	}
	log.debug "Parse returned ${result?.descriptionText}"
	return result
}

def sensorValueEvent(Short value) {
	if (value) {
		createEvent(name: "contact", value: "open", descriptionText: "$device.displayName is clear")
        createEvent(name: "smoke",   value: "clear", descriptionText: "$device.displayName smoke is clear")
	} else {
		createEvent(name: "contact", value: "closed", descriptionText: "$device.displayName detects smoke")
        createEvent(name: "smoke",   value: "detected", descriptionText: "$device.displayName smoke was detected!")
	}
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) {
	[name: "switch", value: cmd.value ? "on" : "off", type: "physical"]
}


def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd)
{
	sensorValueEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
	[name: "switch", value: cmd.value ? "on" : "off", type: "digital"]
}

def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd)
{
	sensorValueEvent(cmd.sensorValue)
}

def zwaveEvent(physicalgraph.zwave.commands.alarmv1.AlarmReport cmd)
{
	sensorValueEvent(cmd.sensorState)
}

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() {
	zwave.switchBinaryV1.switchBinaryGet().format()
}
1 Like

Hmmm…something isn’t quite right on the things view - I’ll check into that.

It’s working now that I logged out of the app on my iPhone and logged back in - I’m not sure what was wrong before.

Very nicely done! Im going to test this code tonight

After a few months of sitting on this project, I finally got around to it early this week, but unfortunately with no luck. @docwisdom or @ben1 could either of you provide a pictures of the MIMOlite and the SM120X wired up and running? After wiring, re-wiring, and conducting a ton of research I cant seem to determine what is wrong or what I’ve missed. Any help would be appreciated. Nice work.

@ziemba_jason - I wired a MIMOlite to a RM4 relay. I happen to have First Alert smoke detectors so I wanted to stick with the same brand. There are warnings on all the smoke detectors to stick with the same brand to avoid issues when connecting devices together.

I think the SM120X has more functionality (and more wires coming out of it). @docwisdom, did you use the SM120X?

@ben1 yes I did. here is my hookup photo. Relay and sensor work just fine.

Looks great.
Just out of curiosity what did you use to build the power supply? It looks like an old charger for a cell phone.
Also how did you get power to it. It would be nice to build a bridge to the AC HOt and AC Neutral that is already powering the smoke alarms, red and white wires so that it can all go behind one of the alarms.
Any experience of maybe just wiring them direct to the plug and taping it up?

Its a 12v power supply I got on Amazon. Unfortunately the 9v output on the SM120 is only rated at 5ma, which is nowhere near enough to power the MIMO. I plug it into an outlet I have in my attic.