Regen monitor script

Forum over Homeseer scripts (DUTCH forum)

Moderators: TANE, Ruud

User avatar
Harry
Member
Member
Posts: 329
Joined: Mon Apr 10, 2006 1:43 am
Location: Drachten

Re: Regen monitor script

Post by Harry »

Ik krijg niet niet verbinding met de site
blijft in de log vermelden wedsite down.
nog iets waar ik op moet letten .
als ik de url invul in de webbrowser krijg ik de site wel te zien :(
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

heb je de parameters goed ingevuld?
Alexander
User avatar
Harry
Member
Member
Posts: 329
Joined: Mon Apr 10, 2006 1:43 am
Location: Drachten

Re: Regen monitor script

Post by Harry »

het probleem met website down, is opgelost.
was een foute instelling in de firewall.

echter nu krijg ik de volgende melding in de log

17-7-2010 23:39:01 Error Script compile error: De naam v7 is niet gedeclareerd.on line 30

lijkt dat ik nu wel een parameter fout heb.?

ik heb een virtual device aan gemaakt met code v7

en de parameters ingevult.

Sub Main(ByVal Params As String)
Dim strGeoAreaId As String = hs.StringItem(4057886, 1, ";")
Dim strDevice As String = hs.StringItem(v7, 2, ";")
Dim strData As String = hs.GetURL("www.weeronline.nl", "/Go/WeatherForecast/GetRainForecast?geoAreaId=" & strGeoAreaId, True, 80)

is dit zo goed :roll:
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 hoeft geen waardes in te vullen.. dat doe je via het aanroepen zoals:
script.png
script.png (5.93 KiB) Viewed 10030 times
// Erik (binkey.nl)
User avatar
Harry
Member
Member
Posts: 329
Joined: Mon Apr 10, 2006 1:43 am
Location: Drachten

Re: Regen monitor script

Post by Harry »

:P het werkt , ik had deze functie nog niet eerder zo gebruikt.

weer wat wijzer. bedankt
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 »

Krijg trouwens een vierkant blokje tussen de "Leiden" en de ":"

18-7-2010 12:36:39 - RegenMonitor - Leiden : geen buien vanaf 12:25

In deze post zit ie er ook in, maar die zie je volgens mij niet terug nu (het lijken meerdere spaties maar dat is het niet)

(is als het goed is alt-255 van de asci tabel)  
// Erik (binkey.nl)
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

Dan zou ik een replace moeten doen, geen probleem, maar dat zit dus ook in de website. Ach als de code omgezet wordt voor die andere pagina, heb je dat "probleem" niet meer.
Alexander
User avatar
Harry
Member
Member
Posts: 329
Joined: Mon Apr 10, 2006 1:43 am
Location: Drachten

Re: Regen monitor script

Post by Harry »

is er ook een icon voor te zetten ?
bv regenverwachting donderwolkje
geen regen zonnetje
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 »

normaliter doe je dat met "edit value-stats / graphics pairs" vul je b.v. in dat "on" en dan de naam van het plaatje. Weet niet of dat nu ook kan met deze status melding.
// 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 »

En daar komen de verzoekjes.
Voor je het weet heb je een heel weerstation script. :D

Wel leuk om te zien dat dit topic zo leeft onder de forum leden. :!:
Bram
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

Ja zo gaat dat. Voor je het weet.... maar geeft alleen voldoening. Beter dan iets dat je maakt wat niet gebruikt wordt.
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 »

Ik ben met de XML file bezig, maar op dit moment loop ik even vast met de XMLtextreader aangezien deze de XML wilt inlezen, maar niet volgens de standaard wordt aangeboden. De eerste regel is leeg in de XML file namelijk en daardoor kom ik even niet verder. Iemand met tips? Ik dacht in te lezen en de eerste regel weg te halen voor het aan XMLtextreader aan te bieden, maar dat kost even de nodige tijd.
Vele handjes maken licht werk .... :D


niet meer nodig
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 »

Zo weer een stap verder, maar schrik niet. Het script maakt voor iedere record in die pagina 2 events aan, tenzij de tijd daarin vermeld staat, in het verleden valt. Ik moet nog even een manier vinden om te achterhalen of er 0 mm/uur meldingen achter elkaar zijn, zodat daar geen events voor aangemaakt hoeft te worden, tenzij het eerste is na regen. Dat wordt even bedenken.
Script logt ook wat voor informatie verkregen is en het device zal nu ook een andere string meekrijgen.

Code: Select all

' RegenMonitor.vb script
' Author: Alexander
' Version: 2.0
' Last Update: 20-07-2010 21:20

' ChangeLog:
' 1.0: Initial
' 1.1: - Added the ability to stop the script if the website doesn't return a known text, if that is the case the device will get the status unknown.
'      - If the website would update the rain prediction to a lower time, the event that is already created will get the earlier condition.
'      - If the time of the rain prediction is suddenly earlier that the current time, the device will be set instantly and earlier created event is deleted.
'      - Parameters have to be added. Example ("Main","4057886;v7"). First is the geoAreaId and second is the device.
'      - First code optimization
'      - Code fault in handling if rain is predicted was not defined
' 2.0: - Complete script rewrite for other url
'      - 48 temporary events will be created if the time in the page is all in the future.

Sub Main(ByVal Params As String)
    Dim strGeoAreaId As String = hs.StringItem(Params, 1, ";")
    Dim strDevice As String = hs.StringItem(Params, 2, ";")
    Dim strData As String = hs.GetURL("www.weeronline.nl", "/Go/FlashCharts/RainImmediate?geoAreaId=" & strGeoAreaId, false, 80)

    If (Not InStr(strData, "?xml") > 0) Then
        hs.WriteLog("RegenMonitor", "Website weeronline.nl down")
        hs.SetDeviceStatus(strDevice, 17)
        hs.SetDeviceLastChange(strDevice, Now)
    Else
        Dim strDeviceString As String = strData.SubString(InStr(strData, "<label>")+6, InStr(strData, "</label>")-InStr(strData, "<label>")-1)
        hs.writelog("RegenMonitor", strDeviceString)
        hs.SetDeviceString(strDevice, strDeviceString)

        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 i,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)
            Else If 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 strOffDevice As String = strDevice & "_" & strDate(i) & strTime(i) & "_OFF"
            Dim strOnDevice As String = strDevice & "_" & strDate(i) & strTime(i) & "_ON"
            If hs.EventExists(strOffDevice & "-1") Then 
                hs.DeleteEvent(strOffDevice & "-1")
                hs.DeleteEvent(strOffDevice & "-2")
            End If
            If hs.EventExists(strOnDevice & "-1") Then 
                hs.DeleteEvent(strOnDevice & "-1")
                hs.DeleteEvent(strOnDevice & "-2")
            End If

            Dim lngValueCommand As Long = Math.Round((Left(strValue(i), InStr(strValue(i), " mm") - 1) * 100), 0)
            Dim strValueCommand As String = "&hs.SetDeviceValue(" & strDevice & ", " & lngValueCommand.toString() & ")"

            If (DateTime.Compare(strTime(i), FormatDateTime(Now, 4)) <= 0) Then
                If InStr(strValue(i), "0 mm/uur") > 0 Then
                    If Not hs.DeviceStatus(strDevice) = 3 Then hs.Transmit(strDevice, "off")
                    hs.SetDeviceValue(strDevice, 0)
                Else
                    If Not hs.DeviceStatus(strDevice) = 2 Then hs.Transmit(strDevice, "on")
                    hs.SetDeviceValue(strDevice, lngValueCommand.toString())
                End If
            Else
                If InStr(strValue(i), "0 mm/uur") > 0 Then
                    hs.NewTimeEvent(strOffDevice & "-1", strTime(i), "", 1, 1, 1, 1, 1, 1, 1, strDevice & ":off", 1, "", "")
                    hs.NewTimeEvent(strOffDevice & "-2", strTime(i), "", 1, 1, 1, 1, 1, 1, 1, "", 1, "&hs.SetDeviceValue(" & strDevice & ", 0)", "")
                    hs.EnableEvent(strOffDevice & "-1")
                    hs.EnableEvent(strOffDevice & "-2")
                Else
                    hs.NewTimeEvent(strOnDevice & "-1", strTime(i), "", 1, 1, 1, 1, 1, 1, 1, strDevice & ":on", 1, "", "")
                    hs.NewTimeEvent(strOnDevice & "-2", strTime(i), "", 1, 1, 1, 1, 1, 1, 1, "", 1, strValueCommand, "")
                    hs.EnableEvent(strOnDevice & "-1")
                    hs.EnableEvent(strOnDevice & "-2")
                End If
            End If
            hs.writelog("RegenMonitor", strDate(i) & " - " & strTime(i) & " - " & strValue(i))
        Next
    End If
End Sub
Alexander
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 »

Oef 48 events...!
Dat moet toch beter kunnen?
Kan je de boel niet wegschijven naar een (ini) bestand en later aan de hand van deze oude gegevens en de nieuw je conclusie trekken en dan pas een event triggeren?

Zomaar een gedachte. Heb het niet onderzocht of het mogelijk is hoor.
In dat xml bestand staan de tijden toch 5 min. na elkaar. De X-ste node in het xml bestand ligt dan X * 5 min in de toekomst. Zodra een node niet 0 is dan is er dus regen opkomst over X * 5min.
Zet dan een event met een vaste naam, zonder tijdsaanduiding erin. Mocht dit event gereset moeten worden dan kan je hem nog makkelijk vinden en verwijderen.
Bram
Alexander
Global Moderator
Global Moderator
Posts: 1532
Joined: Sat Mar 10, 2007 11:19 pm
Location: Netherlands

Re: Regen monitor script

Post by Alexander »

Het kan ook beter. Ik moet ook gewoon de array langslopen of wellicht naar de informatie die de xml geeft over tot wanneer er geen regen is. Deze week (vanavond hopelijk) weer een update.

Ik zie overigens alleen maar voordelen in temporary events laten generenen, omdat je daarmee onafhankelijk maakt van het script. Als bijv homeseer crasht en weer start, dan kan het event gewoon direct worden uitgevoerd aangezien dat een functie binnen homeseer is. Ik wil het triggeren van en ontvangen van gegevens gescheiden houden.
Alexander
Locked

Return to “Homeseer Scripts Forum”