Gå til innhold
  • Bli medlem
Moskus

SCRIPT: GrandbeingMX0404 - Styring av en 4x4 HDMI-matrise

Anbefalte innlegg

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).

    '© Moskus 2014
    
    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:

nEibCgm.png

  • Like 1

Del dette innlegget


Lenke til innlegg
Del på andre sider

Jeg har laget en ett matrise oppsett med VIrtuelle Devicer, men mine innganger er ikke gruppert sånn som dine. Jeg ser du gjør dette via ett script, betyr det at devicene blir opprettet hver gang du kjører dette scriptet. Når kjører du det ? Er det mulig å gruppere devicer i fra Websiden, eller må dette gjøres vha script ?

Del dette innlegget


Lenke til innlegg
Del på andre sider

Som du ser i scriptet har jeg en "Setup()" rutine.

Her er "dv" root-devicen, og siste delen lager children og assosierer dem med root:

'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

 

Del dette innlegget


Lenke til innlegg
Del på andre sider

Hva gjør den siste subrutina ? 

 

data(0) = CInt(output(8).ToString)
data(1) = CInt(output(17).ToString)
data(2) = CInt(output(26).ToString)
data(3) = CInt(output(35).ToString)

Hva er output(8), output(17), output(26), og output(35) ?

 

Del dette innlegget


Lenke til innlegg
Del på andre sider

"Output" er bare en laaaang streng. "Output(8)" henter ut den niende bokstaven (som "Char") og konverterer den til String. Og deretter blir hele sulamiten konvertert til et tall. :) 

Del dette innlegget


Lenke til innlegg
Del på andre sider

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Fjern formatering

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.


  • Lignende innhold

    • Av Moskus
      Nyheter er viktig, og din bolig burde vite hva som skjer. HStouch kommer med en RSS-leser, men den støtter ikke norske tegn, og fungerer bare når den vil. Ettersom jeg ble lei av det, skrev jeg et lite script for å hente frem nyheter.
       
      NewsReader.vb
      Sub Main(ByVal parameters As Object) 'Moskus 2019 Dim devID As Integer = parameters.ToString.Split("|")(0) Dim url As String = "https://api.rss2json.com/v1/api.json?rss_url=" & System.Net.WebUtility.HtmlEncode(parameters.ToString.Split("|")(1)) Dim source As String = "" Try Using client As New System.Net.WebClient Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12 client.Encoding = System.Text.Encoding.UTF8 source = client.DownloadString(url) End Using Catch ex As Exception hs.WriteLog("NewsReader Error", "Net Feil: " & ex.Message) End Try If source = "" Then hs.WriteLog("NewsReader Error", "Got no response from url: " & url) Exit Sub End If Try Dim json = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source) Dim output As String = "" For i As Integer = 0 To 4 output &= "• <b>" & json("items")(i)("title") & "</b><br>" output &= json("items")(i)("description") & "<br><br>" Next hs.SetDeviceString(devID, output, True) Catch ex As Exception hs.WriteLog("NewsReader Error", "Net Feil: " & ex.Message) End Try End Sub HomeSeer trenger en referanse til Newtonsoft.Json.Dll, det kan du sette opp ved å lese under "Installasjon" i denne tråden: https://www.hjemmeautomasjon.no/forums/topic/4338-script-enturvb-få-inn-data-fra-entur/
       
       
      Du trenger en virtuell device per nyhetskilde du vil ha. Ingen controller er viktig, velg "Status Only device" og "Do not log commands from this device".
       
      Så lager du et event. Det kan trigge hvert 15. minutt. Og så legger du til en kjøring av NewsReader.vb for hver nyhetskilde du ønsker deg. Parameter for scriptet er "DEV_ID|http://nyhetskilde.com/rss/", altså device ID, en "pipe" | og kilden. Huk av "Wait for script to finish" og "Only allow a single instance"
       

       
      Da blir resultatet dette:

       
      Her er noen nyhetskilder:
      https://www.aftenbladet.no/rss
      https://www.aftenposten.no/rss
      https://www.nrk.no/toppsaker.rss
      https://www.dagbladet.no/rss/
      https://www.vg.no/rss/feed/?categories=1068&limit=10&format=rss&private=1  - sjekk https://vg.no/rss for å sette opp din egen feed.
       
       
       
    • Av Moskus
      Tegneserier er gøy. Automatiske tegneserier er selvfølgelig enda gøyere. Tidligere var det bare å linke bildet på nettet, men VG ville gjøre det litt vanskeligere for oss. Men det lar seg ordne.
       
      Aller først trenger vi SP_ID'en din. Logg inn på VG (det holder med en gratis-konto), og trykk F12 (eller åpne Developer Console)
      Så finner du "Application" på menyen øverst, finner så cookies, og velger "www.vg.no". Dobbelttrykk på tekstfeltet etter "SP_ID" og kopier hele denne lange, uforståelige teksten til et sted.
       

       
       
       
      NB! Dette scriptet omfatter sletting av filer, og kan potensielt gå ad undas. Det er selvfølgelig testet en del av meg, men som alltid: Ta backup først!
       
      Scriptet er her:
      Tegneserie.vb
      Sub Main(ByVal input As Object) 'Moskus 2019 'Parametre: device_ID|Tegneserie 'Serie-alternativer: Pondus, Lunch, Hjalmar, Tegnehanne Dim devID As String = input.ToString.Split("|")(0) Dim serie As String = input.ToString.Split("|")(1) Dim deleteFiles As Boolean = True Dim SP_ID As String = "DIN_LANGE_SPID_STRENG_HER" Dim directoryName As String = hs.GetAppPath & "/html/images/Tegneserier/" 'Check if "Tegneserier" exits If (Not System.IO.Directory.Exists(directoryName)) Then System.IO.Directory.CreateDirectory(directoryName) 'Delete local files If deleteFiles Then For Each deleteFile As String In System.IO.Directory.GetFiles(directoryName, serie.ToLower & "*.*", System.IO.SearchOption.TopDirectoryOnly) System.IO.File.Delete(deleteFile) Next End If Dim remoteFile As String = "" Dim filename As String = serie.ToLower & "_" & Now.Date.ToString("yyMMdd") & ".jpg" Dim localFile As String = hs.GetAppPath & "/html/images/Tegneserier/" & filename Dim dateFormat As String = Now.Year & "-" & Now.Month.ToString("00") & "-" & Now.Day.ToString("00") Select Case serie.ToLower Case = "pondus" remoteFile = "https://www.vg.no/tegneserier/api/images/pondus/" & dateFormat Case = "lunch" remoteFile = "https://www.vg.no/tegneserier/api/images/lunch/" & dateFormat Case = "hjalmar" remoteFile = "https://www.vg.no/tegneserier/api/images/hjalmar/" & dateFormat Case = "tegnehanne" remoteFile = "https://www.vg.no/tegneserier/api/images/tegnehanne/" & dateFormat End Select If remoteFile <> "" Then Try Using client As New System.Net.WebClient Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12 client.Headers.Add(Net.HttpRequestHeader.Cookie, "SP_ID=" & SP_ID) client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0") client.DownloadFile(remoteFile, localFile) client.Dispose() End Using Catch ex As Exception hs.WriteLog("Tegneserier", "Ex: " & ex.ToString) End Try Dim dateValue As Integer = CInt(Now.Date.ToString("yyMMdd")) hs.SetDeviceString(devID, "<img src='/images/HomeSeer/status/custom.gif' />", True) hs.SetDeviceString(devID, "<img src='./images/Tegneserier/" & filename & "' width='300px' />", False) hs.SetDeviceValueByRef(devID, dateValue, True) Else hs.WriteLog("Tegneserie", "RemoteFile ikke spesifisert for tegneserie: " & serie) End If End Sub Du legger inn SP_ID-strengen din istedenfor "DIN_LANGE_SPID_STRENG_HER".
       
      I tillegg må du lage en device pr. tegneserie du er interessert i. Som i nyhetsscriptet er dette en "Status Only" device.
       
      Så er det bare å sette opp eventet. Tegneseriene blir oppdatert kl. 08:00, så 08:15 er sikkert et bra tidspunkt. Kun ukedager og lørdager. Huk av "Wait for Script to finish" og "Only allow singe instance". Så repeter for hver tegneserie.
       
      Parameter er dev_ID|Tegneserie, f.eks. 3689|Pondus.

       

       
       
      ... som gir oss:

       
      Bredden er satt til 300px for at hele tegneserien skal dukke opp i Device Management, men dette er ikke en begrensning i f.eks. HStouch.
    • Av Guahtdim
      Problemet er som følger:
      Jeg overvåker fryser og ønsker å sende en melding i god tid før den har nådd 0 grader. Etter å ha opplevd ett par ganger at fryseren er blitt lukket, men ikke tett med tilsvarende dårlig kjøling så ønsker jeg å kunne varsle meg selv når man er på vei mot 0 grader ett stykke før den har nådd f.eks. -3 grader. 
       
      Nå overvåker jeg kun på overstigning av -3 grader, men dette har en tendens å inntreffe lenge etter at jeg har dratt inn til jobb og siden jeg er pendler ett greit stykke (Moss - Oslo) så er det ikke å stikke fra jobben for å sjekke/lukke fryseren.
       
      Finnes det noe plugin eller script for å se om temperaturen er på vei opp utenom de vanlige "bølgene" som oppstår mellom hver gang kompressoren slår inn? Eller er dette noe man må "snekre" selv?
    • Av Moskus
      De som har lest HomeSeer-skolen vet at jeg er veldig opptatt av å holde orden i systemet sitt. Det er fordi da er det så mye enklere å finne frem når man skal automatisere. Det er lett å huske hva "Node 11 Switch Multilevel 1" er når man bare har 11 noder, men når man har mange er det selvfølgelig helt umulig.
       
      I HomeSeer er det lett å tilordne rom og etasje til enhetene dine, men det er tungvindt å gi selve devicene noe mer fornuftig valg. Jeg navngir enheter med "Enhet, device_type", slik at det f.eks. er "Taklys, Switch Multilevel 1" eller "Taklys, Power", og det har jeg frem til nå gjort manuelt fordi jeg legger til en og en node.
       
      Men tidligere i vår satte jeg opp et helt hus på et par dager, på over 60 noder. Da tar det altfor lang tid å gjøre det manuelt, og et script var på sin plass.
       
      Scriptet gjør at dette:

       
      ... enkelt kan forandres til dette (etter å ha også gitt dem nye etaskjer og rom):

       
      ... og dermed kan man med litt sjuling av "unødvendige enheter" ende opp med noe enklere:

       
       
      Det fungerer også på andre sensorer, bl.a. bevegelsessensorer og magnetbrytere.
      Før:

       
      Etter:

       
       
      Bruk
      Måten det gjøres på er at root-devicen navngis med navnet du har tenkt å bruke og med et komma og Root bak, f.eks. "Taklys, Root (123)" (jeg har også begynt å sette nodenummeret i parentes bak Root).
      Så kjøres scriptet med Root Device ID som parameter, sub/function må settes til "RenameDevices".
       

       
       
       
      RenameDevices.vb
      Sub RenameDevices(input As String) 'Moskus 2019 Dim rootRef As Integer = input Dim rootDevice As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(rootRef) rootDevice.MISC_Set(hs, HomeSeerAPI.Enums.dvMISC.NO_LOG) If Not rootDevice.Name(hs).Contains("Switch") Then rootDevice.MISC_Clear(hs, HomeSeerAPI.Enums.dvMISC.AUTO_VOICE_COMMAND) Dim rootName As String = rootDevice.Name(hs) Dim prefix As String = rootName.Substring(0, rootName.IndexOf(",")).Trim hs.WriteLog("RenameDevices", "Starting with prefix: " & prefix) Dim i As Integer 'For i = (rootRef + 1) To endRef For Each i In rootDevice.AssociatedDevices(hs) Dim device As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(i) device.Name(hs) = prefix + ", " + device.Name(hs) device.MISC_Set(hs, HomeSeerAPI.Enums.dvMISC.NO_LOG) If Not device.Name(hs).Contains("Switch") Then device.MISC_Clear(hs, HomeSeerAPI.Enums.dvMISC.AUTO_VOICE_COMMAND) Next hs.SaveEventsDevices() hs.WriteLog("RenameDevices", "Done renaming " & prefix) End Sub  
       
    • Av Moskus
      Inspirert til å løse @toonwolf sitt problem. 
       
      Se under:
      Sub Add(ByVal inputArgs As String) 'Input: RootReference;place;NewPin 'Example: 342;65;1234 hs.WriteLog("Add user", "Adding user...") Dim interfaceID As String = hs.GetINISetting("Interfaces", "IFace_0_Unique", "", "Z-Wave.ini") hs.WriteLog("Add user", "InterfaceID: " & interfaceID) Dim rootDeviceRef As Integer = inputArgs.Split(";")(0) Dim place As Integer = inputArgs.Split(";")(1) Dim PINnumber As Integer = inputArgs.Split(";")(2) Dim PINstring As String = PINnumber.ToString("0000") Dim nodeNumber As String = ZwaveUtil_GetNodeIdByRef(rootDeviceRef) hs.WriteLog("Removing user", "Node number: " & nodeNumber) Dim configResult = hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {nodeNumber, place.ToString, PINstring, "TEST-user", interfaceID}) hs.WriteLog("Add user", "Done with result " & configResult.ToString) End Sub Sub Remove(ByVal inputArgs As String) 'Input: RootReference;place 'Example: 342;65 hs.WriteLog("Removing user", "Removing user...") Dim interfaceID As String = hs.GetINISetting("Interfaces", "IFace_0_Unique", "", "Z-Wave.ini") hs.WriteLog("Removing user", "InterfaceID: " & interfaceID) Dim rootDeviceRef As Integer = inputArgs.Split(";")(0) Dim place As Integer = inputArgs.Split(";")(1) Dim nodeNumber As String = ZwaveUtil_GetNodeIdByRef(rootDeviceRef) hs.WriteLog("Removing user", "Node number: " & nodeNumber) Dim ConfigResult = hs.PluginFunction("Z-Wave", "", "RemoveUserCodePin", {nodeNumber, place.ToString, interfaceID}) hs.WriteLog("Removing user", "Done with result " & ConfigResult.ToString) End Sub Public Function ZwaveUtil_GetNodeIdByRef(ByVal deviceId As Integer) As Integer Dim nodeId As Integer = -1 If (deviceId > 0) Then Dim device As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceId) If (device IsNot Nothing) Then Dim pdata As HomeSeerAPI.PlugExtraData.clsPlugExtraData = device.PlugExtraData_Get(hs) If (pdata IsNot Nothing) Then nodeId = pdata.GetNamed("node_id") End If End If Else Throw New System.Exception("Device not found: " + deviceId) End If Return nodeId End Function  
×
×
  • Opprett ny...