Anyone using a temperature sensor other than multi ones?

Looking for a more reliable tempertature sensor than the one included in the smartthings multi; also the Aeon Labs is a multi (haven’t tried it yet).
Not looking for a thermostat, just a simple temperature sensor; I see a few on Amazon, but I was wondering if anyone has experience about how they behave with smartthings.

Bumping this - I’m interested in this also to control a keg and bottle aging refrigerator in an uninsulated garage that requires heat in the winter.

I too find the ST Multi to be “WAY” off in terms of temp. I’m using the Everspring ST814 with much better results.

Jim

2 Likes

I actually sent them a message yesterday morning to see if the ST814 would function properly in a 40-50 degree refrigerator. On Amazon it said the lower end of the operating range was 50. Have you used it in those temperatures?

I thought I saw some instructions somewhere here in the forums on how to calibrate the temp sensor in the Multi to make it more accurate. Have you tried that?

@Rubin

I thought I saw some instructions somewhere here in the forums on how to calibrate the temp sensor in the Multi to make it more accurate. Have you tried that?

I have not seen this. If you find it, please post the link here.

Thanks,

Jim

http://build.smartthings.com/projects/smartsensemultitempadjust/

1 Like

I’m interested in a thermometer with an external probe for tracking hot tub temp variations. Anyone know of anything like that available?

epicuria,

Intermatic offers pool/spa systems that can monitor hot tub temps and communicate via Z-Wave. Looks really expensive one you get the probe, the receiver and some sort of interface.

On the Homeseer HA system, they sell the Oregon Scientific floating temperature sensor the transmits to an available receiver that connects via USB to Homeseer in this case. I guess if you could do a USB to Z-Wave adaptation and write a device type for it…

Jim

Appreciate the tips Jim!
(Had to whitelist my home and office to get back in to reply.)

@epicuria, if you know your way around C code, and have basic knowledge of electronics, you should be able to hack something together with an Arduino and the ThingShield, as well as a waterproof temperature sensor, such as this one: https://www.sparkfun.com/products/11050

@FlorianZ, thanks - I’ve got a basic skill level and can make sense of the code in the apps enough to move stuff around and customize it - but haven’t yet gotten into the Arduino world. The todo list keeps getting longer!

Just surprising that there is not enough of a demand for a z-wave temp probe!

I think I’m going to get the External Temp Sensor for the Twine and build that in to my Google Apps logging using IFTTT.

@jbeletti - how did you get your ST814 to work with SmartThings? If you wrote a custom device type, would you mind sharing it? I just ordered one since the integration with my Nest hasn’t been working so well lately. I need a reliable way to get indoor Temperature and Humidity into SmartThings and this device seems to be the easiest way.

My Monoprice Motion Sensors have temp sensors too, and they seem pretty reliable, though I haven’t attempted to compare their values against any other device. They just always seem about right.

Not in stock at http://monoprice.com last time I looked, but when they are, they’re a great price!

If you want a “local” outside temperature, look at the Weather Tile in the IDE. It can report current weather conditions to ST, though at the moment it only does it at fairly random times. Apparently a fix is coming any time now, though. Right Andrew?

Quirky spotter as temperature/humidity sensor is not bad. Still awaiting official st labs support but I believe it’s coming. Downside is that it has to be on AC adaptor to monitor temp/hum and other sensors are quite useless, but for $20 each at thinkgeek.com (plus some possible discount codes you can get even cheaper) it is pretty good option to have. But I’d wait until ST support is out.

I really like the Everspring ST814 but I still can’t get SmartThings to show any data from the device. All I get in the IDE is woke up/active/inactive events.

1 Like

Manual for the device here: http://www.homeseer.com/pdfs/Everspring/ST814.pdf

From the brief look I had at the manual, it looks like some configuration parameters need to be set before it will start reporting temperatures. I think I’ll try to take the Aeon Labs Multi device type and compare with the EverSpring Flood Sensor device type, assuming other devices from that company work the same.

I see in the Flood Sensor logic the configuration section assigns it to group one (not sure what that does). I wonder if that’s the key to making it work?

Ben - Thanks for looking into this. If I could figure out a way to apply the info in the manual to, well, anything I’d be happy to do so but I haven’t been able to figure out how to read the data coming from the device. I think I’m looking for sensor values 01 and 31 but I don’t even see those anywhere. I guess maybe I need to write code to read them?

Awesome - started tinkering with this some more and now the app on my phone crashes every time I open it. Tried deleting the device and the new device types I created and rebooting the phone but no luck. Argh!

Update - clearing the data from Application Settings and logging in again fixed it.

Success! The device appears to report NOTHING back to z-wave without some configuration parameters being set. I installed the below device type for this device using the developer ide, removed the batteries, reinserted them, and then immediately hit the configure button in the UI on my iOS device to push the configuration commands to the device when it was awake.

It’s now reporting temps and humidity for me! My initial setup is to have it report back regardless every 15 minutes, and report every temp and humidity change at the smallest change possible (according to the manual at least). I have no idea what that does to battery life, but my application requires accurate, up to date temp and humidity.

This is a really rough merge of the Aeon-Labs Multi, EverSpring ST812 (Flood Sensor), and stuff pulled out of the manual. Good Luck!

metadata {
	definition (name: "EverSpring ST814", author: "@Ben") {
		capability "Battery"
		capability "Temperature Measurement"
		capability "Relative Humidity Measurement"
        capability "Configuration"
        capability "Alarm"
        capability "Sensor"

		fingerprint deviceId: "0x2101", inClusters: "0x31,0x60,0x86,0x72,0x85,0x84,0x80,0x70,0x20,0x71"
        //0x31	COMMAND_CLASS_SENSOR_MULTILEVEL_V2
        //0x60	COMMAND_CLASS_MULTI_CHANNEL_V2
        //0x86	COMMAND_CLASS_VERSION
        //0x72	COMMAND_CLASS_MANUFACTURER_SPECIFIC
        //0x85	COMMAND_CLASS_ASSOCIATION_V2
        //0x84	COMMAND_CLASS_WAKE_UP_V2
        //0x80	COMMAND_CLASS_BATTERY
        //0x70	COMMAND_CLASS_CONFIGURATION_V2
        //0x20	COMMAND_CLASS_BASIC
        //0x71	COMMAND_CLASS_ALARM
	}

	simulator {
		// messages the device returns in response to commands it receives

		for (int i = 0; i <= 100; i += 20) {
			status "temperature ${i}F": new physicalgraph.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
				scaledSensorValue: i, precision: 1, sensorType: 1, scale: 1).incomingMessage()
		}

		for (int i = 0; i <= 100; i += 20) {
			status "humidity ${i}%": new physicalgraph.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
				scaledSensorValue: i, precision: 0, sensorType: 5).incomingMessage()
		}

		for (int i = 0; i <= 100; i += 20) {
			status "battery ${i}%": new physicalgraph.zwave.Zwave().batteryV1.batteryReport(
				batteryLevel: i).incomingMessage()
		}
	}

	tiles {
		valueTile("temperature", "device.temperature", inactiveLabel: false) {
			state "temperature", label:'${currentValue}°',
			backgroundColors:[
				[value: 31, color: "#153591"],
				[value: 44, color: "#1e9cbb"],
				[value: 59, color: "#90d2a7"],
				[value: 74, color: "#44b621"],
				[value: 84, color: "#f1d801"],
				[value: 95, color: "#d04e00"],
				[value: 96, color: "#bc2323"]
			]
		}
		valueTile("humidity", "device.humidity", inactiveLabel: false) {
			state "humidity", label:'${currentValue}% humidity', unit:""
		}

		valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") {
			state "battery", label:'${currentValue}% battery', unit:""
		}
		standardTile("configure", "device.configure", inactiveLabel: false, decoration: "flat") {
			state "configure", label:'', action:"configuration.configure", icon:"st.secondary.configure"
		}

		main(["temperature", "humidity"])
		details(["temperature", "humidity", "battery", "configure"])
	}
}

// Parse incoming device messages to generate events
def parse(String description)
{
    //??  POWER_APPLIED
    //0x31	SENSOR_MULTILEVEL_REPORT
    //0x71	ALARM_REPORT
    //0x80	BATTERY_REPORT_COMMAND    
    //0x84	COMMAND_CLASS_WAKE_UP_V2
    
    def parsedZwEvent = zwave.parse(description, [0x31: 2, 0x71: 1, 0x84: 2, 0x80: 1])
	def zwEvent = zwaveEvent(parsedZwEvent)
	def result = []

	result << createEvent( zwEvent )

	if( parsedZwEvent.CMD == "8407" ) {
		def lastStatus = device.currentState("battery")
		def ageInMinutes = lastStatus ? (new Date().time - lastStatus.date.time)/60000 : 600
		log.debug "Battery status was last checked ${ageInMinutes} minutes ago"

		if (ageInMinutes >= 600) {
			log.debug "Battery status is outdated, requesting battery report"
			result << new physicalgraph.device.HubAction(zwave.batteryV1.batteryGet().format())
		}
		result << new physicalgraph.device.HubAction(zwave.wakeUpV1.wakeUpNoMoreInformation().format())
	}

	log.debug "Parse returned ${result}"
	return result
}

// Event Generation
def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
	[descriptionText: "${device.displayName} woke up", isStateChange: false]
}

def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv2.SensorMultilevelReport cmd)
{
	log.debug "SensorMultilevelReport cmd: ${cmd.toString()}}"

	def map = [:]
	switch (cmd.sensorType) {
		case 1:
			// temperature
			def cmdScale = cmd.scale == 1 ? "F" : "C"
			map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision)
			map.unit = getTemperatureScale()
			map.name = "temperature"
			break;
		case 5:
                        // humidity
			map.value = cmd.scaledSensorValue.toInteger().toString()
			map.unit = "%"
			map.name = "humidity"
			break;
	}
	map
}

def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) {
	def map = [:]
	map.name = "battery"
	map.value = cmd.batteryLevel > 0 ? cmd.batteryLevel.toString() : 1
	map.unit = "%"
	map.displayed = false
	map
}

def zwaveEvent(physicalgraph.zwave.Command cmd) {
	log.debug "Catchall reached for cmd: ${cmd.toString()}}"
	[:]
}

def configure() {
	delayBetween([
       	// report in every 15 minutes
        zwave.configurationV1.configurationSet(parameterNumber: 6, size: 2, scaledConfigurationValue: 15).format(),
    	
    	// report a temperature change of 1 degree C
        zwave.configurationV1.configurationSet(parameterNumber: 7, size: 1, scaledConfigurationValue: 1).format(),
        
        // report a humidity change of 5 percent
        zwave.configurationV1.configurationSet(parameterNumber: 8, size: 1, scaledConfigurationValue: 5).format()
	]) 
}
4 Likes