Gebruik maken van weerlive.nl data met Homey script

Daar de KMNI/KMI apps af en toe in de fout gaan, mogelijk omdat iemand de opvraging in een (onbedoelde) loop heeft (laten) lopen, heb ik om de weerdata van weerlive.nl te gebruiken een advanced Flow met de “Logica” en “HomeyScript” blokken gecreĂ«erd.

Stappenplan

  1. Vraag via weerlive.nl een key aan.

  2. Haal met de aangevraagde key de JSON data op met een oproep als “https://weerlive.nl/api/weerlive_api_v2.php?key=demo&locatie=Amsterdam (Voorbeeld met demo Key)

  3. lees het ontvangen JSON object in een string:

    { “liveweer”: [{“plaats”: “Amsterdam”, “timestamp”: 1754908082, “time”: “11-08-2025 12:28:02”, “temp”: 24.6, “gtemp”: 24.6, “samenv”: “Licht bewolkt”, “lv”: 48, “windr”: “ONO”, “windrgr”: 49.2, “windms”: 1.38, “windbft”: 1, “windknp”: 2.7, “windkmh”: 5, “luchtd”: 1024.51, “ldmmhg”: 768, “dauwp”: 13.3, “zicht”: 30900, “gr”: 691, “verw”: “Zonnig, droog en zomers warm. Dinsdag nog warmer maar iets minder zon”, “sup”: “06:16”, “sunder”: “21:15”, “image”: “lichtbewolkt”, “alarm”: 0, “lkop”: “Er zijn geen waarschuwingen”, “ltekst”: " Er zijn momenteel geen waarschuwingen van kracht.", “wrschklr”: “groen”, “wrsch_g”: “-”, “wrsch_gts”: 0, “wrsch_gc”: “-”}], “wk_verw”:[{“dag”:“11-08-2025”,“image”:“halfbewolkt”,“max_temp”:29,“min_temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:53,“windr”:“NO”,“neersl_perc_dag”:0,“zond_perc_dag”:99},{“dag”:“12-08-2025”,“image”:“halfbewolkt”,“max_temp”:33,“min_temp”:17,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:73,“windr”:“NO”,“neersl_perc_dag”:0,“zond_perc_dag”:93},{“dag”:“13-08-2025”,“image”:“halfbewolkt”,“max_temp”:31,“min_temp”:19,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:141,“windr”:“ZO”,“neersl_perc_dag”:0,“zond_perc_dag”:84},{“dag”:“14-08-2025”,“image”:“halfbewolkt”,“max_temp”:31,“min_temp”:21,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:183,“windr”:“Z”,“neersl_perc_dag”:0,“zond_perc_dag”:85},{“dag”:“15-08-2025”,“image”:“halfbewolkt”,“max_temp”:30,“min_temp”:19,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:186,“windr”:“Z”,“neersl_perc_dag”:0,“zond_perc_dag”:100}],“uur_verw”:[{“uur”:“11-08-2025 13:00”,“timestamp”:1754910000,“image”:“zonnig”,“temp”:27,“windbft”:2,“windkmh”:7,“windknp”:4,“windms”:2,“windrgr”:152,“windr”:“ZO”,“neersl”:0,“gr”:778},{“uur”:“11-08-2025 14:00”,“timestamp”:1754913600,“image”:“halfbewolkt”,“temp”:28,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:140,“windr”:“ZO”,“neersl”:0,“gr”:767},{“uur”:“11-08-2025 15:00”,“timestamp”:1754917200,“image”:“zonnig”,“temp”:29,“windbft”:2,“windkmh”:7,“windknp”:4,“windms”:2,“windrgr”:130,“windr”:“ZO”,“neersl”:0,“gr”:659},{“uur”:“11-08-2025 16:00”,“timestamp”:1754920800,“image”:“zonnig”,“temp”:29,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:121,“windr”:“ZO”,“neersl”:0,“gr”:618},{“uur”:“11-08-2025 17:00”,“timestamp”:1754924400,“image”:“zonnig”,“temp”:29,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:102,“windr”:“ZO”,“neersl”:0,“gr”:488},{“uur”:“11-08-2025 18:00”,“timestamp”:1754928000,“image”:“zonnig”,“temp”:29,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:80,“windr”:“O”,“neersl”:0,“gr”:338},{“uur”:“11-08-2025 19:00”,“timestamp”:1754931600,“image”:“zonnig”,“temp”:28,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:61,“windr”:“NO”,“neersl”:0,“gr”:188},{“uur”:“11-08-2025 20:00”,“timestamp”:1754935200,“image”:“zonnig”,“temp”:26,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:56,“windr”:“NO”,“neersl”:0,“gr”:55},{“uur”:“11-08-2025 21:00”,“timestamp”:1754938800,“image”:“zonnig”,“temp”:25,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:49,“windr”:“NO”,“neersl”:0,“gr”:3},{“uur”:“11-08-2025 22:00”,“timestamp”:1754942400,“image”:“helderenacht”,“temp”:24,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:54,“windr”:“NO”,“neersl”:0,“gr”:0},{“uur”:“11-08-2025 23:00”,“timestamp”:1754946000,“image”:“helderenacht”,“temp”:23,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:68,“windr”:“NO”,“neersl”:0,“gr”:0},{“uur”:“12-08-2025 00:00”,“timestamp”:1754949600,“image”:“helderenacht”,“temp”:22,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:75,“windr”:“NO”,“neersl”:0,“gr”:0},{“uur”:“12-08-2025 01:00”,“timestamp”:1754953200,“image”:“nachtbewolkt”,“temp”:22,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:80,“windr”:“O”,“neersl”:0,“gr”:0},{“uur”:“12-08-2025 02:00”,“timestamp”:1754956800,“image”:“helderenacht”,“temp”:21,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:83,“windr”:“O”,“neersl”:0,“gr”:0},{“uur”:“12-08-2025 03:00”,“timestamp”:1754960400,“image”:“helderenacht”,“temp”:21,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:80,“windr”:“O”,“neersl”:0,“gr”:0},{“uur”:“12-08-2025 04:00”,“timestamp”:1754964000,“image”:“helderenacht”,“temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:74,“windr”:“NO”,“neersl”:0,“gr”:0},{“uur”:“12-08-2025 05:00”,“timestamp”:1754967600,“image”:“helderenacht”,“temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:61,“windr”:“NO”,“neersl”:0,“gr”:0},{“uur”:“12-08-2025 06:00”,“timestamp”:1754971200,“image”:“helderenacht”,“temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:68,“windr”:“NO”,“neersl”:0,“gr”:6},{“uur”:“12-08-2025 07:00”,“timestamp”:1754974800,“image”:“zonnig”,“temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:88,“windr”:“O”,“neersl”:0,“gr”:97},{“uur”:“12-08-2025 08:00”,“timestamp”:1754978400,“image”:“bewolkt”,“temp”:21,“windbft”:2,“windkmh”:7,“windknp”:4,“windms”:2,“windrgr”:86,“windr”:“O”,“neersl”:0,“gr”:224},{“uur”:“12-08-2025 09:00”,“timestamp”:1754982000,“image”:“halfbewolkt”,“temp”:22,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:68,“windr”:“NO”,“neersl”:0,“gr”:233},{“uur”:“12-08-2025 10:00”,“timestamp”:1754985600,“image”:“bewolkt”,“temp”:24,“windbft”:3,“windkmh”:18,“windknp”:10,“windms”:5,“windrgr”:93,“windr”:“O”,“neersl”:0,“gr”:368},{“uur”:“12-08-2025 11:00”,“timestamp”:1754989200,“image”:“halfbewolkt”,“temp”:25,“windbft”:4,“windkmh”:21,“windknp”:12,“windms”:6,“windrgr”:108,“windr”:“ZO”,“neersl”:0,“gr”:510},{“uur”:“12-08-2025 12:00”,“timestamp”:1754992800,“image”:“halfbewolkt”,“temp”:26,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:109,“windr”:“ZO”,“neersl”:0,“gr”:560}],“api”:[{“bron”:“Bron: Weerdata KNMI/NOAA via Weerlive.nl”,“max_verz”:300,“rest_verz”:0}]}

  4. Gebruik de JSON (sub) string om de data te displayen of te verwerken in een flow of script

    a) gebruik b.v. de site https://jsontotable.org/ om de string makkelijk te kunnen lezen (zie onder aan bericht)
    b) Je kan een script gebruiken om bepaalde waarden te kunnen meten/berekenen
    bv:
    // Bereken verwachte neerslag voor de volgende 24 uur
    let cumRegen=0.0;

    //Bereken verwachte neerslag voor de volgende 24 uur //=== function get_JSONObj(args) === ==========
     function get_JSONObj(args) {
     	const myJSON = JSON.parse(args)
     return  myJSON }
    
     //==== function JSON to  mmRegen ========
     function Jason2dataArray(JSON_args) {
         let dataArray = JSON_args
         let cumRegen=0.0
         var x = 0 
    
         for (let x = 0; x < 24; x++) { 
    			cumRegen=cumRegen + dataArray.uur_verw[x].neersl }
     return parseInt(cumRegen*10)/10}
    
     //================== Main ==========
     let my_JSON = get_JSONObj(args[0]);
     return Jason2dataArray(my_JSON)
     //================Einde Main =======
    

    c) en/of gebruik de JSON data per veld in een output (string/scherm)

     bv:
     // Display Weather prediction table 
     function get_arg(args) 
     {
       const argJASON = JSON.parse(args)
       return  argJASON
     }
     //=================================
    
     function Jason2dataArray(JSON_args)
     {	
        let dataArray = JSON_args
        var x=0, cumRegen=0.0
        var y="", z=""
        var myWeatherDisplay=""
        var myWeatherDisplayLine=""
    
        myWeatherDisplayLine=dataArray.liveweer[0].plaats + ":\n" + dataArray.liveweer[0].lkop + ".\n\n"
        myWeatherDisplay=myWeatherDisplay + myWeatherDisplayLine
    
        myWeatherDisplayLine="=============================================\n"
        myWeatherDisplay=myWeatherDisplay + myWeatherDisplayLine
    
        myWeatherDisplayLine="Datum     |tijd   |tmp  |regen | Weertype    \n"
        myWeatherDisplay=myWeatherDisplay + myWeatherDisplayLine
    
        myWeatherDisplayLine="          | [h]   |[gr] | [mm] |             \n"
        myWeatherDisplay=myWeatherDisplay + myWeatherDisplayLine
    
        myWeatherDisplayLine="==========+=======+=====+======+=============\n"
        myWeatherDisplay=myWeatherDisplay + myWeatherDisplayLine
    
       for (let x = 0; x < 24; x++) { 
     	     z = '      ' + dataArray.uur_verw[x].temp
     	     z = z.substring(z.length - 6, z.length)
     	     cumRegen=cumRegen + dataArray.uur_verw[x].neersl   
          y=(dataArray.uur_verw[x].uur + z + '     ' + dataArray.uur_verw[x].neersl + '      ')
          myWeatherDisplayLine= y.substring(0,33) + dataArray.uur_verw[x].image + "\n"
          myWeatherDisplay=myWeatherDisplay + myWeatherDisplayLine
       }
    
       myWeatherDisplayLine="==========+=======+=====+======+=============\n"
       myWeatherDisplay=myWeatherDisplay + myWeatherDisplayLine
    
       myWeatherDisplayLine="Verwachte regen            " + parseInt(cumRegen*10)/10 + " mm      \n"
       myWeatherDisplay=myWeatherDisplay + myWeatherDisplayLine
    
       myWeatherDisplayLine="=============================================\n"
       myWeatherDisplay=myWeatherDisplay + myWeatherDisplayLine
    
     return myWeatherDisplay
       }
    

    //===================== Main ==========
    let my_JSON = get_arg(args[0]);
    return Jason2dataArray(my_JSON);
    //================Einde Main ==========

  5. Het JSON object leesbaar genaakt
    =========== (via https://jsontotable.org/) =========
    { “liveweer”: [
    {“plaats”: “Amsterdam”,
    “timestamp”: 1754908082,
    “time”: “11-08-2025 12:28:02”,
    “temp”: 24.6,
    “gtemp”: 24.6,
    “samenv”: “Licht bewolkt”,
    “lv”: 48,
    “windr”: “ONO”,
    “windrgr”: 49.2,
    “windms”: 1.38,
    “windbft”: 1,
    “windknp”: 2.7,
    “windkmh”: 5,
    “luchtd”: 1024.51,
    “ldmmhg”: 768,
    “dauwp”: 13.3,
    “zicht”: 30900,
    “gr”: 691,
    “verw”: “Zonnig, droog en zomers warm. Dinsdag nog warmer maar iets minder zon”,
    “sup”: “06:16”,
    “sunder”: “21:15”,
    “image”: “lichtbewolkt”,
    “alarm”: 0,
    “lkop”: “Er zijn geen waarschuwingen”,
    “ltekst”: " Er zijn momenteel geen waarschuwingen van kracht.",
    “wrschklr”: “groen”,
    “wrsch_g”: “-”,
    “wrsch_gts”: 0,
    “wrsch_gc”: “-”}
    ],
    “wk_verw”:[
    {“dag”:“11-08-2025”,“image”:“halfbewolkt”,“max_temp”:29,“min_temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:53,“windr”:“NO”,“neersl_perc_dag”:0,“zond_perc_dag”:99},
    {“dag”:“12-08-2025”,“image”:“halfbewolkt”,“max_temp”:33,“min_temp”:17,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:73,“windr”:“NO”,“neersl_perc_dag”:0,“zond_perc_dag”:93},
    {“dag”:“13-08-2025”,“image”:“halfbewolkt”,“max_temp”:31,“min_temp”:19,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:141,“windr”:“ZO”,“neersl_perc_dag”:0,“zond_perc_dag”:84},
    {“dag”:“14-08-2025”,“image”:“halfbewolkt”,“max_temp”:31,“min_temp”:21,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:183,“windr”:“Z”,“neersl_perc_dag”:0,“zond_perc_dag”:85},
    {“dag”:“15-08-2025”,“image”:“halfbewolkt”,“max_temp”:30,“min_temp”:19,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:186,“windr”:“Z”,“neersl_perc_dag”:0,“zond_perc_dag”:100}
    ],
    “uur_verw”:[
    {“uur”:“11-08-2025 13:00”,“timestamp”:1754910000,“image”:“zonnig”,“temp”:27,“windbft”:2,“windkmh”:7,“windknp”:4,“windms”:2,“windrgr”:152,“windr”:“ZO”,“neersl”:0,“gr”:778},
    {“uur”:“11-08-2025 14:00”,“timestamp”:1754913600,“image”:“halfbewolkt”,“temp”:28,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:140,“windr”:“ZO”,“neersl”:0,“gr”:767},
    {“uur”:“11-08-2025 15:00”,“timestamp”:1754917200,“image”:“zonnig”,“temp”:29,“windbft”:2,“windkmh”:7,“windknp”:4,“windms”:2,“windrgr”:130,“windr”:“ZO”,“neersl”:0,“gr”:659},
    {“uur”:“11-08-2025 16:00”,“timestamp”:1754920800,“image”:“zonnig”,“temp”:29,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:121,“windr”:“ZO”,“neersl”:0,“gr”:618},
    {“uur”:“11-08-2025 17:00”,“timestamp”:1754924400,“image”:“zonnig”,“temp”:29,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:102,“windr”:“ZO”,“neersl”:0,“gr”:488},
    {“uur”:“11-08-2025 18:00”,“timestamp”:1754928000,“image”:“zonnig”,“temp”:29,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:80,“windr”:“O”,“neersl”:0,“gr”:338},
    {“uur”:“11-08-2025 19:00”,“timestamp”:1754931600,“image”:“zonnig”,“temp”:28,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:61,“windr”:“NO”,“neersl”:0,“gr”:188},
    {“uur”:“11-08-2025 20:00”,“timestamp”:1754935200,“image”:“zonnig”,“temp”:26,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:56,“windr”:“NO”,“neersl”:0,“gr”:55},
    {“uur”:“11-08-2025 21:00”,“timestamp”:1754938800,“image”:“zonnig”,“temp”:25,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:49,“windr”:“NO”,“neersl”:0,“gr”:3},
    {“uur”:“11-08-2025 22:00”,“timestamp”:1754942400,“image”:“helderenacht”,“temp”:24,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:54,“windr”:“NO”,“neersl”:0,“gr”:0},
    {“uur”:“11-08-2025 23:00”,“timestamp”:1754946000,“image”:“helderenacht”,“temp”:23,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:68,“windr”:“NO”,“neersl”:0,“gr”:0},
    {“uur”:“12-08-2025 00:00”,“timestamp”:1754949600,“image”:“helderenacht”,“temp”:22,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:75,“windr”:“NO”,“neersl”:0,“gr”:0},
    {“uur”:“12-08-2025 01:00”,“timestamp”:1754953200,“image”:“nachtbewolkt”,“temp”:22,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:80,“windr”:“O”,“neersl”:0,“gr”:0},
    {“uur”:“12-08-2025 02:00”,“timestamp”:1754956800,“image”:“helderenacht”,“temp”:21,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:83,“windr”:“O”,“neersl”:0,“gr”:0},
    {“uur”:“12-08-2025 03:00”,“timestamp”:1754960400,“image”:“helderenacht”,“temp”:21,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:80,“windr”:“O”,“neersl”:0,“gr”:0},
    {“uur”:“12-08-2025 04:00”,“timestamp”:1754964000,“image”:“helderenacht”,“temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:74,“windr”:“NO”,“neersl”:0,“gr”:0},
    {“uur”:“12-08-2025 05:00”,“timestamp”:1754967600,“image”:“helderenacht”,“temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:61,“windr”:“NO”,“neersl”:0,“gr”:0},
    {“uur”:“12-08-2025 06:00”,“timestamp”:1754971200,“image”:“helderenacht”,“temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:68,“windr”:“NO”,“neersl”:0,“gr”:6},
    {“uur”:“12-08-2025 07:00”,“timestamp”:1754974800,“image”:“zonnig”,“temp”:20,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:88,“windr”:“O”,“neersl”:0,“gr”:97},
    {“uur”:“12-08-2025 08:00”,“timestamp”:1754978400,“image”:“bewolkt”,“temp”:21,“windbft”:2,“windkmh”:7,“windknp”:4,“windms”:2,“windrgr”:86,“windr”:“O”,“neersl”:0,“gr”:224},
    {“uur”:“12-08-2025 09:00”,“timestamp”:1754982000,“image”:“halfbewolkt”,“temp”:22,“windbft”:2,“windkmh”:10,“windknp”:6,“windms”:3,“windrgr”:68,“windr”:“NO”,“neersl”:0,“gr”:233},
    {“uur”:“12-08-2025 10:00”,“timestamp”:1754985600,“image”:“bewolkt”,“temp”:24,“windbft”:3,“windkmh”:18,“windknp”:10,“windms”:5,“windrgr”:93,“windr”:“O”,“neersl”:0,“gr”:368},
    {“uur”:“12-08-2025 11:00”,“timestamp”:1754989200,“image”:“halfbewolkt”,“temp”:25,“windbft”:4,“windkmh”:21,“windknp”:12,“windms”:6,“windrgr”:108,“windr”:“ZO”,“neersl”:0,“gr”:510},
    {“uur”:“12-08-2025 12:00”,“timestamp”:1754992800,“image”:“halfbewolkt”,“temp”:26,“windbft”:3,“windkmh”:14,“windknp”:8,“windms”:4,“windrgr”:109,“windr”:“ZO”,“neersl”:0,“gr”:560}
    ],
    “api”:[{“bron”:“Bron: Weerdata KNMI/NOAA via Weerlive.nl”,“max_verz”:300,“rest_verz”:0}]
    }

De routines hierboven heb ik gebruikt in de Homey script blokken (in advanced flows) waarmee de te verwachten neerslag in de volgende 24 uur worden berekend. Een simple weerrapport voor de komende dagen wordt weergegeven dmv een tekst string.

Hoop dat dit voor iemand anders ook nuttig kan zijn.

Positieve feedback en verbeteringen zijn uiteraard welkom!

mvg
Rudi

Toevoeging: Weerlivedata had, (door database veranderingen) mijn user op nonactive gezet, en ‘helaas’ gaf dit bij het ophalen van de JSON string geen foutmelding (een JSON string kwam terug met(!) de foutmelding) maar verder in het process ging het wel fout. helaas niet door een foutmelding te genereren. Dit is nu gecorrigeerd door aan de twee homey script blokken en logica blok de foutmelding door te lussen.

1 Like