Announcement

Collapse
No announcement yet.

Virtual Temperature or Thermostat

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Virtual Temperature or Thermostat

    Hi, I've created a virtual device which I want to use as a Thermostat. I can switch it On and Off by Alexa by saying...
    Alexa, Turn Off the hall Temperature
    Alexa, Turn On the hall Temperature

    But I can't find any way to set a actual Temperature, the following doesn't work...
    "Alexa, set the hall Temperature to 20 degrees"

    I've tried setting the "control use" to both "heat setpoint" and "Thermostat Heat"

    Can Anyone see what I'm doing wrong?

    Thanks,
    Dean.
    Attached Files

    #2
    I dont think you'll be able to create a virtual thermostat using the HS GUI. There are a number of bits that have to be set on the device that are simply not available in the GUI.

    Also, the Connected Home API uses the HS root device for the thermostat to find the setpoint child devices to set.

    So, without some intensive scripting, you wont be able to do this
    HS4Pro on a Raspberry Pi4
    54 Z-Wave Nodes / 21 Zigbee Devices / 108 Events / 767 Devices
    Plugins: Z-Wave / Zigbee Plus / EasyTrigger / AK Weather / OMNI

    HSTouch Clients: 1 Android

    Comment


      #3
      The alexa thermostat integration has some very specific requirements that only through trial, error and help I was able to get to the bottom of and get a virtual thermostat in HS. I think the only way you are getting the group of devices is to create them by script (they need to have relationships setup etc), this is part of my script (you are likely to need to modify it) that will create the devices that fit the requirements.

      Code:
      Sub CreateDevices(ByVal RoomName As String)
      
          Dim CurrRef As Integer = 0
          Dim BaseRef As Integer = 0
          Dim dv As Scheduler.Classes.DeviceClass = Nothing
          Dim root_dv As Scheduler.Classes.DeviceClass = Nothing
      
          Try
              hs.writelog(LT, "Devices Do Not Exist - Creating")
      
              For i As Byte = 0 To 5
                 Select i
                      Case 0
                          dv = hs.GetDeviceByRef(hs.NewDeviceRef(RoomName & " Thermostat"))
                          dv.Address(hs) = RoomName & "-Root"
                          BaseRef = dv.Ref(hs)
                      Case 1
                          dv = hs.GetDeviceByRef(hs.NewDeviceRef(RoomName & " Set Point"))
                          dv.Address(hs) = RoomName & "-HeatSet"
                      Case 2
                          dv = hs.GetDeviceByRef(hs.NewDeviceRef(RoomName & " Mode"))
                          dv.Address(hs) = RoomName & "-HeatMode"
                      Case 3
                          dv = hs.GetDeviceByRef(hs.NewDeviceRef(RoomName & " Input Temperature"))
                          dv.Address(hs) = RoomName & "-InTemp"
                      Case 4
                          dv = hs.GetDeviceByRef(hs.NewDeviceRef(RoomName & " Override"))
                          dv.Address(hs) = RoomName & "-OvRide"
                      Case 5
                          dv = hs.GetDeviceByRef(hs.NewDeviceRef(RoomName & " Operating Status"))
                          dv.Address(hs) = RoomName & "-OpStatus"
                  End Select
      
                 dv.Location(hs) = RoomName
                 dv.Last_Change(hs) = Now
                 dv.Device_Type_String(hs) = "Thermostat Device"
      
                  If i = 0 Then
                      root_dv = dv
                      dv.Relationship(hs) = Enums.eRelationship.Parent_Root
                  Else
                      If root_dv IsNot Nothing Then root_dv.AssociatedDevice_Add(hs, dv.Ref(hs))
                      dv.Relationship(hs) = Enums.eRelationship.Child
                      dv.AssociatedDevice_Add(hs, BaseRef)
                  End If
      
                  Dim DT As New DeviceTypeInfo
      
                  If i = 0 then 
                      DT.Device_API = DeviceTypeInfo.eDeviceAPI.Thermostat
                      DT.Device_Type = DeviceTypeInfo.eDeviceType_Thermostat.Root
                  ElseIf i = 1
                      DT.Device_API = DeviceTypeInfo.eDeviceAPI.Thermostat
                      DT.Device_Type =  DeviceTypeInfo.eDeviceType_Thermostat.Setpoint
                      DT.Device_SubType = DeviceTypeInfo.eDeviceSubType_Setpoint.Heating_1
                  ElseIf i = 2
                      DT.Device_API = DeviceTypeInfo.eDeviceAPI.Thermostat
                      DT.Device_Type =  DeviceTypeInfo.eDeviceType_Thermostat.Mode_Set
                  ElseIf i = 3
                      DT.Device_API = DeviceTypeInfo.eDeviceAPI.Thermostat
                      DT.Device_Type =  DeviceTypeInfo.eDeviceType_Thermostat.Temperature
                      DT.Device_SubType = DeviceTypeInfo.eDeviceSubType_Temperature.Temperature
                  ElseIf i = 5
                      DT.Device_API = DeviceTypeInfo.eDeviceAPI.Thermostat
                      DT.Device_Type =  DeviceTypeInfo.eDeviceType_Thermostat.Operating_Mode
                  end if
      
                  dv.DeviceType_Set(hs) = DT
      
                  Select Case i
                      Case 0 : hs.setdevicestring(dv.ref(hs), "No Status", True)
                      Case 1
      
                          Dim Pair As VSPair
      
                          Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Both)
                          Pair.PairType = VSVGPairType.Range
                          Pair.RangeStart = 15
                          Pair.RangeEnd = 25
                          Pair.RangeStatusSuffix = " °C"
                          Pair.Render = Enums.CAPIControlType.ValuesRangeSlider
                          Pair.ControlUse = ePairControlUse._HeatSetPoint
                          hs.DeviceVSP_AddPair(dv.Ref(hs), Pair)
      
                          hS.setdevicevaluebyref(dv.ref(hs), 20, True)
                          dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES)
      
                      Case 2
      
                          Dim Pair As VSPair
      
                          Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Both)
                          Pair.PairType = VSVGPairType.SingleValue
                          Pair.Value = 100
                          Pair.Status = "Heat"
                          Pair.Render = Enums.CAPIControlType.Button
                          Pair.ControlUse = ePairControlUse._ThermModeHeat
                          hs.DeviceVSP_AddPair(dv.Ref(hs), Pair)
      
                          Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Both)
                          Pair.PairType = VSVGPairType.SingleValue
                          Pair.Value = 0
                          Pair.Status = "Off"
                          Pair.Render = Enums.CAPIControlType.Button
                          Pair.ControlUse = ePairControlUse._ThermModeOff
                          hs.DeviceVSP_AddPair(dv.Ref(hs), Pair)
      
                          hS.setdevicevaluebyref(dv.ref(hs), 100, True)
                          dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES)
                      Case 3
      
                          Dim Pair As VSPair
      
                          Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Status)
                          Pair.PairType = VSVGPairType.Range
                          Pair.RangeStart = 15
                          Pair.RangeEnd = 25
                          Pair.RangeStatusSuffix = " °C"
                          Pair.RangeStatusDecimals = 1
          
                          hs.DeviceVSP_AddPair(dv.Ref(hs), Pair)
      
                          hS.setdevicevaluebyref(dv.ref(hs), 20, True)
                          dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES)
                          dv.MISC_Set(hs, Enums.dvMISC.STATUS_ONLY)
      
                      Case 4
      
                          Dim Pair As VSPair
                          
                          Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Both)
                          Pair.PairType = VSVGPairType.Range
                          Pair.RangeStart = 15
                          Pair.RangeEnd = 240
                          Pair.RangeStatusPrefix = "Heating "
                          Pair.RangeStatusSuffix = " Minutes"
                          Pair.Render = Enums.CAPIControlType.ValuesRange
                          hs.DeviceVSP_AddPair(dv.Ref(hs), Pair)
      
                          Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Both)
                          Pair.PairType = VSVGPairType.SingleValue
                          Pair.Value = 0
                          Pair.Status = "Off"
                          Pair.Render = Enums.CAPIControlType.Button
                          Pair.ControlUse = ePairControlUse._Off
      
                          hs.DeviceVSP_AddPair(dv.Ref(hs), Pair)
      
                          hS.setdevicevaluebyref(dv.ref(hs), 0, True)
                          dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES)
      
                      Case 5
      
                          Dim Pair As VSPair
      
                          Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Both)
                          Pair.PairType = VSVGPairType.SingleValue
                          Pair.Value = 255
                          Pair.Status = "Heating On"
                          Pair.ControlUse = ePairControlUse._On
                          Pair.Render = Enums.CAPIControlType.Button
      
                          hs.DeviceVSP_AddPair(dv.Ref(hs), Pair)
      
                          Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Both)
                          Pair.PairType = VSVGPairType.SingleValue
                          Pair.Value = 0
                          Pair.Status = "Heating Off"
                          Pair.ControlUse = ePairControlUse._Off
                          Pair.Render = Enums.CAPIControlType.Button
      
                          hs.DeviceVSP_AddPair(dv.Ref(hs), Pair)
      
                          hS.setdevicevaluebyref(dv.ref(hs), 0, True)
                          dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES)
      
                  End Select
      
                  Select Case i
      
                      'this sets the value graphics pairs
      
                      Case 4 'overirde
                          Dim GPair As VGPair
                          
                          GPair = New VGPair
                      
                          GPair.PairType = VSVGPairType.Range
                          GPair.RangeStart = 0
                          GPair.RangeEnd = 240
                          GPair.Graphic = "/images/HomeSeer/contemporary/timers.png"
      
                          hs.DeviceVGP_AddPair(dv.ref(hs), GPair)
      
                      Case 3, 1 'overirde
                          Dim GPair As VGPair
                          GPair = New VGPair
                      
                          GPair.PairType = VSVGPairType.Range
                          GPair.RangeStart = 15
                          GPair.RangeEnd = 25
                          GPair.Graphic = "/images/HomeSeer/contemporary/Thermometer-50.png"
      
                          hs.DeviceVGP_AddPair(dv.ref(hs), GPair)
      
                  End Select
      
                  hs.saveeventsdevices
      
              Next
      
              Main(RoomName)
      
          Catch ex As Exception
              hs.writelog(LT, "Create Devices Exception: " & ex.message.tostring)
          End Try
      
      End Sub

      Comment

      Working...
      X