|
418 | 418 | Dim X10Address As String |
419 | 419 | Dim FromAddress As String |
420 | 420 | Dim ToAddress As String |
| 421 | + Dim DeviceType As String = "" |
421 | 422 | Dim IAddress As Short ' Insteon index number |
422 | 423 | Dim Flags As Byte |
423 | 424 | Dim Command1 As Byte |
|
519 | 520 | Case 224 ' 111 NAK group cleanup direct message |
520 | 521 | strTemp = strTemp & " (NAK Group cleanup direct) " |
521 | 522 | End Select |
| 523 | + If x(ms + 5) = 0 AndAlso x(ms + 6) = 0 Then |
| 524 | + DeviceType = GetInsteonDeviceTypeFromDatabase(FromAddress) |
| 525 | + End If |
522 | 526 | If (FromAddress = My.Settings.Insteon_ThermostatAddr OrElse FromAddress = My.Settings.Insteon_ThermostatSlaveAddr) AndAlso Command1 > 109 Then ' TODO: Detect this by device model |
523 | 527 | strTemp = strTemp & InsteonThermostatResponse(Command1, Command2, FromAddress) |
524 | 528 | ElseIf (FromAddress = My.Settings.Insteon_ThermostatAddr OrElse FromAddress = My.Settings.Insteon_ThermostatSlaveAddr) AndAlso Command1 = 106 Then ' TODO: Detect this by device model |
525 | 529 | 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 |
527 | 531 | 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 |
529 | 533 | strTemp = strTemp & InsteonSmokeBridgeResponse(x(ms + 7)) |
530 | 534 | ElseIf FromAddress = My.Settings.Insteon_SumpAlarmAddr AndAlso Flags = 203 AndAlso x(ms + 5) = 0 AndAlso x(ms + 6) = 0 Then |
531 | 535 | 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 |
533 | 537 | strTemp = strTemp & InsteonWaterLeakResponse(Command1, Command2) |
534 | 538 | Else |
535 | 539 | strTemp = strTemp & " Command1: " & Hex(Command1) & " (" & modInsteon.InsteonCommandLookup(Command1) & ")" & " Command2: " & Hex(Command2) |
|
662 | 666 | strTemp = strTemp & FromName & " " & modInsteon.InsteonCommandLookup(Command1) |
663 | 667 | End If |
664 | 668 |
|
665 | | - If IsSmokeBridge(FromAddress) Then |
| 669 | + If DeviceType = "SmokeBridge" Then |
666 | 670 | strTemp = strTemp & " Smoke Bridge: " & InsteonSmokeBridgeResponse(Group) |
667 | 671 | End If |
668 | 672 | My.Application.Log.WriteEntry(strTemp, TraceEventType.Verbose) |
|
1212 | 1216 | Return False |
1213 | 1217 | End Function |
1214 | 1218 |
|
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 | | - |
1272 | 1219 | ''' <summary> |
1273 | 1220 | ''' Returns true if input is a proper X10 address. |
1274 | 1221 | ''' </summary> |
|
1416 | 1363 | Return result |
1417 | 1364 | End Function |
1418 | 1365 |
|
| 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 | + |
1419 | 1395 | ''' <summary> |
1420 | 1396 | ''' This function returns the X10 address of a given device nickname. |
1421 | 1397 | ''' </summary> |
|
0 commit comments