Code: Select all
' NeerslagMonitor.vb script
' Auteur: Alexander
' Versie: 1.01
' Laatst gewijzigd: 04-01-2012 21:00
' Change Log:
' 1.0: Start
' - Functionaliteit: Overgestapt van weeronline naar buienradar data gebaseerd op GPS coordinaten
' 1.01: - Bugfix: Long en Lat omgedraaid
Sub Main(ByVal Params As String)
' Vervang deze waarden als je andere omschrijvingen wilt hebben, zodra de device(s) wordt/worden aangemaakt.
Dim strDeviceLocation As String = "Virtual - Monitoring" ' Sla deze waarde op in de variabele strDeviceLocation
Dim strDeviceType As String = "Verwachte Neerslag Monitoring" ' Sla deze waarde op in de variabele strDeviceType
Dim strGPS As String = hs.StringItem(Params, 1, ";") ' Haal de waarde van de eerste parameter op en sla deze op
Dim strDevice As String = hs.StringItem(Params, 2, ";") ' Haal de waarde van de tweede parameter op en sla deze op
Dim strHouseCode As String = GetChar(strDevice,1) ' Pak de eerste karakter van de variabele strDevice en sla deze op
dim strDeviceCode As String = strDevice.subString(1) ' Pak de tekst op vanaf de tweede positie van de variabele strDevice en sla deze op
Dim blRainInText As Boolean = hs.StringItem(Params, 3, ";") = "yes" ' Haal de waarde van de derde parameter op en als deze "yes" als waarde heeft, dan is de variabele blRainInText WAAR anders ONWAAR
Dim blMultiDevice As Boolean = hs.StringItem(Params, 4, ";") = "yes" ' Haal de waarde van de vierde parameter op en als deze "yes" als waarde heeft, dan is de variabele blMultiDevice WAAR anders ONWAAR
Dim i As Integer
Dim strGPSLong As String
Dim strGPSLat As String
If not ((Val(strDeviceCode)>=1) And (Val(strDeviceCode)<=128)) Then
hs.WriteLog("NeerslagMonitor", "Ongeldige DeviceCode! Uitvoeren script gestopt...")
Exit Sub
End If
If not (strHouseCode <> "") Then
hs.WriteLog("NeerslagMonitor", "Ongeldige HouseCode! Uitvoeren script gestopt...")
Exit Sub
End If
If not (strGPS <> "") Then
strGPSLong = hs.GetINISetting("Settings","longitude","0")
strGPSLat = hs.GetINISetting("Settings","latitude","0")
Else
If (ubound(split(strGPS, ",")) > 1) Then
hs.WriteLog("NeerslagMonitor", "Gebruik punten in de GPS coordinaten! Uitvoeren script gestopt...")
Exit Sub
ElseIf (ubound(split(strGPS, ",")) = 0) Then
hs.WriteLog("NeerslagMonitor", "Gebruik een komma tussen de GPS coordinaten! Uitvoeren script gestopt...")
Exit Sub
End If
strGPSLat = hs.StringItem(strGPS, 1, ",")
strGPSLong = hs.StringItem(strGPS, 2, ",")
End If
Dim strData As String = hs.GetURL("gps.buienradar.nl", "/getrr.php?lat=" & strGPSLat & "&lon=" & strGPSLong, false, 80) ' Haal de tekst van de webpagina op en deze in de variabele strData opslaan
If (Not InStr(strData, "|") > 0) Then
hs.SetDeviceString(strDevice, "Website gps.buienradar.nl down", True)
hs.SetDeviceStatus(strDevice, 17)
Exit Sub
End If
If blMultiDevice Then
For i = 0 To 24
If hs.DeviceExistsRef(strHouseCode & Val(strDeviceCode)+i) = -1 Then
Dim dv As Object
dv = hs.GetDeviceByRef(hs.NewDeviceRef("Neerslag" & "-" & i+1))
dv.hc = strHouseCode
dv.dc = Val(strDeviceCode)+i
dv.misc = "&h10"
dv.location = strDeviceLocation
dv.dev_type_string = strDeviceType
End If
Next
Else
If hs.DeviceExistsRef(strHouseCode & strDeviceCode) = -1 Then
Dim dv As Object
dv = hs.GetDeviceByRef(hs.NewDeviceRef("Neerslag"))
dv.hc = strHouseCode
dv.dc = strDeviceCode
dv.misc = "&h10"
dv.location = strDeviceLocation
dv.dev_type_string = strDeviceType
End If
End If
Dim strArr() As String
Dim strTime(25) As String
Dim strDate(25) As String
Dim strValue(25) As String
Dim blTomorrow As Boolean
strArr = strdata.split(chr(13))
For i = 0 To strArr.Length -2
strValue(i) = hs.StringItem(strArr(i), 1, "|")
strTime(i) = hs.StringItem(strArr(i), 2, "|")
If (strTime(i)="00:00") and (i>0) Then
blTomorrow = 1
End If
If blTomorrow Then
strDate(i) = FormatDateTime(DateTime.Now, 2).toString()
Else
strDate(i) = FormatDateTime(DateTime.Now.AddDays(1), 2).toString()
End If
Next
For i = 0 To strArr.Length -2
Dim strEvent As String = strDate(i) & "_" & strTime(i)
If hs.EventExists(strEvent) Then hs.DeleteEvent(strEvent)
Dim lngValueCommand As Long = Math.Pow(10, (strValue(i) - 109) / 32)*100
Dim strValueCommand As String
If blMultiDevice Then
strValueCommand = "&hs.SetDeviceValue(" & strHouseCode & Val(strDeviceCode) + i & ", " & lngValueCommand.toString() & ")"
Else
strValueCommand = "&hs.SetDeviceValue(" & strDevice & ", " & lngValueCommand.toString() & ")"
End If
If (DateTime.Compare(strTime(i), FormatDateTime(Now, 4)) <= 0) Then
If InStr(strValue(i), "000") > 0 Then
If blMultiDevice Then
If Not hs.DeviceStatus(strHouseCode & Val(strDeviceCode) + i) = 3 Then
hs.Transmit(strHouseCode & Val(strDeviceCode) + i, "off")
hs.SetDeviceValue(strHouseCode & Val(strDeviceCode) + i, 0)
End If
hs.SetDeviceString(strHouseCode & Val(strDeviceCode) + i, WeerType(lngValueCommand, blRainInText) & " om " & strTime(i), True)
Else
If Not hs.DeviceStatus(strDevice) = 3 Then
hs.Transmit(strDevice, "off")
hs.SetDeviceValue(strDevice, 0)
End If
hs.SetDeviceString(strDevice, WeerType(lngValueCommand, blRainInText), True)
End If
Else
If blMultiDevice Then
If Not hs.DeviceStatus(strHouseCode & Val(strDeviceCode) + i) = 2 Then hs.Transmit(strHouseCode & Val(strDeviceCode) + i, "on")
hs.SetDeviceValue(strHouseCode & Val(strDeviceCode) + i, lngValueCommand.toString())
hs.SetDeviceString(strHouseCode & Val(strDeviceCode) + i, WeerType(lngValueCommand, blRainInText) & " om " & strTime(i), True)
Else
If Not hs.DeviceStatus(strDevice) = 2 Then hs.Transmit(strDevice, "on")
hs.SetDeviceValue(strDevice, lngValueCommand.toString())
hs.SetDeviceString(strDevice, WeerType(lngValueCommand, blRainInText), True)
End If
End If
ElseIf Not blMultiDevice Then
If (InStr(strValue(i), "000") > 0) and (i>0) Then
If Not (InStr(strValue(i - 1), "000") > 0) Then
hs.NewTimeEvent(strEvent, strTime(i), "", 1, 1, 1, 1, 1, 1, 1, strDevice & ":off", 1, "", "")
hs.AddAction(hs.GetEventRefByName(strEvent), 5, strValueCommand)
hs.AddAction(hs.GetEventRefByName(strEvent), 5, Chr(34) & "&hs.SetDeviceString(" & strDevice & ", " & Chr(34) & WeerType(lngValueCommand, blRainInText) & Chr(34) & "), True")
hs.EnableEvent(strEvent)
End If
ElseIf (InStr(strValue(i), "000") > 0) and (i=0) Then
hs.NewTimeEvent(strEvent, strTime(i), "", 1, 1, 1, 1, 1, 1, 1, strDevice & ":off", 1, "", "")
hs.AddAction(hs.GetEventRefByName(strEvent), 5, strValueCommand)
hs.AddAction(hs.GetEventRefByName(strEvent), 5, Chr(34) & "&hs.SetDeviceString(" & strDevice & ", " & Chr(34) & WeerType(lngValueCommand, blRainInText) & Chr(34) & "), True")
hs.EnableEvent(strEvent)
Else
hs.NewTimeEvent(strEvent, strTime(i), "", 1, 1, 1, 1, 1, 1, 1, strDevice & ":on", 1, "", "")
hs.AddAction(hs.GetEventRefByName(strEvent), 5, strValueCommand)
hs.AddAction(hs.GetEventRefByName(strEvent), 5, Chr(34) & "&hs.SetDeviceString(" & strDevice & ", " & Chr(34) & WeerType(lngValueCommand, blRainInText) & Chr(34) & ", True)")
hs.EnableEvent(strEvent)
End If
Else
If InStr(strValue(i), "000") > 0 Then
If Not hs.DeviceStatus(strHouseCode & Val(strDeviceCode) + i) = 3 Then
hs.Transmit(strHouseCode & Val(strDeviceCode) + i, "off")
hs.SetDeviceValue(strHouseCode & Val(strDeviceCode) + i, 0)
End If
hs.SetDeviceString(strHouseCode & Val(strDeviceCode) + i, WeerType(lngValueCommand, blRainInText) & " om " & strTime(i), True)
Else
If Not hs.DeviceStatus(strHouseCode & Val(strDeviceCode) + i) = 2 Then hs.Transmit(strHouseCode & Val(strDeviceCode) + i, "on")
hs.SetDeviceValue(strHouseCode & Val(strDeviceCode) + i, lngValueCommand.toString())
hs.SetDeviceString(strHouseCode & Val(strDeviceCode) + i, WeerType(lngValueCommand, blRainInText) & " om " & strTime(i), True)
End If
End If
Next
End Sub
Function WeerType(Value As Integer, blRainInText As Boolean) As String
If blRainInText Then
Select Case Value
Case 0 To 1
Return "<img align='absmiddle' src='images/NeerslagMonitor/no_rain.png'> Geen neerslag"
Case 2 To 100
Return "<img align='absmiddle' src='images/NeerslagMonitor/light_rain.png'> Lichte neerslag"
Case 101 To 500
Return "<img align='absmiddle' src='images/NeerslagMonitor/medium_rain.png'> Matige neerslag"
Case 501 To 2500
Return "<img align='absmiddle' src='images/NeerslagMonitor/heavy_rain.png'> Zware neerslag"
Case Is > 2500
Return "<img align='absmiddle' src='images/NeerslagMonitor/heavy_rain.png'> Wolkbreuk"
End Select
Else
Dim strTmp As String
Select Case Value
Case 0 To 1
strTmp = "<img align='absmiddle' src='images/NeerslagMonitor/no_rain.png'>"
Case 2 To 100
strTmp = "<img align='absmiddle' src='images/NeerslagMonitor/light_rain.png'>"
Case 101 To 500
strTmp = "<img align='absmiddle' src='images/NeerslagMonitor/medium_rain.png'>"
Case 501 To 2500
strTmp = "<img align='absmiddle' src='images/NeerslagMonitor/heavy_rain.png'>"
Case Is > 2500
strTmp = "<img src='images/NeerslagMonitor/heavy_rain.png'>"
End Select
Return strTmp & " " & Math.Round(Value/100, 2).toString() & " mm/uur"
End If
End Function
Controleer hier nog even of je Long en Lat waarden wel juist zijn: http://itouchmap.com/latlong.html