Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon! 🥇🥈🥉

Moskus

Administrator
  • Innlegg

    16 889
  • Ble med

  • Besøkte siden sist

  • Dager vunnet

    812

Alt skrevet av Moskus

  1. Ikke bare. Du må da også bytte ut "Twinkly.vb" navnet i AddDeviceButtons. Men ellers er det slik.
  2. Du kan prøve med en "Import", da skal det iallfall komme opp en root.
  3. Det er det samme maset hvert år: "Hvorfor må vi alltid ha disse kjedelige juletrelysene? Klart jeg kan bruke RGBW-lys, men de er så... statiske.". Vi har alle vært der. Vel, Twinkly er svaret. Det er juletrelys som kan styres via en app, man kan legge til animasjoner, og man kan til og med lage egne og "tegne" fargene på treet i sanntid. Og nå kan man også selvfølgelig styre treet fra HomeSeer. Lagre scriptet under som Twinkly.vb i /scripts-mappen, endre IPen (nest øverste linje), og lag et event der du kjører "Setup"-funksjonen. Hvis du oppdaterer, så kan du istedenfor kjøre "AddDeviceButtons"-funksjonen og bruke deviceID'en til eksisterende Twinkly-devicer som parameter (en om gangen). Twinkly.vb 'Moskus 2019-2020 Dim IP As String Dim debug As Boolean = False Public Sub Main(ByVal something As Object) End Sub Public Sub ButtonPress(ByVal input As Object) Dim deviceRef As Integer = input(0) IP = DirectCast(hs.GetDeviceByRef(deviceRef), Scheduler.Classes.DeviceClass).Device_Type_String(hs) Dim cmd As String = input(1) If cmd.StartsWith("Brightness_") Then Dim value As Integer = cmd.Split("_")(1) DoCmd("Brightness", value) Else If DoCmd(cmd) Then hs.SetDeviceString(deviceRef, cmd, True) End If If DoCmd(cmd) Then hs.SetDeviceString(deviceRef, cmd.Replace("_", " "), True) End Sub Public Function DoCmd(ByVal command As String, Optional ByVal value As Integer = 100) As Boolean 'SetMode("rt") 'SetMode("demo") 'SetMode("movie") 'SetMode("effect") 'SetMode("off") If debug Then hs.WriteLog("Twinkly", "Starting DoCmd()") Dim code As String = GetRandomCode() If debug Then hs.WriteLog("Twinkly", "Code: " & code) Dim auth As TwinklyAuthentication = Login(code, forceNew:=True) If debug Then hs.WriteLog("Twinkly", "Authentication_token: " & auth.authentication_token) Dim success As Boolean = Verify() If debug Then hs.WriteLog("Twinkly", "Verified: " & success) If command = "Brightness" Then SetBrightness(value) Else SetMode(command) End If Return True End Function Public Sub Setup(ByVal not_used As String) Dim new_ref As Integer = hs.NewDeviceRef("Twinkly") Dim dv As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(new_ref) dv.Location(hs) = "Twinkly" dv.Location2(hs) = "Twinkly" dv.Can_Dim(hs) = False dv.DeviceType_Set(hs) = New HomeSeerAPI.DeviceTypeInfo dv.Status_Support(hs) = True dv.Can_Dim(hs) = False dv.MISC_Set(hs, HomeSeerAPI.Enums.dvMISC.SHOW_VALUES) 'This is &H100 dv.MISC_Clear(hs, HomeSeerAPI.Enums.dvMISC.STATUS_ONLY) 'This is &H10 hs.SaveEventsDevices() AddDeviceButtons(new_ref) hs.WriteLog("Twinkly", "Initiation done!") End Sub Public Sub AddDeviceButtons(ByVal device_ref As String) Dim devID As Integer = CInt(device_ref) hs.DeviceScriptButton_DeleteAll(devID) hs.DeviceProperty_dvMISC(device_ref, HomeSeerAPI.Enums.eDeviceProperty.MISC_Set, HomeSeerAPI.Enums.dvMISC.SHOW_VALUES) Try hs.WriteLog("Twinkly", "Added button 1: " & hs.DeviceScriptButton_AddButton(devID, "Movie", 101, "Twinkly.vb", "ButtonPress", "Movie", 1, 1, 1)) hs.WriteLog("Twinkly", "Added button 2: " & hs.DeviceScriptButton_AddButton(devID, "Effect", 102, "Twinkly.vb", "ButtonPress", "Effect", 1, 2, 1)) hs.WriteLog("Twinkly", "Added button 3: " & hs.DeviceScriptButton_AddButton(devID, "Demo", 103, "Twinkly.vb", "ButtonPress", "Demo", 1, 3, 1)) hs.WriteLog("Twinkly", "Added button 4: " & hs.DeviceScriptButton_AddButton(devID, "Pause", 104, "Twinkly.vb", "ButtonPress", "RT", 1, 4, 1)) hs.WriteLog("Twinkly", "Added button 5: " & hs.DeviceScriptButton_AddButton(devID, "Off", 0, "Twinkly.vb", "ButtonPress", "Off", 1, 5, 1)) For i As Integer = 10 To 100 Step 10 hs.WriteLog("Twinkly", "Added dimming " & i & " : " & hs.DeviceScriptButton_AddButton(devID, (i & "%").ToString, i, "Twinkly.vb", "ButtonPress", "Brightness_" & i, 2 + Math.Floor(i / 51), (i / 10 - Math.Floor(i / 51) * 5), 1)) Next Catch ex As Exception hs.WriteLog("Twinkly", "Error adding buttons: " & ex.Message) End Try End Sub Public Sub SetMovieConfig(ByVal frameDelay As Integer, ByVal numberOfLEDs As Integer, ByVal framesNumber As Integer, ByVal loopType As Integer) Dim data As New System.Collections.Generic.Dictionary(Of String, Integer) data.Add("frame_delay", frameDelay) data.Add("leds_number", numberOfLEDs) data.Add("frames_number", framesNumber) Dim output As String = RunAPI("led/movie/config", Newtonsoft.Json.JsonConvert.SerializeObject(data)) If debug Then hs.WriteLog("Twinkly", "SetMovieConfig: " & output) End Sub Public Sub GetMovieConfig() ' {"frame_delay":66,"leds_number":175,"loop_type":0,"frames_number":212,"sync":{"mode":"none","slave_id":"","master_id":""},"code":1000} Dim output As String = RunAPI("led/movie/config") If debug Then hs.WriteLog("Twinkly", "GetMovieConfig: " & output) End Sub Public Sub GetMovieFull() If debug Then hs.WriteLog("Twinkly", "GetMovieFull: ") Dim output As Byte() = RunAPIraw("led/movie/all") If debug Then hs.WriteLog("Twinkly", ConvertByteArrayToString(output) & " ... done!") End Sub Public Sub SetMovieFull(ByVal octetString As String) Dim movie() As Byte = ConvertStringToByteArray(octetString) If debug Then hs.WriteLog("Twinkly", "SetMovieFull: ") Dim ret = RunAPIraw("led/movie/full", movie) If debug Then hs.WriteLog("Twinkly", System.Text.Encoding.ASCII.GetString(ret) & " ... done!") End Sub ''' <summary> ''' Get brightness ''' </summary> Public Function GetBrightness() As Integer Console.Write("Getting brigthness...") Dim output As String = RunAPI("led/out/brightness") Dim json = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(output) Return json("value") End Function ''' <summary> ''' Set brightness ''' </summary> ''' <param name="brightness">0-100</param> Public Sub SetBrightness(ByVal brightness As Integer) If debug Then hs.WriteLog("Twinkly", "Setting brigthness to '" & brightness & "'...") Dim data As New System.Collections.Generic.Dictionary(Of String, Object) data.Add("mode", "enabled") data.Add("value", brightness) data.Add("type", "A") Dim output As String = RunAPI("led/out/brightness", Newtonsoft.Json.JsonConvert.SerializeObject(data)) If debug Then hs.WriteLog("Twinkly", IIf(output.Contains("1000"), " was a success!", " failed. :(")) End Sub ''' <summary> ''' Sets the display ''' </summary> ''' <param name="mode">rt, movie, demo, restart, effect, off</param> Public Sub SetMode(ByVal mode As String) If debug Then hs.WriteLog("Twinkly", "Setting mode to '" & mode & "'") Dim data As New System.Collections.Generic.Dictionary(Of String, String) data.Add("mode", mode.ToLower()) Dim output As String = RunAPI("led/mode", Newtonsoft.Json.JsonConvert.SerializeObject(data)) Dim success As Boolean = output.Contains("1000") If debug Then hs.WriteLog("Twinkly", "Mode set: " & IIf(success, " was a success!", " failed. :(")) If Not success And debug Then hs.WriteLog("Twinkly", "Output: " & output) End Sub Public Function GetAuthentication() As TwinklyAuthentication Dim auth As TwinklyAuthentication = New TwinklyAuthentication Dim authString As String = hs.GetINISetting("Twinkly", "Authentication", "", "Twinkly.ini") Try If authString <> "" Then auth = Newtonsoft.Json.JsonConvert.DeserializeObject(Of TwinklyAuthentication)(authString) End If Catch ex As Exception End Try Return auth End Function Public Function Verify() As Boolean Dim auth As TwinklyAuthentication = GetAuthentication() Dim data As New System.Collections.Generic.Dictionary(Of String, String) data.Add("challenge-response", auth.challengeresponse) Dim output As String = RunAPI("verify", Newtonsoft.Json.JsonConvert.SerializeObject(data)) Return output.Contains("1000") End Function Public Function Login(ByVal challenge As String, Optional ByVal forceNew As Boolean = False) As TwinklyAuthentication Dim auth As TwinklyAuthentication = Nothing Dim authString As String = "" authString = hs.GetINISetting("Twinkly", "Authentication", "", "Twinkly.ini") Try If authString <> "" Then auth = Newtonsoft.Json.JsonConvert.DeserializeObject(Of TwinklyAuthentication)(authString) Catch ex As Exception End Try If auth Is Nothing OrElse forceNew Then Dim data As New System.Collections.Generic.Dictionary(Of String, String) data.Add("challenge", challenge) Dim output As String = RunAPI("login", Newtonsoft.Json.JsonConvert.SerializeObject(data)) hs.SaveINISetting("Twinkly", "Authentication", output, "Twinkly.ini") auth = Newtonsoft.Json.JsonConvert.DeserializeObject(Of TwinklyAuthentication)(output) End If Return auth End Function Private Function RunAPI(ByVal urlFunction As String, Optional ByVal query As String = "") As String Dim source As String = "" Dim url As String = "http://" & IP & "/xled/v1/" & urlFunction Dim auth As TwinklyAuthentication = GetAuthentication() Using client As New System.Net.WebClient client.Headers.Add("Content-Type", "application/json") If auth.authentication_token <> "" Then client.Headers.Add("X-Auth-Token", auth.authentication_token) End If If query <> "" Then source = client.UploadString(url, "POST", query) Else source = client.DownloadString(url) End If End Using Return source End Function Private Function RunAPIraw(ByVal urlFunction As String, Optional ByVal bytes() As Byte = Nothing) As Byte() Dim auth As TwinklyAuthentication = GetAuthentication() Dim source As Byte() = {} Dim url As String = "http://" & IP & "/xled/v1/" & urlFunction Using client As New System.Net.WebClient Net.ServicePointManager.DefaultConnectionLimit = 9999 client.Headers.Add("Content-Type", "application/octet-stream") If auth.authentication_token <> "" Then client.Headers.Add("X-Auth-Token", auth.authentication_token) End If If bytes IsNot Nothing Then source = client.UploadData(New Uri(url), bytes) Else source = client.DownloadData(url) End If End Using Return source End Function Public Function GetRandomCode(Optional ByVal forceNew As Boolean = False) As String Dim code As String = hs.GetINISetting("Twinkly", "Code", "", "Twinkly.ini") If code = "" OrElse forceNew Then code = GetRandomString(32) hs.SaveINISetting("Twinkly", "Code", code, "Twinkly.ini") End If Return code End Function Private Function GetRandomString(ByVal length As Integer) Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" Dim r As New Random Dim sb As New Text.StringBuilder For i As Integer = 0 To length - 1 Dim idx As Integer = r.Next(0, 35) sb.Append(s.Substring(idx, 1)) Next Return sb.ToString() End Function Public Function ConvertStringToByteArray(ByVal input As String) As Byte() Dim lst As New System.Collections.Generic.List(Of Byte) For i As Integer = 0 To input.Length - 1 Step 2 Dim temp As String = input.Substring(i, 2) Dim val As Integer = Convert.ToInt32(temp, 16) lst.Add(Convert.ToByte(val)) Next Return lst.ToArray() End Function Public Function ConvertByteArrayToString(ByVal bytes() As Byte) As String Dim ret As String = "" For Each b As Byte In bytes ret &= Convert.ToChar(b).ToString() Next Return ret End Function Public Class TwinklyAuthentication Private _authentication_token As String Public Property authentication_token() As String Get Return _authentication_token End Get Set(ByVal value As String) _authentication_token = value End Set End Property Private _authentication_token_expires_in As Integer Public Property authentication_token_expires_in() As Integer Get Return _authentication_token_expires_in End Get Set(ByVal value As Integer) _authentication_token_expires_in = value End Set End Property Private _challengeresponse As String Public Property challengeresponse() As String Get Return _challengeresponse End Get Set(ByVal value As String) _challengeresponse = value End Set End Property Private _code As Integer Public Property code() As Integer Get Return _code End Get Set(ByVal value As Integer) _code = value End Set End Property End Class Gammelt script: Da får du en device som dette: Gå inn på Devicen, og gå til Advanced. Legg så IP-adressen til Twinkly-lenken inn under "Device Type (String)": ... og siden vi endrer Device Types, må vi huske å vise alle etter på: Den nye versjonen støtter altså flere lenker på samme script, man slipper å lage kopier av scriptet hvis man har flere lenker.
  4. Pass. Det burde gå greit, men pass på at strømforsyningen er kraftig nok.
  5. Den må for alt i verden fjernes. Å ha et nettverk med døde noder er ikke en spesielt god ide, du kan risikere at Z-wave prøver å route trafikk den veien og det går merkelig nok veldig dårlig.
  6. Ja, det burde jo gå helt fint. Fibaro Dimmer 2 støtter både fasesnitt og faseavsnitt.
  7. Har du ventilasjonsanlegg?
  8. Hvor mye lagringsplass er det i CEMM, @Lars Albert?
  9. Ja, jeg og... @Snowman eller andre?
  10. Med APIet kan du hente gårsdagens strømforbruk (eller hvilken som helst dag). { viewer { homes { consumption(resolution: DAILY, last: 1) { nodes { from to cost unitPrice unitPriceVAT consumption consumptionUnit } } } } }
  11. Men trenger ikke bety noe som helst (og det er vel dessverre det mest sannsynlige). De fleste av de store aktørene innen TVer og lydutstyr er involvert i "HDbaseT", og selv om det burde blitt implementert i absolutt alt AV-utstyr er det langt mellom enhetene som støtter det. Det er ingen mulighet for "lock in" hvis man faktisk skal ha en felles standard. Samsung (her representert med SmartThings) ville f.eks. måtte åpne opp for kommunikasjon direkte med Google, Amazon og Apple. Og det samme motsatte veier. Personlig tror jeg det snør tett et varmt sted nedi bakken før dette blir implementert som standard i alle de nevnte selskapenes protokoller. Men det er lov å håpe at det kommer noe godt ut av det. Bl.a. er jo the Zigbee Alliance og Silicon Labs (som eier Z-wave) representert.
  12. Ser slik ut, hvis det er ca. samme kontroller: https://www.tronika.no/no/smarthus/zwave-produkter/zwave-kontrollere/veggkontroller-zv9003t4-rgbw.html
  13. Nå er det veldig lenge siden jeg kikket på denne sist, men så vidt jeg husker er det "assosiasjon" som styrer det.
  14. Ja, det kan nok ordnes. Bruker du lite buck$, kan du fort få et dyrt bang!
  15. Ja: Vi vet ikke hva problemet ditt egentlig er. AV kan si så mye rart, men kanskje du har flere symptomer. Du sier ikke hvilken AV du bruker?
  16. De selger ikke enkeltstykker, de vil ha avtaler med firmaer som f.eks. FutureHome etter det jeg og min svoger fant ut etter en dag med Googling. Det tror jeg faktisk ikke er nødvendig, selv om det er et greit tillegg. Bare ha en brannøvelse, så forstår de med en gang hva de skal gjøre. "Kom dere ut når det piper, mønstringsplass ute ved postkassen" fungerer utmerket her i huset.
  17. Da vet vi iallfall kilden til det originale problemet. Har du en måte å sjekke assosiasjoner på? Hvilken device handler har du brukt?
  18. Moskus

    Shelly 1

    Det finnes smarte dimmere med skruhjul på. F.eks. HeatIt Z-DIM og Sunricher sin (og den siste som jeg aldri husker). De er dog "enda dyrere", Z-Dim er nok best sies det, men også dyrest. Jeg personlig har masse Fibaro Dimmer 2 med Elko Plus foran. Fungerer utmerket. Det er greit med skru-dimmere, selvfølgelig. Men behovet er ikke prekært hjemme hos oss, og den ekstra knappen har mange bruksområder.
  19. Jo? Vises ikke korrekt status i systemet? Screenshot?
  20. Det stemmer, var ikke umiddelbart deg jeg tenkte på. Men bl.a meg, og kanskje andre.
  21. Moskus

    Shelly 1

    Forskjellen er ca. 1600 kr. Det er fremdeles lite sammenlignet med elektrikeren. De må du uansett bytte ut. Det er ingen måte å kombinere dem med en digital dimmer på.
  22. Mine kommentarer har du fra før, men jeg kan poste dem her til inspirasjon for andre. Julemusikk over hele huset via alle Squeezeboxer og/eller Alexa'er. Automatiserer innendørs julebelysning med enkle 433Mhz-plugger Alle husets TVer settes på NRK kl 11 på julaften for å vise "Tre nøtter til askepott". (Vurderer samme system for "Hovmesteren", men de vimser litt med klokkeslettene...) "Alexa, turn on christmas mood". Lys dimmes, rødt lys i stua, "te-lys" skrus på, TVen tenner peisen og Michael Buble synger julen inn. Istedenfor de (deilig) enkle juletrelysene som ble styrt med IR, er årets oppgradering til Twinkly. Skriver ferdig scriptet denne uka, treet skal pyntes til helgen. Juletrelysene er av om natten, så de skrus på ved første bevegelse i stua når huset har gått over til "Morgen"-modus Utendørsbelysningen behøver en oppgradering fra 2015 og 2017. Jeg har blitt tipset om xLights som virker mye bedre enn det jeg har gjort til nå.
  23. Den blir ikke "nullstilt". Men det er her "set to" istedenfor "changed to" er brukenes til eventer, samt at hvis du deaktiverer "do not update"-på devicen så gir tidspunktene mer mening. Jeg må riktignok ha på en "do not retrigger this even for 2 seconds" ellers hender det at eventet blir trigget flere ganger, og da stopper garasjeporten...
  24. Gode nyheter, takk @Mastiff. Prisjakt.no har prisvarsel: https://www.prisjakt.no/product.php?p=4920433
  25. Bare hyggelig. Nei, og det er allerede blitt fortalt hvorfor. US og EU bruker forskjellige frekvenser. Dette er imidlertid ikke bare et moralsk spørsmål, men også praktisk begrensning. Z-wave er et mesh-nettverk For at Z-wave skal fungere skikkelig må man ha et interface ("master") med god antenne og dekning, og gjerne andre noder som sender beskjeder videre. Batterinoder har i prinsippet ikke denne muligheten. Siden de skal spare strøm lytter de ikke til beskjeder hele tiden. (Ja, det er noe som heter beaming). Jeg hadde ikke stolt på at et nettverk med kun batterinoder ville oppnå stabil og god nok dekning. Det er lett å verifisere med et bittelite nettverk, f.eks. en node i hvert rom i en enebolig. Det kan være ustabilt og tregt. Å legge til strømdrevne US-noder er heller ikke mulig ettersom de skal ha 110V, ikke 220V...
×
×
  • 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.