• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

Can anyone revive AviationWX, PilotWX, or TAF

Scheduled Pinned Locked Moved Unsolved Requests
36 Posts 3 Posters 8.8k Views 3 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Online
    mumblebaj Module Developer @sdetweil
    last edited by Mar 15, 2024, 4:21 PM

    @sdetweil Both calls working.

    try {
            const response = await axios.get(metarUrl, {
                responseType: 'arraybuffer', // ensure response is treated as binary
                headers: {
                    'Accept-Encoding': 'gzip', // request gzip compression
                },
            });
    
            // Unzip the gzip response
            const unzippedData = zlib.gunzipSync(response.data).toString();
    
            let json_string = convert.toJson(unzippedData);
            var json = JSON.parse(json_string);
            var metarData = json.response.data.METAR;
            var airportData = new Object();
    
            var airports = payload.airportList.split(",").map(function (airport) {
                airport = airport.trim();
                return (airport.length < 4) ? "K" + airport : airport;
            });
    
            airports.forEach(function (airport) {
                metarData.forEach(function (metar) {
                    if (airport === metar.station_id) {
                        if (this.debug)
                            console.log("METAR data found for " + airport);
                        airportData[airport] = metar;
                        return; // check next airport in list
                    }
                });
                // console.log(metarData)
            });
        } catch (error) {
            console.error('Error fetching data:', error);
        }
    
        const checktype = { "Airspace_Flow_List":"Airspace_Flow", "Ground_Delay_List": "Ground_Delay", "Arrival_Departure_Delay_List": "Delay","Airport_Closure_List":"Airport" }
    
        
        try {
            const response = await axios.get(FAAUrl);
    
            // Your further processing
            let json_string =
                //convert.toJson(test_data)     swap comments to use test FAA data
                convert.toJson(response.data.toString());
            if (this.debug)
                console.log("json faa=" + json_string);
            const faa_data = JSON.parse(json_string);
    
            if (!Array.isArray(faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type)) {
                // save the current entry
                const x = faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type
                //  init as an array
                faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type = []
                // add the element into the array
                faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type.push(x)
            }
            // loop thru the delay types
            faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type.forEach(t => {
                //
                if (t.name !== "Airspace Flow Programs") {
                    // for each the  there are two major keys, name and the list for that type
                    // get the key of the list
                    const keyname = Object.keys(t)[1]
                    // remove the "_list"  part for passing to front end
                    const key = keyname.split('_').slice(0, -1).join('_')
                    if (this.debug)
                        console.log("key data=" + JSON.stringify(t[keyname][checktype[keyname]]) + "keyname=" + keyname + " key=" + checktype[keyname] + "\n")
                    if (!Array.isArray(t[keyname][checktype[keyname]])) {
                        const x = t[keyname][checktype[keyname]]
                        t[keyname][checktype[keyname]] = []
                        t[keyname][checktype[keyname]].push(x)
                    } else {
                        console.log("checkytype=" + checktype[keyname])
                    }
                    if (this.debug)
                        console.log("data=" + Object.keys(faa_data['AIRPORT_STATUS_INFORMATION'].Delay_type)[0] + " data=" + JSON.stringify(t) + " keyname=" + keyname + " key=" + key + " last part=" + JSON.stringify(t[keyname][key]) + "\n")
    
                    // look thru all the aaffected airports for this record type
                    t[keyname][checktype[keyname]].forEach(airport_record => {
                        // if the airport is one the user requested
                        if (airports.includes('K' + airport_record.ARPT)) {
                            if (airportData['K' + airport_record.ARPT]['FAA'] == undefined)
                                airportData['K' + airport_record.ARPT]['FAA'] = {}
                            // save this data record
                            airportData['K' + airport_record.ARPT]['FAA'][key] = airport_record
                        }
                    })
                }
    
            });
            // Emitting data to Socket
            //self.sendSocketNotification("WX_RESULT", airportData);
        } catch (error) {
            console.error('Error fetching FAA data:', error);
        }
    

    Check out my modules at: https://github.com/mumblebaj?tab=repositories

    S 1 Reply Last reply Mar 15, 2024, 4:23 PM Reply Quote 0
    • S Away
      sdetweil @mumblebaj
      last edited by Mar 15, 2024, 4:23 PM

      @mumblebaj thx. but there is a way to not have to use zlib. I just haven’t found any that work

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      M 1 Reply Last reply Mar 15, 2024, 4:29 PM Reply Quote 0
      • M Online
        mumblebaj Module Developer @sdetweil
        last edited by Mar 15, 2024, 4:29 PM

        @sdetweil If you want to use fetch you can do the first call as follows.

        try {
            const response = await fetch(metarUrl, {
              headers: {
                'Accept-Encoding': 'gzip', // Request gzip compression
              },
            });
        
            if (!response.ok) {
              throw new Error(`HTTP error! Status: ${response.status}`);
            }
        
            // Read response body as buffer
            const buffer = await response.buffer();
        
            // Manually decompress gzip data
            const zlib = require('zlib');
            const decompressedData = zlib.gunzipSync(buffer).toString();
        

        You could use pako.

        const decompressedData = pako.inflate(buffer, { to: 'string' });
        

        Check out my modules at: https://github.com/mumblebaj?tab=repositories

        S 1 Reply Last reply Mar 15, 2024, 4:33 PM Reply Quote 0
        • S Away
          sdetweil @mumblebaj
          last edited by sdetweil Mar 15, 2024, 4:33 PM Mar 15, 2024, 4:33 PM

          @mumblebaj but… you are not supposed to have to do either

          Sam

          How to add modules

          learning how to use browser developers window for css changes

          M 1 Reply Last reply Mar 15, 2024, 4:40 PM Reply Quote 0
          • M Online
            mumblebaj Module Developer @sdetweil
            last edited by Mar 15, 2024, 4:40 PM

            @sdetweil I have not seen another way. Sorry…:man_facepalming:

            Check out my modules at: https://github.com/mumblebaj?tab=repositories

            F 1 Reply Last reply Mar 15, 2024, 6:05 PM Reply Quote 0
            • F Offline
              FSAHD @mumblebaj
              last edited by Mar 15, 2024, 6:05 PM

              @mumblebaj @sdetweil fwiw, and I don’t know if this would be any easier for the situation.

              There is a site called avwx.rest
              (I believe the pilot wx all was using that source)

              It’s an API built solely for pilot data
              You do need a key but maybe the data will be easier to pull?

              https://avwx.docs.apiary.io/#

              S 2 Replies Last reply Mar 15, 2024, 6:20 PM Reply Quote 0
              • S Away
                sdetweil @FSAHD
                last edited by Mar 15, 2024, 6:20 PM

                @FSAHD I might use that for pilot.

                we are just talking about using more current support , so the module lasts longer

                Sam

                How to add modules

                learning how to use browser developers window for css changes

                M 1 Reply Last reply Mar 15, 2024, 7:02 PM Reply Quote 0
                • M Online
                  mumblebaj Module Developer @sdetweil
                  last edited by Mar 15, 2024, 7:02 PM

                  @sdetweil There is a simple api call from the site to get the metar data whicg might be simpler to use.

                  https://aviationweather.gov/api/data/metar?ids=KMCI%2CKORD%2CKBOS&format=json&taf=true&hours=1&bbox=-26.139%2C28.246&date=2024-03-10T23%3A44%3A22Z

                  Check out my modules at: https://github.com/mumblebaj?tab=repositories

                  1 Reply Last reply Reply Quote 1
                  • S Away
                    sdetweil @FSAHD
                    last edited by Mar 16, 2024, 12:08 AM

                    @mumblebaj

                    thanks to your help I fixed the code to use the airport specific request which returns json and not gzip…

                    @FSAHD the output changed metar output changed again… sorry
                    i updated the sample text again

                    so git pull, and npm install

                    Sam

                    How to add modules

                    learning how to use browser developers window for css changes

                    F 1 Reply Last reply Mar 16, 2024, 1:03 AM Reply Quote 0
                    • F Offline
                      FSAHD @sdetweil
                      last edited by Mar 16, 2024, 1:03 AM

                      @sdetweil No worries. I really appreciate both of you alls help. Ill spend as much time I need on my end to get it up and going!

                      @mumblebaj thanks for adding your .02 cents to help this move forward.

                      Im new to this MM forum so I am not sure how to go about this but I would love to either get you both a cup of coffee or just donate to your efforts as a thank you!

                      S M 2 Replies Last reply Mar 16, 2024, 1:06 AM Reply Quote 0
                      • 1
                      • 2
                      • 3
                      • 4
                      • 3 / 4
                      3 / 4
                      • First post
                        29/36
                        Last post
                      Enjoying MagicMirror? Please consider a donation!
                      MagicMirror created by Michael Teeuw.
                      Forum managed by Sam, technical setup by Karsten.
                      This forum is using NodeBB as its core | Contributors
                      Contact | Privacy Policy