Page 12 of 13

Re: Regen monitor script

Posted: Sat Dec 11, 2010 3:22 am
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.

Re: Regen monitor script

Posted: Sat Dec 11, 2010 12:27 pm
by AshaiRey
Bedankt voor deze link.
Die is goud waard!

Re: Regen monitor script

Posted: Sat Dec 11, 2010 4:23 pm
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 11599 times

Re: Regen monitor script

Posted: Sat Dec 11, 2010 4:50 pm
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.

Re: Regen monitor script

Posted: Sat Dec 11, 2010 8:39 pm
by Alexander
Robert, heb je ook de formule toegepast of simpelweg de waarde gedivide door 100?

Re: Regen monitor script

Posted: Sat Dec 11, 2010 9:39 pm
by Digit
Die formule, die van 10 tot de macht x-y gedeeld door 2 tot de macht 5?
Ja hoor.

Re: Regen monitor script

Posted: Sat Dec 11, 2010 9:54 pm
by Alexander
huh... volgens mij neem je mij nu in de maling.

Re: Regen monitor script

Posted: Sat Dec 11, 2010 10:25 pm
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 :)

Re: Regen monitor script

Posted: Sat Dec 11, 2010 10:32 pm
by Alexander
Nee, oke... Ik denk waar haal die je macht 5 vandaan, terwijl ik dat niet in de formule zag ;-)

Re: Regen monitor script

Posted: Sun Dec 12, 2010 1:01 am
by Digit
Weer wat geleerd :)
Sorry voor de kaping, maar misschien heb je nog wat aan de code ...

Re: Regen monitor script

Posted: Mon Mar 14, 2011 7:29 pm
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?

Re: Regen monitor script

Posted: Tue Mar 15, 2011 10:39 am
by Alexander
Welke versie van Homeseer?

Re: Regen monitor script

Posted: Tue Mar 15, 2011 10:16 pm
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

Re: Regen monitor script

Posted: Wed Mar 16, 2011 1:09 am
by RayAmsterdam
Alexander wrote:Welke versie van Homeseer?
2.3.0.19

Re: Regen monitor script

Posted: Wed Mar 16, 2011 12:38 pm
by Alexander
Dat wordt upgraden of aan peter vragen of hij het omgebouwde script nog heeft (http://domoticaforum.eu/viewtopic.php?f ... 150#p44554)