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

Anbefalte innlegg

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

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

Tenkte jeg skulle prøve å hente ut data for å vise på en MagicMirror

Skrevet
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
  • 2 uker senere...
Skrevet

Ser at det er diverse utenlandske adresser man kan få statistikk på, men statistikken er litt utdatert.  Gjerne en dag eller tre gammel.  Men har ikke gravd så veldig mye enda.

 

Synd ikke FHI gir ut rådata...

Skrevet

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

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

 

 

Skrevet

Jeg har fulgt litt med på dette i det siste, og det er ikke ut til å være noe problemer med JSON-filen fra VG. Andre som ser det samme som meg?

Skrevet
9 minutter siden, Moskus skrev:

Jeg har fulgt litt med på dette i det siste, og det er ikke ut til å være noe problemer med JSON-filen fra VG. Andre som ser det samme som meg?

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

 

image.png.aed866ffbe5a328552127fbf04b979e3.png

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

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

Skrevet
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

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.