torsdag 9 januari 2014

Eliq online - VB proj



Äntligen har API kommit!


Här är liten testproj med VB, för att testa funktionen.
VB 2010 har ingen inbyggt parser för JSON, men det går enkelt att hämta hem en med public license -> http://json.codeplex.com/

Lägg rätta dll:n (beror på .NET versionen) i närheten av projektmappen, sedan lägg till det som 'resource' till projektet.

För enkelhetens skull har alla grejer på projektet default-namn.
Huvudfönster:

  • Form (namn: Form1) och följande till Form1: 
  • 2x Label (namn: Label1 och Label2) 
  • StatusStrip + ToolStripStatusLabel (namn: StatusStrip1 och ToolStripStatusLabel1) 
  • Timer (namn: Timer1) Ställ timern på 30000ms

Och kod kommer här:



Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

Public Class Form1
    ' Här skriver du in API-keyn som du hittar på https://my.eliq.se/user/installningar/api - under: Manuell accesstoken.'
    Const EliqAPI = "XXXXXX000000000 osv..."

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        ' Ropa på ticker subrutin vid varje Timer1_Tick (30 sekunder är rekommendation från Eliq.)'
        updateticker()
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Aktivera timern och updatera "tickern" en gång från Eliq.'
        Timer1.Enabled = True
        updateticker()
    End Sub
    Private Sub updateticker()

        ' ---- Själva huvudrutinen att hämta och "hacka upp" resultat.'
        '      Den skulle kunna vara en funktion, men för enkelhets skull har vi den som subrutin. ----'

        'Ropa ELIQ API-servern och begär sträng i JSON-format. Exempel: {"createddate":"2014-01-09T16:56:05","power":1217.0}'
        Dim sourceString As String = New System.Net.WebClient() _
        .DownloadString("https://my.eliq.se/api/datanow?accesstoken=" & EliqAPI)

        'Sätter upp JSON.parsern och delar JSON till bitar.'
        Dim values As Newtonsoft.Json.Linq.JObject
        values = JObject.Parse(sourceString)


        Dim powervalue As Integer ' senaste värdet från servern'
        Dim oldpowervalue As Integer ' gammal värde innan update - sparas i Label1.Tag'
        Dim showpowervalue As String ' det värde man visar under huvudvärden (ökning/minskning från gammal värde)'
        Dim eliqtime As Date ' tidstämpel servern ger för senaste uppdatering'

        eliqtime = values.GetValue("createddate") ' eliqtime = createddate (från JSON) i date-format'
        showpowervalue = ""

        oldpowervalue = Label1.Tag ' hämtar gammalt värde från taggen.'
        powervalue = CInt(values.GetValue("power")) ' powervärdet från JSON'

        Label1.Text = powervalue & " W" ' visar huvudvärdet och lägger till bokstaven W'
        Label1.Tag = powervalue ' sparar värdet i taggen, för nästa gången vi kommer hit.'

        ' Lite uträkning: Om det skiljer sig mellan gammal och ny, då kollar vi om det är mindre än 0 eller större.'
        ' om större, då blir fonten röd och ett "+" läggs framför.'
        ' om mindre, dä blir fonten grön och ingen märke behövs läggas till, eftersom summan är negativ redan.'
        If oldpowervalue <> powervalue Then
            If powervalue - oldpowervalue > 0 Then
                Label2.ForeColor = Color.Red
                showpowervalue = "+" & powervalue - oldpowervalue & " W"
            Else
                Label2.ForeColor = Color.Green
                showpowervalue = powervalue - oldpowervalue & " W"
            End If
        Else
            showpowervalue = "" ' inget värde under huvudvärden, för nytt&gammalt är samma.'
        End If

        Label2.Text = showpowervalue ' visar resultat NY - GAMMAL'

        ' fixar till ToolStripStatusLabel med datumstämplar.'
        ToolStripStatusLabel1.Text = "Updated: Query " & _
            FormatDateTime(Now(), DateFormat.LongTime) & " Server " & _
            FormatDateTime(eliqtime, DateFormat.LongTime)

    End Sub
End Class


Inga kommentarer:

Skicka en kommentar