Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Moskus

Administrator
  • Innlegg

    16 801
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    791

Innlegg skrevet av Moskus

  1. 7 hours ago, iblis said:

    Pris?

     

    Er det mulig å konvertere en HomeTroller Zee S2 om til en Z-NET Remote Z-Wave Interface (ved å klone minnekortet fra Z-NET)? 

     

    Hvis jeg ikke tar feil så bruker disse samme hardware?

    Ja, godt poeng! Jeg vil tippe de bruker samme hardware (Raspberry Pi med en Z-wave modul). Fermate, det kan være du da vil beholde den.

     

    Jeg skal se om jeg finner Z-NET imaget et sted, det må jo være tilgjengelig, ellers så har jeg jo en Z-NET å klone. :)

  2. 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)
        '© Moskus
        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

     

  3. 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
  4. 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:
    dohVt.jpg

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

    • Like 2
    • Thanks 2
  5. 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

     

     

    Eventet ser da slik ut:

    HzYCMpw.png 

     

     

    • Like 6
  6. 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)
            '© Moskus
            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

     

  7. Dette scriptet brukes f.eks. hvis du vil øke lyset gradvis fra 0% til 100% over en halv time. Da trenger du et script som trigger hvert 18. sekund, og som kjører dette scriptet:

     

    IncrementLight.vb

        Public Sub Main(ByVal _deviceRef As Object)
            '© Moskus
            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)
            '© Moskus
            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)
            '© Moskus
            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:

    1uxCI8r.png

     

    eHhfpga.png

     

    B9AiIPR.png

    • Like 1
  8. 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:

     


    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
     
     

    • Like 2
  9. Den primære endringen er vel grei nok. Synd at amerikanere ikke har forstått at verden er støtte enn USA, men slik har det vel vært lenge nå.

     

    Men alle bug-fixene er jeg interessert i. HS bruker jo nesten ikke minne lenger! :)

     

  10. Jeg kjører ikke beta i HS3 lenger, men for HStouch Server og Z-wave-plugin'en gjør jeg det, de kjører altfor safe etter min mening. Jeg kjører .61 og har ingen overflow exceptions i min logg.

     

    Dette på Linux?

     

    EDIT: Installerte .65 også. Alt fremdeles vel. Kan det være mono-relatert?

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.