Afvalwijzer script

Forum over Homeseer scripts (DUTCH forum)

Moderators: TANE, Ruud

Re: afvalwijzer script

Postby bartbakels » Thu Aug 13, 2015 10:50 am

Jammer, dat mijn adres niet supported is :(
Software: HS3, HStouch, Plugwise , BLBackup, BLLatestImage, Zwave, JowiHUE, PHlocation, Netcam, Harmony Plugin, ThinkingCleaner, HSPhone, Eneco Toon Script, Pushover, Visonic Powermax LV Interface

(ON ESXI )on NUC
bartbakels
Advanced Member
Advanced Member
 
Posts: 515
Joined: May 2011

Re: afvalwijzer script

Postby raymonvdm » Thu Aug 13, 2015 10:52 am

bartbakels wrote:Jammer, dat mijn adres niet supported is :(


Ik vermoed dat je gemeente de data niet heeft aan geleverd bij afvalwijzer, wellicht kunnen ze dat als nog doen?
Running HS3PRO on PC with Z-Wave / OpenTherm / Plugwise / RFXcom / MQTT / XAP400 / Logitech Media Server and Squeezelite on PI`s
raymonvdm
Senior Member
Senior Member
 
Posts: 1153
Joined: December 2011

Re: afvalwijzer script

Postby JoopK » Fri Aug 14, 2015 1:46 am

stefxx wrote:Hier de output, beetje leesbaar: http://codebeautify.org/jsonviewer/c0531e

En als je de iconen zoekt: http://codebeautify.org/jsonviewer/1f58e2


Met welk commando krijg je de iconen terug?
JoopK
Member
Member
 
Posts: 58
Joined: May 2013

Re: afvalwijzer script

Postby JoopK » Fri Aug 14, 2015 2:07 am

Working for me in HS2: (added status only V17)
Code: Select all
Public Sub Main()
Dim Postcode, Huisnummer, Toevoeging
Dim objHttp, Text, i, Ophaaldagen
Dim Datum, d

' Vul hier je eigen gegevens in
Postcode = "2622pb"
Huisnummer = "83"
Toevoeging = ""

' Ander test adres
'Postcode = "8266bh"
'Huisnummer = "1"
'Toevoeging = ""

Set objHttp = CreateObject("Msxml2.ServerXMLHTTP")
objHttp.Open "GET", "http://json.mijnafvalwijzer.nl/?method=postcodecheck&postcode=" & Postcode & "&street=&huisnummer=" & Huisnummer & "&toevoeging=" & Toevoeging & _
    "&platform=phone&langs=nl&mobiletype=android&platform=phone&version=33%20HTTP/1.1", False
objHttp.Send
Text = objHttp.ResponseText
Set objHttp = Nothing

If Len(Text) > 10 Then

    Set oJSON = New aspJSON
    oJSON.loadJSON(Text)

    'Get single value
    hs.writelog "afval", "Response: " & oJSON.data("response")
    hs.writelog "afval", "Gemeente: " & oJSON.data("data")("gemeente")
    Datum = Year(now()) & "-" & Right("0" & Month(Now()),2) & "-" & Right("0" & Day(Now()),2)
    hs.writelog "afval", "Datum: " & chr(13) & Datum
    Ophaaldagen = ""
    For Each i In oJSON.data("data")("ophaaldagen")("data")
        Set this = oJSON.data("data")("ophaaldagen")("data").item(i)
        Ophaaldagen = Ophaaldagen & this.item("type") & ": " & this.item("date") & this.item("type") & ": " & this.item("date") & chr(13)
        d = this.item("date")
        hs.writelog "afval", "d: " & chr(13) & d
        If d >= Datum Then
          Hs.setdevicestring "V17", this.item("type") & ": " & this.item("date")
          Exit For
        End If
    Next
    hs.writelog "afval", "Ophaaldagen: " & chr(13) & Ophaaldagen

Else   

    hs.writelog "afval", "No data received. Location probably not supported by mijnafvalwijzer.nl."
   
End If

End Sub

'Februari 2014 - Version 1.17 by Gerrit van Kuipers
Class aspJSON
   Public data
   Private p_JSONstring
   private aj_in_string, aj_in_escape, aj_i_tmp, aj_char_tmp, aj_s_tmp, aj_line_tmp, aj_line, aj_lines, aj_currentlevel, aj_currentkey, aj_currentvalue, aj_newlabel, aj_XmlHttp, aj_RegExp, aj_colonfound

   Private Sub Class_Initialize()
      Set data = Collection()

       Set aj_RegExp = new regexp
       aj_RegExp.Pattern = "\s{0,}(\S{1}[\s,\S]*\S{1})\s{0,}"
       aj_RegExp.Global = False
       aj_RegExp.IgnoreCase = True
       aj_RegExp.Multiline = True
   End Sub

   Private Sub Class_Terminate()
      Set data = Nothing
       Set aj_RegExp = Nothing
   End Sub

   Public Sub loadJSON(inputsource)
      inputsource = aj_MultilineTrim(inputsource)
      If Len(inputsource) = 0 Then Err.Raise 1, "loadJSON Error", "No data to load."
     
      select case Left(inputsource, 1)
         case "{", "["
         case else
            Set aj_XmlHttp = CreateObject("Msxml2.ServerXMLHTTP")
            aj_XmlHttp.open "GET", inputsource, False
            aj_XmlHttp.setRequestHeader "Content-Type", "text/json"
            aj_XmlHttp.setRequestHeader "CharSet", "UTF-8"
            aj_XmlHttp.Send
            inputsource = aj_XmlHttp.responseText
            set aj_XmlHttp = Nothing
      end select

      p_JSONstring = CleanUpJSONstring(inputsource)
      aj_lines = Split(p_JSONstring, Chr(13) & Chr(10))

      Dim level(99)
      aj_currentlevel = 1
      Set level(aj_currentlevel) = data
      For Each aj_line In aj_lines
         aj_currentkey = ""
         aj_currentvalue = ""
         If Instr(aj_line, ":") > 0 Then
            aj_in_string = False
            aj_in_escape = False
            aj_colonfound = False
            For aj_i_tmp = 1 To Len(aj_line)
               If aj_in_escape Then
                  aj_in_escape = False
               Else
                  Select Case Mid(aj_line, aj_i_tmp, 1)
                     Case """"
                        aj_in_string = Not aj_in_string
                     Case ":"
                        If Not aj_in_escape And Not aj_in_string Then
                           aj_currentkey = Left(aj_line, aj_i_tmp - 1)
                           aj_currentvalue = Mid(aj_line, aj_i_tmp + 1)
                           aj_colonfound = True
                           Exit For
                        End If
                     Case "\"
                        aj_in_escape = True
                  End Select
               End If
            Next
            if aj_colonfound then
               aj_currentkey = aj_Strip(aj_JSONDecode(aj_currentkey), """")
               If Not level(aj_currentlevel).exists(aj_currentkey) Then level(aj_currentlevel).Add aj_currentkey, ""
            end if
         End If
         If right(aj_line,1) = "{" Or right(aj_line,1) = "[" Then
            If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
            Set level(aj_currentlevel).Item(aj_currentkey) = Collection()
            Set level(aj_currentlevel + 1) = level(aj_currentlevel).Item(aj_currentkey)
            aj_currentlevel = aj_currentlevel + 1
            aj_currentkey = ""
         ElseIf right(aj_line,1) = "}" Or right(aj_line,1) = "]" or right(aj_line,2) = "}," Or right(aj_line,2) = "]," Then
            aj_currentlevel = aj_currentlevel - 1
         ElseIf Len(Trim(aj_line)) > 0 Then
            if Len(aj_currentvalue) = 0 Then aj_currentvalue = aj_line
            aj_currentvalue = getJSONValue(aj_currentvalue)

            If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
            level(aj_currentlevel).Item(aj_currentkey) = aj_currentvalue
         End If
      Next
   End Sub

   Public Function Collection()
      set Collection = CreateObject("Scripting.Dictionary")
   End Function

   Public Function AddToCollection(dictobj)
      if TypeName(dictobj) <> "Dictionary" then Err.Raise 1, "AddToCollection Error", "Not a collection."
      aj_newlabel = dictobj.Count
      dictobj.Add aj_newlabel, Collection()
      set AddToCollection = dictobj.item(aj_newlabel)
   end function

   Private Function CleanUpJSONstring(aj_originalstring)
      aj_originalstring = Replace(aj_originalstring, Chr(13) & Chr(10), "")
      aj_originalstring = Mid(aj_originalstring, 2, Len(aj_originalstring) - 2)
      aj_in_string = False : aj_in_escape = False : aj_s_tmp = ""
      For aj_i_tmp = 1 To Len(aj_originalstring)
         aj_char_tmp = Mid(aj_originalstring, aj_i_tmp, 1)
         If aj_in_escape Then
            aj_in_escape = False
            aj_s_tmp = aj_s_tmp & aj_char_tmp
         Else
            Select Case aj_char_tmp
               Case "\" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_escape = True
               Case """" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_string = Not aj_in_string
               Case "{", "["
                  aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))
               Case "}", "]"
                  aj_s_tmp = aj_s_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10)) & aj_char_tmp
               Case "," : aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))
               Case Else : aj_s_tmp = aj_s_tmp & aj_char_tmp
            End Select
         End If
      Next

      CleanUpJSONstring = ""
      aj_s_tmp = split(aj_s_tmp, Chr(13) & Chr(10))
      For Each aj_line_tmp In aj_s_tmp
         aj_line_tmp = replace(replace(aj_line_tmp, chr(10), ""), chr(13), "")
         CleanUpJSONstring = CleanUpJSONstring & aj_Trim(aj_line_tmp) & Chr(13) & Chr(10)
      Next
   End Function

   Private Function getJSONValue(ByVal val)
      val = Trim(val)
      If Left(val,1) = ":"  Then val = Mid(val, 2)
      If Right(val,1) = "," Then val = Left(val, Len(val) - 1)
      val = Trim(val)

      Select Case val
         Case "true"  : getJSONValue = True
         Case "false" : getJSONValue = False
         Case "null" : getJSONValue = Null
         Case Else
            If (Instr(val, """") = 0) Then
               If IsNumeric(val) Then
                  getJSONValue = CDbl(val)
               Else
                  getJSONValue = val
               End If
            Else
               If Left(val,1) = """" Then val = Mid(val, 2)
               If Right(val,1) = """" Then val = Left(val, Len(val) - 1)
               getJSONValue = aj_JSONDecode(Trim(val))
            End If
      End Select
   End Function

   Private JSONoutput_level
   Public Function JSONoutput()
      dim wrap_dicttype, aj_label
      JSONoutput_level = 1
      wrap_dicttype = "[]"
      For Each aj_label In data
          If Not aj_IsInt(aj_label) Then wrap_dicttype = "{}"
      Next
      JSONoutput = Left(wrap_dicttype, 1) & Chr(13) & Chr(10) & GetDict(data) & Right(wrap_dicttype, 1)
   End Function

   Private Function GetDict(objDict)
      dim aj_item, aj_keyvals, aj_label, aj_dicttype
      For Each aj_item In objDict
         Select Case TypeName(objDict.Item(aj_item))
            Case "Dictionary"
               GetDict = GetDict & Space(JSONoutput_level * 4)
               
               aj_dicttype = "[]"
               For Each aj_label In objDict.Item(aj_item).Keys
                   If Not aj_IsInt(aj_label) Then aj_dicttype = "{}"
               Next
               If aj_IsInt(aj_item) Then
                  GetDict = GetDict & (Left(aj_dicttype,1) & Chr(13) & Chr(10))
               Else
                  GetDict = GetDict & ("""" & aj_JSONEncode(aj_item) & """" & ": " & Left(aj_dicttype,1) & Chr(13) & Chr(10))
               End If
               JSONoutput_level = JSONoutput_level + 1
               
               aj_keyvals = objDict.Keys
               GetDict = GetDict & (GetSubDict(objDict.Item(aj_item)) & Space(JSONoutput_level * 4) & Right(aj_dicttype,1) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))
            Case Else
               aj_keyvals =  objDict.Keys
               GetDict = GetDict & (Space(JSONoutput_level * 4) & aj_InlineIf(aj_IsInt(aj_item), "", """" & aj_JSONEncode(aj_item) & """: ") & WriteValue(objDict.Item(aj_item)) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))
         End Select
      Next
   End Function

   Private Function aj_IsInt(val)
      aj_IsInt = (TypeName(val) = "Integer" Or TypeName(val) = "Long")
   End Function

   Private Function GetSubDict(objSubDict)
      GetSubDict = GetDict(objSubDict)
      JSONoutput_level= JSONoutput_level -1
   End Function

   Private Function WriteValue(ByVal val)
      Select Case TypeName(val)
         Case "Double", "Integer", "Long": WriteValue = val
         Case "Null"                  : WriteValue = "null"
         Case "Boolean"               : WriteValue = aj_InlineIf(val, "true", "false")
         Case Else                  : WriteValue = """" & aj_JSONEncode(val) & """"
      End Select
   End Function

   Private Function aj_JSONEncode(ByVal val)
      val = Replace(val, "\", "\\")
      val = Replace(val, """", "\""")
      'val = Replace(val, "/", "\/")
      val = Replace(val, Chr(8), "\b")
      val = Replace(val, Chr(12), "\f")
      val = Replace(val, Chr(10), "\n")
      val = Replace(val, Chr(13), "\r")
      val = Replace(val, Chr(9), "\t")
      aj_JSONEncode = Trim(val)
   End Function

   Private Function aj_JSONDecode(ByVal val)
      val = Replace(val, "\""", """")
      val = Replace(val, "\\", "\")
      val = Replace(val, "\/", "/")
      val = Replace(val, "\b", Chr(8))
      val = Replace(val, "\f", Chr(12))
      val = Replace(val, "\n", Chr(10))
      val = Replace(val, "\r", Chr(13))
      val = Replace(val, "\t", Chr(9))
      aj_JSONDecode = Trim(val)
   End Function

   Private Function aj_InlineIf(condition, returntrue, returnfalse)
      If condition Then aj_InlineIf = returntrue Else aj_InlineIf = returnfalse
   End Function

   Private Function aj_Strip(ByVal val, stripper)
      If Left(val, 1) = stripper Then val = Mid(val, 2)
      If Right(val, 1) = stripper Then val = Left(val, Len(val) - 1)
      aj_Strip = val
   End Function

   Private Function aj_MultilineTrim(TextData)
      aj_MultilineTrim = aj_RegExp.Replace(TextData, "$1")
   End Function

   private function aj_Trim(val)
      aj_Trim = Trim(val)
      Do While Left(aj_Trim, 1) = Chr(9) : aj_Trim = Mid(aj_Trim, 2) : Loop
      Do While Right(aj_Trim, 1) = Chr(9) : aj_Trim = Left(aj_Trim, Len(aj_Trim) - 1) : Loop
      aj_Trim = Trim(aj_Trim)
   end function
End Class

Now only add a nice icon...
JoopK
Member
Member
 
Posts: 58
Joined: May 2013

Re: afvalwijzer script

Postby raymonvdm » Fri Aug 14, 2015 9:33 am

Could u also make it work in HS3 ?
Running HS3PRO on PC with Z-Wave / OpenTherm / Plugwise / RFXcom / MQTT / XAP400 / Logitech Media Server and Squeezelite on PI`s
raymonvdm
Senior Member
Senior Member
 
Posts: 1153
Joined: December 2011

Re: afvalwijzer script

Postby JoopK » Fri Aug 14, 2015 12:21 pm

Er zitten maar 2 HS specifieke statements in hs.setdevice value en hs.writelog. Als je even de HS3 syntax opzoekt bouw je het zo om.
JoopK
Member
Member
 
Posts: 58
Joined: May 2013

Re: afvalwijzer script

Postby raymonvdm » Thu Aug 20, 2015 12:44 pm

I have tried but HS3 is not accepting my script skills :D
Running HS3PRO on PC with Z-Wave / OpenTherm / Plugwise / RFXcom / MQTT / XAP400 / Logitech Media Server and Squeezelite on PI`s
raymonvdm
Senior Member
Senior Member
 
Posts: 1153
Joined: December 2011

Re: afvalwijzer script

Postby JoopK » Mon Aug 24, 2015 9:42 pm

I checked the HS3 syntax, and it look they remain unchanged, except that the created device should not be refered to as "V17", but by the reference number?
JoopK
Member
Member
 
Posts: 58
Joined: May 2013

Re: Afvalwijzer script

Postby Karell » Sun Aug 30, 2015 5:14 pm

Don't work here on hs3 , get a bunch of errors
Donaties altijd welkom https://goo.gl/Fii2mo
Karell
Member
Member
 
Posts: 142
Joined: August 2015

Re: Afvalwijzer script

Postby JoopK » Sun Sep 13, 2015 10:35 pm

Did you save the code as *.VBS?
JoopK
Member
Member
 
Posts: 58
Joined: May 2013

Re: Afvalwijzer script

Postby mrqnapper » Thu Sep 17, 2015 1:47 pm

Hi, I tried to use the script as well in my Hs3 system but receive this error:

Code: Select all
Running script, script run or compile error in file: C:/Program Files/HomeSeer HS3/scripts/afvalophaalscript.vbs5:Ongeldige procedureaanroep of ongeldig argument: 'hs.setdevicestring' in line 40 More info: Ongeldige procedureaanroep of ongeldig argument: 'hs.setdevicestring'


I have it saved as *.vbs and have used the reference number of the device.

Would be very help-full to get this working since we started recently with waste separation, which brings more days for collecting the different waste types.

Thanks W.
mrqnapper
Member
Member
 
Posts: 234
Joined: June 2011

Re: Afvalwijzer script

Postby raymonvdm » Thu Sep 17, 2015 2:19 pm

Maybe someone with HS3 scripting experience can take a look?
Running HS3PRO on PC with Z-Wave / OpenTherm / Plugwise / RFXcom / MQTT / XAP400 / Logitech Media Server and Squeezelite on PI`s
raymonvdm
Senior Member
Senior Member
 
Posts: 1153
Joined: December 2011

Re: Afvalwijzer script

Postby mrqnapper » Thu Sep 17, 2015 3:13 pm

Good Idea :)
mrqnapper
Member
Member
 
Posts: 234
Joined: June 2011

Re: Afvalwijzer script

Postby stefxx » Thu Sep 17, 2015 3:41 pm

Als iemand Almere zover krijgt dat die ook zijn data beschikbaar stelt via de afvalwijzer maak ik er wel iets moois van. Misschien wel een plugin :)

Tot die tijd... heb ik genoeg andere klusjes voor mezelf om eerst af te maken :oops:
User avatar
stefxx
Advanced Member
Advanced Member
 
Posts: 679
Joined: September 2008
Location: Netherlands

Re: Afvalwijzer script

Postby raymonvdm » Thu Sep 17, 2015 4:00 pm

stefxx wrote:Als iemand Almere zover krijgt dat die ook zijn data beschikbaar stelt via de afvalwijzer maak ik er wel iets moois van. Misschien wel een plugin :)

Tot die tijd... heb ik genoeg andere klusjes voor mezelf om eerst af te maken :oops:



Kunnen we je niet omkopen ?
Running HS3PRO on PC with Z-Wave / OpenTherm / Plugwise / RFXcom / MQTT / XAP400 / Logitech Media Server and Squeezelite on PI`s
raymonvdm
Senior Member
Senior Member
 
Posts: 1153
Joined: December 2011

PreviousNext

Return to Homeseer Scripts Forum

Who is online

Users browsing this forum: No registered users and 1 guest