Gå til innhold

HS2 -> HS3


Anbefalte innlegg

Fikk in en slik her om dagen. Den kjører ok dersom den er close til controlleren men halter om den er lengre unna :(

 

Blir vel dråpen som gjør at jeg må ta skrittet over til HS3 da. (Jeg gruer meg)

 

På tide å poste alle konverterings scriptene dine Moskus!

 

Har det skjedd noe på "Opprette Events fra script" fronten siden forrige gang jeg prøvde?

Endret av Fermate
Lenke til kommentar
Videoannonse
Annonse

Rename av Z-wave devicer

Du trenger først en tekstfil med alle nodene, location2, location2 og navn i. Det enkleste her er å bruke Z-wave -> "Who Am I"-tabellen, lime den inn i Excel, fjerne all annen informasjon, og lagre som tekst fil. Forhåpentligvis får du da en tabell som på dette formatet:

NodeNr tab Location2 tab location tab Name

som dette:

7	1. etg	Gang	Taklys
8	1. etg	Stue	Taklys
10	1. etg	Bad	Toalett
11	1. etg	Gang	Taklys yttergang
12	1. etg	Ute	Utelys hoveddør

Så er kan du (foreløpig) stenge ned HS2 og starte HS3. Sett opp Z-wave-plugin med Z-stick interface og kjør en Import. Da får du en haug med nye devicer med uforståelige navn. Ta backup av hele HS3 mappen.

 

 

Nå trenger du tenScripting3 til Visual Studio for å kjøre HS3 script. Grunnen er at HS3 enda ikke har helt støtte for Linq enda (den er nesten på plass, men jeg kan ikke teste mine gamle scripts nå), men det fungerer brillefint i VS.

 

I Scripts.vb kan du legge til dette:

Public Class RenameFromHS2
    Sub Main(ByVal Parms As Object) 'Public for å kjøre
        Dim Zwave_interface_ID As String = "011D0C65"


        Dim hs2devs As New List(Of HS2device)
        'reading list
        Dim sr As New IO.StreamReader("HS2 Z-Wave Devices.txt", System.Text.Encoding.Unicode)
        While Not sr.EndOfStream
            hs2devs.Add(New HS2device(sr.ReadLine))
        End While
        sr.Close()
        sr.Dispose()

        Dim devs = From d In Devices()
                   Where d.Interface(Nothing).ToLower = "Z-wave".ToLower _
                   AndAlso d.AssociatedDevices(Nothing).Count <> 1
        Debug.WriteLine("Count: " & devs.Count)

        For Each d In devs
            Dim node As Integer = d.Address(Nothing).Replace(Zwave_interface_ID & "-", "")
            If node <> 1 Then

                Dim hs2dev As HS2device = HS2device.FindNode(node, hs2devs)
                If hs2dev IsNot Nothing Then
                    Debug.WriteLine("FOUND MATCH: " & d.Name(Nothing) & " ### " & d.Address(Nothing).Replace(Zwave_interface_ID & "-", "") & " ### " & d.AssociatedDevices(Nothing).Count & " ### " & node)
                    d.Name(hs) = hs2dev.Name.Trim
                    d.Location(hs) = hs2dev.Location.Trim
                    d.Location2(hs) = hs2dev.Location2.Trim

                    If d.AssociatedDevices(hs).Count <> 0 Then
                        d.Name(hs) = hs2dev.Name.Trim & ", Root"

                        Dim childs() As Integer = d.AssociatedDevices(hs)
                        For Each c_ref In childs
                            Dim c As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(c_ref)
                            c.Name(hs) = hs2dev.Name.Trim & ", " & GetDeviceType(c)
                            c.Location(hs) = hs2dev.Location.Trim
                            c.Location2(hs) = hs2dev.Location2.Trim
                        Next
                    End If
                End If
            End If
        Next
    End Sub

    Public Sub Backup(ByVal Parms As Object)
        Debug.WriteLine("Backing up Z-wave names...")
        Dim devs = From d In Devices()
                   Where d.Interface(Nothing).ToLower = "Z-wave".ToLower
        Debug.WriteLine("Backup count: " & devs.Count)

        Dim sw As New System.IO.StreamWriter("z-wave device names backup.txt")
        For Each d In devs
            sw.WriteLine(d.Ref(Nothing) & ControlChars.Tab & d.Location2(Nothing) & ControlChars.Tab & d.Location(Nothing) & ControlChars.Tab & d.Name(Nothing))
        Next
        sw.Close()
        sw.Dispose()
    End Sub

    Public Sub Restore(ByVal Parms As Object)
        Dim hs2devs As New List(Of HS2device)
        'reading list'
        Dim sr As New IO.StreamReader("z-wave device names backup.txt")
        While Not sr.EndOfStream
            Dim d2 As New HS2device(sr.ReadLine)
            Debug.WriteLine("Renaming device with Ref = " & d2.NodeOrRef)
            Dim d As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(d2.NodeOrRef)
            d.Name(hs) = d2.Name
            d.Location(hs) = d2.Location
            d.Location2(hs) = d2.Location2
        End While
        sr.Close()
        sr.Dispose()

    End Sub

    Public Function GetDeviceType(ByVal d As Scheduler.Classes.DeviceClass) As String
        Return d.Device_Type_String(hs).Replace("Z-Wave", "").Replace("Root Device", "").Replace("Switch Binary", "Switch").Replace("Switch Multilevel", "Switch").Trim
    End Function

    Public Function Devices() As System.Collections.Generic.List(Of Scheduler.Classes.DeviceClass)
        Dim _devices As New System.Collections.Generic.List(Of Scheduler.Classes.DeviceClass)
        Dim device As Scheduler.Classes.DeviceClass
        Dim DE As Scheduler.Classes.clsDeviceEnumeration

        DE = hs.GetDeviceEnumerator()
        Do While Not DE.Finished
            device = DE.GetNext
            _devices.Add(device)
        Loop

        Return _devices
    End Function

    Class HS2device
        Public Property NodeOrRef As Integer
        Public Property Name As String
        Public Property Location As String
        Public Property Location2 As String

        Public Sub New(ByVal line As String)
            Dim input() As String = line.Split(ControlChars.Tab)
            If input.Length <> 4 Then Throw New Exception("Wrong input")

            NodeOrRef = input(0)
            Location2 = input(1)
            Location = input(2)
            Name = input(3).Replace(", root", "")
        End Sub

        Public Sub New(ByVal _Node As Integer, _Name As String, _Location As String, _Location2 As String)
            NodeOrRef = _Node
            Location2 = _Location2
            Location = _Location
            Name = _Name
        End Sub

        Public Overrides Function ToString() As String
            Return NodeOrRef & ControlChars.Tab & Location2 & ControlChars.Tab & Location & ControlChars.Tab & Name
        End Function

        Public Shared Function FindNode(ByVal _node As Integer, ByVal lst As List(Of HS2device)) As HS2device
            For Each d In lst
                If d.NodeOrRef = _node Then Return d
            Next
            Return Nothing
        End Function
    End Class


End Class

NB! Du må finne din egen Z-wave-device ID (se linje 3)!!!!

 

Tekstfilen du lagde øverst gir du navnet "HS2 Z-Wave Devices.txt" og legger i Debug-mappa i tenScripting-mappen. Kjør så tenScripting prosjektet (F5), og velg funksjon. Aller først kan det jo være lurt med en backup... og så er det bare å kjøre hovedrutinen.

 

Lenke til kommentar

Takk for det, men det renaming greia hadde jeg ganske god coll på, bortsett fra at jeg leste basen direkte. (Elegant å bruke Whois :) )

 

Det som jeg gruer meg mest for er jo de 360 eventene jeg har med gud hvor mange device referanser...

 

Og kallene til disse fra HSTouch selv om det ikke er så mange.

 

 

Har det skjedd noe på "Opprette Events fra script" fronten siden forrige gang jeg prøvde?

Ikke så mye. Det har skjedd litt, men det er etter at jeg oppgraderte selv, så jeg har ikke undersøkt det...

 

Kan du peke meg i riktig retning? Endret av Fermate
Lenke til kommentar

Takk for det, men det renaming greia hadde jeg ganske god coll på, bortsett fra at jeg leste basen direkte. (Elegant å bruke Whois :) )

Ja, jeg kikket på det, men nodeinformasjonen er ikke lagret i databasen, så da er vi like langt. Jeg fikk en mer konsis navngiving av å gå veien om nodeinformasjonen, for det er ingen garantier for at HS3 lager de samme devicene som HS2. Men root-devicen vil være lik, og da kan man bruke Z-wave nodenummeret til å lettere identifisere det.

 

Ikke tro jeg ikke har prøvd det. ;)

Dette fungerte best for meg, jeg liker konsise navn, for det blir lettere å finne devicer. :)

 

 

Det som jeg gruer meg mest for er jo de 360 eventene jeg har med gud hvor mange device referanser...

 

Og kallene til disse fra HSTouch selv om det ikke er så mange.

 

 

Har det skjedd noe på "Opprette Events fra script" fronten siden forrige gang jeg prøvde?

Ikke så mye. Det har skjedd litt, men det er etter at jeg oppgraderte selv, så jeg har ikke undersøkt det...

 

Kan du peke meg i riktig retning?

 

Vi har fått NewEventGetRef (eller NewEventEx).

 

I tillegg kan du legge til CAPI-controller med AddDeviceActionToEvent, og vi har fått EventSetRecurringTrigger, EventSetTimeTrigger og EventSetVRTrigger, men ingen set DeviceActionTrigger.

 

 

 

Mye av dette har kommet etter jeg gikk over til HS3. Jeg gjorde det manuelt, som har to fordeler. 1) Jeg fikk lært meg skikkelig de nye mulighetene i HS3 og sparte en haug med eventer på det, og 2) jeg fikk "fjernet" gamle eventer som ikke var i bruk lenger.

Lenke til kommentar

Vi har fått NewEventGetRef (eller NewEventEx).

 

I tillegg kan du legge til CAPI-controller med AddDeviceActionToEvent, og vi har fått EventSetRecurringTrigger, EventSetTimeTrigger og EventSetVRTrigger, men ingen set DeviceActionTrigger.

Betyr det at jeg nå kan lage eventer, og sette dem til å skru av og på eller dimme ting men ikke styre hvordan de trigges?

 

Hm det er ikke dårlig bare det. Det vil ihvertfall gi meg et ganske bra skjelett å starte på. Pluss at det sparer meg for MASSE klikk og klikk for å sette opp HVILKE devicer som ska aktiviseres...

 

Jeg tror en konvertering nærmer seg :)

Lenke til kommentar

Vi har fått NewEventGetRef (eller NewEventEx).

 

I tillegg kan du legge til CAPI-controller med AddDeviceActionToEvent, og vi har fått EventSetRecurringTrigger, EventSetTimeTrigger og EventSetVRTrigger, men ingen set DeviceActionTrigger.

Har tatt meg fri i dag for å forberede konverteringen som skal skje i helga.

 

Har du en kode snutt som demonstrerer bruken av "AddDeviceActionToEvent" så hadde jeg blitt KJEMPEGLAD...

Lenke til kommentar

Hmm... jeg søkte, og det eneste som dukket opp var ditt eget eksempel, utenom HS3 sin hjelpefil.

hs.WriteLog("HS2->HS3", "New Action: Turn OFF HS3 Dev: " & HS3DeviceName)
CAPI = hs.CAPIGetSingleControlByUse(HS3DeviceRef, HomeSeerAPI.ePairControlUse._Off)
add_action_return = hs.AddDeviceActionToEvent(EventReference, CAPI)

.... bare nå har det nok skjedd litt på bugfiksingen...

Lenke til kommentar

Jeg installerer ALDRI betaer :)

(Bortsett fra fra Bert da)

Og er for gammel til å være (så) link avhengig (som du er ;) )

 

Ser at det var helt bortkastet å tro at noe skulle bli bedre av at jeg ventet X måneder med å konvertere.

 

Har nå kjørt igjennom den vanlige konverteringen:

Slettet HS3 Basen

Hentet Zwave noder fra stick

Hentet HS2 basen til Hs3 serveren

Kjørt (min egen) Z-wave renaming (din passet meg ikke helt med navning av sub devicer :) )

Kjørt "Manuell konvertering" (med HS2 dev id i kommentarfeltet) på de som ikke ble gjenkjent.

Kjørt RFXCom Importen

Kjørt min import av Virtuelle Devicer

Kjørt min egen Import av Eventer og fått over en del Actions (ga opp DIM)

Kopiert over IR kommandoer til iTachene

Ryddet litt i Devicene

Byttet ut mine egne Termostat løsninger med RFXCom sine

-Endte opp med 2 stykker for å få en større hysterese på AC'en, -0,1 grad går ikke om vinteren

Har begynt det møysommelige arbeidet med å gjenskape min 360 eventer :(:( :(

 

Har du et eksempel på når det er praktisk å bruke "Group conditions" og "Group Actions" ?

Lenke til kommentar

Har et spørsmål når det gjelder X10 brytere.:

 

Jeg har en del SS13E som sender dim/bright kommandoer fra nederste knapp.

 

I HS2 definerte jeg bare en Event som reagerte på en X10 kommando og da var både ON OFF DIM og BRIGHT valgene.

 

Men i HS3 må jeg definere en Device med riktig devkode (og det er jo ryddigere også for da holder jeg lettere styr på hvilke X10 koder som er i bruk) og så teste på den i eventen.

Problemet er at jeg ikke får opp DIM og Bright kommandoene som valg!

Har forsøkt å krysse av for at devicen er "Dimmable" uten at det hjalp.

 

Hjelp!

Lenke til kommentar

-Endte opp med 2 stykker for å få en større hysterese på AC'en, -0,1 grad går ikke om vinteren

Har allerede hatt en lengre diskusjon om det med Bert. Det blir endret på i neste versjon. :)

 

 

I HS2 definerte jeg bare en Event som reagerte på en X10 kommando og da var både ON OFF DIM og BRIGHT valgene.

 

Men i HS3 må jeg definere en Device med riktig devkode (og det er jo ryddigere også for da holder jeg lettere styr på hvilke X10 koder som er i bruk) og så teste på den i eventen.

Problemet er at jeg ikke får opp DIM og Bright kommandoene som valg!

Har forsøkt å krysse av for at devicen er "Dimmable" uten at det hjalp.

For å få noe til å reagere på X10 kommandoer, så er det mulig at du faktisk må installere en X10 plugin. Men siden det er RF, ser Bert muligens mannen å spørre...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...