No announcement yet.

Screensaver Scripting for HSTouch

  • Filter
  • Time
  • Show
Clear All
new posts

  • smokeycoles
    This is a frustrating defect with HSTouch.

    Text does not hide/unhide when using a time and date script (I guess because it is updating)

    [$TIME=hh:mm tt]
    [$TIME=dd MMMM yy]
    Therefore you can hide/unhide pictures and static text.
    But time and date script text must be SET to an empty field, clear does not work either.

    Good tutorial by Marco
    and thanks Fred for the script - I use it which now makes the screen go blank or run a screensaver and I can use a toggle button from the settings page to control the virtual device "HSTouch Screensaver".
    Last edited by smokeycoles; July 30, 2016, 08:47 AM.

    Leave a comment:

  • ITguyHS
    Really nice, Marco! What method are you using to update the date/time into the field? Maybe you could post just one of your events as an example?


    Leave a comment:

  • TomTom
    Oh yes sibo, the manufacture of the hs3 tabletop units. It looks very clean and nice on your wall. Nice job!

    Sent from my iPhone

    Leave a comment:

  • marco500

    They make a wall-mounted android tablet. Bought 4 of them for my home. I also bought 2 tabletop units. Not super cheap, but pretty decent. I got the POE versions to make the cabling clean.

    they are available on alibaba.

    Leave a comment:

  • TomTom
    Nice Marco, & thanks! What kind of tablet is that and how did you mount it. Looks like you went into drywall?

    Sent from my iPhone

    Leave a comment:

  • marco500

    sorry for the delay in responding. Thanks Fred for the ping... I've been traveling lately and had not gotten around to posting.

    My goal for the screensaver was to have a black screen, with the time and date on the screen. The problem I ran into was moving the text around the screen to prevent burn-in, and I didn't want to use the scrolling feature in HSTouch because it would be hard to read from across the room.

    I experimented with any of the actions available in HSTouch that sounded like they would work. For example, I tried the hide/show, enable/disable, etc. and none seem to work on a text element. So, I improvised and came up with an ugly workaround which I'll explain in a minute. I'm also including a picture of the finished product.

    I'll state that this works, but I'm hopeful that one of you would come up with something cleaner and/or better.

    Step 1. Layout.
    From the example illustration I provided, there are basically three blocks where the text is displayed. Each block is actually TWO text fields. The date is in blue an in smaller text on top, and the time is white, bigger text, on the bottom. I labeled my fields date_top, date_mid, and date_bottom, the same with time_top, time_mid, and time_bottom. Their initial values are all BLANK. In order to achieve positioning along the screen (such as left, middle, and right), I'm padding the time/date values with spaces. My goal was the text to fit, and start where the purple boxes are so as to give the "illusion" of left/center/right alignment. So in all, there are 9 possible positions for the date/time to be displayed.

    Step 2. trigger buttons
    I have a screen which is not visible with 9 buttons. Each button changes the elements text values of all elements EXCEPT for the one I need to blank, and then sets the selected element's text value to the corresponding date/time (and appropriate number of spaces for padding). Once all actions are set-up, clicking on each of these buttons makes the date/time display where I want it to.

    Step 3. From HS Touch, I had to create 9 events, each one simulating the button press corresponding to each of the 9 HSTouch buttons.
    Lastly, I created a script to randomly run one of the events. I was able to find a random script and adapted it for my use. This is what I came up with:

     Sub Main()
     ' Initialize the random-number generator. 
     ' Generate random value between 1 and 9. 
    Dim value 
     value = CInt(Int((9 * Rnd()) + 1))
     If value = 1 then
     hs.TriggerEvent "Position UR"
    Elseif value = 2 then
     hs.TriggerEvent "Position LL"
    Elseif value = 3 then
     hs.TriggerEvent "Position LM"
    Elseif value = 4 then
     hs.TriggerEvent "Position LR"
    Elseif value = 5 then
     hs.TriggerEvent "Position ML"
    Elseif value = 6 then
     hs.TriggerEvent "Position MM"
    Elseif value = 7 then
     hs.TriggerEvent "Position MR"
    Elseif value = 8 then
     hs.TriggerEvent "Position UL"
     hs.TriggerEvent "Position UM"
    End If
    hs.WriteLog "Event", "The random value is " & value
    End Sub
    Step 4. Back to HS Touch
    Configure the "screensaver" screen to be the HEME screen (basically, the one the client displays WHEN the timeout occurs from the project preferences. Then go and place an invisible button on top of the whole screen with the click action to take you to your normal "home" screen. This means that when you touch the screensaver, it "wakes up", and takes you to the main screen.

    Let me know your thoughts and/or ideas on this.



    So there you go... a working
    Attached Files

    Leave a comment:

  • ITguyHS
    Replaced the original script in first post with an improved version that uses a virtual device to enable/disable the script.

    Leave a comment:

  • ITguyHS
    I'd love to see how you did this in HStouch! Can you post a few screenshots?

    Leave a comment:

  • TomTom
    Nice work ITguyS! Marco, if you get this going could you post a screen shot of it.

    Sent from my iPhone

    Leave a comment:

  • ITguyHS
    I decided this would make a nice programming exercise, so I created the script below. You just need to substitute the names of your events where I have "testevent1", etc. and create a virtual device to enable/disable the running of this script. Replace the references in this script to ref id 222 with the ref id of your virtual device.

    To keep this from being a never-ending program, it runs only while a virtual device (ref id 222 in this example) is on, then ends within 5 seconds if the device turns off. You could have it automatically start when Homeseer starts by having the startup script turn on the device and then run an event that calls this script. To have it automatically stop when Homeseer stops, just add a line to the shutdown script to turn off the enabling device.

    For debugging, you can un-comment the log writes and the updating of device 221.

    ' Run 9 events randomly, waiting 5 seconds between runs
    ' run as long as the "run screensaver script" device is on
    Sub Main (ByVal Parms As Object)
    	Dim intRandomNumber as integer
    	Dim LastEvent as integer
            Dim rnd As New Random()
    	' hs.WriteLogEx("randomrange script", "starting", "#008000")
    	'keep repeating the loop as long as the "run screensaver script" device is on
    	While hs.DeviceValue(222) > 0
    		'since a true random number might yield the same number multiple times, this while loop
    		'makes sure the new number isn't the same as the last number
    		While intRandomNumber = LastEvent
    			intRandomNumber = rnd.Next(1, 10)	'assign random number between 1 and 9
    		End While
    		LastEvent = intRandomNumber			
    		' hs.SetDeviceValueByRef(221, intRandomNumber, True)	'put the random number in a device value for testing
    		' hs.WriteLogEx("randomrange script", intRandomNumber, "#008000")
    		Select Case intRandomNumber
    			Case 1
    			Case 2
    			Case 3
    			Case 4
    			Case 5
    			Case 6
    			Case 7
    			Case 8
    			Case 9
    			Case else
    				hs.WriteLogEx("randomrange script", "number not 1 to 9", "#008000")
    		End Select
    		System.Threading.Thread.Sleep(5000)	' wait for 5 seconds
            End While
    	' hs.WriteLogEx("randomrange script", "ended normally", "#008000")
    End Sub
    Last edited by ITguyHS; May 22, 2016, 10:01 AM. Reason: improved version

    Leave a comment:

  • ITguyHS
    Can't think of any way to do this in an event, but you could probably do it in a script by using the rand.Next function in A pretty good example can be found at:
    I think you'd want to generate a random number between 0 and 10 (that gives you 1 to 9 as integers), then use that in the script to choose which of your nine events to run.

    Leave a comment:

  • marco500
    started a topic Screensaver Scripting for HSTouch

    Screensaver Scripting for HSTouch

    Hello all,

    I've decided to make my own simple screen saver for use with HS Touch. Due to the buggy and/or poorly documented state of HSTouch, I'm having to do some funky workarounds but overall it seems working.

    In short, I have three text boxes the width of the display positioned as TOP, MIDDLE, and BOTTOM. I've got 9 buttons in HSTouch that control what is displayed on each of these text boxes. Each of the buttons represent:
    • upper left, upper middle, upper right
    • middle left, middle middle, middle right
    • lower left, lower middle, lower right

    Each of the above buttons enters a value (ie- the time) in the appropriate box, and removes the value from the other two. The way that I "approximate" the horizontal spacing is by adding spaces before the time. Hack...i know.

    I have 9 corresponding manually triggered events in HS3 that simulate a button press on each of the above 9 buttons effectively allowing me to "position" the text on the screen from one of the 9 positions.

    I'm trying to figure out a 10th event that can randomly run one of the other 9 events all within the same group.

    Can someone suggest how to script this?