Skip to content

Commit 6a94403

Browse files
committed
Unify Insteon device type function
1 parent be2e85e commit 6a94403

File tree

1 file changed

+37
-61
lines changed

1 file changed

+37
-61
lines changed

modInsteon.vb

Lines changed: 37 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@
418418
Dim X10Address As String
419419
Dim FromAddress As String
420420
Dim ToAddress As String
421+
Dim DeviceType As String = ""
421422
Dim IAddress As Short ' Insteon index number
422423
Dim Flags As Byte
423424
Dim Command1 As Byte
@@ -519,17 +520,20 @@
519520
Case 224 ' 111 NAK group cleanup direct message
520521
strTemp = strTemp & " (NAK Group cleanup direct) "
521522
End Select
523+
If x(ms + 5) = 0 AndAlso x(ms + 6) = 0 Then
524+
DeviceType = GetInsteonDeviceTypeFromDatabase(FromAddress)
525+
End If
522526
If (FromAddress = My.Settings.Insteon_ThermostatAddr OrElse FromAddress = My.Settings.Insteon_ThermostatSlaveAddr) AndAlso Command1 > 109 Then ' TODO: Detect this by device model
523527
strTemp = strTemp & InsteonThermostatResponse(Command1, Command2, FromAddress)
524528
ElseIf (FromAddress = My.Settings.Insteon_ThermostatAddr OrElse FromAddress = My.Settings.Insteon_ThermostatSlaveAddr) AndAlso Command1 = 106 Then ' TODO: Detect this by device model
525529
strTemp = strTemp & InsteonThermostatResponse(Command1, Command2, FromAddress)
526-
ElseIf ToAddress = "0.0.1" AndAlso IsDoorSensor(FromAddress) Then
530+
ElseIf ToAddress = "0.0.1" AndAlso DeviceType = "DoorSensor" Then
527531
strTemp = strTemp & InsteonDoorSensorResponse(Command1, Command2)
528-
ElseIf Flags = 203 AndAlso x(ms + 5) = 0 AndAlso x(ms + 6) = 0 AndAlso IsSmokeBridge(FromAddress) Then
532+
ElseIf Flags = 203 AndAlso x(ms + 5) = 0 AndAlso x(ms + 6) = 0 AndAlso DeviceType = "SmokeBridge" Then
529533
strTemp = strTemp & InsteonSmokeBridgeResponse(x(ms + 7))
530534
ElseIf FromAddress = My.Settings.Insteon_SumpAlarmAddr AndAlso Flags = 203 AndAlso x(ms + 5) = 0 AndAlso x(ms + 6) = 0 Then
531535
strTemp = strTemp & InsteonSumpAlarmResponse(Command1)
532-
ElseIf Flags = 207 AndAlso x(ms + 5) = 0 AndAlso x(ms + 6) = 0 AndAlso IsWaterLeakDetector(FromAddress) Then
536+
ElseIf Flags = 207 AndAlso x(ms + 5) = 0 AndAlso x(ms + 6) = 0 AndAlso DeviceType = "LeakSensor" Then
533537
strTemp = strTemp & InsteonWaterLeakResponse(Command1, Command2)
534538
Else
535539
strTemp = strTemp & " Command1: " & Hex(Command1) & " (" & modInsteon.InsteonCommandLookup(Command1) & ")" & " Command2: " & Hex(Command2)
@@ -662,7 +666,7 @@
662666
strTemp = strTemp & FromName & " " & modInsteon.InsteonCommandLookup(Command1)
663667
End If
664668

665-
If IsSmokeBridge(FromAddress) Then
669+
If DeviceType = "SmokeBridge" Then
666670
strTemp = strTemp & " Smoke Bridge: " & InsteonSmokeBridgeResponse(Group)
667671
End If
668672
My.Application.Log.WriteEntry(strTemp, TraceEventType.Verbose)
@@ -1212,63 +1216,6 @@
12121216
Return False
12131217
End Function
12141218

1215-
''' <summary>
1216-
''' Returns true if address is for a Door Sensor
1217-
''' </summary>
1218-
''' <param name="strAddress">Insteon address in XX.XX.XX format</param>
1219-
''' <returns>True if in database as a door sensor</returns>
1220-
Function IsDoorSensor(ByVal strAddress As String) As Boolean
1221-
Dim devcat As Integer = 0
1222-
Dim subcat As Integer = 0
1223-
1224-
modDatabase.ExecuteScalar("SELECT DevCat FROM INSTEON_DEVICES WHERE Address = '" + strAddress + "'", devcat)
1225-
modDatabase.ExecuteScalar("SELECT SubCat FROM INSTEON_DEVICES WHERE Address = '" + strAddress + "'", subcat)
1226-
1227-
If devcat = 16 AndAlso (subcat = 2 OrElse subcat = 17) Then
1228-
Return True
1229-
Else
1230-
Return False
1231-
End If
1232-
End Function
1233-
1234-
''' <summary>
1235-
''' Returns true if address is for a Smoke Bridge
1236-
''' </summary>
1237-
''' <param name="strAddress">Insteon address in XX.XX.XX format</param>
1238-
''' <returns>True if in database as a smoke bridge</returns>
1239-
Function IsSmokeBridge(ByVal strAddress As String) As Boolean
1240-
Dim devcat As Integer = 0
1241-
Dim subcat As Integer = 0
1242-
1243-
modDatabase.ExecuteScalar("SELECT DevCat FROM INSTEON_DEVICES WHERE Address = '" + strAddress + "'", devcat)
1244-
modDatabase.ExecuteScalar("SELECT SubCat FROM INSTEON_DEVICES WHERE Address = '" + strAddress + "'", subcat)
1245-
1246-
If devcat = 16 AndAlso subcat = 10 Then
1247-
Return True
1248-
Else
1249-
Return False
1250-
End If
1251-
End Function
1252-
1253-
''' <summary>
1254-
''' Returns true if address is for a Water Leak Detector.
1255-
''' </summary>
1256-
''' <param name="strAddress">Insteon address in XX.XX.XX format</param>
1257-
''' <returns>True if in database as a water leak detector</returns>
1258-
Function IsWaterLeakDetector(ByVal strAddress As String) As Boolean
1259-
Dim devcat As Integer = 0
1260-
Dim subcat As Integer = 0
1261-
1262-
modDatabase.ExecuteScalar("SELECT DevCat FROM INSTEON_DEVICES WHERE Address = '" + strAddress + "'", devcat)
1263-
modDatabase.ExecuteScalar("SELECT SubCat FROM INSTEON_DEVICES WHERE Address = '" + strAddress + "'", subcat)
1264-
1265-
If devcat = 16 AndAlso subcat = 8 Then
1266-
Return True
1267-
Else
1268-
Return False
1269-
End If
1270-
End Function
1271-
12721219
''' <summary>
12731220
''' Returns true if input is a proper X10 address.
12741221
''' </summary>
@@ -1416,6 +1363,35 @@
14161363
Return result
14171364
End Function
14181365

1366+
''' <summary>
1367+
''' Returns a string representing the type of device, used for identifying response behavior for certain device types
1368+
''' </summary>
1369+
''' <param name="strAddress">Insteon address in XX.XX.XX format</param>
1370+
''' <returns>The type of device</returns>
1371+
Function GetInsteonDeviceTypeFromDatabase(ByVal strAddress As String) As String
1372+
Dim devcat As Integer = 0
1373+
Dim subcat As Integer = 0
1374+
1375+
modDatabase.ExecuteScalar("SELECT DevCat FROM INSTEON_DEVICES WHERE Address = '" + strAddress + "'", devcat)
1376+
modDatabase.ExecuteScalar("SELECT SubCat FROM INSTEON_DEVICES WHERE Address = '" + strAddress + "'", subcat)
1377+
1378+
Select Case devcat
1379+
Case 16
1380+
Select Case subcat
1381+
Case 0, 10
1382+
Return "SmokeBridge"
1383+
Case 2, 6, 7, 17, 20, 21
1384+
Return "DoorSensor"
1385+
Case 8
1386+
Return "LeakSensor"
1387+
Case Else
1388+
Return "Other"
1389+
End Select
1390+
Case Else
1391+
Return "Other"
1392+
End Select
1393+
End Function
1394+
14191395
''' <summary>
14201396
''' This function returns the X10 address of a given device nickname.
14211397
''' </summary>

0 commit comments

Comments
 (0)