http://users.telenet.be/freestylerdmx/
Code:
Imports System.Net Imports System.Net.Sockets Dim DAddS As String = "FreeStylerDMX" Dim ConnAddress As String = "192.168.1.190" Dim maxScenes As Integer = 5 'If you want more scenes then change this to how many Sub Main(ByVal Parms As Object) Try If Parms(1).Contains(DAddS) Then Log("Device Of Interest: " & Parms(1)) Log("FreeStyler DMX CallBack Script Starting") Dim SequenceNumber As Integer = Convert.ToInt32(Parms(1).Replace(DAddS & "-Sequence", "")) Dim dValue As Integer = Convert.ToDouble(Parms(2)) Log("Sequence Number: " & SequenceNumber & " Value: " & dValue) Select Case dValue Case 0 : SendCommand(SequenceNumber + 524, 255) Case 100 : SendCommand(SequenceNumber + 504, 255) End Select End If Catch ex As Exception : Log("Exception: " & ex.Message.ToString) End Try End Sub Sub StartScript(ByVal Parms As Object) Try Log("FreeStyler DMX Script Starting") If hs.DeviceExistsAddress(DAddS & "-Root", False) = -1 Then 'check if the route device is there CreateDevices() Else Log("Registering For Value/Change CallBack") hs.RegisterStatusChangeCB("HS3FreeStyler.vb", "Main") End If Catch ex As Exception : Log("Exception: " & ex.Message.ToString) End Try End Sub Sub SendCommand(ByVal FSCode As Integer, ByVal TCPArgument As Integer) Try Dim ByteArr(2) As Byte Log("SendCommand FreeStyler Code: " & FSCode & " TCP Argument: " & TCPArgument) Dim bAr() As Byte bAr = BitConverter.GetBytes(FSCode) ByteArr(0) = bAr(0) ByteArr(1) = bAr(1) ByteArr(2) = TCPArgument NetSend(ByteArr) Catch ex As Exception : Log("Exception: " & ex.Message.ToString) End Try End Sub Sub NetSend(ByVal ByteArr As Byte()) Log("NetSend Called - Address: " & ConnAddress) For i As Integer = 0 To ByteArr.GetUpperBound(0) Log("NetSend ByteArr(" & i & ") - " & ByteArr(i)) Next Try Dim tClient As New TcpClient Dim sEP As New IPEndPoint(IPAddress.Parse(ConnAddress), 3332) tClient.SendTimeout() = 1000 tClient.NoDelay = True 'Short burst of info tClient.Connect(sEP) Dim nStream As NetworkStream = tClient.GetStream() Log("Attempting Connection") Log("Sending Data...") Dim buffer As Byte() = New Byte(8) {70, 83, 79, 68, ByteArr(0), ByteArr(1), ByteArr(2), 0, 0} nStream.Write(buffer, 0, buffer.Length) nStream.Flush() Log("Command Sent : " & Text.Encoding.ASCII.GetString(buffer)) Log("Command Sent To FreeStyler") Log("Closing Connection") nStream.Close() 'close the stream tClient.Close() 'get rid of the client Catch Ex As Exception : Log("NetSend Error: " & Ex.ToString) End Try End Sub Sub Log(ByVal ParStr As String) hs.writelog(DAddS, ParStr) End Sub Sub CreateDevices() 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 Log("Devices Do Not Exist - Creating") For i As Byte = 0 To maxScenes 'needs to be four new devices Select Case i Case 0 dv = hs.GetDeviceByRef(hs.NewDeviceRef("Root")) dv.Address(hs) = DAddS & "-Root" BaseRef = dv.Ref(hs) Case Else dv = hs.GetDeviceByRef(hs.NewDeviceRef("Sequence " & i)) dv.Address(hs) = DAddS & "-Sequence" & i End Select dv.Location(hs) = "FreeStyler" dv.Last_Change(hs) = Now dv.Device_Type_String(hs) = DAddS & " Device" 'dv.Interface(hs) = DAddS Dim DT As New DeviceTypeInfo DT.Device_API = DeviceTypeInfo.eDeviceAPI.Script DT.Device_Type = DeviceTypeInfo.eDeviceType_Script.Run_On_Value_Change dv.DeviceType_Set(hs) = DT dv.ScriptName(hs) = "HS3FreeStyler.vb" '<--- This is broken If i = 0 Then 'on the base device do this, set up the relationships between the devices 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 Select Case i Case 0 : hs.setdevicestring(dv.Ref(hs), "Root Device", True) Case Else Dim Pair As VSPair Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Both) Pair.PairType = VSVGPairType.SingleValue Pair.Status = "Stop" Pair.Value = 0 Pair.Render = Enums.CAPIControlType.Button Pair.ControlUse = ePairControlUse._Off 'HSTouch? hs.DeviceVSP_AddPair(dv.Ref(hs), Pair) Pair = New VSPair(HomeSeerAPI.ePairStatusControl.Both) Pair.PairType = VSVGPairType.SingleValue Pair.Status = "Start" Pair.Value = 100 Pair.Render = Enums.CAPIControlType.Button Pair.ControlUse = ePairControlUse._On 'HSTouch? hs.DeviceVSP_AddPair(dv.Ref(hs), Pair) dv.MISC_Set(hs, Enums.dvMISC.SHOW_VALUES) hs.setdevicevaluebyref(dv.Ref(hs), 0, True) End Select hs.saveeventsdevices() Next Log("End Of Create Devices Routine - Calling StartScript Again") StartScript(Nothing) Catch ex As Exception : Log("Create Devices Exception: " & ex.message.tostring) End Try End Sub
Comment