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

SCRIPT: IncrementLight.vb - Øk lyset gradvis til det er helt på (på forskjellige måter)


Moskus

Anbefalte innlegg

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

  • 8 måneder senere...

Hva er enkleste måte å justere alarmtidspunkt på? En virtuell device med dropdown list blir vel ikke helt optimalt siden man da må gå via en verdi som ikke er på "klokkeformat"?

Skulle gjerne hatt en klokkeapp på iPhonen som kunne sendt en IFTTT trigger.

Endret av iceball
Lenke til kommentar
Del på andre sider

  • 8 måneder senere...

Med utgangspunkt i @Moskus sitt IncrementLight.vb har jeg laget en "v2", som bare krever ett event (ellers ikke så mye annerledes ?):

Sub Main (ByVal params as Object)
  ' @Author: Sven-Ove Bjerkan and Moskus
  ' @Version: 2 (2017-10-07)

  ' IMPORTANT! 
  ' 1. Create this event as a "disabled" event and trigger it once from another event!
  ' 2. Set the trigger for this event to "The event will automatically trigger every..." E.g: 6 seconds will dim the light from 0 to 100 in 10 min

  ' @Syntax: deviceid|this_event_name|stoplevel
  ' deviceid: lamp deviceid
  ' this_event_name: The name of this exact event - very important!
  ' stoplevel: optional, will increment to 100 if not supplied


  Dim parameters() as String = params.ToString.Split("|")
  Dim deviceRef As Integer = parameters(0)
  Dim eventName As String = parameters(1)
  Dim stopValue As Integer = 100

  If parameters.length = 3 Then
       stopValue = parameters(2)
  End If

  Dim deviceValue As Integer = hs.DeviceValue(deviceRef)

  deviceValue = deviceValue + 1
  If deviceValue > 100 Then
    deviceValue = 100
  End If
  If deviceValue < 1 Then
    deviceValue = 1
  End If

  hs.EnableEvent(eventName)
  'Exit if the device is already at maximum, i.e. "On"
  If hs.CAPIGetStatus(deviceRef).Status = "On" Or deviceValue > stopValue Then 
    hs.DisableEvent(eventName)
    Exit Sub
  End If


  '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 Then

    'Set the correct dim level
    hs.CAPIControlHandler(cc)

    'We're done, so let's exit!
    Exit Sub
    End If
  Next

End Sub

incrementlightv2.thumb.PNG.102df8d4d21a80a5b1b36153f7276be9.PNG

  • Like 2
Lenke til kommentar
Del på andre sider

  • 1 år senere...
On 07/10/2017 at 22:17, ZoRaC said:

Med utgangspunkt i @Moskus sitt IncrementLight.vb har jeg laget en "v2", som bare krever ett event (ellers ikke så mye annerledes ?):

 

 

Jeg prøver å benytte dette scriptet for å dimme opp flere lyssoner (4) i stue/kjøkken samtidig om morgenen. Jeg har da et event som trigges av Alexa og det eventet trigger igjen et event for hver sone, som er satt opp som beskrevet over. Alle Dimme-eventene benytter samme .vb-script. 

Dette fungerer ikke... Selv med "Only allow a single instance to run at a time" disabled og enablet "Wait for script to finish before continuing", samt andre kombinasjoner av disse, så starter ikke dimming på alle sonene. Kun en eller to soner begynner å dimmes opp.

 

Noen som har forslag til fiks her?

Eller skal jeg kanskje bare utvide scriptet slik at et script dimmer alle 4 sonene? Det bør vel være inne rekkevidde, selv for en novise som meg, når alle sonene skal dimmes opp til samme nivå.

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.