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

SCRIPT: DeviceState.vb - Lagrer og gjenoppretter slik lyset (o.l.) er akkurat NÅ


Moskus

Anbefalte innlegg

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
Lenke til kommentar
Del på andre sider

  • 9 måneder senere...
Den 3/28/2016 klokken 20.04, Moskus skrev:

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.


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

 

Vet du om dette fungerer med JowiHue / Hue-pærer?

Lenke til kommentar
Del på andre sider

  • 3 uker senere...

Har lagt merke til at en og annen gang funker ikke automatikken helt som den skal på kjøkkenet, og gikk etter litt i loggen nå..

 

jan-19 01:04:59   Error Compiling script C:\Program Files (x86)\HomeSeer HS3\scripts\DeviceState.vb: compiler initialization failed unexpectedly: 0x80070002
jan-19 01:04:59   Error Compiling script C:\Program Files (x86)\HomeSeer HS3\scripts\DeviceState.vb: could not find library 'Scheduler.dll'

 

Har du noe tips sånn på stående fot @Moskus?     Noe merkelig at den plutselig ikke skulle finne en fil som den antagelig finner i de aller fleste tilfellene til vanlig.. kan det være at fila er opptatt med noe annet?

Lenke til kommentar
Del på andre sider

Dersom HS3 er autostartet kan den ha blitt startet fra feil sted. I f.eks Task Scheduler må path defineres. Det var nettopp en annen tråd om samme tema. Vært tema på HS-forumet også. Googler du feilmeldingen finner du mye info. 

Lenke til kommentar
Del på andre sider

  • 9 måneder senere...

Jeg får bare feil når jeg prøver kjøre "Save":

Sitat
Nov-18 20:51:15   Error Compiling script /usr/local/HomeSeer/scripts/DeviceState.vb: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
Nov-18 20:51:15   Error Compiling script /usr/local/HomeSeer/scripts/DeviceState.vb: End of statement expected.
Nov-18 20:51:15   Error Compiling script /usr/local/HomeSeer/scripts/DeviceState.vb: Expected 'End'.
Nov-18 20:51:15   Error Compiling script /usr/local/HomeSeer/scripts/DeviceState.vb: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
Nov-18 20:51:15   Error Compiling script /usr/local/HomeSeer/scripts/DeviceState.vb: End of statement expected.
Nov-18 20:51:15   Error Compiling script /usr/local/HomeSeer/scripts/DeviceState.vb: Expected 'End'.

 

Noen forslag? Har prøvd med flere forskjellige dvRef, i tilfelle det var en device den ikke "likte".

Burde vel fungere på Linux også?

Lenke til kommentar
Del på andre sider

På 11/18/2017 den 20.54, ZoRaC skrev:

Noen forslag? Har prøvd med flere forskjellige dvRef, i tilfelle det var en device den ikke "likte".

Burde vel fungere på Linux også?

Den liker tydeligvis ikke kortversjonen av deklarering av properties. Rart!

Går på Zee2, trodde jeg, men det skal jeg teste.

Lenke til kommentar
Del på andre sider

  • 3 uker senere...
  • 3 måneder senere...
  • 8 måneder senere...
  • 2 måneder senere...
På 18.11.2017 den 20.54, ZoRaC skrev:

Jeg får bare feil når jeg prøver kjøre "Save":

 

Noen forslag? Har prøvd med flere forskjellige dvRef, i tilfelle det var en device den ikke "likte".

Burde vel fungere på Linux også?

 

Fant du noen løsning på dette? Får samme feil som deg, HS3 på Linux.

Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  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.

×
×
  • 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.