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

Dør og vindu script


Rufus

Anbefalte innlegg

Jeg ønsker å få til en virtuell device for alle vinduer, og en for dørene. Denne skal oppdateres med hvilke vinduer/dører som er åpne til en hver tid. Eventuelt om alle er lukket.

Scripting er jeg ganske fersk med, så det har blitt litt copy paste fra her inne samt homeseer forumet.

Fant et script som skal gjøre akkurat det jeg trenger, men jeg får warning i loggen :

VB.Net script exception(0), re-starting: Object reference not set to an instance of an object

 

Noen som har noen tips, er det noe åpenbart jeg har misset her?

Til info så har jeg oppdatert scriptet med mine devicer :)

Jeg kjører forøvrig HS3 på Raspbian.

' these are the virtual devices to be updated by the script
'423    Windows
'424    Doors

'Use the reference ID of the door or window sensor devices in the arrays below

Public Sub Main(ByVal Parms as Object)
   Dim array_windows() as string = {"221", "217", "215", "213", "211"}
   Dim array_doors() as string = {"219", "209"}
   Dim windows_count as integer = 0
   Dim window_name as string = ""
   Dim wstr as string = ""
   Dim doors_count as integer = 0
   Dim door_name as String = ""
   Dim dstr as string = ""
   Dim dv as Object

End Sub

'Using 2 subs, one for doors and the other for windows

'WINDOWS
Sub windows(ByVal Parms as Object)
Try
windows_count = 0
window_name = ""
wstr = ""
for each devw as string in array_windows
       'hs.writelog("Array", "Window " & window_name & " | Value " & hs.DeviceValue(devw))
    if hs.DeviceValue(devw) = 1 then
                windows_count = windows_count + 1
        dv = hs.GetDeviceByRef(devw)
        window_name =  dv.Name(hs)
               wstr = wstr & window_name & ",<br>"
    hs.writelog("DoorWindow", window_name & " Open")
       'hs.writelog("DoorWindow", array_windows)
        end if
next
    If windows_count > 0 then
        hs.SetDeviceValueByRef(423,100,true)
        hs.SetDeviceString(423, wstr,true)
    Else
        hs.SetDeviceValueByRef(423,0,true)
        hs.SetDeviceString(423, "Alle vinduer lukket",true)
    End If
    hs.writelog("DoorWindow", "Window Count: " & windows_count)

Catch ex As Exception
hs.WriteLog ("DoorWindow", "Error: " & ex.Message)
End Try

End Sub

'DOORS
Sub doors(ByVal Parms as Object)
Try
doors_count = 0
door_name = ""
dstr = ""
for each devd as string in array_doors
       'hs.writelog("Array", "Door " & door_name & " | Value " & hs.DeviceValue(devd))
    if hs.DeviceValue(devd) = 1 then
        dv = hs.GetDeviceByRef(devd)
        door_name =  dv.Name(hs)
        doors_count = doors_count + 1
        dstr = dstr & door_name & ",<br>"
    hs.writelog("DoorWindow", door_name & " Open")
        end if
next
    If doors_count > 0 then
        hs.SetDeviceValueByRef(424,100,true)
        hs.SetDeviceString(424, dstr,true)
    Else
        hs.SetDeviceValueByRef(424,0,true)
        hs.SetDeviceString(424, "Alle dører lukket",true)
    End If

    hs.writelog("DoorWindow", "Door Count: " & doors_count)

Catch ex As Exception
hs.WriteLog ("DoorWindow", "Error: " & ex.Message)
End Try

End Sub

 

Endret av Rufus
Lenke til kommentar
Del på andre sider

Der hadde jeg blingset :)

Men nå får jeg en annen warning :

Compiling script /usr/local/HomeSeer/scripts/DoorsWindows.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.

Det er mulig det er litt for seint på kvelden til å drive med sånt ;)

Har editert scriptet i opprinnelig post.

Lenke til kommentar
Del på andre sider

 

I din Public Sub Main så gjør du ingenting. Mulig dette er grunnen. Når jeg sliter med scriptfeil så pleier jeg å fjerne så mye som mulig (kommentere vekk alle subrutiner) og så ta det tilbake litt etter litt.

 

 

Jeg er litt usikker på om windows er godkjent subnavn så den ville jeg ha gitt ett annet navn (CheckWindows?).

 

Småpirk: Sub'er bør helst ha stor bokstav så 

Sub doors(ByVal Parms as Object) vil bli Sub Doors(ByVal Parms as Object) (men jeg ville kanskje renamet funksjonen til CheckDoors)

 

Og feilmeldingene i Sub'ene dine ville jeg ha gjort om så du kan se i hvilken sub det feiler

 

Catch ex As Exception

hs.WriteLog ("CheckDoors", "Error: " & ex.Message)

 

hs.WriteLog ("CheckWindows", "Error: " & ex.Message)

Lenke til kommentar
Del på andre sider

  • 6 måneder senere...

Ser at dette er en gammel tråd. Men hadde det samme problemet som TS. Fikk hjelp fra homeseer forumet. En som lagde sin egen versjon. Det fungerte hos meg som kjører HS3 Pro på win10.

 

Sub Main(ByVal Parms As String)

    'Use the reference ID of the door or window sensor devices in the arrays below
    'This script work for devices that have a value of 0 when they are secure and greater than 0 If they are not

    Dim WindowArray() As Integer = {8152,8129,8086,8123,8158}
    Dim DoorArray() As Integer = {1017,1018,1146,6370}
    Dim DoorDev As Integer = 8259
    Dim WindowDev As Integer = 8260
    Dim Debug As Boolean = True
    Dim LogName As String = "Door-Window"

    Dim WindowCount As integer = 0
    Dim WindowName As string = ""
    Dim WindowDevString As string = ""

    Dim DoorCount As integer = 0
    Dim DoorName As String = ""
    Dim DoorDevString As string = ""

    Dim dv As Scheduler.Classes.DeviceClass

    Try
        'Windows
        For Each Window As Integer In WindowArray
            dv = hs.GetDeviceByRef(Window)
            WindowName =  dv.Name(hs)
            If Debug Then hs.writelog(LogName, "Window " & WindowName & " | Value " & hs.DeviceValue(Window))
            If hs.DeviceValue(Window) > 0 Then
                WindowCount = WindowCount + 1
                WindowDevString = WindowDevString & WindowName & ",<br>"
                If Debug Then hs.writelog(LogName, WindowName & " Open")
            End If

        Next
        If WindowCount > 0 Then
            hs.SetDeviceValueByRef(WindowDev,100,True)
            hs.SetDeviceString(WindowDev, WindowDevString,True)
        Else
            hs.SetDeviceValueByRef(WindowDev,0,True)
            hs.SetDeviceString(WindowDev, "All Windows Closed",True)
        End If

        If Debug Then hs.writelog(LogName, "Window Count: " & WindowCount)

        'Door
        For Each Door As Integer In DoorArray
            dv = hs.GetDeviceByRef(Door)
            DoorName =  dv.Name(hs)
            If Debug Then hs.writelog(LogName, "Door " & DoorName & " | Value " & hs.DeviceValue(Door))
            If hs.DeviceValue(Door) > 0 Then
                DoorCount = DoorCount + 1
                DoorDevString = DoorDevString & DoorName & ",<br>"
                If Debug Then hs.writelog(LogName, DoorName & " Open")
            End If
        Next
        If DoorCount > 0 Then
            hs.SetDeviceValueByRef(DoorDev,100,True)
            hs.SetDeviceString(DoorDev, DoorDevString,True)
        Else
            hs.SetDeviceValueByRef(DoorDev,0,True)
            hs.SetDeviceString(DoorDev, "All Doors Closed",True)
        End If

        If Debug Then hs.writelog(LogName, "Door Count: " & DoorCount)

    Catch ex As Exception
        hs.WriteLog (LogName, "Error Door: " & ex.Message)
    End Try

End Sub

Endre: Dim Debug As Boolean = True til Dim Debug As Boolean = False for å fjerne all log beskjeder.

Endret av Terje Klungervik
  • Like 2
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.