Moskus Skrevet 11. februar 2016 Del Skrevet 11. februar 2016 (endret) NB!Denne tråden er kun for scripts. Alle andre innlegg blir rapportert.Vi har en egen kommentar- og diskusjonstråd her: https://www.diskusjon.no/index.php?showtopic=1709099 Hva er scripting?De fleste litt større systemer støtter scripting i en eller annen form. Ettersom det er så mye de forskjellige systemene kan gjøre, så er det ikke sikkert at utviklerne har tenkt på alle muligheter som er mulig å få til og legger muligheter for det inn i Event-motorene sine. Det er der scripting kommer inn. Det er en enkel måte å utvide mulighetene i hjemmeautomasjonssystemet sitt. Noen bruker python, ande LUA. HomeSeer er skrevet i .NET og bruker VB.net (og C#) som scriptspråk, og det er en stor del av grunnen til at jeg valgte HomeSeer som styringssystem. Jeg har programmert mye i VB og VB.net (og mer og mer C#), så å kunne bruke samme språk i HomeSeer er jo en enorm fordel. Når det er sagt så er jo ikke LUA så langt borte fra VB. Pr. default er ikke hele .NET biblioteket tilgjengelig som scripting, men de mest brukte funksjonene er der (og det er ikke lite bare det). Man har imidlertid mulighet til å legge til referanser selv hvis man ønsker det. Hva trenger jeg?I utgangspunktet trenger du ingenting, utenom litt kunnskap om VB, .NET og HomeSeer. Hvis du ikke har noe av dette, men likevel kan tenke deg å scripte litt så er det her en liten liste: Du må vite litt om språket generelt, hvordan man lager en variabel, hva en Sub og Function er, litt om klasser, etc. Bob Tabor dekker det meste: https://mva.microsoft.com/en-US/training-courses/vb-fundamentals-for-absolute-beginners-8297?l=3THjWMYy_4904984382 Du trenger noe å programmere i. Selve script-vinduet i HS er tungvindt, selv om det er 100% mulig. Skaff deg heller Visual Studio Community og tenScripting, så kan du scripte i Visual Studio med full IntelliSense, syntaks-korrigering, og alle andre praktiske hjelpemidler Visual Studio har å tilby (og det er ikke få). Du trenger å vite (eller i det minste finne ut) hva som er mulig i HS3, og det er ikke rent lite. I hjelp-filene står det mye om scripting, og i SDKet står det enda mer dyptgående om klasser, eventer, callbacks, etc. .... eller så kopierer du noen av scriptene under. Men... plugins?"Hvis scripting er så genialt, hvorfor lages det plugins?" Fordi å lage plugins gir enda større frihet, selv om det er mer arbeid. I en plugin kan man bruke hele .NET biblioteket av funksjoner uten å tenke på om det er støttet ut av esken eller ei. Så hvis man skal lage et system for å lese og skrive til en server (som Fitbit-plugin'en) eller til en kaffetrakter, så er det mye lettere med en plugin der man uten videre kan opprette nye tråder, bruke LiNQ, og lage en enda tettere integrering i HS3. HST har gjort mye smart i SDKet sitt, men personlig synes jeg de utgangspunktene de hadde laget i beste fall var vanskelige å forstå. De som ønsker å se på plugins, kan istedenfor se på mitt eget pluginsample. Det finner du her: http://board.homeseer.com/showthread.php?t=177339 Diskusjoner, ønsker og spørsmål tar vi i den dedikerte tråden. Endret 13. februar 2016 av Moskus 3 Lenke til kommentar
Morgens Skrevet 12. februar 2016 Del Skrevet 12. februar 2016 (endret) Utgår... Endret 21. februar 2016 av Morgens Lenke til kommentar
Moskus Skrevet 12. februar 2016 Forfatter Del Skrevet 12. februar 2016 ... *mumle* j@vla nesevise, utålmodige meddebatanter... *mumle IncrementLight.vb Public Sub Main(ByVal _deviceRef As Object) Dim deviceRef As Integer = Integer.Parse(_deviceRef) Dim deviceValue As Integer = hs.DeviceValue(deviceRef) 'Exit if the device is already at maximum, i.e. "On" If hs.CAPIGetStatus(deviceRef).Status = "On" Then Exit Sub 'Find the correct CAPI control to execute. I really miss Linq!!! For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(deviceRef) If cc.ControlValue = (deviceValue + 1) Then 'Set the correct dim level hs.CAPIControlHandler(cc) 'We're done, so let's exit! Exit Sub End If Next End Sub Lenke til kommentar
Moskus Skrevet 12. februar 2016 Forfatter Del Skrevet 12. februar 2016 CloneDevice.vb Speiler status fra en device over på flere andre. Praktisk for å f.eks. kunne skru av/på/dimme et helt rom samtidig. Parameter: 100|200+201+202 ... hvor 100 er master device (typisk taklampe) og 200-202 er andre devicer, Trigges typisk av master device set to any status. Sub Main(ByVal parms As String) Dim input() As String = Split(parms.ToString, "|") Dim control As String = input(0).ToString Dim devs() As String = Split(input(1).ToString, "+") Dim devicevalue As Double = hs.DeviceValueEx(control) Dim CAPIcontrol As HomeSeerAPI.CAPIControl = Nothing For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(control) If devicevalue = cc.ControlValue Then CAPIcontrol = cc Exit For End If Next For Each d as String In devs Dim dev As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(d) If CAPIcontrol.Label.ToLower.Contains("dim") Then If dev.Can_Dim(Nothing) Then Dim capi As HomeSeerAPI.CAPIControl = Nothing For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(d) If cc.Label = CAPIcontrol.Label Then capi = cc Exit For End If Next hs.CAPIControlHandler(capi) Else Dim off As HomeSeerAPI.CAPIControl = Nothing For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(d) If cc.Label.ToLower = "off" Then off = cc Exit For End If Next hs.CAPIControlHandler(off) End If Else Dim capi As HomeSeerAPI.CAPIControl = Nothing For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(d) If cc.Label = CAPIcontrol.Label Then capi = cc Exit For End If Next hs.CAPIControlHandler(capi) End If Next End Sub Lenke til kommentar
Moskus Skrevet 12. februar 2016 Forfatter Del Skrevet 12. februar 2016 SmartToggle.vb "Toggler" en device mellom "Off" og "On Last Level" hvis den finnes (altså er en Z-wave device). Kun mellom "Off" og "On" ellers. Parameter: 400 ... der 400 er device ref til device'n du vil toggle. Public Sub Main(ByVal input As Object) '© Moskus 2015 Dim control As String = input Dim devicevalue As Double = hs.DeviceValueEx(control) Dim capi As HomeSeerAPI.CAPIControl = Nothing If devicevalue = 0 Then 'device is off, so let's trigger "On Last Level" if it exists on the device, and just "On" capi = hs.CAPIGetSingleControl(input, True, "on last level", False, False) If capi Is Nothing Then '"On last Level" wasn't found, so we need to find "On" capi = hs.CAPIGetSingleControl(input, True, "on", False, False) End If Else 'The device is on, so let's turn it offf capi = hs.CAPIGetSingleControl(input, True, "off", False, False) End If If capi IsNot Nothing Then hs.CAPIControlHandler(capi) Else hs.WriteLog("SmartToggle", "Could not execute CAPIcontrol, it's nothing! (Input device value: " & devicevalue & ")") End If End Sub Lenke til kommentar
Moskus Skrevet 12. februar 2016 Forfatter Del Skrevet 12. februar 2016 (endret) CheckDoorsAndWindows.vb Script som sender epost eller push-meldinger om eventuelle dører og vinduer som er åpne når du f.eks. skrur på alarmen eller legger deg. Du må endre tre linjer: - Dim rfxcom() As Integer = { DINE RFXCOM-SENSORER HER KOMMASEPARERT } - Dim zwave() As Integer = {DINE Z-WAVE-SENSORER HER KOMMASEPARERT} ... og nederst med epost til og fra hvem, eventuelt legge til sending av push fra plugin, hvis du bruker det. Sub Main(ByVal input As Object) Dim lst As New System.Collections.Generic.List(Of String) Dim closedStatus As Integer = 100 'RFXCOM devices Dim rfxcom() As Integer = {41, 1188, DINE RFXCOM-SENSORER HER KOMMASEPARERT} closedStatus = 2 For Each d As Integer In rfxcom If hs.DeviceValue(d) <> closedStatus Then Dim dev As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(d) lst.Add(dev.Location2(hs) & " " & dev.Location(hs) & " " & dev.Name(hs)) End If Next 'Zwave devices Dim zwave() As Integer = {450, 545, DINE Z-WAVE-SENSORER HER KOMMASEPARERT} closedStatus = 255 For Each d As Integer In zwave If hs.DeviceValue(d) <> closedStatus Then Dim dev As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(d) lst.Add(dev.Location2(hs) & " " & dev.Location(hs) & " " & dev.Name(hs)) End If Next If lst.Count > 0 Then Dim msg As String = "Følgende vinduer er åpne: " & vbNewLine msg &= String.Join(vbNewLine, lst) hs.SendEmail("[email protected]", "FRA_HS#@epost.com", "", "", "HS3: Åpne vinduer/dører!", msg, "") Else hs.WriteLog("Vindu/dører", "Alle er lukket") End If End Sub Endret 12. februar 2016 av Moskus Lenke til kommentar
Moskus Skrevet 12. februar 2016 Forfatter Del Skrevet 12. februar 2016 (endret) IncrementLight.vb Øker lyset med +1% med jevne mellomrom, f.eks. hvert 18. sekund gir 30 minutter. Public Sub Main(ByVal _deviceRef As Object) Dim deviceRef As Integer = Integer.Parse(_deviceRef) Dim deviceValue As Integer = hs.DeviceValue(deviceRef) 'Exit if the device is already at maximum, i.e. "On" If hs.CAPIGetStatus(deviceRef).Status = "On" Then Exit Sub 'Find the correct CAPI control to execute. I really miss Linq!!! For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(deviceRef) If cc.ControlValue = (deviceValue + 1) Then 'Set the correct dim level hs.CAPIControlHandler(cc) 'We're done, so let's exit! Exit Sub End If Next End Sub IncrementLightCustom.vb Ulempen med de fleste dimmere er at de ikke er lineære. De første 1-20% gir en mye større relativt forskjell enn de siste 80-99%. Det gjør det følgende scriptet med, men du trenger en "counter" som må settes til 0 før du starter. Parameter: 100#counter name ... der 100 er device ref til lampen du skal styre, og "counter name" selvfølgelig er navnet på counteren. Public Sub Main(ByVal _deviceRefAndCounter As Object) Dim deviceRef As Integer = Integer.Parse(_deviceRefAndCounter.ToString.Split("#")(0)) Dim countervalue As Integer = hs.CounterValue(_deviceRefAndCounter.ToString.Split("#")(1)) Dim modifier As Integer = 4 Dim dimvalue As Integer = Math.Ceiling(countervalue ^ (modifier) / 100 ^ (modifier - 1)) 'Exit if the device is already at maximum, i.e. "On" If hs.CAPIGetStatus(deviceRef).Status = "On" Then Exit Sub 'Find the correct CAPI control to execute. I really miss Linq!!! For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(deviceRef) If cc.ControlValue = dimvalue Then 'Set the correct dim levelQ hs.CAPIControlHandler(cc) 'We're done, so let's exit! Exit Sub End If Next End Sub IncrementLightRGB.vb Hvis man istedenfor har en RGB-stripe eller lampe, og man først vil ha lyset rødt, så gult, og deretter hvitt, kan man bruke dette. Du må endre de fire første linjene for å passe til ditt oppsett. Public Sub Main(ByVal _nothingreally As Object) Dim deviceR As Integer = 990 Dim deviceG As Integer = 991 Dim deviceB As Integer = 992 Dim countervalue As Integer = hs.CounterValue("Sunshine soverom") Dim modifier As Integer = 2 Dim dimvalue As Integer = Math.Ceiling(countervalue ^ (modifier) / 100 ^ (modifier - 1)) 'Exit if the device is already at maximum, i.e. "On" 'If hs.CAPIGetStatus(deviceR).Status = "On" Then Exit Sub 'Red If countervalue <= 100 Then 'Find the correct CAPI control to execute. I really miss Linq!!! For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(deviceR) If cc.ControlValue = dimvalue Then If hs.CAPIGetStatus(deviceR).Status <> "On" Then hs.CAPIControlHandler(cc) Exit For End If Next End If 'Green If countervalue > 100 AndAlso countervalue <= 200 Then For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(deviceG) If cc.ControlValue = countervalue - 100 Then If hs.CAPIGetStatus(deviceG).Status <> "On" Then hs.CAPIControlHandler(cc) Exit For End If Next End If If countervalue = 150 Then Dim capi As HomeSeerAPI.CAPIControl = hs.CAPIGetSingleControl(deviceB, True, "off", False, False) hs.CAPIControlHandler(capi) End If 'Blue If countervalue > 150 Then For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(deviceB) If cc.ControlValue = countervalue - 150 Then If hs.CAPIGetStatus(deviceB).Status <> "On" Then hs.CAPIControlHandler(cc) Exit For End If Next End If End Sub Generelt oppsett av eventer: Endret 12. februar 2016 av Moskus Lenke til kommentar
Moskus Skrevet 12. februar 2016 Forfatter Del Skrevet 12. februar 2016 DeviceState.vb Lar deg lagre og laste inn innstillinger for et utvalgt av enheter. Synes du at lyset er perfekt akkurat nå? Lagre det! Og hent det tilbake senere. Sub Main(ByVal not_used As Object) 'By Moskus, August 2015 'Set up a new config. 'Specify devices between the brackets below (comma separated): Dim devices() As Integer = {342, 872, 873} 'Specify a configuration name. This is used when calling "Save" and "Load" later. Dim config_name As String = "Bedroom" 'Creating initial ini file and store it in a list Dim lst As New System.Collections.Generic.List(Of DeviceState) For Each d As Integer In devices Dim dS As New DeviceState dS.deviceRef = d dS.deviceValue = hs.DeviceValueEx(d) lst.Add(dS) Next 'Write the list to file SaveToFile(config_name, lst) End Sub Sub Save(ByVal config_name As String) 'Get the device list Dim lst As System.Collections.Generic.List(Of DeviceState) = LoadFromFile(config_name) 'Get the current device values for each device For Each d As DeviceState In lst d.deviceValue = hs.DeviceValueEx(d.deviceRef) Next 'Store the list SaveToFile(config_name, lst) End Sub Sub Load(ByVal config_name As String) 'Get the device list Dim lst As System.Collections.Generic.List(Of DeviceState) = LoadFromFile(config_name) For Each d As DeviceState In lst 'Find the correct CAPI based on device value... Dim CAPIcontrol As HomeSeerAPI.CAPIControl = Nothing For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(d.deviceRef) If d.deviceValue = cc.ControlValue Then CAPIcontrol = cc Exit For End If Next '... And execute it hs.CAPIControlHandler(CAPIcontrol) Next End Sub Function LoadFromFile(ByVal config_name As String) As System.Collections.Generic.List(Of DeviceState) Dim lst As New System.Collections.Generic.List(Of DeviceState) Dim filename As String = "DeviceState_" & config_name & ".ini" Dim lines() As String = hs.GetINISectionEx("Devices", filename) For Each line As String In lines Dim deviceRef As Integer = line.Split("=")(0).Trim Dim deviceValue As Double = line.Split("=")(1).Trim lst.Add(New DeviceState(deviceRef, deviceValue)) Next Return lst End Function Sub SaveToFile(ByVal config_name As String, ByVal stateList As System.Collections.Generic.List(Of DeviceState)) Dim filename As String = "DeviceState_" & config_name & ".ini" For Each d As DeviceState In stateList hs.SaveINISetting("Devices", d.deviceRef, d.deviceValue, filename) Next End Sub <Serializable> Public Class DeviceState Public Property deviceRef As Integer Public Property deviceValue As Double Public Sub New() End Sub Public Sub New(ByVal _deviceRef As Integer, ByVal _deviceValue As Double) Me.deviceRef = _deviceRef Me.deviceValue = _deviceValue End Sub End Class Oppsett:Det er to måter å lage et oppsett på.1. Redigere Main()-sub'en med å liste opp device'referansene i krølleparantesene i denne linjen: Dim devices() As Integer = {342, 872, 873} og navnet i denne linjen: Dim config_name As String = "Bedroom" ... og så kjøre scriptet med å kalle Main-sub'en.2. Lag en INI-fil i \Config-mappen på dette formatet: [Devices] devRef1=devValue1 devRef2=devValue2 devRef3=devValue3 Navngi den "DeviceState_DittVariabelNavn.ini" der du bytter ut DittVariabelNavn med noe mer beskrivende. Det er dette du skal kalle senere.Mitt testeksempel ser slik ut for DeviceState_Bedroom.ini: [Devices] 342=53 872=25 873=39 Når det er gjort er det bare å lage to eventer. Et for lagring og et for tilbakestilling. Lagring av lys gjøres med å kjøre scriptet "DeviceStates.vb" med funksjon "Save" og parameter satt til DittVariabelNavn, slik:Tilbakestilling er helt likt, men da bytter du ut "Save" med "Load".Det er da mulig å lage veldig enkle "scenes" med å kopiere en ini-fil og gi den et nytt navn, som f.eks. "Bedroom-Morning", "Bedroom-Sexytime", "Bedroom-Night", "Bedroom-Off", og så videre. Bare redigere ini-filene med passende verdier, og restore som det passer deg.Så lenge teknologien som styrer lyset lagrer devicevalue og bruker CAPI til kontroll (og det gjør vel alle skulle jeg mene), så vil dette fungere. Jeg tror til og med det fungerer med andre enheter (som f.eks. Squeezebox Play/Pause, og så videre). Originalt postet her: https://www.diskusjon.no/index.php?showtopic=1191806&p=22717532 Lenke til kommentar
Moskus Skrevet 12. februar 2016 Forfatter Del Skrevet 12. februar 2016 GrandbeingMX0404.vb Script for å styre en Grandbeing MX0404 HDMI matrise. Lager en root med tilhørende child-devicer for hver utgang hvor man kan trykke på de forskjellige inngangene. Alt i et script, men dette blir nok en plugin på sikt (der er det lettere å få til en autorefresh, og sånt). Dim Scriptname As String = "GrandbeingMX0404.vb" Dim hdmi_outputs() As String = {"None", "TV", "SageTV", "Xbox", "Extra"} Dim ip_address As String = "192.168.0.39" Public Sub Main(parm As Object) End Sub Public Sub Setup(parm As Object) 'Setting up devices 'Creating master device Dim dt As New HomeSeerAPI.DeviceTypeInfo Dim devref As Integer = hs.NewDeviceRef("Root") Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(devref) Try dv.Location(hs) = "HDMI matrix" dv.Location2(hs) = "Media" dv.Device_Type_String(hs) = "HDMI root" dv.DeviceType_Set(hs) = New HomeSeerAPI.DeviceTypeInfo dv.Status_Support(hs) = True dv.Can_Dim(hs) = False hs.SaveEventsDevices() dv.MISC_Set(hs, HomeSeerAPI.Enums.dvMISC.SHOW_VALUES) dv.MISC_Clear(hs, HomeSeerAPI.Enums.dvMISC.STATUS_ONLY) 'Adding a "Refresh" button to the root device hs.DeviceScriptButton_AddButton(devref, "Refresh", 0, Scriptname, "ButtonPress", "Refresh", 1, 1, 1) hs.SaveEventsDevices() Dim SVpair As New HomeSeerAPI.VSPair(HomeSeerAPI.ePairStatusControl.Status) SVpair.PairType = HomeSeerAPI.VSVGPairType.SingleValue SVpair.Value = 0 SVpair.Status = "HDMI matrix" hs.DeviceVSP_AddPair(devref, SVpair) Dim VGpair As New HomeSeerAPI.VGPair VGpair.PairType = HomeSeerAPI.VSVGPairType.SingleValue VGpair.Set_Value = 0 VGpair.Graphic = "images/Moskus/icon_hdmi.png" hs.DeviceVGP_AddPair(devref, VGpair) hs.WriteLog("HDMI matrix", "Root device for HDMI matrix created") Catch ex As Exception hs.WriteLog("HDMI matrix", "Error creating root device: " & ex.Message) End Try 'Creating child devices dv.Relationship(hs) = HomeSeerAPI.Enums.eRelationship.Parent_Root For i As Integer = 1 To 4 Dim childref As Integer = CreateOutputDevice(i, devref) If childref > 0 Then dv.AssociatedDevice_Add(hs, childref) Next End Sub Public Function CreateOutputDevice(ByVal output As Integer, masterdevice As Integer) As Integer 'Creating device Dim dt As New HomeSeerAPI.DeviceTypeInfo Dim devref As Integer = hs.NewDeviceRef("Output " & output) Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(devref) Try dv.Location(hs) = "HDMI matrix" dv.Location2(hs) = "Media" dv.Device_Type_String(hs) = "HDMI out " & output dv.DeviceType_Set(hs) = New HomeSeerAPI.DeviceTypeInfo hs.SaveEventsDevices() dv.Status_Support(hs) = True dv.Can_Dim(hs) = False dv.MISC_Set(hs, HomeSeerAPI.Enums.dvMISC.SHOW_VALUES) dv.MISC_Clear(hs, HomeSeerAPI.Enums.dvMISC.STATUS_ONLY) dv.Relationship(hs) = HomeSeerAPI.Enums.eRelationship.Child dv.AssociatedDevice_Add(hs, masterdevice) dv = Nothing hs.WriteLog("HDMI matrix", "Test Device for output " & output & " created") Catch ex As Exception hs.WriteLog("HDMI matrix", "Error creating devices: " & ex.Message) Return 0 End Try Dim SVpair_off As New HomeSeerAPI.VSPair(HomeSeerAPI.ePairStatusControl.Status) SVpair_off.PairType = HomeSeerAPI.VSVGPairType.SingleValue SVpair_off.Value = 0 SVpair_off.Status = "None" hs.DeviceVSP_AddPair(devref, SVpair_off) Dim VGpair_off As New HomeSeerAPI.VGPair VGpair_off.PairType = HomeSeerAPI.VSVGPairType.SingleValue VGpair_off.Set_Value = 0 VGpair_off.Graphic = "images/Moskus/icon_hdmi_X.png" hs.DeviceVGP_AddPair(devref, VGpair_off) 'Adding buttons, values and graphic For i As Integer = 1 To 4 hs.DeviceScriptButton_AddButton(devref, output & "-" & i, i, Scriptname, "ButtonPress", output & "-" & i, 1, i, 1) Dim SVpair As New HomeSeerAPI.VSPair(HomeSeerAPI.ePairStatusControl.Status) SVpair.PairType = HomeSeerAPI.VSVGPairType.SingleValue SVpair.Value = i SVpair.Status = "Input " & i hs.DeviceVSP_AddPair(devref, SVpair) Dim VGpair As New HomeSeerAPI.VGPair VGpair.PairType = HomeSeerAPI.VSVGPairType.SingleValue VGpair.Set_Value = i VGpair.Graphic = "images/Moskus/icon_hdmi_" & i & ".png" hs.DeviceVGP_AddPair(devref, VGpair) Next Return devref End Function Public Sub ButtonPress(Input As Object) Dim devref As Integer = Input(0) Dim ButtonName As String = Input(1) Dim output As String = String.Empty 'Gets filled by GetURLIE Dim device As Integer = 0 Dim master As Integer = hs.GetDeviceParentRefByRef(devref) If master = 0 Then master = devref Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(master) For Each devid As Integer In dv.AssociatedDevices(hs) Dim dev As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(devid) Select Case dev.Device_Type_String(hs) Case Is = "HDMI root" device = 0 Case Is = "HDMI out 1" device = 1 Case Is = "HDMI out 2" device = 2 Case Is = "HDMI out 3" device = 3 Case Is = "HDMI out 4" End Select Next Dim command As String = "Refresh" If device > 0 Then Dim value As Integer = hdmi_outputs.ToList.IndexOf(ButtonName) command = device & "-" & value End If Select Case command Case Is = "Refresh" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=refrash", True) '"refrash" is actually not a typo on my part... Case Is = "1-1" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a09", True) Case Is = "1-2" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a1D", True) Case Is = "1-3" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a1F", True) Case Is = "1-4" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a0D", True) Case Is = "2-1" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a17", True) Case Is = "2-2" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a12", True) Case Is = "2-3" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a59", True) Case Is = "2-4" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a08", True) Case Is = "3-1" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a5E", True) Case Is = "3-2" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a06", True) Case Is = "3-3" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a05", True) Case Is = "3-4" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a03", True) Case Is = "4-1" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a18", True) Case Is = "4-2" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a44", True) Case Is = "4-3" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a0F", True) Case Is = "4-4" output = hs.GetURLIE("http://" & ip_address & "/get_data?type=port&cmd=a51", True) End Select InterpretOutput(devref, output) End Sub Public Sub InterpretOutput(ByVal devref As Integer, ByVal output As String) 'output: Output1=1Output2=1Output3=1Output4=1 Dim data(3) As Integer data(0) = CInt(output(8).ToString) data(1) = CInt(output(17).ToString) data(2) = CInt(output(26).ToString) data(3) = CInt(output(35).ToString) Dim master As Integer = hs.GetDeviceParentRefByRef(devref) If master = 0 Then master = devref Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(master) For Each devid As Integer In dv.AssociatedDevices(hs) Dim dev As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(devid) Select Case dev.Device_Type_String(hs) Case Is = "HDMI out 1" If hs.DeviceValue(devid) <> data(0) Then hs.SetDeviceValueByRef(devid, data(0), True) Else hs.SetDeviceValueByRef(devid, data(0), False) End If Case Is = "HDMI out 2" If hs.DeviceValue(devid) <> data(1) Then hs.SetDeviceValueByRef(devid, data(1), True) Else hs.SetDeviceValueByRef(devid, data(1), False) End If Case Is = "HDMI out 3" If hs.DeviceValue(devid) <> data(2) Then hs.SetDeviceValueByRef(devid, data(2), True) Else hs.SetDeviceValueByRef(devid, data(2), False) End If Case Is = "HDMI out 4" If hs.DeviceValue(devid) <> data(3) Then hs.SetDeviceValueByRef(devid, data(3), True) Else hs.SetDeviceValueByRef(devid, data(3), False) End If End Select Next End Sub Gir: Lenke til kommentar
Moskus Skrevet 12. februar 2016 Forfatter Del Skrevet 12. februar 2016 RandomValue.vb Setter en eller flere lamper eller en av flere RGB-devicer til en vilkårlig verdi. Festlig for ungene hvis det brukes på en RGB-lampe/stripe! Parameter: 100,101,102 ... der 100-102 er device ref'er til f.eks R, G og B for en led-stripe. Eller helt uavhengige lamper. Sub Main(ByVal input As Object) Dim generator As New Random Dim devices() As String = input.ToString.Split(",") For Each d As String In devices Dim ref As Integer = CInt(d.Trim) Dim newValue As Integer = generator.Next(0, 99) Dim CAPIcontrol As HomeSeerAPI.CAPIControl = Nothing For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(ref) If newValue = cc.ControlValue Then CAPIcontrol = cc Exit For End If Next If CAPIcontrol IsNot Nothing Then hs.CAPIControlHandler(CAPIcontrol) CAPIcontrol = Nothing Else hs.WriteLog("RandomValue script", "CAPI not found for random value " & newValue & " on device " & ref) End If Next generator = Nothing End Sub Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå