Jump to content
  • Sign Up
Støtt hjemmeautomasjon.no!

SCRIPT: Corona_i_Norge.vb - Oppdatering av Corona-viruset i Norge


Moskus

Recommended Posts

    Sub Main(ByVal parameters As Object)
        'Moskus 2020
        Dim devID As Integer = parameters.ToString
        Dim useHTMLtable As Boolean = True
        Dim url As String = "https://www.vg.no/spesial/2020/corona-viruset/data/norway-table-overview/"

        Dim source As String = ""
        Try
            Using client = New System.Net.WebClient
                Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12
                client.Encoding = System.Text.Encoding.UTF8
                source = client.DownloadString(url)
            End Using
        Catch ex As Exception
            hs.WriteLog("CoronaScript", "Net Feil: " & ex.Message)
        End Try

        If source = "" Then
            hs.WriteLog("CoronaScript", "Got no response from url: " & url)
            Exit Sub
        End If


        Dim json = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source)
        Dim output As String = ""

        Try
            Dim confirmed As Integer = json("totals")("confirmed")

            If useHTMLtable Then
                output &= "<table border=0 cellspacing=0 cellpadding=0>"
                output &= "<tr><td><b>Totalt</b></td><td align='right'>" & json("totals")("confirmed") & "</td><td align='right'>" & json("totals")("dead") & "</td><td align='right'>" & json("totals")("recovered") & "</td></tr>"

                For i As Integer = 0 To json("cases").Count - 1
                    output &= "<tr><td>" & json("cases")(i)("name") & "</td><td align='right'>" & json("cases")(i)("confirmed") & "</td><td align='right'>" & json("cases")(i)("dead") & "</td><td align='right'>" & json("cases")(i)("recovered") & "</td></tr>"
                Next
                output &= "</table>"

            Else
                output &= "<b>Totalt: " & json("totals")("confirmed") & " / " & json("totals")("dead") & " / " & json("totals")("recovered") & "</b><br>"

                For i As Integer = 0 To json("cases").Count - 1
                    output &= "• " & json("cases")(i)("name") & ": " & json("cases")(i)("confirmed") & " / " & json("cases")(i)("dead") & " / " & json("cases")(i)("recovered") & "<br>"
                Next

            End If

            hs.SetDeviceString(devID, output, False)
            hs.SetDeviceValueByRef(devID, confirmed, True)
        Catch ex As Exception
            hs.WriteLog("CoronaScript", "Net Feil: " & ex.Message)
        End Try
    End Sub

 

Trigger: Kjøres hvert 5. minutt

Parameter: DeviceIDen til en virtuell device som skal holde verdien.

Du kan endre variabelen "useHTMLtable" til False hvis du vil ha det i HStouch, for HStouch viser ikke pene HTML-tabeller...
 

image.png

 

 

 

Oppdatert med data fra RapidAPI siden jeg ble lei av at VG er så dårlig på å oppdatere tallene sine:

    Sub Main(ByVal parameters As Object)
        'Moskus 2020
        Dim devID As Integer = parameters.ToString

        Dim url As String = "https://covid-193.p.rapidapi.com/statistics?country=Norway"
        Dim source As String = ""
        Try
            Using client = New System.Net.WebClient
                'TLS1.2 and encoding (UTF8)
                Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Tls12
                client.Encoding = System.Text.Encoding.UTF8

                'Headers
                client.Headers.Set("x-rapidapi-host", "covid-193.p.rapidapi.com")
                client.Headers.Set("x-rapidapi-key", "DIN_RAPIDAPI_KEY_HER")

                'GET the url
                source = client.DownloadString(url)
            End Using
        Catch ex As Exception
            hs.WriteLog("CoronaScript", "Net Feil: " & ex.Message)
        End Try

        If source = "" Then
            hs.WriteLog("CoronaScript", "Got no response from url: " & url)
            Exit Sub
        End If


        Try
            Dim json = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(source)

            Dim confirmed As Integer = json("response")(0)("cases")("total")
            Dim output As String = ""
            output &= "<b>Aktive: " & json("response")(0)("cases")("active") & "  (" & json("response")(0)("cases")("new") & ") " & "</b><br>"
            output &= "Totalt: " & json("response")(0)("cases")("total") & "<br>"
            output &= "Dødsfall: " & json("response")(0)("deaths")("total") & "  (" & IIf(json("response")(0)("deaths")("new").ToString = "", "0", json("response")(0)("deaths")("new")) & ") " & "<br>"
            output &= "Testede: " & json("response")(0)("tests")("total") & "<br>"
            output &= "<i>Sist oppdatert: " & json("response")(0)("time") & "</i><br>"

            hs.SetDeviceString(devID, output, False)
            hs.SetDeviceValueByRef(devID, confirmed, True)
        Catch ex As Exception
            hs.WriteLog("CoronaScript Error", "Parsefeil: " & ex.Message)
        End Try
    End Sub

 

Kjøres nå hver time, jeg vet ikke begrensningene hos RapidAPI.

image.png

 

 

  • Like 2
Link to comment
Share on other sites

9 timer siden, ØysteinHJ skrev:

Edit: Fant ut av det.  Ser at jeg manglet referansen til dll-filen, og at informasjon om det finnes under Installasjon her: https://www.hjemmeautomasjon.no/forums/topic/4338-script-enturvb-få-inn-data-fra-entur/

Aaah, jeg er så vant til å bruke JSON at jeg tror alle har lagt til den referansen nå... :( 

Link to comment
Share on other sites

  • 2 weeks later...

Noen andre også som opplever at tallene fra VG er "stuck" (ikke oppdatert) de siste dagene?

Snakker om denne linken i scriptet: https://www.vg.no/spesial/2020/corona-viruset/data/norway-table-overview/

 

F.eks. så er Totals i skrivende stund:

{"totals":{"confirmed":2263,"dead":0,"recovered":6}

...Disse er samme tall som for noen dager siden.

Link to comment
Share on other sites

Har jobbet litt med å få VG sin statistikk inn i HStouch. Har blitt litt mer hjemmtid enn vanlig kan man si. 

 

- Bruker node-red for å ta et bilde av den relevante delen av https://www.vg.no/spesial/2020/corona/ 

- Bruker node-red-contrib-web-page-screenshot som har mulighet til å definere en del av en nettside gjennom å angi klassen man er interessert i, hos VG er det "key-numbers-inner"

- Resultatet er bra, men kommer i form av en enkel html fil hvor bilde av nettsiden er en png streng som er base64 encoded.

- Html filen kan jeg sende til HS med homeseer mqtt (Node-red kjører på en gammel mac-mini)

- Bruker mcsMQTT og ender opp med å bruke "button" for å lagre data i en device. Men da blir html koden liggen som 0 = "html kode". (se bilde 1 og 2)

 

Så står litt fast. Egentlig burde jo det være en smal sak å sende/hente selve html filen direkte fra HStouch men det skorter litt på kunnskapen her!

Tips til løsning på hvordan man enklest får vist en slik html fil i hstouch? Man kan vel "broadcaste" en slik fil på et lokalt nettverk? 

 

1667433992_Skjermbilde2020-03-26kl_21_39_42.thumb.png.8ae2baaf5e4d449b4c7ea92a74147c7f.png

 

2007078843_Skjermbilde2020-03-26kl_21_41_29.thumb.png.829f32bf8d0ab5e28f1794bbfbff4131.png

  • Like 1
Link to comment
Share on other sites

20 timer siden, Gizmo skrev:

Sender skjermbilde av vg sin hovedstatistikk til denne webadressen: http://www.jul-andersen.com/vg.html og henter den derfra til hstouch. Bruker ftp fra node-red, oppdateres hvert 30 minutt.

Perfekt! Kan vi bruke det? :) 

 

(Hadde det ikke vært enklest å bare lage en png-fil av det istedenfor en base64-streng? Iallfall enklere å legge i HStouch?)

Link to comment
Share on other sites

54 minutter siden, Moskus skrev:

Perfekt! Kan vi bruke det? :) 

 

(Hadde det ikke vært enklest å bare lage en png-fil av det istedenfor en base64-streng? Iallfall enklere å legge i HStouch?)

 

Det må gjerne brukes, men kommer uten noen som helst garanti på oppetid. 

Det er helt sikkert bedre måter å gjøre dette på. Jeg forsøkte å finne en måte å få dette lagret som en png fil og lagt rett i bildemappen til HStouch, men fant ikke ut hvordan jeg fikk lagret/konvertert strengen på ryddig vis. 

 

Jeg legger ut flow'en jeg bruker i node-red, så kan de som vil ha egen url lage det, eventuelt om noen kommer opp med en bedre måte å gjøre det på. 

[
    {
        "id": "a903151e.701c58",
        "type": "tab",
        "label": "Ta bilde av Koronastatistikk og send via ftp",
        "disabled": false,
        "info": ""
    },
    {
        "id": "f9a208cb.694fa8",
        "type": "inject",
        "z": "a903151e.701c58",
        "name": "",
        "topic": "",
        "payload": "https://www.vg.no/spesial/2020/corona/",
        "payloadType": "str",
        "repeat": "1800",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 150,
        "y": 140,
        "wires": [
            [
                "bc724e8e.7f1af8"
            ]
        ]
    },
    {
        "id": "bc724e8e.7f1af8",
        "type": "screenshot-class",
        "z": "a903151e.701c58",
        "name": "vg",
        "url": "https://www.vg.no/spesial/2020/corona/",
        "classname": "key-numbers-inner",
        "path": "",
        "x": 270,
        "y": 140,
        "wires": [
            [
                "de9480ac.28563"
            ]
        ]
    },
    {
        "id": "63cd0a38.394ffc",
        "type": "file",
        "z": "a903151e.701c58",
        "name": "",
        "filename": "/din_path_her/vg.html",
        "appendNewline": false,
        "createDir": false,
        "overwriteFile": "true",
        "encoding": "none",
        "x": 220,
        "y": 220,
        "wires": [
            [
                "9e323528.2d1a4"
            ]
        ]
    },
    {
        "id": "de9480ac.28563",
        "type": "template",
        "z": "a903151e.701c58",
        "name": "",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "<html>\n    <body>\n        <img src=\"data:image/png;base64,{{payload}}\">\n    </body>\n</html>",
        "output": "str",
        "x": 400,
        "y": 140,
        "wires": [
            [
                "63cd0a38.394ffc"
            ]
        ]
    },
    {
        "id": "9e323528.2d1a4",
        "type": "ftp in",
        "z": "a903151e.701c58",
        "ftp": "",
        "operation": "put",
        "filename": "www/vg.html",
        "localFilename": "/din_path_her/vg.html",
        "name": "",
        "x": 510,
        "y": 220,
        "wires": [
            [
                "9fe66376.2bf11"
            ]
        ]
    },
    {
        "id": "9fe66376.2bf11",
        "type": "debug",
        "z": "a903151e.701c58",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 670,
        "y": 140,
        "wires": []
    }
]

 

 

Link to comment
Share on other sites

10 minutter siden, ØysteinHJ skrev:

Nja, går litt i rykk og napp virker det som..

Det er vel fordi datagrunnlaget kommer i rykk og napp. Hvis det hadde blitt rapportert en gang pr. døgn så hadde det blitt jevnere.

Link to comment
Share on other sites

25 minutter siden, Gizmo skrev:

Ja, det ser ut til å virke igjen. 

 

VG har også en annen json fil, men jeg har ikke rukket/orket å grave i den. Er litt mer omfattende: 

https://www.vg.no/spesial/2020/corona-viruset/data/norway/

 

 

Se der, ja, den var jo litt spennende. Muligens litt overkill å analysere den hvert 5. minutt, men det er nok alle detaljene ser det ut til...

Link to comment
Share on other sites

4 timer siden, Moskus skrev:

det er nok alle detaljene ser det ut til

Mye hjemmetid nå... 

Den forrige jeg la ut har kun informasjon om smittede. Men ved å se på koden som brukes på html siden fant jeg det som ser ut en bedre  kildefil: https://www.vg.no/spesial/2020/corona-viruset/data/norway-region-data/

  • Så langt jeg kan se inneholder "metadata" på de første linjene informasjon om smittede totalt, nye i går og i dag, samt tilsvarende for døde.
  • Deretter følger data om  "timeseries" for først smittede og så døde. 
  • Til slutt kommer "caselist" for hvert enkeltcase som er registrert (som er hovedparten av filen)

Har jo bare sjekket etter middag i dag, men virker som tallene i metadata er identiske med nettsiden. 

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.