I have a Dreamscreen HD which can be controlled over IP.
I made a basic script to control some of its functions.
Im no professional coder so there probably some improvements possible

VB.Net
Code:
Imports System.IO Imports System.Net.Sockets.Socket Imports System.Text Imports System.Net Imports System.Net.Sockets 'The static var below can be used with the CRC calculated function below 'Static uartComm_crc8_table = new byte[]{"&H2A","&H2D","&H70","&H77","&H7E","&H79","&H6C","&H6B","&H62","&H65","&H48","&H4F","&H46","&H41","&H54","&H53","&H5A","&H5D","&HE0","&HE7","&HEE","&HE9","&HFC","&HFB","&HF2","&HF5","&HD8","&HDF","&HD6","&HD1","&HC4","&HC3","&HCA","&HCD","&H90","&H97","&H9E","&H99","&H8C","&H8B","&H82","&H85","&HA8","&HAF","&HA6","&HA1","&HB4","&HB3","&HBA","&HBD","&HC7","&HC0","&HC9","&HCE","&HDB","&HDC","&HD5","&HD2","&HFF","&HF8","&HF1","&HF6","&HE3","&HE4","&HED","&HEA","&HB7","&HB0","&HB9","&HBE","&HAB","&HAC","&HA5","&HA2","&H8F","&H88","&H81","&H86","&H93","&H94","&H9D","&H9A","&H27","&H20","&H29","&H2E","&H3B","&H3C","&H35","&H32","&H1F","&H18","&H11","&H16","&H03","&H04","&H0D","&H0A","&H57","&H50","&H59","&H5E","&H4B","&H4C","&H45","&H42","&H6F","&H68","&H61","&H66","&H73","&H74","&H7D","&H7A","&H89","&H8E","&H87","&H80","&H95","&H92","&H9B","&H9C","&HB1","&HB6","&HBF","&HB8","&HAD","&HAA","&HA3","&HA4","&HF9","&HFE","&HF7","&HF0","&HE5","&HE2","&HEB","&HEC","&HC1","&HC6","&HCF","&HC8","&HDD","&HDA","&HD3","&HD4","&H69","&H6E","&H67","&H60","&H75","&H72","&H7B","&H7C","&H51","&H56","&H5F","&H58","&H4D","&H4A","&H43","&H44","&H19","&H1E","&H17","&H10","&H05","&H02","&H0B","&H0C","&H21","&H26","&H2F","&H28","&H3D","&H3A","&H33","&H34","&H4E","&H49","&H40","&H47","&H52","&H55","&H5C","&H5B","&H76","&H71","&H78","&H7F","&H6A","&H6D","&H64","&H63","&H3E","&H39","&H30","&H37","&H22","&H25","&H2C","&H2B","&H06","&H01","&H08","&H0F","&H1A","&H1D","&H14","&H13","&HAE","&HA9","&HA0","&HA7","&HB2","&HB5","&HBC","&HBB","&H9 ","&H91","&H98","&H9F","&H8A","&H8D","&H84","&H83","&HDE","&HD9","&HD0","&HD7","&HC2","&HC5","&HCC","&HCB","&HE6","&HE1","&HE8","&HEF","&HFA","&HFD","&HF4","&HF3"} Function Start (Byval modus As String ) Dim GLOIP As IPAddress = System.Net.IPAddress.Parse("192.168.1.19") 'use a static DHCP lease!! Dim GLOINTPORT As Integer Dim bytCommand As Byte() = New Byte(){}' empty array because it will be filled by function ModeToByte bytcommand = ModeToByte (modus) Dim udpClient As New UdpClient Dim pRet As Integer Try GLOINTPORT = 8888 udpClient.Connect(GLOIP, GLOINTPORT) pRet = udpClient.Send(bytCommand, bytCommand.Length) Catch ex As Exception hs.WriteLog("Dreamscreen error: ",ex.Message) End Try udpClient.Close() End Function Function ModeToByte (Byval mode as string) As Byte() Dim result As Byte() = New Byte() {} Dim AmbModes(5) As String 'mode,ambientscene,R,G,B If (mode.Length > 5) Then AmbModes = mode.Split(New Char() {":"c}) mode = AmbModes(0) End If Select Case mode Case "Ambient" hs.writelog("dreamscreen",AmbModes(1)) Select Case AmbModes(1) Case "Random" 'result = {"&HFC","06","00","&H21","03","&H0D","&H01,"&H5F"} 'is Random color no group specified (off will not work without group) result = {"&HFC","06","01","&H21","03","&H0D","&H01","&H3D"} 'is Random color group 1 Case "Fireside" 'result = {"&HFC","06","00","&H21","03","&H0D","&H02","&H56"} ' is Fireside no group specified (off will not work without group) result = {"&HFC","06","01","&H21","03","&H0D","&H02","&H34"} ' is Fireside group 1 Case "Twinkle" 'result = {"&HFC","06","00","&H21","03","&H0D","&H03","&H51"} ' is Twinkle no group specified (off will not work without group) result = {"&HFC","06","01","&H21","03","&H0D","&H03","&H33"} ' is Twinkle group 1 Case "Ocean" 'result = {"&HFC","06","00","&H21","03","&H0D","&H04","&H44"} ' is Ocean no group specified (off will not work without group) result = {"&HFC","06","01","&H21","03","&H0D","&H04","&H26"} ' is Ocean group 1 Case "July4th" 'result = {"&HFC","06","00","&H21","03","&H0D","&H05","&H43"} ' is July 4th no group specified (off will not work without group) result = {"&HFC","06","01","&H21","03","&H0D","&H05","&H21"} ' is July 4th group 1 Case "Holiday" 'result = {"&HFC","06","00","&H21","03","&H0D","&H06","&H4A"} ' is Holiday no group specified (off will not work without group) result = {"&HFC","06","01","&H21","03","&H0D","&H06","&H28"} ' is Holiday group 1 Case "Pop" '{"&HFC","06","00","&H21","03","&H0D","&H07","&H4D"} ' is Pop no group specified (off will not work without group) result = {"&HFC","06","01","&H21","03","&H0D","&H07","&H2F"} ' is Pop group 1 Case "EnchantedForest" result = {"&HFC","06","01","&H21","03","&H0D","&H08","&H02"} ' is enchanted forest group 1 Case "RGB" hs.writelog("Dreamscreen","RGB isn't supported yet") Case Else hs.WriteLog("Dreamscreen Ambient scene","Incorrect scene specifief: >>" & AmbModes(1) &"<< Choose from: Random, Fireside, Twinkle, Ocean, July4th, Holiday, Pop, EnchantedForest" ) end Select Case "Off" ' result = {"&HFC","&H06","&H00","&H21","&H03","&H01","&H00","&HA4"} 'no group specified result = {"&HFC","&H06","&H01","&H21","&H03","&H01","&H00","&HC6"} 'group 1 without group (parameter on 0) this doesn't work Case "Video" result = {"&HFC","06","00","&H21","03","01","01","&HA3"} 'no port switch is done Case "Music" result = {"&HFC","06","00","&H21","03","01","02","&HAA"} 'no port switch is done Case Else hs.WriteLog("Dreamscreen","incorrect mode selected: " & mode) End Select Return result End Function 'below is java code from rev4 documentation to calculated the CRC byte, For RGB functions this must be implemented 'Function uartComm_calculate_crc8(byte[] data) ' still java code ' byte size = (byte) (data[1] + 0x01); ' byte cntr = 0x00; ' byte crc = 0x00; ' while (cntr < size) { ' crc = uartComm_crc8_table[(byte) (crc ^ (data[cntr])) & 0xFF]; 'cntr++; '} 'return crc; '} 'End Function
Options for the start script:
Code:
Video Music Ambient:Random Fireside Ambient:Twinkle Ambient:Ocean Ambient:July4th Ambient:Holiday Ambient:Pop Ambient:EnchantedForest Ambient:RGB Off
The Rev4 documentation is a bit harder to find but a you can download it from here
edit: The Off function doesn't always work at all. For now random working. When Sending of and no response. I open the app and send it again and then it works so not really stable...