Rufus Skrevet 4. april 2019 Skrevet 4. april 2019 (endret) 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 4. april 2019 av Rufus Siter
Rufus Skrevet 4. april 2019 Forfatter Skrevet 4. april 2019 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. Siter
Guahtdim Skrevet 5. april 2019 Skrevet 5. april 2019 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) Siter
Terje Klungervik Skrevet 4. november 2019 Skrevet 4. november 2019 (endret) 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 4. november 2019 av Terje Klungervik 2 Siter
Anbefalte innlegg
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.