Thank you, works perfectly;
Slowly learning new scripting concepts...
Happy new year!
Announcement
Collapse
No announcement yet.
Enter text in HStouch Text box and speak it via speaker clients
Collapse
X
-
First - I am running linux so I do not speak to my clients with hs.speak so I cannot fully test. It is slightly more convoluted. That being said it does write to the log and there are no errors.
First here is the text version of the script so you can cut and paste. This works from an event or from HSTouch
-----------------------------------------------
REM - SpeakHSTouch script that will work from both event and HSTouch
REM - 12/31/2019
REM - The Script is expecting two parameters. One the text spoken and 2 text to be written to the log
IMPORTS System.Core
Sub Main(parms As Object)
Dim parm0, parm1 As String
Dim sParm() As String
If parms.GetType().ToString = "System.String" Then
parm0 = parms.ToString()
Else
parm0 = parms(0).ToString() & "|" & parms(1).ToString()
End If ' Now use parm as your input variable...
sParm = Split(parm0, "|", -1, 1) 'Split the parameters
hs.speak(sParm(0)) 'Speak the text - first parameter
hs.writelog("Speak",sParm(1)) 'Write the text to the log
End Sub
--------------------------------------------------------------------------
here is the script called from an event.
Notice that the are two parameters in the 'Parameters' box and they are separated by a "|"
To call the same script from HSTouch the
The "Speak To Me" is TestBox and "Write to Log" is TestBox1 (excuse my typo's)
If you only want 1 parameter the script would look like this
-----------------------------------------------
REM - SpeakHSTouch script that will work from both event and HSTouch
REM - 12/31/2019
REM - The Script is expecting one parameter.
IMPORTS System.Core
Sub Main(parms As Object)
Dim parm0 As String
Dim sParm() As String
If parms.GetType().ToString = "System.String" Then
parm0 = parms.ToString()
Else
parm0 = parms(0).ToString()
End If ' Now use parm as your input variable...
hs.speak(parm0) 'Speak the text - first parameter
hs.writelog("Speak",parm0) 'Write the text to the log
End Sub
--------------------------------------------------------------------------
Hope this helps explain what is going on
- 1 like
Leave a comment:
-
Calls from an HS Event will only pass one string. However, calls from HS Touch will pass an Array of Strings. (Declare the input parameter as Object is correct, since it allows both types of input).
However, you need to determine in code which type of parameter is being passed.
Code:Sub Main(parms As Object) If parms.GetType().ToString = "System.String" Then ' Call was from HS, one string. Use string split to get individual parameters Else ' Call was from HS touch. Use parms(0).ToString to get first parameter, parms(1).ToString to get second, etc End If ... End Sub
Leave a comment:
-
Thanks AllHailJ, since I'm just starting with VBscripts, I was reusing a script template from another post so I was expecting some errors;
Let me know what should be changed when you have a chance, I'll test it out,
Cheers,
Leave a comment:
-
There is no reason to have this as a public sub. you also don't need the Main in the sub or function cell for the event as this is the default. This has caused me problems in the past. You also only have 1 parameter you are passing in HSTouch. Your event has no parameters. This is going to cause a problem on the stack. I think you want to call the event from HS Touch. A replacement variable can contain the text in the textbox.
Events and HSTouch handle the calling of scripts differently. I'll get back to you tomorrow morning with a more detailed how-to.
Leave a comment:
-
Enter text in HStouch Text box and speak it via speaker clients
Use case: when I am away from home, I'd like to input text in a HStouch text box, press a button and have HS speak out loud the text string.
I have created a text box in HSTOUCH where a user can input text, let's call it "textbox1"
I have created a button that tiggers: "HomeSeer: Run a HomeSeer script with values from elements(s)"
The script is as follows
Public Sub Main(ByVal Parms As Object)
Dim ParmArray() As String
ParmArray = Parms.ToString.Split("|")
hs.Speak(ParmArray(0))
hs.WriteLog("SpeakAndLogMultipleParms", ParmArray(1))
End Sub
(I know this is for two values but should work when only one value is provided, tested manually and it works)
When I enter text in "textbox1" and press the button to trigger the script, what I hear is something like
"System dot string" ?
No errors in Log.
I guess the script is wrong, can you provide assistance?
Thank you!
Tags: None
Leave a comment: