Vinnerliste
Populært innhold
Viser innholdet med mest poeng fra 20. des. 2019 i alle områder
-
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.3 poeng
-
Jeg har kjørt Z-Wave interfacet (UZB1) på en RPi med ser2net i ca 2–2,5 år nå. Dønn stabilt og ingen problemer. Metoden er beskrevet i lenken i signaturen min.2 poeng
-
Her ser du en elektromagnetisk lås montert på en særdeles vindskjev dør. Du får ikke noe billigere og mer driftsikkert låsesystem enn dette. En annen STOR fordel er at i motsetning til vanlige kodelåser går denne på strøm/12V. Du trenger derfor aldri å skifte batterier på selve låsen, kun på Danapad og Fibaro the button ca hvert 2 år. Pris for komplett lås med kodepanel og dørlukker om du shopper litt rundt på diverse nettbutikker er ca kr 3500,- og ja jeg vet at det burde vært brukt en Z-brakett siden døra slår innover, men det får komme en annen gang. Bytte den vindskjeve døra gidder jeg ikke. Bruker HomeSeer og GCalSeer for å styre låsen/tildeling av koder. Montert i en bod som brukes av en tennisklubb om noen skulle være i tvil. Elektromagnetisk lås (kjøpt på eBay fra Kina) Dørlukker kjøpt på Jula UMV3 og Danapad kjøpt hos Intin Fibaro the button fra Elkjip LED lys for å vise status med Fibaro RGBW kontroller kan også være smart for å vise om døra er låst eller ikke Video: https://drive.google.com/file/d/1aqqwLwOtIXLICSXUDoFMP_7zxZZFjaau/view?usp=sharing1 poeng
-
Det må være korrupte data. Er det feildeteksjon i denne softwaren? Data blir sendt med checksum Jeg har min egen software, og luker vekk en del korrupte meldinger.1 poeng
-
Hvorfor gjøre det så vanskelig. Romsensor på zwave (eller zigbee hvis du svinger den veien), plugg på zwave, softtermostat i home Assistant, og en dum, dum ovn på full spiker, og du har fullt fungerende lokal styring.1 poeng
-
Er vel bare å bytte IP i starten og kalle scriptet noe annet?1 poeng
-
1 poeng
-
1 poeng
-
Hvis jeg tolker @Sture00 riktig så kan han ikke kjøre "Remove Bad Node", siden noden ikke har noen link å klikke på for å komme inn på det interfacet. Jeg hadde selv et lignende problem for ikke lenge siden. Etter en mislykket inkludering av en Popp strømplugg satt jeg igjen med en "ghost-node" som ikke lot seg fjerne på noen fornuftig måte. Noden var tilsynelatende helt "tom". Det var ingen link jeg kunne klikke på slik at jeg kom inn på den siden der jeg kunne ta "Remove bad Node". Prøvde en "light" rescan av alle devicer, men dette hadde ingen effekt. Jeg fikk enkelte feilmeldinger under oppstart av HS pga av dette, og hvis jeg tok "Audit" på andre noder kom det opp en feilmelding også, ikke en helt betryggende situasjon altså. Etter en del googling og en del fikling og prøving endte jeg opp å løse problemet, men jeg er usikker på om det jeg gjorde egentlig er fornuftig, men jeg fikk i alle fall den "tomme" noden vekk. Det jeg gjorde baserer seg på at inne på Z-wave taben for en root device er det mulig å endre "Node Number" og ved hjelp av en annen "offer-node" kunne jeg "lure" HS til å "gjenopprette" den tomme noden. Dette er en litt forenklet oppsummering av det jeg gjorde: La oss anta at den "tomme" noden har node nummer 40. Jeg fant først fram en annen ubrukt strømplugg (i mitt tilfelle en Telldus plugg), og inkluderte denne i HS som vanlig. Den fikk da et nytt node nummer, la oss si 52. Så koblet jeg den nye strømpluggen fra strømnettet igjen, jeg trenger bare devicen i HS som "offer". Så gikk jeg inn på root-devicen til den nye pluggen. Under Z-wave fant jeg Node Number (der står det nå 52) og satte den til nummeret til den "tomme" noden (40). Så klikket jeg Done. Gikk så inn en gang til på samme og kjørte "Rescan". Tror jeg fikk noen feilmeldinger, men nå hadde i alle fall node nummer 40 fått et "interface", og jeg kunne klikke på Remove bad Node, og borte var den. Men nå satt jeg i stedet igjen med at den siste noden jeg la til (52) var blitt "tom" og tilsynelatende umulig å fjerne. Men denne lot seg i motsetning til den opprinnelige tomme noden gjenopprette, ved å gå på Plugins->Z-Wave->Controller Mangement og kjøre "Scan Existing Devices (Light Scan)". Igjen noen feilmeldinger så vidt jeg kan huske, men etterpå hadde HS "gjenopprettet" den tomme node 52, og jeg kan klikke på nodens Root og gå inn og ta Remove Bad Node. Og dermed var den også borte. Dette var en tungvindt og litt uoversiktlig metode og jeg aner som sagt ikke om dette kunne ha vært løst på en annen og enklere måte, og om det jeg gjorde var fornuftig i det hele tatt, men det ser i alle fall ut til å ha virket. Den tomme noden er helt vekk og nettverket har fungert helt fint siden.1 poeng
-
Kan fiksen som kom i 103.1 fikse biffen? https://github.com/home-assistant/home-assistant/pull/299551 poeng
-
Jeg kjører usb over ip via raspberry Pi. Veldig stabilt når du får inn korrekt type SD kort på enheten. Og en ting jeg skal gjøre neste gang jeg må mekke dette til (ReadOnly delen ) https://www.hanselman.com/blog/UpgradingTheDakBoardFamilyCalendarWithRaspberryPiZeroWAndReadOnlyFilesystem.aspx1 poeng
-
The Glitter Bomb Bait Package 2.0 er klar. Og det er like hysterisk som den første. Nå også med Macaulay Culcin!1 poeng
-
Det som er greit med å ha et Z-wave nettverk er at det er "relativt enkelt" å bare prøve en ny hjerne. Bare skru av HS, og koble opp HomeAssistant, så er du nesten i gang allerede. Jeg synes at folk skal prøve litt forskjellig. Det er sånn verden beveger seg videre. Jeg har en FutureHome hub, en Fibaro HCL hub, en Home Control hub, en gammel Pi med HA på, en steingammel Domoticz-installasjon et sted, og litt diverse annet småsnacks som jeg ikke kommer på i farten. For min del skal det litt til å bytte hele hovedsystemet til noe annet, men det skader ikke å prøve andre ting også. Vi må huske at det er "oss" mot "dem", da "oss" er vi som automatiserer uavhengig av system og "dem" er de som ikke gjør det.1 poeng
Vinnerlisten er satt til Oslo/GMT+01:00