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

Neerslag monitor script

Post by Alexander »

Gebruik niet meer het script in de topic "Regen monitor script".
Pas onderstaande toe, wel met een aantal notes:
- De script en devices bevatten niet meer "regen" maar "neerslag". Dit betekent dat de images map NeerslagMonitor moet zijn. Het script heet NeerslagMonitor.vb en de devices heten ook Neerslag ipv Regen.
- Script maakt gebruik van gps.buienradar.nl niet meer van weeronline.nl en gebruikt de GPS coordinaten in je HS config. Je kunt deze overrulen door de eerste parameter de coordinaten mee te geven gescheiden door een komma. De decimale seperator is de punt, zoals google maps dat ook doet.

Voorbeeld "optional parameters" = ("Main","52.160876,6.983185;V1;no;yes")
Parameters zijn gescheiden door puntkomma en zijn:
- 1= GPS coordinaten Long + Lat (kun je dus leeglaten als je deze wilt gebruiken die in de HS config staat... Laat wel de puntkomma staan!!)
- 2= Device naam dat gebruikt moet worden (indien niet bestaat, zal deze aangemaakt worden)
- 3= Op "yes" of "no" zetten indien je wel of niet wilt dat er een tekst wordt gebruikt in de status van de device(s)
- 4= Op "yes" of "no" zetten indien je wel of niet wilt dat er meerdere devices worden aangemaakt beginnend bij het device opgegeven bij parameter 2. Ieder device zal een interval zijn van 5 minuten.

Code: Select all

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

' Change Log:
' 1.0: Start
'      - Functionaliteit: Overgestapt van weeronline naar buienradar data gebaseerd op GPS coordinaten

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
       strGPSLong = hs.StringItem(strGPS, 1, ",")
       strGPSLat = 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.Round(Math.Pow(10, (strValue(i) - 109) / 32)*100, 0)
        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
http://alexanderwesdorp.nl/NeerslagMonitor.zip voor de images.

Even nog een note: Ik heb de script niet op neerslag kunnen testen. Ik heb diverse gps coordinaten gebruikt maar de gps pagina blijft de waarden 000 bevatten. Ik hoop dus dat het gaat werken, maar ga er wel van uit anders werkt dit ook niet bij bijv Robert zijn systeem.
Alexander
Wim2008
Advanced Member
Advanced Member
Posts: 718
Joined: Wed Aug 12, 2009 1:42 pm
Location: Eindhoven, Netherlands

Re: Neerslag monitor script

Post by Wim2008 »

In het komende weekend zal ik eens proberen dit neerslag monitor script te installeren. Het vorige regen monitor script had ik niet geprobeerd door tijd gebrek.

Wim :)
abl
Member
Member
Posts: 244
Joined: Tue Aug 04, 2009 9:58 pm
Location: Belgium

Re: Neerslag monitor script

Post by abl »

Alexander, ik heb je script geprobeerd en Homeseer genereert geen foutmelding, maar ik zie nergens de virtuele devices (V1.. onder virtual monitoring). Alles is leeg daar. Nu weet ik dat ik in het verleden de meeste virtuele devices van regenmonitor heb gehide, maar unhide werkt ook niet). Weet je wat ik fout doe?
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

Alles is leeg daar.
Ik begrijp niet wat je bedoelt. Gooi die devices eens weg mocht je ze hebben. Nadeel is volgens mij wel dat als je events of koppelingen hebt, die gelijk gebroken zijn.
Alexander
abl
Member
Member
Posts: 244
Joined: Tue Aug 04, 2009 9:58 pm
Location: Belgium

Re: Neerslag monitor script

Post by abl »

Heb ik gedaan, er worden geen nieuwe devices gecreeerd, maar Homeseer geeft ook geen foutmelding...
Ik heb ook geprobeerd een andere reeks devices aan te maken (N.) die nog niet in gebruik is geweest; dit hoef ik toch alleen in de parameters aan te geven van het script, nietwaar?
Esteban
Forum Moderator
Forum Moderator
Posts: 677
Joined: Sun Jan 13, 2008 6:39 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Esteban »

Thanks voor het uitbrengen van een upgrade. Ik heb het even getest en tot dusver werkt het allemaal zoals vanouds. Ook het automatisch genereren van de device werkt naar behoren.

Er komt een ontzettende grote bui aan dus dan kunnen we meteen even testen of het overeenkomt. :wink:
abl
Member
Member
Posts: 244
Joined: Tue Aug 04, 2009 9:58 pm
Location: Belgium

Re: Neerslag monitor script

Post by abl »

Ik heb net gekeken naar een van de devices die was gekoppeld aan de virtuele devices en daar zie ik nog netjes alle 24 virtuele regen devices (niet neerslag maar regen?!)...
abl
Member
Member
Posts: 244
Joined: Tue Aug 04, 2009 9:58 pm
Location: Belgium

Re: Neerslag monitor script

Post by abl »

Het werkt! Heb nogmaals het event nagelopen en om de een of andere duistere reden was opeens de inhoud van het script bijna leeg (weet zeker dat ik dit al meerdere malen heb gechecked). Hartstikke bedankt voor je hulp Alexander!!!
abl
Member
Member
Posts: 244
Joined: Tue Aug 04, 2009 9:58 pm
Location: Belgium

Re: Neerslag monitor script

Post by abl »

Dacht ik, de waardes blijven hier op 000 staan, terwijl gps buienradar wel waardes aangeeft...
Akatar
Senior Member
Senior Member
Posts: 1134
Joined: Thu Nov 22, 2007 12:25 am
Location: the netherlands

Re: Neerslag monitor script

Post by Akatar »

hier de melding "geen neerslag"
terwijl het hier al een tijdje hoost
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 »

Capture_02 2012.01.04 20.13.04.jpg
Capture_02 2012.01.04 20.13.04.jpg (35.29 KiB) Viewed 19044 times
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

daar was ik dus al bang voor he... ik heb met een sniffer de return packet bekeken en die waren toch echt allemaal 000.
@robert: kun je mij je long en lat geven, zodat ik zeker weet dat ik niet met 000'en te maken krijg?
Alexander
Esteban
Forum Moderator
Forum Moderator
Posts: 677
Joined: Sun Jan 13, 2008 6:39 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Esteban »

Hier is het inmiddels ook aan het regenen en de teller in HS staat ook nog op nul.
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Neerslag monitor script

Post by Alexander »

mmm het ziet er naar uit dat als ik de gps url opvraag en ik verwissel de waarde voor long en lat dat het wel werkt. Kunnen jullie mij melden of jullie de coordinaten in de parameters hebben meegegeven of uit HS config zelf komt, en graag (per pm wellicht) melden wat de waarden zijn?
Alexander
Akatar
Senior Member
Senior Member
Posts: 1134
Joined: Thu Nov 22, 2007 12:25 am
Location: the netherlands

Re: Neerslag monitor script

Post by Akatar »

heb beide geprobeerd. parameters meegeven en via hs, beide zelfde resultaat: geen neerslag
Post Reply

Return to “Homeseer Scripts Forum”