retrieving solar irradiance data through webread function
    2 views (last 30 days)
  
       Show older comments
    
how can i retrieve solar irradiance data of 24 hours from https://www.newquayweather.com/pwsWD/index.php in MATLAB through webread function?
0 Comments
Accepted Answer
  Cameron
    
 on 9 Mar 2023
        
      Edited: Cameron
    
 on 9 Mar 2023
  
      This is a way to get it instantaneously. 
url = 'https://www.newquayweather.com/pwsWD/index.php';
w = webread(url);
loc1 = strfind(w,'W/m²');
B = str2num(string(regexp(w(loc1-10:loc1),'\d*','Match')));
fprintf('Solar irradiance at %s is %d W/m²',datetime('now'),B)
4 Comments
  Cameron
    
 on 10 Mar 2023
				There are a couple of things you can do. The reason I didn't plot the tsi vs date is because if you were to close the graph, the program would stop. You can either run the script until 1 whole day has passed or you can hit Control+C to manually stop the program. The variables for dt and tsi should be in your workspace up until you stopped the program. The code I will paste below will save your data to a .txt file you specify prior to reading data from the website. So you can open this file to see all the data that's been collected over a period of time. I did notice while I was running this script that sometimes the url said the solar irradiance was 0 W/m2 which wasn't true, but that's what was on the url so that's what was read by the program.
clear
url = 'https://www.newquayweather.com/pwsWD/index.php'; %your url
[file,path,indx] = uiputfile('.txt'); %save a file as a .txt. you can change this to your preferred extension
if indx == 0; msg = 'No path selected.'; error(msg); end %user hits Cancel or closes uiputfile prompt
cd(path) %change path to the one designated in uiputfile
fileID = fopen(file,'a'); %open file and append any data
SecBetweenReading = 10; %seconds between each reading
opt = weboptions('Timeout',60); %set the web timeout to 60 seconds
fig = figure; %create figure
ax = uiaxes(fig); %create axes
for x = 1:3600*24/SecBetweenReading %3600 seconds in an hour, 24 hours divided by seconds between reading
    w = webread(url,opt); %read the web page
    loc1 = strfind(w,'W/m²'); %find where W/m2 is
    B = str2num(string(regexp(w(loc1-10:loc1),'\d*','Match'))); %get only the number
    dt(x,1) = datetime('now'); %save datetime
    tsi(x,1) = B; %save your solar irradiance
    fprintf(fileID,'%s,%d\n',dt(x,1),tsi(x,1));
    disp(dt(end,1)) %display the most recent time the data was read
    disp(tsi(end,1)) %display the most recent tsi the data was read
    if isgraphics(ax) %if you have not closed the plot 
        plot(ax,dt,tsi,'-o') %plot all data
    end
    pause(SecBetweenReading) %pause for a given amount of time
end
fclose(fileID);
If you're having difficulties deleting files, you may have not used the fclose() function on one of your .txt files. I would use 
fclose('all')
if you're getting an error from your computer saying MATLAB has a certain file open. 
More Answers (0)
See Also
Categories
				Find more on Predictive Maintenance Toolbox in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
