Regen monitor script
- Snelvuur
- Forum Moderator
- Posts: 3156
- Joined: Fri Apr 06, 2007 11:01 pm
- Location: Netherlands
- Contact:
Re: Regen monitor script
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)
Re: Regen monitor script
Dat was een goeie tip!Snelvuur wrote: http://gps.buienradar.nl/getrr.php?lat=52&lon=4

Meteen maar mee aan de gang gegaan; 20 regels code en alweer wat handigs erbij op de touchscreen:
Re: Regen monitor script
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
Re: Regen monitor script
Robert, heb je ook de formule toegepast of simpelweg de waarde gedivide door 100?
Alexander
Re: Regen monitor script
Die formule, die van 10 tot de macht x-y gedeeld door 2 tot de macht 5?
Ja hoor.
Ja hoor.
Re: Regen monitor script
Nee hoor; je kent me dus nog niet zo goed als je denkt
Zie http://gratisweerdata.buienradar.nl/:
Die GPSLat en GPSLong zijn constanten die zijn elders zijn gedefinieerd.
Nu weet je ook meteen waar dat piekje in het grafiekje vandaan kwam

Zie http://gratisweerdata.buienradar.nl/:
De code die ik gebruik: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
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
Nu weet je ook meteen waar dat piekje in het grafiekje vandaan kwam

Re: Regen monitor script
Nee, oke... Ik denk waar haal die je macht 5 vandaan, terwijl ik dat niet in de formule zag 

Alexander
Re: Regen monitor script
Weer wat geleerd
Sorry voor de kaping, maar misschien heb je nog wat aan de code ...

Sorry voor de kaping, maar misschien heb je nog wat aan de code ...
-
- Starting Member
- Posts: 4
- Joined: Sun Mar 13, 2011 8:57 pm
Re: Regen monitor script
Gisteren ook dit interessante script geïnstalleerd, ivm een aangeschafd zonnescherm. Ik krijg ook een foutmelding. Hier wat in het Event Log staat:
Iemand enig idee?
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
-
- Member
- Posts: 98
- Joined: Thu Nov 27, 2008 10:43 am
- Location: Netherlands
Re: Regen monitor script
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
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
-
- Starting Member
- Posts: 4
- Joined: Sun Mar 13, 2011 8:57 pm
Re: Regen monitor script
2.3.0.19Alexander wrote:Welke versie van Homeseer?
Re: Regen monitor script
Dat wordt upgraden of aan peter vragen of hij het omgebouwde script nog heeft (http://domoticaforum.eu/viewtopic.php?f ... 150#p44554)
Alexander