Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

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


Moskus

Anbefalte innlegg

    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
Lenke til kommentar
Del på andre sider

38 minutter siden, Justis skrev:

Mulig å sortere ut så den bare trekker data for feks Trøndelag?

Ikke direkte fra JSON, så vidt jeg ser.

 

Da noe  á la:

IF json("cases")(i)("name") = "Trøndelag" Then
Lenke til kommentar
Del på andre sider

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å... :( 

Lenke til kommentar
Del på andre sider

  • 2 uker senere...

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.

Lenke til kommentar
Del på andre sider

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
Lenke til kommentar
Del på andre sider

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?)

Lenke til kommentar
Del på andre sider

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": []
    }
]

 

 

Lenke til kommentar
Del på andre sider

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.

Lenke til kommentar
Del på andre sider

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...

Lenke til kommentar
Del på andre sider

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
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.