In the Alexa App when you create a Routine and select an Alexa Says Action, you can then select Phrases and there is a selection of categories. In many, if not all, of the categories there is a “Say a random phrase” option. I have not played with it much, but it may or may not cover what you are looking for in terms of random.
Since you can add multiple Alexa Says Actions to a Routine you might be able to get clever by combining a Random phrase with a fixed Custom response.
In my bedroom I have an Ecobee temperature sensor and Iris motion sensor. Until Alexa added sensors to her bag of tricks, I could just ask: “Alexa, what is the temperature in the bedroom?”. Alexa would respond with the temperature from the Ecobee sensor. Now that Alexa knows about the Iris sensor, she responds: “There is more than one thermostat in the bedroom. Please ask again with the name of the thermostat.”.
Simulated Switches and Contacts did not work for me, but the uDTH Universal Device Type did work if I removed the Lock and Door capabilities. Maybe @Mike_Maxwell can create a uDTHlite version that does not have these features so they can be used by Alexa.
If Alexa can see a simulated temperature device then you can average out those two temps in webCoRE and send it to to the virtual temp device. I am not home to test it.
Is this actually working in the UK or is it US only at the moment?
All my devices are showing up in the Alexa app (I can ask her for the temperatures of my contact sensors etc) but I can’t create any routines with a device:
I’m not sure about the UK, but I’m in the US and had the same experience as you did. If you can see your sensors in Alexa’s smart home devices, but don’t see the option to use sensors in the routines, try signing out of the Alexa app and signing back in. (Restarting the phone, or killing the app doesn’t help.)
I combined two device handlers into one, so that the device can be triggered like a switch (I used it to turn the switch on when I arrive home, and off when I leave), but is also recognized in alexa as a contact sensor so that it can trigger an alexa routine. I only put this together as a proof of concept, so the code can probably be cleaned up, but it appears to be working.
The two device handlers I combined were the simulated switch:
and joshualyon’s simulated contact sensor:
Result:
/**
* Copyright 2015 SmartThings
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
* for the specific language governing permissions and limitations under the License.
*
*/
metadata {
definition (name: "Alexa Switch", namespace: "bjpierron", author: "bjpierron", runLocally: false, mnmn: "SmartThings", vid: "generic-switch") {
capability "Switch"
capability "Relay Switch"
capability "Sensor"
capability "Actuator"
capability "Health Check"
capability "Contact Sensor"
command "markDeviceOnline"
command "markDeviceOffline"
}
simulator {
status "open": "contact:open"
status "closed": "contact:closed"
}
tiles {
standardTile("switch", "device.switch", width: 2, height: 2, canChangeIcon: true) {
state "off", label: '${currentValue}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff"
state "on", label: '${currentValue}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC"
}
standardTile("deviceHealthControl", "device.healthStatus", decoration: "flat", width: 1, height: 1, inactiveLabel: false) {
state "online", label: "ONLINE", backgroundColor: "#00A0DC", action: "markDeviceOffline", icon: "st.Health & Wellness.health9", nextState: "goingOffline", defaultState: true
state "offline", label: "OFFLINE", backgroundColor: "#E86D13", action: "markDeviceOnline", icon: "st.Health & Wellness.health9", nextState: "goingOnline"
state "goingOnline", label: "Going ONLINE", backgroundColor: "#FFFFFF", icon: "st.Health & Wellness.health9"
state "goingOffline", label: "Going OFFLINE", backgroundColor: "#FFFFFF", icon: "st.Health & Wellness.health9"
}
main "switch"
details(["switch","on","off","deviceHealthControl"])
}
}
def installed() {
log.trace "Executing 'installed'"
markDeviceOnline()
off()
initialize()
}
def updated() {
log.trace "Executing 'updated'"
initialize()
}
def markDeviceOnline() {
setDeviceHealth("online")
}
def markDeviceOffline() {
setDeviceHealth("offline")
}
private setDeviceHealth(String healthState) {
log.debug("healthStatus: ${device.currentValue('healthStatus')}; DeviceWatch-DeviceStatus: ${device.currentValue('DeviceWatch-DeviceStatus')}")
// ensure healthState is valid
List validHealthStates = ["online", "offline"]
healthState = validHealthStates.contains(healthState) ? healthState : device.currentValue("healthStatus")
// set the healthState
sendEvent(name: "DeviceWatch-DeviceStatus", value: healthState)
sendEvent(name: "healthStatus", value: healthState)
}
private initialize() {
log.trace "Executing 'initialize'"
sendEvent(name: "DeviceWatch-Enroll", value: [protocol: "cloud", scheme:"untracked"].encodeAsJson(), displayed: false)
}
def parse(description) {
}
def on() {
log.debug "$version on()"
sendEvent(name: "switch", value: "on")
sendEvent(name: "contact", value: "open")
}
def off() {
log.debug "$version off()"
sendEvent(name: "switch", value: "off")
sendEvent(name: "contact", value: "closed")
}
private getVersion() {
"PUBLISHED"
}