Neerslag monitor script

Forum over Homeseer scripts (DUTCH forum)

Moderators: TANE, Ruud

Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

Never mind (geen waardes meer nodig), probleem is naar mijn idee nu opgelost:

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
Alexander
Akatar
Senior Member
Senior Member
Posts: 1135
Joined: Thu Nov 22, 2007 12:25 am
Location: the netherlands

Re: Neerslag monitor script

Post by Akatar »

heb nu overal "lichte neerslag" staan.
dat komt beter overeen dan droog
bedankt!
Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Re: Neerslag monitor script

Post by Digit »

@alexander:
Public Const GPSLat = geheim
Public Const GPSLong = geheim

Nu:
Capture_03 2012.01.04 22.20.37.jpg
Capture_03 2012.01.04 22.20.37.jpg (37.09 KiB) Viewed 20396 times
093|22:05 098|22:10 097|22:15 098|22:20 092|22:25 094|22:30 092|22:35 090|22:40 100|22:45 104|22:50 099|22:55 094|23:00 102|23:05 090|23:10 097|23:15 078|23:20 099|23:25 098|23:30 101|23:35 107|23:40 100|23:45 096|23:50 096|23:55 090|00:00 090|00:05
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

Thanks, komt wel aardig overeen. De waardes worden continue bijgewerkt. In een paar minuten kunnen de waardes die jij gepost hebt al weer veranderd zijn, kom ik net achter. Wel erg netjes! (haal de coordinaten maar weg hoor ;-) )
Alexander
abl
Member
Member
Posts: 244
Joined: Tue Aug 04, 2009 9:58 pm
Location: Belgium

Re: Neerslag monitor script

Post by abl »

Heb het net nieuwe script geprobeerd en kan bevestigen dat het bij mij ook werkt. Alexander nogmaals dank voor de aanpassingen...
AshaiRey
Senior Member
Senior Member
Posts: 1310
Joined: Mon Feb 02, 2009 5:27 pm
Location: Netherlands
Contact:

Re: Neerslag monitor script

Post by AshaiRey »

Ik heb nog wat dingetjes opgemerkt die van invloed kunnen zijn:
- Als je bij Setup\Location in HomeSeer als locatie Amsterdam kiest dan zit er een fout in de longitude. De opgegeven locatie ligt dan ergens op zee West van Engeland
- Je kan dan ook geen lan/lon handmatig instellen, ze blijven hier ook verkeerd en worden ingekort.
- Zet de locatie eerst op manual en dan kan je een volledig lan/lon invullen
Bram
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

1.02 na een bugreport van Esteban

Code: Select all

' NeerslagMonitor.vb script
' Auteur: Alexander
' Versie: 1.02
' Laatst gewijzigd: 04-01-2012 23:00

' Change Log:
' 1.0: Start
' - Functionaliteit: Overgestapt van weeronline naar buienradar data gebaseerd op GPS coordinaten
' 1.01: - Bugfix: Long en Lat omgedraaid
' 1.02: - Bugfix: gps.buienradar.nl verwacht geen negatieve Long en/of Lat. Indien deze negatieve waarde bevatten (in config of parameters) dan worden deze met positieve waarden gestuurd naar gps.buienradar.nl

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=" & Replace(strGPSLat,"-","") & "&lon=" & Replace(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
Alexander
strongetje
Member
Member
Posts: 101
Joined: Tue Oct 27, 2009 1:25 pm
Location: Netherlands

Re: Neerslag monitor script

Post by strongetje »

hallo,

ben geheel nieuw wat betreft scripting, en krijg dit script niet aan het draaien.

wat heb ik gedaan:
heb NeerslagMonitor.vb in de scripts map van homeseer gezet.
hierna een event gemaakt die het script om de 5 minuten start.

homeseer opnieuw gestart en handmatig het script gestart, maar krijg dan deze eror in de log file:

Code: Select all

5-1-2012 14:36:48  Event  Running script in background: NeerslagMonitor.vb 
5-1-2012 14:36:48  Error  Scripting runtime error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: Argument 'Index' must be less than or equal to the length of argument 'String'. at Microsoft.VisualBasic.Strings.GetChar(String str, Int32 Index) at scriptcode1.scriptcode1.Main(String Params) --- End of inner exception stack trace --- at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) at Scheduler.VsaScriptHost.Invoke(String ModuleName, String MethodName, Object[] Arguments) 
 
ik zal wel iets verkeerd doen, maar weet niet wat.

bvd voor de info

mvg,
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

Zo omslachtig hoef je het niet te doen. BIj het aanmaken/wijzigen van een event kun je bij de action-tabblad voor "Run script" kiezen. Vervolgens kun je in het veld "Existing or new script name:" een nieuwe naam opgeven.
In jouw geval neem ik aan dat je deze uit de lijst van "existing script" kan kiezen.

Ik vermoed dat je geen parameters hebt opgegeven onder "Optional parameters (function,param)".
Dit is een voorbeeld wat je daar kunt invullen: ("Main",";V1;no;yes")
Het gaat om dat laatste stukje tekst tussen quotes: ";V1;no;yes". Parameters worden gescheiden door puntkomma.
We kunnen het script vier parameters meegeven. De eerste heb ik in dit voorbeeld leeggelaten (vandaar dat ie eerst begint met een puntkomma).

Parameter 1 is de GPS coordinaten welke je wilt gebruiken. Vul je deze niet in, dus je begint met een puntkomma, dan wordt de waarde gebruikt die je ingevuld hebt in de configuratie van HS (tabblad setup > location). Deze moet dus wel ingevuld zijn.

Voor de overige parameters verwijs ik je graag door naar het oude topic: http://domoticaforum.eu/viewtopic.php?f ... ter#p40868
Alexander
strongetje
Member
Member
Posts: 101
Joined: Tue Oct 27, 2009 1:25 pm
Location: Netherlands

Re: Neerslag monitor script

Post by strongetje »

Alexander,

bedankt voor de info.
had bij "optional parameters" inderdaad niks opgegeven.
heb hier ("Main",";V1;no;yes") in gezet.

bij "status" heb ik nu V1 t/m V25 gekregen, en geeft nu aan dat om 16:30 0,06 mm/uur regen gaat vallen.

mvg,
strongetje
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

Dan heb je dus nog 3 minuten om je spullen naar binnen te halen.
Alexander
ldborn
Member
Member
Posts: 68
Joined: Fri Jul 11, 2008 12:36 pm
Location: Netherlands

Re: Neerslag monitor script

Post by ldborn »

Alexander,

Sinds het script gebruik maakt van buienradar krijg ik zeer regelmatig te maken met verkeerde data, regen terwijl de zon schijnt. Ik weet 100% zeker dat ik de juiste coordinaten gebruik en ik heb de laatste versie van het script. Zijn de gegevens die buienradar levert onbetrouwbaar? Zijn er nog meer gebruikers met deze klachten?
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

Ik kan er echt niets zinnigs over zeggen. Robert (Digit) gebruikt ook deze source en hij gaf toen aan dat het perfect werkte. ik heb ook nog geen klachten gehad per pm. Enige wat nog zou kunnen zijn is dat ik de berekening fout heb opgenomen.
Toen je het constateerde heb je toen ook op buienradar zelf gekeken? En wellicht eeen betere om de url http://gps.buienradar.nl/getrr.php?lat=52&lon=4 te gebruiken en je lon en lat in te vullen om te kijken of ik daadwerkelijk een fout in de berekening heb gemaakt (of in tijd).
Alexander
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

Bericht van Bram wellicht van toepassing op je geconstateerde? http://www.domoticaforum.eu/viewtopic.p ... 883#p53243
Alexander
ldborn
Member
Member
Posts: 68
Joined: Fri Jul 11, 2008 12:36 pm
Location: Netherlands

Re: Neerslag monitor script

Post by ldborn »

Ik zal die andere url er is in zetten, ik heb het probleem ook als ik de coordinaten handmatig invoer
Post Reply

Return to “Homeseer Scripts Forum”