Hi There,

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
To use it see the attached picture.
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
For the off function to work you need to have the Dreamscreen device in a group! RGB function isn't implemented because of all the CRC calculations that are possible and i dont have the calculator function working. For that part i could use some help.
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...