Regen monitor script

Forum over Homeseer scripts (DUTCH forum)

Moderators: TANE, Ruud

User avatar
Snelvuur
Forum Moderator
Forum Moderator
Posts: 3156
Joined: Fri Apr 06, 2007 11:01 pm
Location: Netherlands
Contact:

Re: Regen monitor script

Post by Snelvuur »

Je kan die waardes volgens mij zo uit homeseer halen, aangezien je die ook invult voor je tijdzone ofzoiets. Scheelt weer "instellen" tenzij je natuurlijk graag wil weten of het gaat regenen ergens anders in het land.
// Erik (binkey.nl)
AshaiRey
Senior Member
Senior Member
Posts: 1310
Joined: Mon Feb 02, 2009 5:27 pm
Location: Netherlands
Contact:

Re: Regen monitor script

Post by AshaiRey »

Bedankt voor deze link.
Die is goud waard!
Bram
Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Re: Regen monitor script

Post by Digit »

Dat was een goeie tip! :)
Meteen maar mee aan de gang gegaan; 20 regels code en alweer wat handigs erbij op de touchscreen:
Capture11-12-2010-15.17.57.png
Capture11-12-2010-15.17.57.png (8.57 KiB) Viewed 10681 times
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

Ik zie nu pas dat de url van buienradar is. Dat betekent wel een andere input die ik verkrijg. Ik moet even de implicaties bekijken.
Alexander
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

Robert, heb je ook de formule toegepast of simpelweg de waarde gedivide door 100?
Alexander
Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Re: Regen monitor script

Post by Digit »

Die formule, die van 10 tot de macht x-y gedeeld door 2 tot de macht 5?
Ja hoor.
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

huh... volgens mij neem je mij nu in de maling.
Alexander
Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Re: Regen monitor script

Post by Digit »

Nee hoor; je kent me dus nog niet zo goed als je denkt :)
Zie http://gratisweerdata.buienradar.nl/:
Op basis van lat lon coördinaten kunt u de neerslag twee uur vooruit ophalen in tekst vorm. 0 is droog, 255 is zware regen.
mm/per uur = 10^((waarde -109)/32)
Dus 77 = 0.1 mm/uur
De code die ik gebruik:

Code: Select all

Public Sub GetNeerslag()

        Dim NeerslagSource As String = GetURL("http://gps.buienradar.nl/getrr.php?lat=" & GPSLat.ToString & "&lon=" & GPSLong.ToString)
        Dim NeerslagLines() As String
        NeerslagLines = NeerslagSource.Split(Chr(13) & Chr(10))
        Dim NeerslagLine As String
        Dim ValueTime() As String
        Dim XValues(NeerslagLines.Count) As String
        Dim YValues(NeerslagLines.Count) As Double
        Dim YVal, mmpu As Double
        Chart1.Series("Series1").Points.Clear()
        For i = 0 To NeerslagLines.Count - 1
            NeerslagLine = NeerslagLines(i)
            If NeerslagLine.Trim <> "" Then
                ValueTime = NeerslagLine.Split(Chr(124))
                XValues(i) = ValueTime(1)
                YVal = IIf(i = 12, 77, CDbl(ValueTime(0))) ''testing 123
                mmpu = Math.Round(Math.Pow(10, (YVal - 109) / 32), 1)
                YValues(i) = mmpu
            End If
        Next
        Chart1.Series("Series1").Points.DataBindXY(XValues, YValues)
    End Sub
Die GPSLat en GPSLong zijn constanten die zijn elders zijn gedefinieerd.
Nu weet je ook meteen waar dat piekje in het grafiekje vandaan kwam :)
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

Nee, oke... Ik denk waar haal die je macht 5 vandaan, terwijl ik dat niet in de formule zag ;-)
Alexander
Digit
Global Moderator
Global Moderator
Posts: 3388
Joined: Sat Mar 25, 2006 10:23 am
Location: Netherlands
Contact:

Re: Regen monitor script

Post by Digit »

Weer wat geleerd :)
Sorry voor de kaping, maar misschien heb je nog wat aan de code ...
RayAmsterdam
Starting Member
Starting Member
Posts: 4
Joined: Sun Mar 13, 2011 8:57 pm

Re: Regen monitor script

Post by RayAmsterdam »

Gisteren ook dit interessante script geïnstalleerd, ivm een aangeschafd zonnescherm. Ik krijg ook een foutmelding. Hier wat in het Event Log staat:

Code: Select all

14-3-2011 18:23:08  - Info - Event Trigger "Regenmonitor"
14-3-2011 18:23:08  - Info - Running script in background: regenmonitor.vb("Main","4058223;v1")
14-3-2011 18:23:08  - Error - Script compile error: Het argument is niet opgegeven voor de parameter data2 van Public Function Transmit(code As String, cmd As String, dimval As Integer, data2 As Integer, wait As Boolean, [raw As Boolean = False], [update As Boolean = True], [out_interface As Integer = 0]) As Integer.on line 133
14-3-2011 18:23:08  - SCR - Option Strict Offimports Schedulerimports SystemPublic Module scriptcode285#Region "Automatically generated code, do not modify"'Automatically generated code, do not modify'Event Sources Begin	<System.ContextStaticAttribute()> Public WithEvents hs As Scheduler.hsapplication	<System.ContextStaticAttribute()> Public WithEvents hsp As scheduler.hsp	<System.ContextStaticAttribute()> Public WithEvents hssystem As scheduler.phone0'Event Sources End'End of automatically generated code#End Region' RegenMonitor.vb script' Auteur: Alexander' Versie: 2.51' Laatst gewijzigd: 26-07-2010 19:30' Change Log:' 1.0: Start' 1.11:  - Functionaliteit: Script stopt zodra de webpagina een niet verwachte tekst terug geeft. Zodra dat gebeurd zal het device een status "unknown" krijgen.'        - Functionaliteit: Als de webpagina zijn regenverwachting bijstelt, zal het event dat al aangemaakt is van de bijgestelde tijd worden voorzien.'        - Functionaliteit: Als de regenverwachting in de webpagina eerder is dan de huidige tijd, wordt het device direct geschakeld en het eerder aangemaakte event verwijderd.'        - Functionaliteit: Twee parameters moeten worden toegevoegd. De eerste is de gevraagde locatie voor weersverwachting en de tweede het device dat geschakeld moet worden.'        - Bugfix: Als er regen was verwacht werd dit niet goed afgehandeld.' 2.0:   - Functionaliteit: Andere url wordt nu gebruikt voor de weersverwachting.' 2.1:   - Functionaliteit: De Status string van het device wordt nu ingevuld.' 2.2:   - Functionaliteit: Multi Device wordt nu ondersteunt: Er worden 24 devices aangemaakt met een weersverwachting intervalverschil van 5 minuten.' 2.31:  - Functionaliteit: Images van Rien worden niet in de Status String toegevoegd'        - Functionaliteit: Device Location en Device Type worden nu ingevuld bij het aanmaken van device(s), bij afwezigheid, door het script'        - Bugfix: Dubbele quotes waren niet meegenomen in het uitvoeren van de HS commando om de Device String bij te werken' 2.41:  - Functionaliteit: De Last Update van het device wordt nu altijd bijgewerkt ongeacht de waarde van het device'        - Bugfix: Bij gebruik van Multi Device werd alleen het eerste Device geupdate met het ON/OFF commando' 2.51:  - Bugfix: Bij de parameter voor het device werd de derde karakter, indien aanwezig, genegeerd.'        - Comment: Kommentaar toegevoegd en change log vertaalt naar het Nederlands.'        - Functionaliteit: Extra checks toegevoegdSub 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 Regen Monitoring" ' Sla deze waarde op in de variabele strDeviceType    Dim strGeoAreaId 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 strData As String = hs.GetURL("www.weeronline.nl", "/Go/FlashCharts/RainImmediate?geoAreaId=" & strGeoAreaId, false, 80) ' Haal de tekst van de webpagina op en deze in de variabele strData opslaan    Dim i As Integer    If not ((Val(strDeviceCode)>=1) And (Val(strDeviceCode)<=128)) Then        hs.WriteLog("RegenMonitor", "Ongeldige DeviceCode! Uitvoeren script gestopt...")        Exit Sub    End If    If not (strHouseCode <> "") Then        hs.WriteLog("RegenMonitor", "Ongeldige HouseCode! Uitvoeren script gestopt...")        Exit Sub    End If    If (Not InStr(strData, "?xml") > 0) Then        hs.SetDeviceString(strDevice, "Website weeronline.nl down", True)        hs.SetDeviceStatus(strDevice, 17)        Exit Sub    End If    If blMultiDevice Then        For i = 0 To 23           If hs.DeviceExistsRef(strHouseCode & Val(strDeviceCode)+i) = -1 Then              Dim dv As Object              dv = hs.GetDeviceByRef(hs.NewDeviceRef("Regen" & "-" & 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("Regen"))           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 strDate(24) As String    Dim strTime(24) As String    Dim strValue(24) As String    strArr = strdata.split(chr(13))    Dim j As Integer    For i = 12 To strArr.Length - 1        If InStr(strArr(i), "<date>") > 0 Then            Dim a As Integer = InStr(strArr(i), "<date>")            Dim b As Integer = InStr(strArr(i), "</date>")            Dim c As Integer = InStr(strArr(i), "<date>")            Dim strTmp = strArr(i).SubString(a + 5, b - c - 6)            strDate(j) = Left(strTmp, InStr(strTmp, "T") - 1)            strTime(j) = Mid(strTmp, InStr(strTmp, "T") + 1)        ElseIf InStr(strArr(i), "<item") > 0 Then            Dim a As Integer = InStr(strArr(i), "value=")            Dim b As Integer = InStr(strArr(i), " />")            Dim c As Integer = InStr(strArr(i), "value=")            strValue(j) = strArr(i).SubString(a + 6, b - c - 8)            j += 1        End If    Next    For i = 0 To j - 1        Dim strEvent As String = strDate(i) & "_" & strTime(i)        If hs.EventExists(strEvent) Then hs.DeleteEvent(strEvent)        Dim lngValueCommand As Long = Math.Round((Left(strValue(i), InStr(strValue(i), " mm") - 1) * 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), "0 mm/uur") > 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)                        hs.writelog("RegenMonitor", "1-" & i.toString() & " - " & strTime(i) & " - device: " & strHouseCode & Val(strDeviceCode) + i & " - value: 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)                    hs.writelog("RegenMonitor", "2-" & i.toString() & " - " & strTime(i) & "- device: " & strDevice & " - value: 0")                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)                    hs.writelog("RegenMonitor", "3-" & i.toString() & " - " & strTime(i) & "- device: " & strHouseCode & Val(strDeviceCode) + i & " - value: " & lngValueCommand.toString())                Else                    If Not hs.DeviceStatus(strDevice) = 2 Then hs.Transmit(strDevice, "on")                    hs.SetDeviceValue(strDevice, lngValueCommand.toString())                    hs.SetDeviceString(strDevice, WeerType(lngValueCommand, blRainInText), True)                    hs.writelog("RegenMonitor", "4-" & i.toString() & " - " & strTime(i) & "- device: " & strDevice & " - value: " & lngValueCommand.toString())                End If            End If        ElseIf Not blMultiDevice Then            If (InStr(strValue(i), "0 mm/uur") > 0) and (i>0) Then                If Not (InStr(strValue(i - 1), "0 mm/uur") > 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), "0 mm/uur") > 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), "0 mm/uur") > 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)                hs.writelog("RegenMonitor", "5-" & i.toString() & " - " & strTime(i) & "- device: " & strHouseCode & Val(strDeviceCode) + i & " - value: 0")            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)                hs.writelog("RegenMonitor", "6-" & i.toString() & " - " & strTime(i) & "- device: " & strHouseCode & Val(strDeviceCode) + i & " - value: " & lngValueCommand.toString())            End If        End If        'hs.writelog("RegenMonitor", strDate(i) & " - " & strTime(i) & " - " & strValue(i))    NextEnd SubFunction 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/RegenMonitor/no_rain.png'> Geen regen"           Case 2 To 100               Return "<img align='absmiddle' src='images/RegenMonitor/light_rain.png'> Lichte regen"           Case 101 To 500               Return "<img align='absmiddle' src='images/RegenMonitor/medium_rain.png'> Matige regen"           Case 501 To 2500               Return "<img align='absmiddle' src='images/RegenMonitor/heavy_rain.png'> Zware regen"           Case Is > 2500               Return "<img align='absmiddle' src='images/RegenMonitor/heavy_rain.png'> Wolkbreuk"       End Select    Else       Dim strTmp As String       Select Case Value            Case 0 To 1               strTmp = "<img align='absmiddle' src='images/RegenMonitor/no_rain.png'>"           Case 2 To 100               strTmp = "<img align='absmiddle' src='images/RegenMonitor/light_rain.png'>"           Case 101 To 500               strTmp = "<img align='absmiddle' src='images/RegenMonitor/medium_rain.png'>"           Case 501 To 2500               strTmp = "<img align='absmiddle' src='images/RegenMonitor/heavy_rain.png'>"           Case Is > 2500               strTmp = "<img src='images/RegenMonitor/heavy_rain.png'>"       End Select       Return strTmp & " " & Math.Round(Value/100, 2).toString() & " mm/uur"    End IfEnd FunctionEnd Module
14-3-2011 18:23:38  - Database Item - Saving Device  Regenmonitor
Iemand enig idee?
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

Welke versie van Homeseer?
Alexander
petermdevries
Member
Member
Posts: 98
Joined: Thu Nov 27, 2008 10:43 am
Location: Netherlands

Re: Regen monitor script

Post by petermdevries »

Ik had dit probleem eerst ook en intussen ben ik er wel achter waarom het bij mij niet werkte. Om de een of andere reden was bij een van de upgrades een dll blijven staan van versie 2.3. Dus ik dacht dat ik op versie 2.4 zat, maar dit was dus maar deels zo.

Blijkbaar is de Transmit functie tussen versie 2.3 en 2.4 iets aangepast.
Heb dit nu gecorrigeerd en draai het originele onaangepaste script zonder problemen op 2.5.0.1
RayAmsterdam
Starting Member
Starting Member
Posts: 4
Joined: Sun Mar 13, 2011 8:57 pm

Re: Regen monitor script

Post by RayAmsterdam »

Alexander wrote:Welke versie van Homeseer?
2.3.0.19
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

Dat wordt upgraden of aan peter vragen of hij het omgebouwde script nog heeft (http://domoticaforum.eu/viewtopic.php?f ... 150#p44554)
Alexander
Locked

Return to “Homeseer Scripts Forum”