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

script for å programmere kode i lås fungerer ikke om koden starter på "0"


Anbefalte innlegg

Bruker følgende kode for å programmere kode i lås basert på verdien i en virtuell device:

Sub Main (byval inputArgs as string)

  Dim lockCode= hs.DeviceValue(737)

  hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,lockCode,"TEST"})

End Sub

(737) er den virtuelle devicen. Problemet er at jeg får følgende feilmelding om koden starter med "0". Eksempel "0269"

Z-Wave Error - A user code was attempted to be set on node 19, but the user code provided is less than the minimum or more than the maximum length.

Alle andre verdier som ikke starter på 0 fungerer uten problemer. Hva må gjøres (regner med dette er løsbart) for å få dette til å fungere?

Lenke til kommentar
Del på andre sider

Dette er en BLlock-funksjon, så jeg tror du må ta det med Blade. Vi vet ikke hva de andre parametrene er. Men fortell oss gjerne hva du fant ut. ;)

 

Z-wave pluginen har helt sikkert en dedikert funksjon for å legge til koder, men jeg vet ikke hva den er... (jeg har tenkt å finne den, dog).

 

Lenke til kommentar
Del på andre sider

Ser ut til at du kan bruke native kode istedenfor å gå via BLlock slik:

Dim ConfigResult = hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {NodeId, LockLocationId, PIN, Username, InterfaceID})

Tatt fra vedlegget (nederst) i denne posten: https://forums.homeseer.com/forum/homeseer-products-services/system-software-controllers/hs3-hs3pro-software/hs3-hs3pro-discussion/82745-setting-z-wave-lock-user-codes-via-event-script?p=1268067#post1268067

 

 

Edit:

Tilsvarende for å fjerne en kode:

Dim ConfigResult = hs.PluginFunction("Z-Wave", "", "RemoveUserCodePin", {NodeId, LockLocationId, InterfaceID})

 

Lenke til kommentar
Del på andre sider

Jeg bare skyter i blinde her:

Koden som du legger inn må den være ett tall eller kan du sende den som en streng. Hvis du kan sende den som en streng kan du formatere tallet. I C# er det type lockCode.ToString("0000"). Slik så vil du alltid ha minimum 4 tall og alt under 1000 vil være paddet med 0. Ex 76=> 0076

Lenke til kommentar
Del på andre sider

23 timer siden, Guahtdim skrev:

Jeg bare skyter i blinde her:

Koden som du legger inn må den være ett tall eller kan du sende den som en streng. Hvis du kan sende den som en streng kan du formatere tallet. I C# er det type lockCode.ToString("0000"). Slik så vil du alltid ha minimum 4 tall og alt under 1000 vil være paddet med 0. Ex 76=> 0076

Du skyter nok ikke i blinde her. Problemet er jo at om koden som legges inn starter med 0 vil den "trimmes" bort når du kjører scriptet. Jeg har testet dette også ved å hard-kode inn koden og ikke bruke variabel fra virtuell device. Tror det bør være mulig å lage et script som fikser dette, men jeg er ikke stødig nok i VB script for å få til dette.

 

Lenke til kommentar
Del på andre sider

Har du prøvd å sende koden som en streng i en test hvor du f.eks. legger den inn som "0001"? Hvis det ikke fungerer så hadde jeg slengt inn en feilmelding til Blade rimelig asap. Han virker å være kjapp til å svare/utbedre.

Edit: Svarer før jeg leser hele svaret. Du har med andre ord testet: Dim ConfigResult = hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {NodeId, LockLocationId, "0001", Username, InterfaceID})

Endret av Guahtdim
Lenke til kommentar
Del på andre sider

men jeg ser at du ikke har prøvd følgende:

 

hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,"0123","TEST"})

Det som er viktig her er at man har satt tallet inne i fnutter/hermetegn/gåseøyne/double quotes

  • Like 2
Lenke til kommentar
Del på andre sider

2 timer siden, Guahtdim skrev:

men jeg ser at du ikke har prøvd følgende:

 


hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,"0123","TEST"})

Det som er viktig her er at man har satt tallet inne i fnutter/hermetegn/gåseøyne/double quotes

... og der tror jeg du traff spikeren på hodet. Fordi det er ikke det som står her:

 

Sitat

hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,0123,"TEST"})

Der er 0123 et tall siden det ikke står i gåseøyne og de blir trimmet til 123. :) 

 

Jeg hadde brukt dette:

Dim PIN as String = hs.DeviceValue(dev_ref).ToString("0000")
hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {NodeId, LockLocationId, PIN, Username, InterfaceID})

 

  • Like 2
Lenke til kommentar
Del på andre sider

17 timer siden, Moskus skrev:

Dim PIN as String = hs.DeviceValue(dev_ref).ToString("0000") hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {NodeId, LockLocationId, PIN, Username, InterfaceID})

ok, jeg er ikke noe god på VB script så trenger nok litt mer hjelp. Her er scriptet som jeg har testet. Jeg fant "InterfaceID" i z-wave.ini fila rett under navnet på Z-wave kontroller IFace_1_Unique=955BFE54AEE6

Sub Main (byval inputArgs as string)
Dim PIN as String = hs.DeviceValue(dev_ref).ToString("0000")
hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {647, 79, PIN, TEST, 955BFE54AEE6})
End Sub

får følgende feilmelding:

Error	Compiling script C:\Program Files (x86)\HomeSeer HS3\scripts\TESTaddusercode_z-wave.vb: Forventet }.
Error	Compiling script C:\Program Files (x86)\HomeSeer HS3\scripts\TESTaddusercode_z-wave.vb: TEST er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
Error	Compiling script C:\Program Files (x86)\HomeSeer HS3\scripts\TESTaddusercode_z-wave.vb: dev_ref er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
Error	Compiling script C:\Program Files (x86)\HomeSeer HS3\scripts\TESTaddusercode_z-wave.vb: Navneområdet eller typen som er angitt i importene System.Core, inneholder ikke noe felles medlem eller finnes ikke. Kontroller at navneområdet eller typen er definert og inneholder minst ett felles medlem. Kontroller at det importerte elementnavnet ikke bruker noen aliaser.

 

Lenke til kommentar
Del på andre sider

Prøv følgende (BLLock)

Sub Main (byval inputArgs as string)

  Dim lockCode= hs.DeviceValue(737).ToString("0000")

  hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,lockCode,"TEST"})

End Sub

Mulig Dim lockCode bør være Dim lockCode as String=hs.DeviceValue(737).ToString("0000")

 

 

Eventuelt (Z-wave direkte)

Sub Main (byval inputArgs as string)
Dim PIN as String = hs.DeviceValue(737).ToString("0000")
hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {647, 79, PIN, "TEST", "955BFE54AEE6"})
End Sub

Her antar jeg at 737 er en device som inneholder tallkoden.

 

NB: Her synser jeg i forhold til interface id er gjort om til en streng. Test er kanskje brukernavn og bør vel også være en streng.

Endret av Guahtdim
  • Like 1
Lenke til kommentar
Del på andre sider

Jeg har en virtuell device (707) som har verdien "0507"

 

Testet ditt forslag til BLLock 

Sub Main (byval inputArgs as string)

  Dim lockCode= hs.DeviceValue(707).ToString("0000")

  hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,lockCode,"TEST"})

End Sub

og fikk følgende feilmelding (samme som før).

	A user code was attempted to be set on node 19, but the user code provided is less than the minimum or more than the maximum length.

Ved kjøring av Z-wave

Sub Main (byval inputArgs as string)
Dim PIN as String = hs.DeviceValue(707).ToString("0000")
hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {647, 79, PIN, "TEST", "955BFE54AEE6"})
End Sub

fikk jeg følgende feilmelding

Error in PluginProc: Objekt av typen System.Int32 kan ikke konverteres til typen System.String.

 

Lenke til kommentar
Del på andre sider

Mulig variabelen må spesifiseres til tross for at ToString skulle gjøre det

Sub Main (byval inputArgs as string)

  Dim lockCode as String= hs.DeviceValue(707).ToString("0000")

  hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,lockCode,"TEST"})

End Sub

 

Eventuelt du bare håndkoder slik at vi slipper å bekymre oss for konverteringsfeil. Då får man iallefall testet om det fungerer med å sende inn en streng med nuller i koden.

Sub Main (byval inputArgs as string)

  hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,"0001","TEST"})

End Sub

 

 

Med tanke på ZWave så er jeg usikker på hva som gjør at du får feilmelding, men jeg ser i koden som @Moskus linket til så er alle parametre strenger. Så kanskje den under fungerer bedre.

Sub Main (byval inputArgs as string)
Dim PIN as String = hs.DeviceValue(707).ToString("0000")
hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {"647", "79", PIN, "TEST", "955BFE54AEE6"})
End Sub

 

  • Like 1
Lenke til kommentar
Del på andre sider

52 minutter siden, Guahtdim skrev:

Med tanke på ZWave så er jeg usikker på hva som gjør at du får feilmelding, men jeg ser i koden som @Moskus linket til så er alle parametre strenger. Så kanskje den under fungerer bedre.


Sub Main (byval inputArgs as string)
Dim PIN as String = hs.DeviceValue(707).ToString("0000")
hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {"647", "79", PIN, "TEST", "955BFE54AEE6"})
End Sub

 

Det kan til og med være at du trenger "New Object()" foran {, men i teorien burde man ikke det. Kan også skrive det ut med fulle variabler...

 

Sub Main (byval inputArgs as string)
    Dim PINnumber as Integer = hs.DeviceValue(707)
    Dim PINstring as String = PINnumber.ToString("0000")
    hs.PluginFunction("Z-Wave", "", "AddUserCodePin", New Object(){"647", "79", PINstring, "TEST", "955BFE54AEE6"})
End Sub

 

 

 

Lenke til kommentar
Del på andre sider

1 time siden, Guahtdim skrev:

Eventuelt du bare håndkoder slik at vi slipper å bekymre oss for konverteringsfeil. Då får man iallefall testet om det fungerer med å sende inn en streng med nuller i koden.


Sub Main (byval inputArgs as string)

  hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,"0001","TEST"})

End Sub

gir følgende feilmelding:

BLLock error	Error in PluginProc: Objekt av typen System.String kan ikke konverteres til typen System.Int32.

Jeg tror at den ikke takler 0001 med "" rundt.

 

13 minutter siden, Moskus skrev:

Det kan til og med være at du trenger "New Object()" foran {, men i teorien burde man ikke det. Kan også skrive det ut med fulle variabler...

 


Sub Main (byval inputArgs as string)
    Dim PINnumber as Integer = hs.DeviceValue(707)
    Dim PINstring as String = PINnumber.ToString("0000")
    hs.PluginFunction("Z-Wave", "", "AddUserCodePin", New Object(){"647", "79", PINstring, "TEST", "955BFE54AEE6"})
End Sub

Scriptet kjører, men blir aldri "ferdig". Ser ut som om det henger da det bare viser at det har blitt kjørt i loggen. Kodeplassering 79 i låsen er ledig.

 

Setter veldig pris på all hjelp!

Lenke til kommentar
Del på andre sider

Med tanke på Blade sin plugin så er det egentlig bare å avvente hans svar.

 

Jeg er desverre tom for forslag.

 

Du får passe på å generere koder som er større enn 999.

 

Endret av Guahtdim
  • Like 1
Lenke til kommentar
Del på andre sider

13 minutter siden, toonwolf skrev:

følgende feilmelding:


BLLock error	Error in PluginProc: Objekt av typen System.String kan ikke konverteres til typen System.Int32.

Jeg tror at den ikke takler 0001 med "" rundt.

 

Tall med "" behandles som tekst (string). Tall uten behandles som tall (integer). Og som vi vet så er det aldri 0 først i et «ekte» tall, for det har ingen betydning i tall-verden. 

 

Feilkoden tyder på at Blade har laget sin plugin slik at koden må angis som tall (int) og ikke tekst (string). I så fall er det umulig å sende en kode som starter på 0. Om det er tilstrekkelig at Blade endrer sin kode eller om underliggende HomeSeer-kode må endres også må nesten Blade svare på. 

 

9 minutter siden, Guahtdim skrev:

Du får passe på å generere koder som er større enn 999.

 

Det ville vært min løsning - quickfix. :) 

  • Like 1
Lenke til kommentar
Del på andre sider

Here we go! :)

 

Sub Main(ByVal inputArgs As String)
        hs.WriteLog("Add user", "Adding user...")
        Dim interfaceID As String = hs.GetINISetting("Interfaces", "IFace_0_Unique", "", "Z-Wave.ini")

        hs.WriteLog("Add user", "InterfaceID: " & interfaceID)

        Dim place As Integer = inputArgs.Split(";")(0)
        Dim PINnumber As Integer = CInt(inputArgs.Split(";")(1))
        Dim PINstring As String = PINnumber.ToString("0000")
        Dim nodeNumber As String = ZwaveUtil_GetNodeIdByRef(3465)
        Dim configResult = hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {nodeNumber, place.ToString, PINstring, "TEST-user", interfaceID})
        hs.WriteLog("Add user", "Done with result " & configResult.ToString)
    End Sub


    Public Function ZwaveUtil_GetNodeIdByRef(ByVal deviceId As Integer) As Integer
        Dim nodeId As Integer = -1

        If (deviceId > 0) Then
            Dim device As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceId)
            If (device IsNot Nothing) Then
                Dim pdata As HomeSeerAPI.PlugExtraData.clsPlugExtraData = device.PlugExtraData_Get(hs)
                If (pdata IsNot Nothing) Then
                    nodeId = pdata.GetNamed("node_id")
                End If
            End If
        Else
            Throw New System.Exception("Device not found: " + deviceId)
        End If

        Return nodeId
    End Function

... med dette:

image.png

 

... gav dette:

image.png

 

 

.... og dette:

image.png

 

gav dette:

image.png

 

 

 

 

... merk at lås-Root er hardkodet i eksempelet over (3465). ;) 

  • Like 1
Lenke til kommentar
Del på andre sider

Strengt tatt skal @toonwolf kunne bruke dette (gitt at device 707 inneholder en kode, og device 647 er root til en lås):

 

    Sub Main(ByVal inputArgs As String)
        hs.WriteLog("Add user", "Adding user...")
        Dim interfaceID As String = hs.GetINISetting("Interfaces", "IFace_0_Unique", "", "Z-Wave.ini")

        hs.WriteLog("Add user", "InterfaceID: " & interfaceID)

        Dim place As Integer = 79
        Dim PINnumber As Integer = hs.DeviceValue(737)
        Dim PINstring As String = PINnumber.ToString("0000")
        Dim nodeNumber As String = ZwaveUtil_GetNodeIdByRef(647)
        Dim configResult = hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {nodeNumber, place.ToString, PINstring, "TEST-user", interfaceID})
        hs.WriteLog("Add user", "Done with result " & configResult.ToString)
    End Sub


    Public Function ZwaveUtil_GetNodeIdByRef(ByVal deviceId As Integer) As Integer
        Dim nodeId As Integer = -1

        If (deviceId > 0) Then
            Dim device As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceId)
            If (device IsNot Nothing) Then
                Dim pdata As HomeSeerAPI.PlugExtraData.clsPlugExtraData = device.PlugExtraData_Get(hs)
                If (pdata IsNot Nothing) Then
                    nodeId = pdata.GetNamed("node_id")
                End If
            End If
        Else
            Throw New System.Exception("Device not found: " + deviceId)
        End If

        Return nodeId
    End Function

 

Lenke til kommentar
Del på andre sider

18 minutter siden, Moskus skrev:

Strengt tatt skal @toonwolf kunne bruke dette (gitt at device 707 inneholder en kode, og device 647 er root til en lås):

 

Kjører dette scriptet. Merk jeg har endret hs.DeviceValue til "707" siden det er det jeg har som inneholder tallet 0507

    Sub Main(ByVal inputArgs As String)
        hs.WriteLog("Add user", "Adding user...")
        Dim interfaceID As String = hs.GetINISetting("Interfaces", "IFace_0_Unique", "", "Z-Wave.ini")

        hs.WriteLog("Add user", "InterfaceID: " & interfaceID)

        Dim place As Integer = 79
        Dim PINnumber As Integer = hs.DeviceValue(707)
        Dim PINstring As String = PINnumber.ToString("0000")
        Dim nodeNumber As String = ZwaveUtil_GetNodeIdByRef(647)
        Dim configResult = hs.PluginFunction("Z-Wave", "", "AddUserCodePin", {nodeNumber, place.ToString, PINstring, "TEST-user", interfaceID})
        hs.WriteLog("Add user", "Done with result " & configResult.ToString)
    End Sub


    Public Function ZwaveUtil_GetNodeIdByRef(ByVal deviceId As Integer) As Integer
        Dim nodeId As Integer = -1

        If (deviceId > 0) Then
            Dim device As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(deviceId)
            If (device IsNot Nothing) Then
                Dim pdata As HomeSeerAPI.PlugExtraData.clsPlugExtraData = device.PlugExtraData_Get(hs)
                If (pdata IsNot Nothing) Then
                    nodeId = pdata.GetNamed("node_id")
                End If
            End If
        Else
            Throw New System.Exception("Device not found: " + deviceId)
        End If

        Return nodeId
    End Function

Får følgende feilmeldinger i loggen

Setningen kan ikke forekomme i en metodetekst. Slutt på metoden antas.
End-setningen er ikke gyldig.
nodeId er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
Metodeargumenter må stå i parenteser.
Return er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
Tegnet er ikke gyldig.
End-setningen er ikke gyldig.
Else er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
Tegnet er ikke gyldig.
Tegnet er ikke gyldig.
Tegnet er ikke gyldig.
device er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
device er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
Tegnet er ikke gyldig.
If må slutte med en tilsvarende End If.
Tegnet er ikke gyldig.
Setningen kan ikke forekomme i en metodetekst. Slutt på metoden antas.
Tegnet er ikke gyldig.
End-setningen er ikke gyldig.
interfaceID er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
nodeNumber er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
Tegnet er ikke gyldig.
PINnumber er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
Tegnet er ikke gyldig.
Tegnet er ikke gyldig.
interfaceID er ikke deklarert. Den kan være utilgjengelig på grunn av beskyttelsesnivået.
Tegnet er ikke gyldig.
Tegnet er ikke gyldig.
Navneområdet eller typen som er angitt i importene System.Core, inneholder ikke noe felles medlem eller finnes ikke. Kontroller at navneområdet eller typen er definert og inneholder minst ett felles medlem. Kontroller at det importerte elementnavnet ikke bruker noen aliaser.

 

Lenke til kommentar
Del på andre sider

6 minutter siden, toonwolf skrev:

Merk jeg har endret hs.DeviceValue til "707"

Ja OK.

 

 

Kan du sjekke selve .vb-filen at det ikke er noen merkelige tegn? Av og til skjer det noe spesielt når kode kopieres herfra.

Lenke til kommentar
Del på andre sider

Takk for script @Moskus og @Guahtdim. Blade har laget en ny versjon av BLLock hvor kodeparameteren er en streng. Det fungerer nå å bruke kode som starter med 0 om jeg hardkoder, men jeg får det ikke til ved å bruke variabel fra virtual device. Veldig nærme nå!

 

Forsøker meg med denne koden

Sub Main (byval inputArgs as string)

  Dim lockCode as String=hs.DeviceValue(707).ToString("0000")

  hs.PluginFunction("BLLock", "", "AddUserCodePin", New Object(){647,79,lockCode,"TEST"})

End Sub

Får følgende feilmelding

BLLock	IDLock150 ANK Bod, Entry Control (647): Pin #79; User: TEST add FAILED
Z-Wave Error	A user code was attempted to be set on node 19, but the user code provided is less than the minimum or more than the maximum length

PS: Setter pris på scriptet ditt også @Moskus, men liker også korte oversiktlige script som "gjør jobben"

Lenke til kommentar
Del på andre sider

17 timer siden, Moskus skrev:

Kan du sjekke selve .vb-filen at det ikke er noen merkelige tegn? Av og til skjer det noe spesielt når kode kopieres herfra.

Her er fila som jeg bruker TESTaddusercode_z-wave.vb  , kan ikke se noe galt med den? Kjører den som et vanlig script i en event uten å legge inn noen parametre

image.png.c1f3f78bdcd202c06588b0a3c8ae9f26.png

 

Endret av toonwolf
Lenke til kommentar
Del på andre sider

9 timer siden, toonwolf skrev:

PS: Setter pris på scriptet ditt også @Moskus, men liker også korte oversiktlige script som "gjør jobben"

.... okay? Du skal jo ikke lese scriptet selv, det er det jo PCen som gjør for deg. For meg ville det være en dealbreaker at man må innom en tredjeparts plugin for å sende en Z-wave kommando. Spesielt når det ikke virker...

 

57 minutter siden, toonwolf skrev:

Her er fila som jeg bruker TESTaddusercode_z-wave.vb  , kan ikke se noe galt med den? Kjører den som et vanlig script i en event uten å legge inn noen parametre

Nei, jeg kan ikke se noe galt med den. Men feilmeldingene tyder på at det f.eks. kan være noe rart med encodingen som er brukt til å lagre fila. Det er lagret med .vb endelse (ikke .txt eller andre ting)?

 

Jeg skal innrømme at jeg ikke har testet akkurat dette scriptet, men det som er postet tidligere (dvs her) fungerer utmerket. :)

 

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.