Announcement

Collapse
No announcement yet.

Ketra support?

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

    Ketra support?

    Hi,

    I imagine this would be difficult to confirm at this point but will/ does this plug-in support Ketra fixtures that are controlled via Homeworks? In the original implementation, the Ketra bulbs were controlled by a separate Hub (similar to Hue) but the new version of the Homeworks processor will have Keta support built-in (meaning it will have a Zigbee radio). Do you think these devices will be visible to the plug-in? If so, is it likely all attributes will be available for control via Homeseer (eg color temp, color, level, etc)?

    Thank you!

    #2
    Bumping this as I am in the initial design of a QS system which will include Ketra, Palladiom, and some additional Lutron dimmer compatible lights etc. The existence of this addon is a factor in the selection of QS as I want interoperability.

    Comment


      #3
      Just a data point on this - a workaround that I'm prototyping on an older QS processor combines Donmor's plugin with Hue, and a bunch of RGBCCT 2ID controllers that I bought on Amazon. It basically pushes the RGBCCT light programming into HS, and the Scene configurations into the Hue app. Lutron has poor color / intensity integration, and no real wall controls for it, so IMHO it makes sense to not rely on QS to do anything except send a trigger via a button press. So far it works as I'd expected, with the greatest deficiency being the Event programming in HS, which is not really easily maintained. That said, I've got simple things like "select scene", rise and dim, and other simple room integrations working.

      Note - The key to both color and light intensity is buying the 2ID Zigbee controls ($30 each), which control the Kelvin levels, and RGB independently thru the Hue app.

      Comment


        #4
        Update: I ended up uninstalling DonMor's plugin, as it just wasn't up to the task of doing exactly what I needed. It's not a bad PI, it just wasn't as QS-able as I needed it to be. It also created a mad number of devices due to my large-ish system, which slowed HS down considerably, so there's clearly some optimization which could be coded for in the future, for large installations. This may be a HS limitation as opposed to a PI limitation. For smaller installations with less device needs, I'm sure it is just fine. Of note, the PI would always respond to whatever was coming from QS, so that was not a problem.

        The new trick, which works even better, IMHO, is to use a 3rd party integration to establish a TCP/IP connection from QS to a listening device on the HS server. I wrote a script that generated a series of integration commands, like "Hue.LivingRoom.On", "Hue.LivingRoom.Off", "Hue.LivingRoom.Scene1", "Hue.Livingroom.SaveAsDefault", etc. etc. I could then add these codes to whatever button press I wanted in QS, and tweek the desired effects in a homeseer script, which can parse the command and react accordingly. The key to doing this is to make a command-set rich enough to allow QS to communicate exactly what you are doing. Youtube "Homeworks QS hue" for a video demo of how it works.

        Comment


          #5
          I just got this PI running with a rather large QS system (400 some odd devices), and at least with my firmware level DonMor had to make some adjustments, but overall the beta .100 version seems to be working well. It does take along time to incorporate all the devices, and HS UI seems to be less responsive during that time (though operations still continue fine) , and when the number of devices is being incremented, the UI seems to be constantly updating. I don't think that's a plugin issue however. Once it settles down I can't detect any HS slowdowns.

          I cannot tell you how great it is to have the lighting and shade controls under HS control. Very nice! And DonMor has provided me great support.

          Comment


            #6
            Hi,

            Very interesting, would love to see your script/ a deeper dive into how you have it structured. I personally am using the Radio RA2 plugin and it works well! I use it with the Jowihue plugin and it is very responsive. For my next house, I think I will be upgrading to Homeworks and am considering Ketra (though so damn expensive for what is basically as fancy Hue bulb) but want the more advanced features of Homeseer. Thus, my concern regarding if this plugin will see the Ketra devices.

            If not, I think in theory, I could pair the Ketra bulbs to virtual devices that this plugin will be able to see/ control. I don't know a ton about programming Homeworks/ how deep the conditional logic goes. I am certified on the full RA2 system but not Homeworks.

            Thanks!


            Comment


              #7
              I'll see if I can clean up the script for distribution and post it. RE: Ketra - Just as a primer, I've fumbled around in the QS wilderness for years trying to code around Homeworks design limitations with controlling color (Some product manager should have gotten demoted to sweeping floors for that lack of insight) My own requirements were straightforward - create a subset of up to 10 saved colors per area that I can individually customize and call up, depending on the scene. I tried using QS DMX, various external DMX controllers, and years later, I settled on Hue.

              For starters, the Lutron DMX contols for multi-color DMX are primarily COMPILE-TIME settings- ugh, what a disastrous implementation! That said, I discovered a decent work-around for that issue (hint: assign each color it's own single-channel DMX address) but the UI was limited to the Lutron App, which is pretty poor. As an aside, DMX commands and changes are not even exposed to the QS output stream, so there would be no means by which Homeseer could even detect it. So that is a deficiency that there is little hope for getting around. If the same deficiency is true for Ketra, then you'd be unable to control Ketra from anything other than the Ketra app and QS.

              Not all is lost - what QS does decently well is the ability to telnet to 3rd party IP ports, and send command strings on-demand - on a button-press, for example. And in QS, I can define separate button actions for "Press", "Press-and-hold", "Double-Click", etc. So if I created a command set that responded to a specific type of button press, I could program a single button do perform various tasks. For example, single click issues the command "Hue.<room>.<command>" for Hue "Rooms", and "Hue.<zone>.<command>" for Hue "Zones", and a "Press-and-Hold" sends the command to save the settings to memory as the Favorite setting, for recall the next time the lights are turned on. Supported commands are "On, Off, Favorite, Nightlight, Down, Up, Save, Next". With these simple commands sent from QS to Homeseer, I can have Hue act as a slave to QS, and turn lights on, off, save settings, go to the next defined scene in sequence, etc.

              Bottom line is this: IMHO, QS is a undesirable place to have too much programming logic - it's a mediocre programming environment at-best, with limited flexibility. Simple things like saving custom scenes on-the-fly from the keypad is impossible in QS, but quite straightforward in HS - so my advice is to just have QS relay user requests to HS via a static custom command set, and move the lighting logic into an HS script, which is called everytime QS sends a message to HS (BTW this is accomplished via a Digi-One on the HS server, and a COM port controlled by HS). The main disadvantage to this strategy is that now you have 2 systems sharing control of the lights, and if HS goes down for any reason, there will be some confusion as to why certain settings aren't working, until you get HS running again.

              I'm not completely familiar with Ketra's full range of features, but from what I can see from the product demos, I'd venture to say that my setup can do just as much, if not more than Ketra can. I'm guessing that the Ketra implementation is a "recall" process only, and that there is limited/no means of tweaking settings from a standard Lutron Keypad, other than fade.

              Comment


                #8
                ' Code for generating the NuVo and Hue command set, and for processessing any incoming calls from QS.
                ' There is a bug in the Jowihue scene recall function, so the workaround is to create a separate
                ' event for scene manipuation - tedious! The hope is that the bug is eventually fixed, allowing for
                ; everything to be controlled programatically, and the
                ' custom events can be removed from HS.
                '
                ' QSDataReceive(data) - function called by the port handler when data arrives. Designed to be enhancible for future contol needs
                ' QSCreateIntegration(parms) - called once to write the integration file, to be uploaded to QS


                Const QSINIFile As String = "QSBridge.ini"
                Const HueDefaultScene As String = "Scene 1"

                Dim HueZones() As String = {"MBR", "2nd Floor"} ' These must match the Zone names as defined in the Hue App
                Dim HueRooms() As String = { "MBR Foyer", "MBR Suite", "MBR Master", "Living Room", "Dining Room", "Foyer", "Kitchen", "Media Room"} ' These must match the Room names as defined in the Hue App
                Dim HueScenes() As String = {"Nightlight", "Relax", "Read", "Concentrate", "Energize", "Bright", "Dimmed"}
                Dim HueNumberedScenes() As String = {"Scene 1", "Scene 2", "Scene 3", "Scene 4", "Scene 5", "Scene 6"}




                Sub QSDataReceive(ByVal QSData As String)
                '' This will process data returned from Com Port
                Dim Type As String = "QS Recv"
                Dim Debug = hs.GetVar("QSDebug")

                ' Scrub the data of all unprintable Characters
                '-----------------------------------------------
                QSData = QSData.Replace(vbCRLF, "")
                QSData = QSData.Replace(vbCR, "")
                QSData = QSData.Replace(vbLF, "")

                'Short circuit any messages we dont care about
                '-------------------------------------------
                'If (instr(1, QSData, "#OK") Or instr(1, QSData, "DISP") Or instr(1, QSData, "#?") Or instr(1, QSData, "ACTIVE")) Then
                ' If Debug = True Then hs.WriteLog(Type, QSData & " received. No action required. Exiting Sub")
                ' Exit Sub
                ' End If

                If Debug Then hs.Writelog(Type, "QS String received: " & QSData)

                Dim QSCallType As String = ucase(left(QSData, 3))
                Select Case QSCallType
                Case "NUV"
                hs.runscriptfunc("SendNuvo.vb", "Main", right(QSData, len(QSData) - 5), True, True)
                Case "HUE"
                QSProcessHue(right(QSData, len(QSData) - 4))
                Case Else
                hs.writelog(Type, "Unidentified call type received from QS: " & QSCallType)
                End Select

                End Sub


                Sub QSProcessHue(ByVal QSData As String)
                Dim Type As String = "QS Recv"
                Dim Debug = hs.GetVar("QSDebug")
                Dim HuePrefix As String = "JowiHue JowiHue "
                Dim QSDataParts() = split(QSData, ".")
                Dim HueAreaType As String = QSDataParts(0)
                Dim HueName As String = QSDataParts(1)
                Dim HueSetting As String = QSDataParts(2)

                ' Replace underscore Placeholder with a space, to match what is in Hue App
                ' We added '_' in place of spaces out of telnet concerns, which turned out
                ' to be unneccessary. Some commands will have them, others wont
                '-----------------------------------------------------------------------
                HueName = HueName.Replace("_", " ")
                HueSetting = HueSetting.Replace("_", " ")

                If Debug Then hs.Writelog(Type, "Hue Command - Type: " & HueAreaType & ", Name: " & HueName & ", Setting: " & HueSetting)

                ' Lookup the history of the Scene, in case we need to do some manipulating
                '--------------------------------------------------------------------------
                Dim HueFavScene As String = hs.getIniSetting("HueFavScene", HueName, HueDefaultScene, QSINIFile) 'Default scene if none found
                Dim HuePrevScene As String = hs.getIniSetting("HueLastScene", HueName, HueDefaultScene, QSINIFile)

                ' Testing Area
                '---------------
                'HueAreaType = "All"
                'HueName = "All"
                'HueSetting = "Off"
                'Dim Scenes() As String = hs.PluginFunction("JowiHue", "", "GetLights", Nothing)
                'For Each hscene As String In Scenes
                ' hs.writelog("Hue Scenes", "Stored Animaton: " & hscene)
                ' Next

                Select Case Ucase(HueSetting)
                Case "ON", "OFF", "DOWN", "UP"
                Select Case ucase(HueAreaType)
                Case "ALL"
                hs.CAPIControlHandler(hs.CAPIGetSingleControl(hs.GetDeviceRe fByName(HuePrefix & "All Lights"), True, HueSetting, False, False))
                Case "ZONE", "ROOM"
                hs.CAPIControlHandler(hs.CAPIGetSingleControl(hs.GetDeviceRe fByName(HuePrefix & HueName), True, HueSetting, False, False))
                ' hs.SetDeviceValueByRef(hs.GetDeviceRefByName(HuePrefix & HueName), HueSetting, True) ' This will work if we choose to send a number instead of a command string
                Case Else
                hs.Writelog(Type, "Unknown Hue Type definition: " & HueAreaType)
                End Select
                Case "NIGHTLIGHT"
                hs.triggerEvent(HueName & " " & HueSetting)
                Case "SCENE 1", "SCENE 2", "SCENE 3", "SCENE 4", "SCENE 5", "SCENE 6", "SCENE 7", "SCENE 8", "SCENE 9", "SCENE 10", "RELAX", "READ", "CONCENTRATE", "ENEGIZE", "BRIGHT", "DIMMED"
                'Dim SceneVar As String = HueName & " " & HueSetting
                hs.triggerEvent(HueName & " " & HueSetting)
                hs.SaveINISetting("HueLastScene", HueName, HueSetting, QSINIFile)
                'Dim test As Boolean = hs.PluginFunction("JowiHue", "", "SetPreset", {HueName, HueSetting, ""})
                'Dim test As Boolean = hs.PluginFunction("JowiHue", "", "StartScene", {"Scene 1"}) ' Room Read", "Media Room", ""})
                Case "NEXT"
                Dim HueSortScenes = QSGetHueScenes(HueName)
                Dim HueNextScene As Integer
                For x As Integer = 1 To HueSortScenes(0)
                If x = HueSortScenes(0) Then
                HueNextScene = 1
                Exit For
                End If
                If HuePrevScene = HueSortScenes(x) Then
                HueNextScene = x + 1
                Exit For
                End If
                Next
                HueSetting = HueSortScenes(HueNextScene)
                If HueSetting = "" Then HueSetting = HueDefaultScene
                hs.SaveINISetting("HueLastScene", HueName, HueSetting, QSINIFile)
                If HueSetting = "Off" Then
                hs.CAPIControlHandler(hs.CAPIGetSingleControl(hs.GetDeviceRe fByName(HuePrefix & HueName), True, HueSetting, False, False))
                Else
                Hs.TriggerEvent(HueName & " " & HueSetting)
                End If
                Case "SAVE"
                If Debug Then Hs.writelog(Type, "Saving favorite for " & HueName & ": " & HuePrevScene)
                hs.SaveINISetting("HueFavScene", HueName, HuePrevScene, QSINIFile)
                Case "FAVORITE"
                HueSetting = HueFavScene
                hs.SaveINISetting("HueLastScene", HueName, HueSetting, QSINIFile)
                If HueSetting = "Off" Then
                hs.CAPIControlHandler(hs.CAPIGetSingleControl(hs.GetDeviceRe fByName(HuePrefix & HueName), True, HueSetting, False, False))
                Else
                Hs.TriggerEvent(HueName & " " & HueSetting)
                End If

                Case Else
                Hs.writelog(Type, "Hue Command - unsupported Hue Name & Setting: " & HueName & ": " & HueSetting)
                End Select

                End Sub

                Function QSGetHueScenes(ByVal HueName As String) As Object
                Dim SceneArray(21) As String

                'check to see if a sub-section for the light group has been defined. If not, use the default scene HueDefaultScene
                ' Load the allowed scenes into the array(1...x) by sort order, and return the number of scenes forund in position 0

                If Hs.getINISetting(HueName, "Scene1", "", QSINIFile) = "" Then HueName = "HueSortOrder"

                For HueScene As Integer = 1 To 20
                Dim NextScene As String = hs.GetINISetting(HueName, "Scene" & HueScene, "", QSINIFile)
                If NextScene = "" Then
                If HueScene = 1 Then
                NextScene = HueDefaultScene
                SceneArray(0) = HueScene
                End If
                Exit For
                End If
                SceneArray(HueScene) = NextScene
                SceneArray(0) = HueScene
                Next

                Return SceneArray

                End Function

                Function QSCreateIntegration(ByVal Parms As String) As Boolean

                Dim QSFileHandle
                Dim QSFileData As String
                Dim QSCommandSet As String = "Homeseer_HueNuVo"
                Dim QSFilename As String = "Homeseer_HueNuVo.csv"
                Dim vbLS As String = vbCRLF

                hs.WriteLog("QS", "Creating Homeseer Ingegration File: " & QSFilename)

                If System.IO.File.Exists(QSFilename) = True Then
                QSFileHandle = New System.IO.StreamWriter(QSFilename)
                Else
                QSFileHandle = New System.IO.StreamWriter(QSFilename, False)
                End If

                ' File header
                '----------------
                QSFileData = "Command Set,Data Format (ASCII Or Hex),Terminator String" & vbLS & QSCommandSet & ",ASCII,0D 0A" & vbLS & "---End of Integration Command Set---" & vbLS & "Command Set,Command Name," & chr(34) & "Command Direction (To 3rd Party = To, From 3rd Party = From, To & From 3rd Party = Both)" & chr(34) & ",Command Data" & vbLS
                Dim lineTag As String

                ' Nuvo Commands
                '----------------
                Dim NuvoZones() As String = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"} 'All the Zones we need to create for

                lineTag = QSCommandSet & ",NuVo.Zone."
                QSFileData = QSFileData & lineTag & "All.Alloff,To,NuVo.*ALLOFF" & vbLS
                For Each NuvoZone As String In NuvoZones
                QSFileData = QSFileData & lineTag & NuvoZone & ".Power,To,NuVo.*Z" & NuvoZone & "POWER" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".On,To,NuVo.*Z" & NuvoZone & "ON" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".Off,To,NuVo.*Z" & NuvoZone & "OFF" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".NextSrc,To,NuVo.*Z" & NuvoZone & "SRC+" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".PlayPause,To,NuVo.*Z" & NuvoZone & "PLAYPAUSE" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".VolUp,To,NuVo.*Z" & NuvoZone & "VOL+" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".VolDn,To,NuVo.*Z" & NuvoZone & "VOL-" & vbCRLF
                QSFileData = QSFileData & lineTag & NuvoZone & ".Mute,To,NuVo.*Z" & NuvoZone & "MUTE" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".MuteOn,To,NuVo.*Z" & NuvoZone & "MUTEON" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".MuteOff,To,NuVo.*Z" & NuvoZone & "MUTEOFF" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".Prev,To,NuVo.*Z" & NuvoZone & "PREV" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".Next,To,NuVo.*Z" & NuvoZone & "NEXT" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".PartyOn,To,NuVo.*Z" & NuvoZone & "PARTY1" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".PartyOff,To,NuVo.*Z" & NuvoZone & "PARTY0" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".Fav1,To,NuVo.*Z" & NuvoZone & "FAV1" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".Fav2,To,NuVo.*Z" & NuvoZone & "FAV2" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".Fav3,To,NuVo.*Z" & NuvoZone & "FAV3" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".Fav4,To,NuVo.*Z" & NuvoZone & "FAV4" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".Fav5,To,NuVo.*Z" & NuvoZone & "FAV5" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".Fav6,To,NuVo.*Z" & NuvoZone & "FAV6" & vbLS
                QSFileData = QSFileData & lineTag & NuvoZone & ".FavNext,To,NuVo.*Z" & NuvoZone & "FAVNEXT" & vbLS 'We'll have to implement some logic to get this to work
                Next

                ' Hue Zone Commands
                '----------------

                lineTag = QSCommandSet & ",Hue.Zone."
                For Each HueZone As String In HueZones
                QSFileData = QSFileData & lineTag & HueZone & ".On,To,Hue.Zone." & HueZone & ".On" & vbLS
                QSFileData = QSFileData & lineTag & HueZone & ".Off,To,Hue.Zone." & HueZone & ".Off" & vbLS
                QSFileData = QSFileData & lineTag & HueZone & ".Favorite,To,Hue.Zone." & HueZone & ".Favorite" & vbLS
                QSFileData = QSFileData & lineTag & HueZone & ".Nightlight,To,Hue.Zone." & HueZone & ".Nightlight" & vbLS
                QSFileData = QSFileData & lineTag & HueZone & ".Down,To,Hue.Zone." & HueZone & ".Down" & vbLS
                QSFileData = QSFileData & lineTag & HueZone & ".Up,To,Hue.Zone." & HueZone & ".Up" & vbLS
                QSFileData = QSFileData & lineTag & HueZone & ".Save,To,Hue.Zone." & HueZone & ".Save" & vbLS
                QSFileData = QSFileData & lineTag & HueZone & ".Next,To,Hue.Zone." & HueZone & ".Next" & vbLS

                For y As Integer = 1 To 10
                QSFileData = QSFileData & lineTag & HueZone & ".Scene_" & y & ",To,Hue.Zone." & HueZone & ".Scene_" & y & vbLS
                Next
                Next


                ' Hue Room Commands
                '----------------
                lineTag = QSCommandSet & ",Hue.Room."
                For Each HueRoom As String In HueRooms
                QSFileData = QSFileData & lineTag & HueRoom & ".On,To,Hue.Room." & HueRoom & ".On" & vbLS
                QSFileData = QSFileData & lineTag & HueRoom & ".Off,To,Hue.Room." & HueRoom & ".Off" & vbLS
                QSFileData = QSFileData & lineTag & HueRoom & ".Favorite,To,Hue.Room." & HueRoom & ".Favorite" & vbLS
                QSFileData = QSFileData & lineTag & HueRoom & ".Nightlight,To,Hue.Room." & HueRoom & ".Nightlight" & vbLS
                QSFileData = QSFileData & lineTag & HueRoom & ".Down,To,Hue.Room." & HueRoom & ".Down" & vbLS
                QSFileData = QSFileData & lineTag & HueRoom & ".Up,To,Hue.Room." & HueRoom & ".Up" & vbLS
                QSFileData = QSFileData & lineTag & HueRoom & ".Save,To,Hue.Room." & HueRoom & ".Save" & vbLS
                QSFileData = QSFileData & lineTag & HueRoom & ".Next,To,Hue.Room." & HueRoom & ".Next" & vbLS

                For Each HueScene As String In HueScenes
                QSFileData = QSFileData & lineTag & HueRoom & "." & HueScene & ",To,Hue.Room." & HueRoom & "." & HueScene & vbLS
                Next
                For y As Integer = 1 To 6
                QSFileData = QSFileData & lineTag & HueRoom & ".Scene_" & y & ",To,Hue.Room." & HueRoom & ".Scene_" & y & vbLS
                Next
                Next

                QSFileData = QSFileData & "---End of Integration Command---" & vbLS
                QSFileHandle.WriteLine(QSFileData)
                QSFileHandle.Close()

                hs.WriteLog("QS", "Homeseer Ingegration File finished: " & QSFilename)

                Return True
                End Function

                Function HueCreateSceneEvents(ByVal eee As String) As Integer
                Dim HueEventName As String = ""
                Dim HueGroupName As String = ""

                ' Create all the Zone Scenes first
                '----------------------------------
                HueGroupName = "Hue Zone Scenes"

                For Each HueZoneEvent As String In HueZones
                For Each HueScene As String In HueNumberedScenes
                HueEventName = HueZoneEvent & " " & HueScene
                Hs.writelog("QS", "Creating Event Group/Name: " & HueGroupName & "/" & HueEventName)
                Dim EvRef = HS.GetEventRefByName(HueEventName)
                If EvRef > 0 Then hs.DeleteEventByRef(EvRef)
                EvRef = hs.NewEventEx(HueEventName, HueGroupName, "")
                ' Dim cc = hs.CAPIGetSingleControl(hs.GetDeviceRefByName("JowiHue JowiHue " & HueZoneEvent), True, "On", False, False)
                ' If cc IsNot Nothing Then hs.AddDeviceActionToEvent(EvRef, cc)
                hs.EnableEventByRef(EvRef)
                Next
                For Each HueScene As String In HueScenes
                HueEventName = HueZoneEvent & " " & HueScene
                Hs.writelog("QS", "Creating Event Group/Name: " & HueGroupName & "/" & HueEventName)
                Dim EvRef = HS.GetEventRefByName(HueEventName)
                If EvRef > 0 Then hs.DeleteEventByRef(EvRef)
                EvRef = hs.NewEventEx(HueEventName, HueGroupName, "")
                hs.EnableEventByRef(EvRef)
                Next
                Next

                ' Create all the Room Scenes next
                '----------------------------------
                HueGroupName = "Hue Room Scenes"

                For Each HueZoneEvent As String In HueRooms
                For Each HueScene As String In HueNumberedScenes
                HueEventName = HueZoneEvent & " " & HueScene
                Hs.writelog("QS", "Creating Event Group/Name: " & HueGroupName & "/" & HueEventName)
                Dim EvRef = HS.GetEventRefByName(HueEventName)
                If EvRef > 0 Then hs.DeleteEventByRef(EvRef)
                EvRef = hs.NewEventEx(HueEventName, HueGroupName, "")
                ' Dim cc = hs.CAPIGetSingleControl(hs.GetDeviceRefByName("JowiHue JowiHue " & HueZoneEvent), True, "On", False, False)
                ' If cc IsNot Nothing Then hs.AddDeviceActionToEvent(EvRef, cc)
                hs.EnableEventByRef(EvRef)
                Next
                For Each HueScene As String In HueScenes
                HueEventName = HueZoneEvent & " " & HueScene
                Hs.writelog("QS", "Creating Event Group/Name: " & HueGroupName & "/" & HueEventName)
                Dim EvRef = HS.GetEventRefByName(HueEventName)
                If EvRef > 0 Then hs.DeleteEventByRef(EvRef)
                EvRef = hs.NewEventEx(HueEventName, HueGroupName, "")
                hs.EnableEventByRef(EvRef)
                Next
                Next

                Return 1
                End Function

                Comment


                  #9
                  Hi,

                  Wow, sorry for my delayed reply - I appreciate your effort with this post! I will have to dive into this! Thanks again!


                  Comment

                  Working...
                  X