Husmann Skrevet 17. mars 2019 Skrevet 17. mars 2019 Jeg har begynt å se litt på scripting for Homeseer og miljøene som brukes ifbm. dette. Visual Studio og Tenscripting er (såvidt) installert. Det er et stykke vei å gå før jeg begynner å bli litt varm i trøya på dette (har litt programmeringserfaring), men jeg har en utfordring akkurat nå som jeg håpet kanskje noen her kunne hjulpet med. Utfordringen er kort fortalt at jeg har en Heatit Z-push button 8 som er tenkt å styre noen Philips Hue-pærer. Så langt har det gått greit å få den til å slå pærene av og på, men jeg skulle jo gjerne hatt dimming, da.. Etter litt leting kom jeg over dette innlegget på Homeseer-forumet. Her er det et script som tar i mot bl.a. device ref og dimmer device'n opp eller ned. (Det ser ut som om det er bygget bare for en device, så det bør kanskje bygges ut til å takle flere, men det er en annen historie.) Når jeg prøver dette i HS så får jeg feilmeldinger bl.a. om at "System.core" mangler osv. Fullstendige feilmeldinger gjengitt nederst. Her er scriptet gjengitt (minimalt endret) i sin helhet: Public Sub Main(ByVal Parms As Object) '' This script should be called when a central scene is set to "held down" '' it dims A dimmable device either up Or down until the central scene becomes "key released" or the load hits 99 or 0 '' Parameters '<device ref #>|<device ref central scene #>|up|<dimrate>' or '<device ref #>|<device ref central scene #>|down|<dimrate>' '' ie: 79|78|up|10 Dim ParmArray() As String ParmArray = Parms.ToString.Split(ToChar("|")) Dim DeviceRef As Integer = Integer.Parse(ParmArray(0)) Dim DeviceValue As Integer = hs.DeviceValue(DeviceRef) Dim DeviceRefCS As Integer = Integer.Parse(ParmArray(1)) Dim DeviceValueCS As Integer Dim Keyreleased As Integer = 5001 Dim UpDown As String = ParmArray(2) '' DimStep is the increment value for each dim setting Dim DimStep As Integer = 3 If UpDown = "down" Then DimStep = DimStep * -1 If UpDown = "down" Then Keyreleased = 6001 '' DimRate is how long to take between dim levels; ie the rate of dimming in milliseconds Dim DimRate As Integer = Integer.Parse(ParmArray(3)) For value As Integer = 0 To 100 '' increment the dim% value then set min and max values DeviceValue = DeviceValue + DimStep If DeviceValue > 99 Then DeviceValue = 99 If DeviceValue < 0 Then DeviceValue = 0 '' set the device to the current value Dim cc As HomeSeerAPI.CAPIControl = hs.CAPIGetSingleControl(DeviceRef, True, "Dim (value)%", False, False) cc.ControlValue = DeviceValue Dim cr As HomeSeerAPI.CAPIControlResponse = hs.CAPIControlHandler(cc) '' get current central scene value DeviceValueCS = hs.DeviceValue(DeviceRefCS) '' check to see if we should exit the loop If DeviceValue = 0 Or DeviceValue = 99 Or DeviceValueCS = Keyreleased Then Exit Sub Thread.Sleep(DimRate) Next End Sub Her er feilmeldingene jeg får i loggen: mar-17 11:45:10 Error Compiling script C:\HS\scripts\dim_updown.vb: 'Thread' is not declared. It may be inaccessible due to its protection level. mar-17 11:45:10 Error Compiling script C:\HS\scripts\dim_updown.vb: Namespace or type specified in the Imports 'System.Core' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases. mar-17 11:45:10 Error Compiling script C:\HS\scripts\dim_updown.vb: 'Thread' is not declared. It may be inaccessible due to its protection level. mar-17 11:45:10 Error Compiling script C:\HS\scripts\dim_updown.vb: Namespace or type specified in the Imports 'System.Core' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases. mar-17 11:45:10 Event Running script in background: C:/HS/scripts/dim_updown.vb mar-17 11:45:10 Event Event Trigger "Kitchen Heatit8 switch gr3_2 (off) Dim down" mar-17 11:45:10 Event Running script in background: C:/HS/scripts/dim_updown.vb mar-17 11:45:10 Event Event Trigger "Kitchen Heatit8 switch gr3_1 (on) Dim up" mar-17 11:45:10 Z-Wave Device: 2. etg Kitchen Heatit push 8 switch - Central Scene Set to 5002 ...Er det noen som ser noen umiddelbar grunn til disse feilene? Etter diverse søk har jeg fått forståelsen av at feilen ang. System.Core kan være en vikarierende feilmelding som egentlig skyldes noe helt annet. Takknemlig for all hjelp! ☺️ Siter
HSv Skrevet 17. mars 2019 Skrevet 17. mars 2019 Du kan prøve å bytte ut 4 minutter siden, Husmann skrev: Thread.Sleep(DimRate) med System.Threading.Thread.Sleep(DimRate) Siter
Husmann Skrevet 17. mars 2019 Forfatter Skrevet 17. mars 2019 Takk for tips! Prøvde det, og System.Core-feilen forsvant, men fikk i steden dette: mar-17 18:47:06 Z-Wave Device: 2. etg Kitchen Heatit push 8 switch - Central Scene Set to 5001 mar-17 18:47:04 Error 1 Running script C:\HS\scripts\dim_updown.vb :Exception has been thrown by the target of an invocation.Object reference not set to an instance of an object. mar-17 18:47:04 Error 1 Running script C:\HS\scripts\dim_updown.vb :Exception has been thrown by the target of an invocation.Object reference not set to an instance of an object. mar-17 18:47:04 Event Running script in background: C:/HS/scripts/dim_updown.vb mar-17 18:47:04 Event Running script in background: C:/HS/scripts/dim_updown.vb mar-17 18:47:04 Event Event Trigger "Kitchen Heatit8 switch gr3_2 (off) Dim down" mar-17 18:47:04 Event Event Trigger "Kitchen Heatit8 switch gr3_1 (on) Dim up" mar-17 18:47:04 Z-Wave Device: 2. etg Kitchen Heatit push 8 switch - Central Scene Set to 5002 Noen hint om veien videre herfra? Siter
Moskus Skrevet 18. mars 2019 Skrevet 18. mars 2019 Denne linja: Dim cc As HomeSeerAPI.CAPIControl = hs.CAPIGetSingleControl(DeviceRef, True, "Dim (value)%", False, False) ... forutsetter at lysene som skal dimmes har "labels" som begynner med "Dim ". Og i de siste årene har HomeSeer strøket "Dim " foran. Du kan istedenfor prøve med: Dim cc As HomeSeerAPI.CAPIControl = hs.CAPIGetSingleControl(DeviceRef, True, "(value)%", False, False) ...hvis ikke det fungerer, så er det bedre å loope gjennom verdiene som skal settes og hente riktig CAPI derfra: '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 cc.ControlValue = DIN_VERDI_ELLER_VARIABEL_HER Then CAPIcontrol = cc Exit For End If Next '... And execute it hs.CAPIControlHandler(CAPIcontrol) Du burde kunne bruke det over hvis du erstatter "DIN_VERDI_ELLER_VARIABEL_HER" med "DeviceValue" Siter
Husmann Skrevet 24. mars 2019 Forfatter Skrevet 24. mars 2019 Ok, det tok dessverre noen dager før jeg fikk sett på dette igjen, men nå har jeg kommet i mål med en versjon som fungerer. Takk til @HSv og @Moskus for god hjelp! Her er den versjonen jeg kjører pr i dag: Public Sub Main(ByVal Parms As Object) '' This script should be called when a central scene is set to "held down" '' it dims A dimmable device either up Or down until the central scene becomes "key released" or the load hits 254 or 1 (values, not %) '' Parameters '<device ref #>|<device ref central scene #>|Up/Down|<dimrate>|<csdimKeyUpreleased>|<csdimKeyDownreleased>' '' ie: 79|78|Up|10|1001|2001 --> 1001 = typically Central scene dim key 1 (up/on) released, 2001 = typically dim Central scene 2 (down/off) released Dim ParmArray() As String ParmArray = Parms.ToString.Split("|") Dim DeviceRef As Integer = Integer.Parse(ParmArray(0)) Dim DeviceValue As Integer = hs.DeviceValue(DeviceRef) Dim DeviceRefCS As Integer = Integer.Parse(ParmArray(1)) Dim DeviceValueCS As Integer Dim Keyreleased As Integer = Integer.Parse(ParmArray(4)) Dim UpDown As String = ParmArray(2) '' DimStep is the increment value for each dim setting Dim DimStep As Integer = 6 If UpDown = "Down" Then DimStep = DimStep * -1 If UpDown = "Down" Then Keyreleased = Integer.Parse(ParmArray(5)) '' DimRate is how long to take between dim levels; ie the rate of dimming in milliseconds Dim DimRate As Integer = Integer.Parse(ParmArray(3)) For value As Integer = 0 To 255 '' increment the dim value then set min and max values DeviceValue = DeviceValue + DimStep If DeviceValue > 254 Then DeviceValue = 254 If DeviceValue < 1 Then DeviceValue = 1 '' set the device to the current value Dim cc As HomeSeerAPI.CAPIControl = hs.CAPIGetSingleControl(DeviceRef, True, UpDown, False, False) cc.ControlValue = DeviceValue Dim cr As HomeSeerAPI.CAPIControlResponse = hs.CAPIControlHandler(cc) '' get current central scene value DeviceValueCS = hs.DeviceValue(DeviceRefCS) '' check to see if we should exit the loop If DeviceValue = 1 Or DeviceValue = 254 Or DeviceValueCS = Keyreleased Then Exit Sub System.Threading.Thread.Sleep(DimRate) Next End Sub Det er bygget litt ut til også å kunne ta i mot parametre som forteller scriptet hvilken Central scene button som skal holdes styr på. Scriptet har nok forbedringspotensiale så det holder, men det virker, i alle fall så lenge det blir foret med riktige verdier. Neste steg blir å utvide det til å ta hensyn til en bevegelsessensor: Ønsket funksjonalitet er at når det ikke har vært bevegelse i rommet på f.eks. 5 min, så skal to av de tre lysene dempes ned (eller opp) til en forhåndsbestemt verdi, samt at de skifter til en varmere fargetemperatur. Når noen går inn i rommet igjen skal de dimmes opp/ned til den verdien og fargetempen de hadde før. For å få til dette må gjeldende dim-verdier lagres før de dimmes til forhåndsbestemt verdi. Tenkte å bruke en VD eller to (ja, uheldig forkortelse.. Er det en annen som er vanlig i bruk?) for å lagre disse verdiene (settes via scriptet). Men er det en smartere måte å gjøre det på? (Den enkleste måten ville kanskje vært med Easy triggers "Set device to another device", men dette fungerte ikke skikkelig sammen med scriptet og satte feil verdier på VD'en) 1 Siter
Kalle-Per Skrevet 27. desember 2020 Skrevet 27. desember 2020 Jeg har samme oppsett med Heatit Z-Push Button og Philips Hue pærer gjennom deCONZ. Scriptet fungerer, men det er forsinkelse fra jeg trykker på bryteren til lyset begynner å dimme. Og dermed fortsetter også lyset å dimme etter at jeg slipper bryteren. Har prøvd å endre dimrate og dimstep, uten at det gjør noen forskjell. Er det noen som har noen tips? Siter
aarpi3 Skrevet 3. mars 2021 Skrevet 3. mars 2021 Etter klipp og lim tror jeg at jeg har fått dette scriptet til å funke for IKEA Symfonisk mot ei Hue lampe (via zigbee2mqtt)) og en Heatit Z-dim. Har enheter både med "Dim (value)%" og "(value)%" så har kopiert inn @Moskus sitt tips over. Også har jeg lagt inn dimstep i eventen siden jeg ønsker å endre både rate og step på de ulike lampene. Det er merkbart større forsinkelse mot HUE lampa enn Heatit dimmeren. Bruker akkurat nå 1085|1045|up|50|2|2|1 som input til HUE. Er det noe mer/bedre måte å sett opp et slikt bryter-dimmer script? Spoiler Public Sub Main(ByVal Parms As Object) '' This script should be called when a central scene is set to "held down" '' it dims A dimmable device either up Or down until the central scene becomes "key released" or the load hits 99 or 1 '' Parameters '<device ref #>|<device ref central scene #>|up/down|<dimrate>|<csdimKeyUpreleased>|<csdimKeyDownreleased>|<dimstep>' '' ie: 79|78|up|10|2|2|1 --> 2 = typically dim key stop rotating on my IKEA Symfonisk (independent of direction) Dim ParmArray() As String ParmArray = Parms.ToString.Split("|") Dim DeviceRef As Integer = Integer.Parse(ParmArray(0)) Dim DeviceValue As Integer = hs.DeviceValue(DeviceRef) Dim DeviceRefCS As Integer = Integer.Parse(ParmArray(1)) Dim DeviceValueCS As Integer Dim Keyreleased As Integer = Integer.Parse(ParmArray(4)) Dim UpDown As String = ParmArray(2) '' DimStep is the increment value for each dim setting Dim DimStep As Integer = Integer.Parse(ParmArray(6)) If UpDown = "down" Then DimStep = DimStep * -1 If UpDown = "down" Then Keyreleased = Integer.Parse(ParmArray(5)) '' DimRate is how long to take between dim levels; ie the rate of dimming in milliseconds Dim DimRate As Integer = Integer.Parse(ParmArray(3)) For value As Integer = 0 To 100 '' increment the dim% value then set min and max values DeviceValue = DeviceValue + DimStep If DeviceValue > 99 Then DeviceValue = 99 If DeviceValue < 1 Then DeviceValue = 1 'Find the correct CAPI based on device value... Dim CAPIcontrol As HomeSeerAPI.CAPIControl = Nothing For Each cc As HomeSeerAPI.CAPIControl In hs.CAPIGetControl(DeviceRef) If cc.ControlValue = DeviceValue Then CAPIcontrol = cc Exit For End If Next '... And execute it hs.CAPIControlHandler(CAPIcontrol) '' get current central scene value DeviceValueCS = hs.DeviceValue(DeviceRefCS) '' check to see if we should exit the loop If DeviceValue = 1 Or DeviceValue = 99 Or DeviceValueCS = Keyreleased Then Exit Sub System.Threading.Thread.Sleep(DimRate) Next End Sub Siter
aarpi3 Skrevet 27. mars 2022 Skrevet 27. mars 2022 On 03/03/2021 at 12:31, aarpi3 said: Er det noe mer/bedre måte å sett opp et slikt bryter-dimmer script? Jeg trengte å styre noen lamper fra en annen plass en dimmeren så kjøpte en Heatit Z-push wall controller. Lampene er koblet til en Heatit Z-dim og får styrt lampene med Z-push. Dessverre er dimming med med Event'er og scriptet over IKKE bra nok for alle i huset Det største problemet er at dimmingen ikke slutter fort nok etter at en har sluppet bryteren. Finnes det noe bedre måte å dimme lys på med script? Akkurat med Z-Push kunne jeg testa ut associations hvis jeg hadde klart å vekke den. Men spørsmålet gjelder også andre brytere jeg bruker som Hue dimmer. Siter
Moskus Skrevet 28. mars 2022 Skrevet 28. mars 2022 Assosiasjoner er bra når du kan bruke det. Evt. en slik for det som er Zigbee (finnes også i Z-wave): https://www.tronika.no/no/smarthus/zigbee-produkter/zigbee-kontrollere/veggkontroller-zg2835.html Siter
aarpi3 Skrevet 30. mars 2022 Skrevet 30. mars 2022 Ja, Heatit Z-push wall controller er Z-wave så assosiasjoner mot en z-dim burde fungere fint. Problemet med det er at jeg ikke klarer å holde den våken slik at jeg får satt det opp.Men generelt hadde jeg håpet at kontinuerlig dimming med event og skript var bedre slik at jeg kunne brukt enklere Zigbee kontrollere som Hue dimmer. Siter
Moskus Skrevet 8. april 2022 Skrevet 8. april 2022 On 30/03/2022 at 08:48, aarpi3 said: Problemet med det er at jeg ikke klarer å holde den våken slik at jeg får satt det opp. Bare fortsett å trykk ned de to øverste knappene fortløpende (dvs. iallfall innimellom) når du konfigurerer den. Ikke ideelt eller i henhold til manualen, men det fungerer. 1 Siter
aarpi3 Skrevet 11. april 2022 Skrevet 11. april 2022 Løsningen ble trykke 6 ganger på en opp knapp - samme som inkludering, men uten å ha hub i ekskluderende modus. 1 Siter
Anbefalte innlegg
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.