diff --git a/.github/workflows/flake8.yml b/.github/workflows/flake8.yml
index eabdbdbf38..82b413236f 100644
--- a/.github/workflows/flake8.yml
+++ b/.github/workflows/flake8.yml
@@ -20,7 +20,7 @@ jobs:
git remote add upstream https://github.com/pvlib/pvlib-python.git
git fetch upstream $GITHUB_BASE_REF
- name: Run Flake8 linter
- run: git diff upstream/$GITHUB_BASE_REF HEAD | flake8
+ run: git diff upstream/$GITHUB_BASE_REF HEAD -- "*.py" | flake8
--exclude pvlib/version.py
--ignore E201,E241,E226,W503,W504
--max-line-length 79
diff --git a/docs/sphinx/source/reference/iotools.rst b/docs/sphinx/source/reference/iotools.rst
index 05100e9d17..cf6fbf4ac4 100644
--- a/docs/sphinx/source/reference/iotools.rst
+++ b/docs/sphinx/source/reference/iotools.rst
@@ -46,6 +46,8 @@ of sources and file formats relevant to solar energy modeling.
iotools.get_acis_station_data
iotools.get_acis_available_stations
iotools.read_panond
+ iotools.get_solaranywhere
+ iotools.read_solaranywhere
iotools.get_solcast_tmy
iotools.get_solcast_historic
iotools.get_solcast_forecast
diff --git a/docs/sphinx/source/whatsnew/v0.10.3.rst b/docs/sphinx/source/whatsnew/v0.10.3.rst
index 29aa59a543..922d2099df 100644
--- a/docs/sphinx/source/whatsnew/v0.10.3.rst
+++ b/docs/sphinx/source/whatsnew/v0.10.3.rst
@@ -20,6 +20,9 @@ Enhancements
read data from the Solcast API. (:issue:`1313`, :pull:`1875`)
* Added :py:func:`~pvlib.iam.convert` and :py:func:`~pvlib.iam.fit` that
convert between IAM models, and that fit an IAM model to data. (:issue:`1824`, :pull:`1827`)
+* Add :py:func:`pvlib.iotools.read_solaranywhere` and
+ :py:func:`pvlib.iotools.get_solaranywhere` for reading and retrieving
+ SolarAnywhere solar irradiance data. (:pull:`1497`, :discuss:`1310`)
Bug fixes
~~~~~~~~~
diff --git a/docs/sphinx/source/whatsnew/v0.9.2.rst b/docs/sphinx/source/whatsnew/v0.9.2.rst
index d8221e48db..2616734036 100644
--- a/docs/sphinx/source/whatsnew/v0.9.2.rst
+++ b/docs/sphinx/source/whatsnew/v0.9.2.rst
@@ -82,4 +82,4 @@ Contributors
* Mark Campanelli (:ghuser:`campanelli-sunpower`)
* Anton Driesse (:ghuser:`adriesse`)
* Kristen Wagner (:ghuser:`kwagnercpr`)
-* Mark Mikofski (:ghuser:`mikofski`)
+* Mark Mikofski (:ghuser:`mikofski`)
\ No newline at end of file
diff --git a/pvlib/data/Burlington, United States SolarAnywhere Time Series 20210101 to 20210103 Lat_44_4675 Lon_-73_2075 SA format.csv b/pvlib/data/Burlington, United States SolarAnywhere Time Series 20210101 to 20210103 Lat_44_4675 Lon_-73_2075 SA format.csv
new file mode 100644
index 0000000000..bcf41e46fd
--- /dev/null
+++ b/pvlib/data/Burlington, United States SolarAnywhere Time Series 20210101 to 20210103 Lat_44_4675 Lon_-73_2075 SA format.csv
@@ -0,0 +1,578 @@
+0,Burlington United States,NA,-5,44.4675,-73.2075,41,"Data Version: 3.6 / Type: Timeseries / LatLon Resolution: 0.005 / Time Resolution: 5 minutes / Averaging Method: End of Period / TD: Yes / Copyright 2010-2022 Clean Power Research®, L.L.C. DownloadID=adb3c86a-b11f-4263-a2db-8d2626da9390"
+ObservationTime(LST),Global Horizontal Irradiance (GHI) W/m2,Direct Normal Irradiance (DNI) W/m2,AmbientTemperature (deg C),WindSpeed (m/s),Relative Humidity (%),Liquid Precipitation (kg/m2),Solid Precipitation (kg/m2),Snow Depth (m),Clear Sky GHI,Clear Sky DNI,Clear Sky DHI,IrradianceObservationType,LeadTime,DataVersion,ObservationTime(GMT),Diffuse Horizontal Irradiance (DIF) W/m2,AmbientTemperatureObservationType,WindSpeedObservationType,Albedo,Particulate Matter 10 (µg/m3),Particulate Matter 2.5 (µg/m3)
+01/01/2021 00:05,0,0,-2,2,73,0.0007,0,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:05,0,O,O,0.6,4.5,5.8
+01/01/2021 00:10,0,0,-2,2,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:10,0,O,O,0.6,4.5,5.8
+01/01/2021 00:15,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:15,0,O,O,0.6,4.5,5.8
+01/01/2021 00:20,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:20,0,O,O,0.6,4.5,5.8
+01/01/2021 00:25,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:25,0,O,O,0.6,4.5,5.8
+01/01/2021 00:30,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:30,0,O,O,0.6,4.5,5.8
+01/01/2021 00:35,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:35,0,O,O,0.6,4.5,5.8
+01/01/2021 00:40,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:40,0,O,O,0.6,4.5,5.8
+01/01/2021 00:45,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:45,0,O,O,0.6,4.5,5.8
+01/01/2021 00:50,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:50,0,O,O,0.6,4.5,5.8
+01/01/2021 00:55,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 05:55,0,O,O,0.6,4.5,5.8
+01/01/2021 01:00,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:00,0,O,O,0.6,4.5,5.8
+01/01/2021 01:05,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:05,0,O,O,0.6,5.1,6.4
+01/01/2021 01:10,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:10,0,O,O,0.6,5.1,6.4
+01/01/2021 01:15,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:15,0,O,O,0.6,5.1,6.4
+01/01/2021 01:20,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:20,0,O,O,0.6,5.1,6.4
+01/01/2021 01:25,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:25,0,O,O,0.6,5.1,6.4
+01/01/2021 01:30,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:30,0,O,O,0.6,5.1,6.4
+01/01/2021 01:35,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:35,0,O,O,0.6,5.1,6.4
+01/01/2021 01:40,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:40,0,O,O,0.6,5.1,6.4
+01/01/2021 01:45,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:45,0,O,O,0.6,5.1,6.4
+01/01/2021 01:50,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:50,0,O,O,0.6,5.1,6.4
+01/01/2021 01:55,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 06:55,0,O,O,0.6,5.1,6.4
+01/01/2021 02:00,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:00,0,O,O,0.6,5.1,6.4
+01/01/2021 02:05,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:05,0,O,O,0.6,5.1,7
+01/01/2021 02:10,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:10,0,O,O,0.6,5.1,7
+01/01/2021 02:15,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:15,0,O,O,0.6,5.1,7
+01/01/2021 02:20,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:20,0,O,O,0.6,5.1,7
+01/01/2021 02:25,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:25,0,O,O,0.6,5.1,7
+01/01/2021 02:30,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:30,0,O,O,0.6,5.1,7
+01/01/2021 02:35,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:35,0,O,O,0.6,5.1,7
+01/01/2021 02:40,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:40,0,O,O,0.6,5.1,7
+01/01/2021 02:45,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:45,0,O,O,0.6,5.1,7
+01/01/2021 02:50,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:50,0,O,O,0.6,5.1,7
+01/01/2021 02:55,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 07:55,0,O,O,0.6,5.1,7
+01/01/2021 03:00,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:00,0,O,O,0.6,5.1,7
+01/01/2021 03:05,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:05,0,O,O,0.6,5.1,7.6
+01/01/2021 03:10,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:10,0,O,O,0.6,5.1,7.6
+01/01/2021 03:15,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:15,0,O,O,0.6,5.1,7.6
+01/01/2021 03:20,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:20,0,O,O,0.6,5.1,7.6
+01/01/2021 03:25,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:25,0,O,O,0.6,5.1,7.6
+01/01/2021 03:30,0,0,-2,2,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:30,0,O,O,0.6,5.1,7.6
+01/01/2021 03:35,0,0,-2,2,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:35,0,O,O,0.6,5.1,7.6
+01/01/2021 03:40,0,0,-2,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:40,0,O,O,0.6,5.1,7.6
+01/01/2021 03:45,0,0,-2,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:45,0,O,O,0.6,5.1,7.6
+01/01/2021 03:50,0,0,-2,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:50,0,O,O,0.6,5.1,7.6
+01/01/2021 03:55,0,0,-2,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 08:55,0,O,O,0.6,5.1,7.6
+01/01/2021 04:00,0,0,-2,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:00,0,O,O,0.6,5.1,7.6
+01/01/2021 04:05,0,0,-2,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:05,0,O,O,0.6,6.2,8
+01/01/2021 04:10,0,0,-2,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:10,0,O,O,0.6,6.2,8
+01/01/2021 04:15,0,0,-2,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:15,0,O,O,0.6,6.2,8
+01/01/2021 04:20,0,0,-2,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:20,0,O,O,0.6,6.2,8
+01/01/2021 04:25,0,0,-2,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:25,0,O,O,0.6,6.2,8
+01/01/2021 04:30,0,0,-2,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:30,0,O,O,0.6,6.2,8
+01/01/2021 04:35,0,0,-2,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:35,0,O,O,0.6,6.2,8
+01/01/2021 04:40,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:40,0,O,O,0.6,6.2,8
+01/01/2021 04:45,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:45,0,O,O,0.6,6.2,8
+01/01/2021 04:50,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:50,0,O,O,0.6,6.2,8
+01/01/2021 04:55,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 09:55,0,O,O,0.6,6.2,8
+01/01/2021 05:00,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:00,0,O,O,0.6,6.2,8
+01/01/2021 05:05,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:05,0,O,O,0.6,6.2,8.5
+01/01/2021 05:10,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:10,0,O,O,0.6,6.2,8.5
+01/01/2021 05:15,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:15,0,O,O,0.6,6.2,8.5
+01/01/2021 05:20,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:20,0,O,O,0.6,6.2,8.5
+01/01/2021 05:25,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:25,0,O,O,0.6,6.2,8.5
+01/01/2021 05:30,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:30,0,O,O,0.6,6.2,8.5
+01/01/2021 05:35,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:35,0,O,O,0.6,6.2,8.5
+01/01/2021 05:40,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:40,0,O,O,0.6,6.2,8.5
+01/01/2021 05:45,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:45,0,O,O,0.6,6.2,8.5
+01/01/2021 05:50,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:50,0,O,O,0.6,6.2,8.5
+01/01/2021 05:55,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 10:55,0,O,O,0.6,6.2,8.5
+01/01/2021 06:00,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:00,0,O,O,0.6,6.2,8.5
+01/01/2021 06:05,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:05,0,O,O,0.6,6.2,8.8
+01/01/2021 06:10,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:10,0,O,O,0.6,6.2,8.8
+01/01/2021 06:15,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:15,0,O,O,0.6,6.2,8.8
+01/01/2021 06:20,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:20,0,O,O,0.6,6.2,8.8
+01/01/2021 06:25,0,0,-3,1,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:25,0,O,O,0.6,6.2,8.8
+01/01/2021 06:30,0,0,-3,1,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:30,0,O,O,0.6,6.2,8.8
+01/01/2021 06:35,0,0,-3,0,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:35,0,O,O,0.6,6.2,8.8
+01/01/2021 06:40,0,0,-3,0,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:40,0,O,O,0.6,6.2,8.8
+01/01/2021 06:45,0,0,-3,0,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:45,0,O,O,0.6,6.2,8.8
+01/01/2021 06:50,0,0,-3,0,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:50,0,O,O,0.6,6.2,8.8
+01/01/2021 06:55,0,0,-3,0,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 11:55,0,O,O,0.6,6.2,8.8
+01/01/2021 07:00,0,0,-3,0,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 12:00,0,O,O,0.6,6.2,8.8
+01/01/2021 07:05,0,0,-3,0,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 12:05,0,O,O,0.6,6.9,8.9
+01/01/2021 07:10,0,0,-3,0,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 12:10,0,O,O,0.6,6.9,8.9
+01/01/2021 07:15,0,0,-3,0,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 12:15,0,O,O,0.6,6.9,8.9
+01/01/2021 07:20,0,0,-3,0,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 12:20,0,O,O,0.6,6.9,8.9
+01/01/2021 07:25,0,0,-3,0,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 12:25,0,O,O,0.6,6.9,8.9
+01/01/2021 07:30,0,0,-3,0,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 12:30,0,O,O,0.6,6.9,8.9
+01/01/2021 07:35,0,0,-3,0,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 12:35,0,O,O,0.6,6.9,8.9
+01/01/2021 07:40,0,0,-3,1,74,0,0.0017,0,0,112,0,AN,,SolarAnywhere3_6,01/01/2021 12:40,0,O,O,0.6,6.9,8.9
+01/01/2021 07:45,1,0,-3,1,74,0,0.0017,0,5,170,2,AD,,SolarAnywhere3_6,01/01/2021 12:45,1,O,O,0.6,6.9,8.9
+01/01/2021 07:50,5,0,-3,1,74,0,0.0017,0,14,225,6,AD,,SolarAnywhere3_6,01/01/2021 12:50,5,O,O,0.6,6.9,8.9
+01/01/2021 07:55,9,0,-3,1,74,0,0.0017,0,24,274,11,AD,,SolarAnywhere3_6,01/01/2021 12:55,9,O,O,0.6,6.9,8.9
+01/01/2021 08:00,17,0,-3,1,74,0,0.0017,0,36,316,18,AD,,SolarAnywhere3_6,01/01/2021 13:00,17,O,O,0.6,6.9,8.9
+01/01/2021 08:05,15,0,-3,1,74,0,0.0017,0,47,336,23,AD,,SolarAnywhere3_6,01/01/2021 13:05,15,O,O,0.6,6.9,8.8
+01/01/2021 08:10,20,0,-3,1,73,0,0.0017,0,59,372,28,AD,,SolarAnywhere3_6,01/01/2021 13:10,20,O,O,0.6,6.9,8.8
+01/01/2021 08:15,23,0,-2,1,72,0,0.0017,0,71,407,32,AD,,SolarAnywhere3_6,01/01/2021 13:15,23,O,O,0.6,6.9,8.8
+01/01/2021 08:20,26,0,-2,1,71,0,0.0017,0,84,440,37,AD,,SolarAnywhere3_6,01/01/2021 13:20,26,O,O,0.6,6.9,8.8
+01/01/2021 08:25,28,0,-2,1,70,0,0.0017,0,96,471,40,AD,,SolarAnywhere3_6,01/01/2021 13:25,28,O,O,0.6,6.9,8.8
+01/01/2021 08:30,42,0,-2,1,69,0,0.0017,0,109,500,44,AD,,SolarAnywhere3_6,01/01/2021 13:30,42,O,O,0.6,6.9,8.8
+01/01/2021 08:35,31,0,-2,1,68,0,0.0017,0,121,526,47,AD,,SolarAnywhere3_6,01/01/2021 13:35,31,O,O,0.6,6.9,8.8
+01/01/2021 08:40,35,0,-1,1,67,0,0.0017,0,134,551,50,AD,,SolarAnywhere3_6,01/01/2021 13:40,35,O,O,0.6,6.9,8.8
+01/01/2021 08:45,37,0,-1,1,67,0,0.0017,0,146,574,53,AD,,SolarAnywhere3_6,01/01/2021 13:45,37,O,O,0.6,6.9,8.8
+01/01/2021 08:50,37,0,-1,1,66,0,0.0017,0,159,595,56,AD,,SolarAnywhere3_6,01/01/2021 13:50,37,O,O,0.6,6.9,8.8
+01/01/2021 08:55,40,0,0,1,65,0,0.0017,0,171,614,58,AD,,SolarAnywhere3_6,01/01/2021 13:55,40,O,O,0.6,6.9,8.8
+01/01/2021 09:00,39,0,0,1,64,0,0.0017,0,183,632,61,AD,,SolarAnywhere3_6,01/01/2021 14:00,39,O,O,0.6,6.9,8.8
+01/01/2021 09:05,41,0,0,1,63,0,0.0017,0,194,638,64,AD,,SolarAnywhere3_6,01/01/2021 14:05,41,O,O,0.6,6.9,5.6
+01/01/2021 09:10,63,0,0,1,63,0,0.0017,0,206,654,66,AD,,SolarAnywhere3_6,01/01/2021 14:10,63,O,O,0.6,6.9,5.6
+01/01/2021 09:15,64,0,0,1,63,0,0.0017,0,217,668,68,AD,,SolarAnywhere3_6,01/01/2021 14:15,64,O,O,0.6,6.9,5.6
+01/01/2021 09:20,51,0,0,1,63,0,0.0017,0,228,682,70,AD,,SolarAnywhere3_6,01/01/2021 14:20,51,O,O,0.6,6.9,5.6
+01/01/2021 09:25,51,0,0,1,63,0,0.0017,0,240,695,72,AD,,SolarAnywhere3_6,01/01/2021 14:25,51,O,O,0.6,6.9,5.6
+01/01/2021 09:30,76,0,0,1,63,0,0.0017,0,250,706,74,AD,,SolarAnywhere3_6,01/01/2021 14:30,76,O,O,0.6,6.9,5.6
+01/01/2021 09:35,80,0,0,1,63,0,0.0017,0,261,717,76,AD,,SolarAnywhere3_6,01/01/2021 14:35,80,O,O,0.6,6.9,5.6
+01/01/2021 09:40,82,0,0,1,63,0,0.0017,0,271,728,77,AD,,SolarAnywhere3_6,01/01/2021 14:40,82,O,O,0.6,6.9,5.6
+01/01/2021 09:45,65,0,0,1,63,0,0.0017,0,281,737,79,AD,,SolarAnywhere3_6,01/01/2021 14:45,65,O,O,0.6,6.9,5.6
+01/01/2021 09:50,63,0,0,1,63,0,0.0017,0,291,746,80,AD,,SolarAnywhere3_6,01/01/2021 14:50,63,O,O,0.6,6.9,5.6
+01/01/2021 09:55,73,0,0,1,63,0,0.0017,0,300,755,81,AD,,SolarAnywhere3_6,01/01/2021 14:55,73,O,O,0.6,6.9,5.6
+01/01/2021 10:00,95,0,0,1,63,0,0.0017,0,310,762,84,AD,,SolarAnywhere3_6,01/01/2021 15:00,95,O,O,0.6,6.9,5.6
+01/01/2021 10:05,94,0,0,1,63,0,0.0017,0,318,761,87,AD,,SolarAnywhere3_6,01/01/2021 15:05,94,O,O,0.6,9.2,4.6
+01/01/2021 10:10,84,0,0,1,63,0,0.0017,0,326,768,87,AD,,SolarAnywhere3_6,01/01/2021 15:10,84,O,O,0.6,9.2,4.6
+01/01/2021 10:15,127,9,0,1,63,0,0.0017,0,334,774,89,AD,,SolarAnywhere3_6,01/01/2021 15:15,124,O,O,0.6,9.2,4.6
+01/01/2021 10:20,172,69,0,1,63,0,0.0017,0,342,780,90,AD,,SolarAnywhere3_6,01/01/2021 15:20,150,O,O,0.6,9.2,4.6
+01/01/2021 10:25,218,252,0,1,63,0,0.0017,0,350,786,91,AD,,SolarAnywhere3_6,01/01/2021 15:25,135,O,O,0.6,9.2,4.6
+01/01/2021 10:30,237,313,0,1,63,0,0.0017,0,357,791,92,AD,,SolarAnywhere3_6,01/01/2021 15:30,132,O,O,0.6,9.2,4.6
+01/01/2021 10:35,251,356,0,1,63,0,0.0017,0,364,796,94,AD,,SolarAnywhere3_6,01/01/2021 15:35,130,O,O,0.6,9.2,4.6
+01/01/2021 10:40,274,455,0,1,62,0,0.0017,0,370,801,94,AD,,SolarAnywhere3_6,01/01/2021 15:40,117,O,O,0.6,9.2,4.6
+01/01/2021 10:45,290,541,0,1,62,0,0.0017,0,377,805,96,AD,,SolarAnywhere3_6,01/01/2021 15:45,101,O,O,0.6,9.2,4.6
+01/01/2021 10:50,276,424,0,1,62,0,0.0017,0,382,809,96,AD,,SolarAnywhere3_6,01/01/2021 15:50,126,O,O,0.6,9.2,4.6
+01/01/2021 10:55,274,397,0,1,62,0,0.0017,0,388,812,97,AD,,SolarAnywhere3_6,01/01/2021 15:55,132,O,O,0.6,9.2,4.6
+01/01/2021 11:00,220,119,0,1,62,0,0.0017,0,393,816,98,AD,,SolarAnywhere3_6,01/01/2021 16:00,177,O,O,0.6,9.2,4.6
+01/01/2021 11:05,199,75,0,1,62,0,0.0017,0,397,817,99,AD,,SolarAnywhere3_6,01/01/2021 16:05,172,O,O,0.6,9.2,4.3
+01/01/2021 11:10,179,44,0,1,62,0,0.0017,0,402,820,100,AD,,SolarAnywhere3_6,01/01/2021 16:10,163,O,O,0.6,9.2,4.3
+01/01/2021 11:15,163,22,0,1,61,0,0.0017,0,405,822,100,AD,,SolarAnywhere3_6,01/01/2021 16:15,155,O,O,0.6,9.2,4.3
+01/01/2021 11:20,159,18,0,1,61,0,0.0017,0,409,824,101,AD,,SolarAnywhere3_6,01/01/2021 16:20,152,O,O,0.6,9.2,4.3
+01/01/2021 11:25,189,51,0,1,60,0,0.0017,0,412,826,102,AD,,SolarAnywhere3_6,01/01/2021 16:25,170,O,O,0.6,9.2,4.3
+01/01/2021 11:30,154,13,0,1,60,0,0.0017,0,415,828,102,AD,,SolarAnywhere3_6,01/01/2021 16:30,149,O,O,0.6,9.2,4.3
+01/01/2021 11:35,161,17,0,0,59,0,0.0017,0,417,829,102,AD,,SolarAnywhere3_6,01/01/2021 16:35,154,O,O,0.6,9.2,4.3
+01/01/2021 11:40,179,32,0,0,59,0,0.0017,0,419,830,103,AD,,SolarAnywhere3_6,01/01/2021 16:40,167,O,O,0.6,9.2,4.3
+01/01/2021 11:45,151,10,0,0,59,0,0.0017,0,421,831,104,AD,,SolarAnywhere3_6,01/01/2021 16:45,147,O,O,0.6,9.2,4.3
+01/01/2021 11:50,198,57,0,0,58,0,0.0017,0,422,832,104,AD,,SolarAnywhere3_6,01/01/2021 16:50,176,O,O,0.6,9.2,4.3
+01/01/2021 11:55,163,17,0,0,58,0,0.0017,0,422,832,104,AD,,SolarAnywhere3_6,01/01/2021 16:55,156,O,O,0.6,9.2,4.3
+01/01/2021 12:00,176,28,0,0,57,0,0.0017,0,423,832,104,AD,,SolarAnywhere3_6,01/01/2021 17:00,165,O,O,0.6,9.2,4.3
+01/01/2021 12:05,146,7,0,0,57,0,0.0017,0,423,831,105,AD,,SolarAnywhere3_6,01/01/2021 17:05,143,O,O,0.6,9.2,4.2
+01/01/2021 12:10,165,19,0,0,57,0,0.0017,0,422,830,105,AD,,SolarAnywhere3_6,01/01/2021 17:10,158,O,O,0.6,9.2,4.2
+01/01/2021 12:15,222,93,0,0,57,0,0.0017,0,421,830,105,AD,,SolarAnywhere3_6,01/01/2021 17:15,187,O,O,0.6,9.2,4.2
+01/01/2021 12:20,207,70,0,0,57,0,0.0017,0,420,829,105,AD,,SolarAnywhere3_6,01/01/2021 17:20,180,O,O,0.6,9.2,4.2
+01/01/2021 12:25,259,255,0,0,57,0,0.0017,0,418,828,105,AD,,SolarAnywhere3_6,01/01/2021 17:25,162,O,O,0.6,9.2,4.2
+01/01/2021 12:30,276,323,0,0,57,0,0.0017,0,416,827,104,AD,,SolarAnywhere3_6,01/01/2021 17:30,154,O,O,0.6,9.2,4.2
+01/01/2021 12:35,271,309,0,0,57,0,0.0017,0,414,825,105,AD,,SolarAnywhere3_6,01/01/2021 17:35,155,O,O,0.6,9.2,4.2
+01/01/2021 12:40,225,109,1,1,57,0,0.0017,0,411,824,104,AD,,SolarAnywhere3_6,01/01/2021 17:40,184,O,O,0.6,9.2,4.2
+01/01/2021 12:45,229,120,1,1,57,0,0.0017,0,408,822,104,AD,,SolarAnywhere3_6,01/01/2021 17:45,185,O,O,0.6,9.2,4.2
+01/01/2021 12:50,219,104,1,1,57,0,0.0017,0,404,819,104,AD,,SolarAnywhere3_6,01/01/2021 17:50,181,O,O,0.6,9.2,4.2
+01/01/2021 12:55,176,41,1,1,57,0,0.0017,0,400,817,103,AD,,SolarAnywhere3_6,01/01/2021 17:55,161,O,O,0.6,9.2,4.2
+01/01/2021 13:00,170,33,1,1,57,0,0.0017,0,396,814,104,AD,,SolarAnywhere3_6,01/01/2021 18:00,158,O,O,0.6,9.2,4.2
+01/01/2021 13:05,159,24,1,1,57,0,0.0017,0,391,809,104,AD,,SolarAnywhere3_6,01/01/2021 18:05,150,O,O,0.6,7.2,4.1
+01/01/2021 13:10,181,55,1,1,56,0,0.0017,0,385,806,102,AD,,SolarAnywhere3_6,01/01/2021 18:10,162,O,O,0.6,7.2,4.1
+01/01/2021 13:15,168,41,1,1,56,0,0.0017,0,380,802,102,AD,,SolarAnywhere3_6,01/01/2021 18:15,154,O,O,0.6,7.2,4.1
+01/01/2021 13:20,174,53,1,1,56,0,0.0017,0,374,798,101,AD,,SolarAnywhere3_6,01/01/2021 18:20,156,O,O,0.6,7.2,4.1
+01/01/2021 13:25,179,60,1,1,56,0,0.0017,0,368,794,101,AD,,SolarAnywhere3_6,01/01/2021 18:25,159,O,O,0.6,7.2,4.1
+01/01/2021 13:30,159,36,1,1,56,0,0.0017,0,361,789,100,AD,,SolarAnywhere3_6,01/01/2021 18:30,147,O,O,0.6,7.2,4.1
+01/01/2021 13:35,159,40,1,1,56,0,0.0017,0,354,784,99,AD,,SolarAnywhere3_6,01/01/2021 18:35,146,O,O,0.6,7.2,4.1
+01/01/2021 13:40,139,14,1,1,56,0,0.0017,0,347,779,98,AD,,SolarAnywhere3_6,01/01/2021 18:40,134,O,O,0.6,7.2,4.1
+01/01/2021 13:45,138,15,1,1,56,0,0.0017,0,339,773,97,AD,,SolarAnywhere3_6,01/01/2021 18:45,133,O,O,0.6,7.2,4.1
+01/01/2021 13:50,152,44,1,1,56,0,0.0017,0,331,767,96,AD,,SolarAnywhere3_6,01/01/2021 18:50,138,O,O,0.6,7.2,4.1
+01/01/2021 13:55,136,19,1,1,56,0,0.0017,0,323,760,95,AD,,SolarAnywhere3_6,01/01/2021 18:55,130,O,O,0.6,7.2,4.1
+01/01/2021 14:00,135,21,1,1,56,0,0.0017,0,314,753,94,AD,,SolarAnywhere3_6,01/01/2021 19:00,129,O,O,0.6,7.2,4.1
+01/01/2021 14:05,129,18,1,1,56,0,0.0017,0,303,726,96,AD,,SolarAnywhere3_6,01/01/2021 19:05,124,O,O,0.6,7.2,4.1
+01/01/2021 14:10,134,38,1,1,56,0,0.0017,0,294,718,95,AD,,SolarAnywhere3_6,01/01/2021 19:10,123,O,O,0.6,7.2,4.1
+01/01/2021 14:15,121,17,1,1,57,0,0.0017,0,285,709,94,AD,,SolarAnywhere3_6,01/01/2021 19:15,116,O,O,0.6,7.2,4.1
+01/01/2021 14:20,116,16,1,1,57,0,0.0017,0,275,699,92,AD,,SolarAnywhere3_6,01/01/2021 19:20,112,O,O,0.6,7.2,4.1
+01/01/2021 14:25,109,13,1,1,57,0,0.0017,0,265,689,91,AD,,SolarAnywhere3_6,01/01/2021 19:25,106,O,O,0.6,7.2,4.1
+01/01/2021 14:30,93,3,1,1,57,0,0.0017,0,254,678,88,AD,,SolarAnywhere3_6,01/01/2021 19:30,92,O,O,0.6,7.2,4.1
+01/01/2021 14:35,88,1,0,1,57,0,0.0017,0,244,666,87,AD,,SolarAnywhere3_6,01/01/2021 19:35,88,O,O,0.6,7.2,4.1
+01/01/2021 14:40,87,3,0,1,57,0,0.0017,0,233,653,85,AD,,SolarAnywhere3_6,01/01/2021 19:40,86,O,O,0.6,7.2,4.1
+01/01/2021 14:45,75,0,0,1,57,0,0.0017,0,222,639,83,AD,,SolarAnywhere3_6,01/01/2021 19:45,75,O,O,0.6,7.2,4.1
+01/01/2021 14:50,57,0,0,1,58,0,0.0017,0,211,625,81,AD,,SolarAnywhere3_6,01/01/2021 19:50,57,O,O,0.6,7.2,4.1
+01/01/2021 14:55,59,0,0,1,58,0,0.0017,0,199,609,79,AD,,SolarAnywhere3_6,01/01/2021 19:55,59,O,O,0.6,7.2,4.1
+01/01/2021 15:00,50,0,0,1,58,0,0.0017,0,187,592,76,AD,,SolarAnywhere3_6,01/01/2021 20:00,50,O,O,0.6,7.2,4.1
+01/01/2021 15:05,54,0,0,1,58,0,0.0017,0,174,551,76,AD,,SolarAnywhere3_6,01/01/2021 20:05,54,O,O,0.6,7.2,4.3
+01/01/2021 15:10,53,0,0,1,59,0,0.0017,0,162,531,74,AD,,SolarAnywhere3_6,01/01/2021 20:10,53,O,O,0.6,7.2,4.3
+01/01/2021 15:15,40,0,0,1,59,0,0.0017,0,150,509,71,AD,,SolarAnywhere3_6,01/01/2021 20:15,40,O,O,0.6,7.2,4.3
+01/01/2021 15:20,22,0,0,1,59,0,0.0017,0,138,486,68,AD,,SolarAnywhere3_6,01/01/2021 20:20,22,O,O,0.6,7.2,4.3
+01/01/2021 15:25,30,0,0,1,60,0,0.0017,0,126,461,64,AD,,SolarAnywhere3_6,01/01/2021 20:25,30,O,O,0.6,7.2,4.3
+01/01/2021 15:30,19,0,0,1,60,0,0.0017,0,113,434,60,AD,,SolarAnywhere3_6,01/01/2021 20:30,19,O,O,0.6,7.2,4.3
+01/01/2021 15:35,24,0,0,2,61,0,0.0017,0,101,405,56,AD,,SolarAnywhere3_6,01/01/2021 20:35,24,O,O,0.6,7.2,4.3
+01/01/2021 15:40,19,0,0,2,61,0,0.0017,0,89,374,52,AD,,SolarAnywhere3_6,01/01/2021 20:40,19,O,O,0.6,7.2,4.3
+01/01/2021 15:45,19,0,0,2,61,0,0.0017,0,77,341,47,AD,,SolarAnywhere3_6,01/01/2021 20:45,19,O,O,0.6,7.2,4.3
+01/01/2021 15:50,13,0,0,2,62,0,0.0017,0,64,306,41,AD,,SolarAnywhere3_6,01/01/2021 20:50,13,O,O,0.6,7.2,4.3
+01/01/2021 15:55,10,0,0,2,62,0,0.0017,0,53,270,36,AD,,SolarAnywhere3_6,01/01/2021 20:55,10,O,O,0.6,7.2,4.3
+01/01/2021 16:00,8,0,0,2,63,0,0.0017,0,41,232,29,AD,,SolarAnywhere3_6,01/01/2021 21:00,8,O,O,0.6,7.2,4.3
+01/01/2021 16:05,7,0,0,2,63,0,0.0017,0,29,171,22,AD,,SolarAnywhere3_6,01/01/2021 21:05,7,O,O,0.6,7.3,4.5
+01/01/2021 16:10,6,0,0,2,64,0,0.0017,0,19,130,16,AD,,SolarAnywhere3_6,01/01/2021 21:10,6,O,O,0.6,7.3,4.5
+01/01/2021 16:15,2,0,0,2,64,0,0.0017,0,10,89,9,AD,,SolarAnywhere3_6,01/01/2021 21:15,2,O,O,0.6,7.3,4.5
+01/01/2021 16:20,2,0,0,2,65,0,0.0017,0,2,50,2,AD,,SolarAnywhere3_6,01/01/2021 21:20,2,O,O,0.6,7.3,4.5
+01/01/2021 16:25,0,0,0,2,65,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 21:25,0,O,O,0.6,7.3,4.5
+01/01/2021 16:30,0,0,0,2,66,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 21:30,0,O,O,0.6,7.3,4.5
+01/01/2021 16:35,0,0,0,2,66,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 21:35,0,O,O,0.6,7.3,4.5
+01/01/2021 16:40,0,0,-1,2,67,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 21:40,0,O,O,0.6,7.3,4.5
+01/01/2021 16:45,0,0,-1,2,67,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 21:45,0,O,O,0.6,7.3,4.5
+01/01/2021 16:50,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 21:50,0,O,O,0.6,7.3,4.5
+01/01/2021 16:55,0,0,-1,2,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 21:55,0,O,O,0.6,7.3,4.5
+01/01/2021 17:00,0,0,-1,2,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:00,0,O,O,0.6,7.3,4.5
+01/01/2021 17:05,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:05,0,O,O,0.6,7.3,4.7
+01/01/2021 17:10,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:10,0,O,O,0.6,7.3,4.7
+01/01/2021 17:15,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:15,0,O,O,0.6,7.3,4.7
+01/01/2021 17:20,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:20,0,O,O,0.6,7.3,4.7
+01/01/2021 17:25,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:25,0,O,O,0.6,7.3,4.7
+01/01/2021 17:30,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:30,0,O,O,0.6,7.3,4.7
+01/01/2021 17:35,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:35,0,O,O,0.6,7.3,4.7
+01/01/2021 17:40,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:40,0,O,O,0.6,7.3,4.7
+01/01/2021 17:45,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:45,0,O,O,0.6,7.3,4.7
+01/01/2021 17:50,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:50,0,O,O,0.6,7.3,4.7
+01/01/2021 17:55,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 22:55,0,O,O,0.6,7.3,4.7
+01/01/2021 18:00,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:00,0,O,O,0.6,7.3,4.7
+01/01/2021 18:05,0,0,-1,2,71,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:05,0,O,O,0.6,7.3,5
+01/01/2021 18:10,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:10,0,O,O,0.6,7.3,5
+01/01/2021 18:15,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:15,0,O,O,0.6,7.3,5
+01/01/2021 18:20,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:20,0,O,O,0.6,7.3,5
+01/01/2021 18:25,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:25,0,O,O,0.6,7.3,5
+01/01/2021 18:30,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:30,0,O,O,0.6,7.3,5
+01/01/2021 18:35,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:35,0,O,O,0.6,7.3,5
+01/01/2021 18:40,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:40,0,O,O,0.6,7.3,5
+01/01/2021 18:45,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:45,0,O,O,0.6,7.3,5
+01/01/2021 18:50,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:50,0,O,O,0.6,7.3,5
+01/01/2021 18:55,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/01/2021 23:55,0,O,O,0.6,7.3,5
+01/01/2021 19:00,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:00,0,O,O,0.6,7.3,5
+01/01/2021 19:05,0,0,-1,2,70,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:05,0,O,O,0.6,8.9,5.3
+01/01/2021 19:10,0,0,-1,2,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:10,0,O,O,0.6,8.9,5.3
+01/01/2021 19:15,0,0,-1,2,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:15,0,O,O,0.6,8.9,5.3
+01/01/2021 19:20,0,0,-1,2,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:20,0,O,O,0.6,8.9,5.3
+01/01/2021 19:25,0,0,-1,2,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:25,0,O,O,0.6,8.9,5.3
+01/01/2021 19:30,0,0,-1,2,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:30,0,O,O,0.6,8.9,5.3
+01/01/2021 19:35,0,0,-1,2,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:35,0,O,O,0.6,8.9,5.3
+01/01/2021 19:40,0,0,-1,2,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:40,0,O,O,0.6,8.9,5.3
+01/01/2021 19:45,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:45,0,O,O,0.6,8.9,5.3
+01/01/2021 19:50,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:50,0,O,O,0.6,8.9,5.3
+01/01/2021 19:55,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 00:55,0,O,O,0.6,8.9,5.3
+01/01/2021 20:00,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:00,0,O,O,0.6,8.9,5.3
+01/01/2021 20:05,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:05,0,O,O,0.6,8.9,5.7
+01/01/2021 20:10,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:10,0,O,O,0.6,8.9,5.7
+01/01/2021 20:15,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:15,0,O,O,0.6,8.9,5.7
+01/01/2021 20:20,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:20,0,O,O,0.6,8.9,5.7
+01/01/2021 20:25,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:25,0,O,O,0.6,8.9,5.7
+01/01/2021 20:30,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:30,0,O,O,0.6,8.9,5.7
+01/01/2021 20:35,0,0,-1,2,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:35,0,O,O,0.6,8.9,5.7
+01/01/2021 20:40,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:40,0,O,O,0.6,8.9,5.7
+01/01/2021 20:45,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:45,0,O,O,0.6,8.9,5.7
+01/01/2021 20:50,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:50,0,O,O,0.6,8.9,5.7
+01/01/2021 20:55,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 01:55,0,O,O,0.6,8.9,5.7
+01/01/2021 21:00,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:00,0,O,O,0.6,8.9,5.7
+01/01/2021 21:05,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:05,0,O,O,0.6,8.9,6.2
+01/01/2021 21:10,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:10,0,O,O,0.6,8.9,6.2
+01/01/2021 21:15,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:15,0,O,O,0.6,8.9,6.2
+01/01/2021 21:20,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:20,0,O,O,0.6,8.9,6.2
+01/01/2021 21:25,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:25,0,O,O,0.6,8.9,6.2
+01/01/2021 21:30,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:30,0,O,O,0.6,8.9,6.2
+01/01/2021 21:35,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:35,0,O,O,0.6,8.9,6.2
+01/01/2021 21:40,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:40,0,O,O,0.6,8.9,6.2
+01/01/2021 21:45,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:45,0,O,O,0.6,8.9,6.2
+01/01/2021 21:50,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:50,0,O,O,0.6,8.9,6.2
+01/01/2021 21:55,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 02:55,0,O,O,0.6,8.9,6.2
+01/01/2021 22:00,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:00,0,O,O,0.6,8.9,6.2
+01/01/2021 22:05,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:05,0,O,O,0.6,12,6.6
+01/01/2021 22:10,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:10,0,O,O,0.6,12,6.6
+01/01/2021 22:15,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:15,0,O,O,0.6,12,6.6
+01/01/2021 22:20,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:20,0,O,O,0.6,12,6.6
+01/01/2021 22:25,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:25,0,O,O,0.6,12,6.6
+01/01/2021 22:30,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:30,0,O,O,0.6,12,6.6
+01/01/2021 22:35,0,0,-1,3,68,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:35,0,O,O,0.6,12,6.6
+01/01/2021 22:40,0,0,-1,3,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:40,0,O,O,0.6,12,6.6
+01/01/2021 22:45,0,0,-1,3,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:45,0,O,O,0.6,12,6.6
+01/01/2021 22:50,0,0,-1,3,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:50,0,O,O,0.6,12,6.6
+01/01/2021 22:55,0,0,-1,3,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 03:55,0,O,O,0.6,12,6.6
+01/01/2021 23:00,0,0,-1,3,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:00,0,O,O,0.6,12,6.6
+01/01/2021 23:05,0,0,-1,3,69,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:05,0,O,O,0.6,12,7
+01/01/2021 23:10,0,0,-1,3,71,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:10,0,O,O,0.6,12,7
+01/01/2021 23:15,0,0,-1,3,72,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:15,0,O,O,0.6,12,7
+01/01/2021 23:20,0,0,-1,3,73,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:20,0,O,O,0.6,12,7
+01/01/2021 23:25,0,0,-1,3,74,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:25,0,O,O,0.6,12,7
+01/01/2021 23:30,0,0,-1,3,75,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:30,0,O,O,0.6,12,7
+01/01/2021 23:35,0,0,-1,3,77,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:35,0,O,O,0.6,12,7
+01/01/2021 23:40,0,0,-1,3,78,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:40,0,O,O,0.6,12,7
+01/01/2021 23:45,0,0,-1,3,79,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:45,0,O,O,0.6,12,7
+01/01/2021 23:50,0,0,-1,3,80,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:50,0,O,O,0.6,12,7
+01/01/2021 23:55,0,0,-1,3,82,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 04:55,0,O,O,0.6,12,7
+01/02/2021 00:00,0,0,-1,3,83,0,0.0017,0,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:00,0,O,O,0.6,12,7
+01/02/2021 00:05,0,0,-1,3,84,0,0.0017,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:05,0,O,O,0.6,12,7.4
+01/02/2021 00:10,0,0,-1,3,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:10,0,O,O,0.6,12,7.4
+01/02/2021 00:15,0,0,-1,3,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:15,0,O,O,0.6,12,7.4
+01/02/2021 00:20,0,0,-1,3,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:20,0,O,O,0.6,12,7.4
+01/02/2021 00:25,0,0,-1,3,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:25,0,O,O,0.6,12,7.4
+01/02/2021 00:30,0,0,-1,3,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:30,0,O,O,0.6,12,7.4
+01/02/2021 00:35,0,0,-2,3,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:35,0,O,O,0.6,12,7.4
+01/02/2021 00:40,0,0,-2,3,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:40,0,O,O,0.6,12,7.4
+01/02/2021 00:45,0,0,-2,3,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:45,0,O,O,0.6,12,7.4
+01/02/2021 00:50,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:50,0,O,O,0.6,12,7.4
+01/02/2021 00:55,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 05:55,0,O,O,0.6,12,7.4
+01/02/2021 01:00,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:00,0,O,O,0.6,12,7.4
+01/02/2021 01:05,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:05,0,O,O,0.6,13.7,7.7
+01/02/2021 01:10,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:10,0,O,O,0.6,13.7,7.7
+01/02/2021 01:15,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:15,0,O,O,0.6,13.7,7.7
+01/02/2021 01:20,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:20,0,O,O,0.6,13.7,7.7
+01/02/2021 01:25,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:25,0,O,O,0.6,13.7,7.7
+01/02/2021 01:30,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:30,0,O,O,0.6,13.7,7.7
+01/02/2021 01:35,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:35,0,O,O,0.6,13.7,7.7
+01/02/2021 01:40,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:40,0,O,O,0.6,13.7,7.7
+01/02/2021 01:45,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:45,0,O,O,0.6,13.7,7.7
+01/02/2021 01:50,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:50,0,O,O,0.6,13.7,7.7
+01/02/2021 01:55,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 06:55,0,O,O,0.6,13.7,7.7
+01/02/2021 02:00,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:00,0,O,O,0.6,13.7,7.7
+01/02/2021 02:05,0,0,-2,3,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:05,0,O,O,0.6,13.7,7.6
+01/02/2021 02:10,0,0,-2,3,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:10,0,O,O,0.6,13.7,7.6
+01/02/2021 02:15,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:15,0,O,O,0.6,13.7,7.6
+01/02/2021 02:20,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:20,0,O,O,0.6,13.7,7.6
+01/02/2021 02:25,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:25,0,O,O,0.6,13.7,7.6
+01/02/2021 02:30,0,0,-2,3,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:30,0,O,O,0.6,13.7,7.6
+01/02/2021 02:35,0,0,-2,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:35,0,O,O,0.6,13.7,7.6
+01/02/2021 02:40,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:40,0,O,O,0.6,13.7,7.6
+01/02/2021 02:45,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:45,0,O,O,0.6,13.7,7.6
+01/02/2021 02:50,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:50,0,O,O,0.6,13.7,7.6
+01/02/2021 02:55,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 07:55,0,O,O,0.6,13.7,7.6
+01/02/2021 03:00,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:00,0,O,O,0.6,13.7,7.6
+01/02/2021 03:05,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:05,0,O,O,0.6,13.7,7.3
+01/02/2021 03:10,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:10,0,O,O,0.6,13.7,7.3
+01/02/2021 03:15,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:15,0,O,O,0.6,13.7,7.3
+01/02/2021 03:20,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:20,0,O,O,0.6,13.7,7.3
+01/02/2021 03:25,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:25,0,O,O,0.6,13.7,7.3
+01/02/2021 03:30,0,0,-1,4,87,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:30,0,O,O,0.6,13.7,7.3
+01/02/2021 03:35,0,0,-2,4,88,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:35,0,O,O,0.6,13.7,7.3
+01/02/2021 03:40,0,0,-2,4,88,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:40,0,O,O,0.6,13.7,7.3
+01/02/2021 03:45,0,0,-2,4,88,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:45,0,O,O,0.6,13.7,7.3
+01/02/2021 03:50,0,0,-2,4,88,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:50,0,O,O,0.6,13.7,7.3
+01/02/2021 03:55,0,0,-2,4,88,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 08:55,0,O,O,0.6,13.7,7.3
+01/02/2021 04:00,0,0,-2,4,88,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:00,0,O,O,0.6,13.7,7.3
+01/02/2021 04:05,0,0,-2,4,88,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:05,0,O,O,0.6,9.9,7
+01/02/2021 04:10,0,0,-2,4,88,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:10,0,O,O,0.6,9.9,7
+01/02/2021 04:15,0,0,-2,4,89,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:15,0,O,O,0.6,9.9,7
+01/02/2021 04:20,0,0,-2,4,89,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:20,0,O,O,0.6,9.9,7
+01/02/2021 04:25,0,0,-2,4,89,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:25,0,O,O,0.6,9.9,7
+01/02/2021 04:30,0,0,-2,4,90,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:30,0,O,O,0.6,9.9,7
+01/02/2021 04:35,0,0,-2,4,90,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:35,0,O,O,0.6,9.9,7
+01/02/2021 04:40,0,0,-1,3,91,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:40,0,O,O,0.6,9.9,7
+01/02/2021 04:45,0,0,-1,3,91,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:45,0,O,O,0.6,9.9,7
+01/02/2021 04:50,0,0,-1,3,91,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:50,0,O,O,0.6,9.9,7
+01/02/2021 04:55,0,0,-1,3,92,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 09:55,0,O,O,0.6,9.9,7
+01/02/2021 05:00,0,0,-1,3,92,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:00,0,O,O,0.6,9.9,7
+01/02/2021 05:05,0,0,-1,3,92,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:05,0,O,O,0.6,9.9,6.2
+01/02/2021 05:10,0,0,-1,3,93,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:10,0,O,O,0.6,9.9,6.2
+01/02/2021 05:15,0,0,-1,3,93,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:15,0,O,O,0.6,9.9,6.2
+01/02/2021 05:20,0,0,-1,3,93,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:20,0,O,O,0.6,9.9,6.2
+01/02/2021 05:25,0,0,-1,3,93,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:25,0,O,O,0.6,9.9,6.2
+01/02/2021 05:30,0,0,-1,3,93,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:30,0,O,O,0.6,9.9,6.2
+01/02/2021 05:35,0,0,-1,2,93,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:35,0,O,O,0.6,9.9,6.2
+01/02/2021 05:40,0,0,-1,2,93,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:40,0,O,O,0.6,9.9,6.2
+01/02/2021 05:45,0,0,-1,2,94,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:45,0,O,O,0.6,9.9,6.2
+01/02/2021 05:50,0,0,-1,2,94,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:50,0,O,O,0.6,9.9,6.2
+01/02/2021 05:55,0,0,-1,2,94,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 10:55,0,O,O,0.6,9.9,6.2
+01/02/2021 06:00,0,0,-1,2,94,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:00,0,O,O,0.6,9.9,6.2
+01/02/2021 06:05,0,0,-1,2,94,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:05,0,O,O,0.6,9.9,5.5
+01/02/2021 06:10,0,0,-1,2,94,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:10,0,O,O,0.6,9.9,5.5
+01/02/2021 06:15,0,0,-1,2,94,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:15,0,O,O,0.6,9.9,5.5
+01/02/2021 06:20,0,0,-1,2,94,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:20,0,O,O,0.6,9.9,5.5
+01/02/2021 06:25,0,0,-1,2,95,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:25,0,O,O,0.6,9.9,5.5
+01/02/2021 06:30,0,0,-1,2,95,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:30,0,O,O,0.6,9.9,5.5
+01/02/2021 06:35,0,0,-1,2,95,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:35,0,O,O,0.6,9.9,5.5
+01/02/2021 06:40,0,0,-1,1,95,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:40,0,O,O,0.6,9.9,5.5
+01/02/2021 06:45,0,0,-1,1,95,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:45,0,O,O,0.6,9.9,5.5
+01/02/2021 06:50,0,0,-1,1,95,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:50,0,O,O,0.6,9.9,5.5
+01/02/2021 06:55,0,0,-1,1,95,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 11:55,0,O,O,0.6,9.9,5.5
+01/02/2021 07:00,0,0,-1,1,96,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 12:00,0,O,O,0.6,9.9,5.5
+01/02/2021 07:05,0,0,-1,1,96,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 12:05,0,O,O,0.6,6.3,5.4
+01/02/2021 07:10,0,0,-1,1,96,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 12:10,0,O,O,0.6,6.3,5.4
+01/02/2021 07:15,0,0,-1,1,96,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 12:15,0,O,O,0.6,6.3,5.4
+01/02/2021 07:20,0,0,-1,1,96,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 12:20,0,O,O,0.6,6.3,5.4
+01/02/2021 07:25,0,0,-1,1,96,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 12:25,0,O,O,0.6,6.3,5.4
+01/02/2021 07:30,0,0,-1,1,96,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 12:30,0,O,O,0.6,6.3,5.4
+01/02/2021 07:35,0,0,-1,1,96,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 12:35,0,O,O,0.6,6.3,5.4
+01/02/2021 07:40,0,0,-1,1,96,0.0014,0.033,0.005,0,51,0,AN,,SolarAnywhere3_6,01/02/2021 12:40,0,O,O,0.6,6.3,5.4
+01/02/2021 07:45,1,0,-1,1,96,0.0014,0.033,0.005,5,94,3,AD,,SolarAnywhere3_6,01/02/2021 12:45,1,O,O,0.6,6.3,5.4
+01/02/2021 07:50,5,0,-1,1,96,0.0014,0.033,0.005,13,141,8,AD,,SolarAnywhere3_6,01/02/2021 12:50,5,O,O,0.6,6.3,5.4
+01/02/2021 07:55,10,0,-1,1,96,0.0014,0.033,0.005,23,188,14,AD,,SolarAnywhere3_6,01/02/2021 12:55,10,O,O,0.6,6.3,5.4
+01/02/2021 08:00,22,32,-1,1,96,0.0014,0.033,0.005,34,230,21,AD,,SolarAnywhere3_6,01/02/2021 13:00,20,O,O,0.6,6.3,5.4
+01/02/2021 08:05,20,0,-1,1,96,0.0014,0.033,0.005,45,256,27,AD,,SolarAnywhere3_6,01/02/2021 13:05,20,O,O,0.6,6.3,5.3
+01/02/2021 08:10,14,0,-1,1,96,0.0014,0.033,0.005,57,294,33,AD,,SolarAnywhere3_6,01/02/2021 13:10,14,O,O,0.6,6.3,5.3
+01/02/2021 08:15,19,0,-1,1,96,0.0014,0.033,0.005,69,330,38,AD,,SolarAnywhere3_6,01/02/2021 13:15,19,O,O,0.6,6.3,5.3
+01/02/2021 08:20,21,0,-1,1,95,0.0014,0.033,0.005,81,364,42,AD,,SolarAnywhere3_6,01/02/2021 13:20,21,O,O,0.6,6.3,5.3
+01/02/2021 08:25,23,0,-1,1,95,0.0014,0.033,0.005,93,397,46,AD,,SolarAnywhere3_6,01/02/2021 13:25,23,O,O,0.6,6.3,5.3
+01/02/2021 08:30,55,38,-1,1,95,0.0014,0.033,0.005,106,427,51,AD,,SolarAnywhere3_6,01/02/2021 13:30,50,O,O,0.6,6.3,5.3
+01/02/2021 08:35,80,165,-1,1,95,0.0014,0.033,0.005,118,455,54,AD,,SolarAnywhere3_6,01/02/2021 13:35,57,O,O,0.6,6.3,5.3
+01/02/2021 08:40,98,286,-1,1,95,0.0014,0.033,0.005,131,481,58,AD,,SolarAnywhere3_6,01/02/2021 13:40,55,O,O,0.6,6.3,5.3
+01/02/2021 08:45,112,345,-1,1,95,0.0014,0.033,0.005,143,506,61,AD,,SolarAnywhere3_6,01/02/2021 13:45,56,O,O,0.6,6.3,5.3
+01/02/2021 08:50,74,35,-1,1,95,0.0014,0.033,0.005,155,528,64,AD,,SolarAnywhere3_6,01/02/2021 13:50,68,O,O,0.6,6.3,5.3
+01/02/2021 08:55,116,244,-1,1,95,0.0014,0.033,0.005,167,549,66,AD,,SolarAnywhere3_6,01/02/2021 13:55,71,O,O,0.6,6.3,5.3
+01/02/2021 09:00,87,39,-1,1,95,0.0014,0.033,0.005,179,568,69,AD,,SolarAnywhere3_6,01/02/2021 14:00,79,O,O,0.6,6.3,5.3
+01/02/2021 09:05,55,0,-1,1,94,0.0014,0.033,0.005,190,577,72,AD,,SolarAnywhere3_6,01/02/2021 14:05,55,O,O,0.6,6.3,5.4
+01/02/2021 09:10,83,9,-1,1,95,0.0014,0.033,0.005,202,594,75,AD,,SolarAnywhere3_6,01/02/2021 14:10,81,O,O,0.6,6.3,5.4
+01/02/2021 09:15,59,0,-1,1,95,0.0014,0.033,0.005,213,609,77,AD,,SolarAnywhere3_6,01/02/2021 14:15,59,O,O,0.6,6.3,5.4
+01/02/2021 09:20,62,0,-1,1,95,0.0014,0.033,0.005,225,624,80,AD,,SolarAnywhere3_6,01/02/2021 14:20,62,O,O,0.6,6.3,5.4
+01/02/2021 09:25,63,0,-1,1,95,0.0014,0.033,0.005,236,638,82,AD,,SolarAnywhere3_6,01/02/2021 14:25,63,O,O,0.6,6.3,5.4
+01/02/2021 09:30,86,0,-1,1,95,0.0014,0.033,0.005,246,651,83,AD,,SolarAnywhere3_6,01/02/2021 14:30,86,O,O,0.6,6.3,5.4
+01/02/2021 09:35,105,11,-1,1,95,0.0014,0.033,0.005,257,663,85,AD,,SolarAnywhere3_6,01/02/2021 14:35,102,O,O,0.6,6.3,5.4
+01/02/2021 09:40,72,0,-1,1,95,0.0014,0.033,0.005,267,674,87,AD,,SolarAnywhere3_6,01/02/2021 14:40,72,O,O,0.6,6.3,5.4
+01/02/2021 09:45,69,0,-1,1,95,0.0014,0.033,0.005,277,684,89,AD,,SolarAnywhere3_6,01/02/2021 14:45,69,O,O,0.6,6.3,5.4
+01/02/2021 09:50,72,0,-1,1,95,0.0014,0.033,0.005,287,694,91,AD,,SolarAnywhere3_6,01/02/2021 14:50,72,O,O,0.6,6.3,5.4
+01/02/2021 09:55,71,0,-1,1,95,0.0014,0.033,0.005,296,703,92,AD,,SolarAnywhere3_6,01/02/2021 14:55,71,O,O,0.6,6.3,5.4
+01/02/2021 10:00,78,0,-1,1,95,0.0014,0.033,0.005,306,712,94,AD,,SolarAnywhere3_6,01/02/2021 15:00,78,O,O,0.6,6.3,5.4
+01/02/2021 10:05,79,0,-1,1,95,0.0014,0.033,0.005,314,712,97,AD,,SolarAnywhere3_6,01/02/2021 15:05,79,O,O,0.6,5.8,6.1
+01/02/2021 10:10,79,0,-1,1,95,0.0014,0.033,0.005,322,719,98,AD,,SolarAnywhere3_6,01/02/2021 15:10,79,O,O,0.6,5.8,6.1
+01/02/2021 10:15,82,0,-1,1,95,0.0014,0.033,0.005,330,726,99,AD,,SolarAnywhere3_6,01/02/2021 15:15,82,O,O,0.6,5.8,6.1
+01/02/2021 10:20,84,0,-1,2,95,0.0014,0.033,0.005,338,733,100,AD,,SolarAnywhere3_6,01/02/2021 15:20,84,O,O,0.6,5.8,6.1
+01/02/2021 10:25,78,0,-1,2,95,0.0014,0.033,0.005,346,739,102,AD,,SolarAnywhere3_6,01/02/2021 15:25,78,O,O,0.6,5.8,6.1
+01/02/2021 10:30,78,0,-1,2,95,0.0014,0.033,0.005,353,745,103,AD,,SolarAnywhere3_6,01/02/2021 15:30,78,O,O,0.6,5.8,6.1
+01/02/2021 10:35,75,0,0,2,95,0.0014,0.033,0.005,360,750,104,AD,,SolarAnywhere3_6,01/02/2021 15:35,75,O,O,0.6,5.8,6.1
+01/02/2021 10:40,78,0,0,2,95,0.0014,0.033,0.005,366,755,105,AD,,SolarAnywhere3_6,01/02/2021 15:40,78,O,O,0.6,5.8,6.1
+01/02/2021 10:45,79,0,0,2,95,0.0014,0.033,0.005,373,760,107,AD,,SolarAnywhere3_6,01/02/2021 15:45,79,O,O,0.6,5.8,6.1
+01/02/2021 10:50,83,0,0,2,95,0.0014,0.033,0.005,378,764,107,AD,,SolarAnywhere3_6,01/02/2021 15:50,83,O,O,0.6,5.8,6.1
+01/02/2021 10:55,97,0,0,3,95,0.0014,0.033,0.005,384,768,108,AD,,SolarAnywhere3_6,01/02/2021 15:55,97,O,O,0.6,5.8,6.1
+01/02/2021 11:00,89,0,0,3,95,0.0014,0.033,0.005,389,771,109,AD,,SolarAnywhere3_6,01/02/2021 16:00,89,O,O,0.6,5.8,6.1
+01/02/2021 11:05,95,0,0,3,95,0.0014,0.033,0.005,392,761,113,AD,,SolarAnywhere3_6,01/02/2021 16:05,95,O,O,0.6,5.8,9.3
+01/02/2021 11:10,101,0,0,3,95,0.0014,0.033,0.005,396,764,114,AD,,SolarAnywhere3_6,01/02/2021 16:10,101,O,O,0.6,5.8,9.3
+01/02/2021 11:15,106,0,0,3,94,0.0014,0.033,0.005,400,767,114,AD,,SolarAnywhere3_6,01/02/2021 16:15,106,O,O,0.6,5.8,9.3
+01/02/2021 11:20,131,0,0,3,93,0.0014,0.033,0.005,404,769,116,AD,,SolarAnywhere3_6,01/02/2021 16:20,131,O,O,0.6,5.8,9.3
+01/02/2021 11:25,114,0,0,3,93,0.0014,0.033,0.005,407,771,116,AD,,SolarAnywhere3_6,01/02/2021 16:25,114,O,O,0.6,5.8,9.3
+01/02/2021 11:30,119,0,0,3,92,0.0014,0.033,0.005,409,773,116,AD,,SolarAnywhere3_6,01/02/2021 16:30,119,O,O,0.6,5.8,9.3
+01/02/2021 11:35,121,0,0,4,92,0.0014,0.033,0.005,412,775,117,AD,,SolarAnywhere3_6,01/02/2021 16:35,121,O,O,0.6,5.8,9.3
+01/02/2021 11:40,123,0,0,4,91,0.0014,0.033,0.005,414,776,118,AD,,SolarAnywhere3_6,01/02/2021 16:40,123,O,O,0.6,5.8,9.3
+01/02/2021 11:45,126,0,0,4,91,0.0014,0.033,0.005,415,777,117,AD,,SolarAnywhere3_6,01/02/2021 16:45,126,O,O,0.6,5.8,9.3
+01/02/2021 11:50,124,0,0,4,90,0.0014,0.033,0.005,417,778,118,AD,,SolarAnywhere3_6,01/02/2021 16:50,124,O,O,0.6,5.8,9.3
+01/02/2021 11:55,134,0,0,4,89,0.0014,0.033,0.005,417,778,118,AD,,SolarAnywhere3_6,01/02/2021 16:55,134,O,O,0.6,5.8,9.3
+01/02/2021 12:00,118,0,0,4,89,0.0014,0.033,0.005,418,779,119,AD,,SolarAnywhere3_6,01/02/2021 17:00,118,O,O,0.6,5.8,9.3
+01/02/2021 12:05,115,0,0,4,88,0.0014,0.033,0.005,416,766,122,AD,,SolarAnywhere3_6,01/02/2021 17:05,115,O,O,0.6,5.8,10.6
+01/02/2021 12:10,107,0,0,4,88,0.0014,0.033,0.005,416,765,123,AD,,SolarAnywhere3_6,01/02/2021 17:10,107,O,O,0.6,5.8,10.6
+01/02/2021 12:15,125,0,0,4,87,0.0014,0.033,0.005,415,765,122,AD,,SolarAnywhere3_6,01/02/2021 17:15,125,O,O,0.6,5.8,10.6
+01/02/2021 12:20,132,0,0,4,87,0.0014,0.033,0.005,413,764,122,AD,,SolarAnywhere3_6,01/02/2021 17:20,132,O,O,0.6,5.8,10.6
+01/02/2021 12:25,162,16,0,4,87,0.0014,0.033,0.005,412,763,122,AD,,SolarAnywhere3_6,01/02/2021 17:25,156,O,O,0.6,5.8,10.6
+01/02/2021 12:30,234,109,0,4,86,0.0014,0.033,0.005,410,761,122,AD,,SolarAnywhere3_6,01/02/2021 17:30,193,O,O,0.6,5.8,10.6
+01/02/2021 12:35,519,759,0,4,86,0.0014,0.033,0.005,407,760,121,AD,,SolarAnywhere3_6,01/02/2021 17:35,234,O,O,0.6,5.8,10.6
+01/02/2021 12:40,254,155,-1,5,85,0.0014,0.033,0.005,405,758,122,AD,,SolarAnywhere3_6,01/02/2021 17:40,196,O,O,0.6,5.8,10.6
+01/02/2021 12:45,239,127,-1,5,85,0.0014,0.033,0.005,401,756,120,AD,,SolarAnywhere3_6,01/02/2021 17:45,192,O,O,0.6,5.8,10.6
+01/02/2021 12:50,263,273,-1,5,85,0.0014,0.033,0.005,398,753,121,AD,,SolarAnywhere3_6,01/02/2021 17:50,162,O,O,0.6,5.8,10.6
+01/02/2021 12:55,170,27,-1,5,84,0.0014,0.033,0.005,394,750,120,AD,,SolarAnywhere3_6,01/02/2021 17:55,160,O,O,0.6,5.8,10.6
+01/02/2021 13:00,180,43,-1,5,84,0.0014,0.033,0.005,390,747,120,AD,,SolarAnywhere3_6,01/02/2021 18:00,164,O,O,0.6,5.8,10.6
+01/02/2021 13:05,225,116,-1,5,83,0.0014,0.033,0.005,383,731,122,AD,,SolarAnywhere3_6,01/02/2021 18:05,184,O,O,0.6,10.9,9.5
+01/02/2021 13:10,219,110,-1,5,83,0.0014,0.033,0.005,378,727,122,AD,,SolarAnywhere3_6,01/02/2021 18:10,180,O,O,0.6,10.9,9.5
+01/02/2021 13:15,157,22,-1,5,83,0.0014,0.033,0.005,373,723,121,AD,,SolarAnywhere3_6,01/02/2021 18:15,149,O,O,0.6,10.9,9.5
+01/02/2021 13:20,141,11,-1,5,83,0.0014,0.033,0.005,367,718,120,AD,,SolarAnywhere3_6,01/02/2021 18:20,137,O,O,0.6,10.9,9.5
+01/02/2021 13:25,135,9,-1,5,83,0.0014,0.033,0.005,361,713,120,AD,,SolarAnywhere3_6,01/02/2021 18:25,132,O,O,0.6,10.9,9.5
+01/02/2021 13:30,107,0,-1,5,83,0.0014,0.033,0.005,354,708,118,AD,,SolarAnywhere3_6,01/02/2021 18:30,107,O,O,0.6,10.9,9.5
+01/02/2021 13:35,80,0,-2,5,83,0.0014,0.033,0.005,347,702,117,AD,,SolarAnywhere3_6,01/02/2021 18:35,80,O,O,0.6,10.9,9.5
+01/02/2021 13:40,84,0,-2,5,83,0.0014,0.033,0.005,340,696,116,AD,,SolarAnywhere3_6,01/02/2021 18:40,84,O,O,0.6,10.9,9.5
+01/02/2021 13:45,82,0,-2,5,83,0.0014,0.033,0.005,332,689,115,AD,,SolarAnywhere3_6,01/02/2021 18:45,82,O,O,0.6,10.9,9.5
+01/02/2021 13:50,98,0,-2,5,83,0.0014,0.033,0.005,324,682,114,AD,,SolarAnywhere3_6,01/02/2021 18:50,98,O,O,0.6,10.9,9.5
+01/02/2021 13:55,90,0,-2,5,83,0.0014,0.033,0.005,316,675,112,AD,,SolarAnywhere3_6,01/02/2021 18:55,90,O,O,0.6,10.9,9.5
+01/02/2021 14:00,108,1,-2,5,83,0.0014,0.033,0.005,308,666,112,AD,,SolarAnywhere3_6,01/02/2021 19:00,108,O,O,0.6,10.9,9.5
+01/02/2021 14:05,135,30,-2,5,83,0.0014,0.033,0.005,300,672,107,AD,,SolarAnywhere3_6,01/02/2021 19:05,126,O,O,0.6,10.9,11.1
+01/02/2021 14:10,98,0,-2,5,83,0.0014,0.033,0.005,291,663,106,AD,,SolarAnywhere3_6,01/02/2021 19:10,98,O,O,0.6,10.9,11.1
+01/02/2021 14:15,109,6,-2,5,83,0.0014,0.033,0.005,282,653,105,AD,,SolarAnywhere3_6,01/02/2021 19:15,107,O,O,0.6,10.9,11.1
+01/02/2021 14:20,107,7,-2,5,83,0.0014,0.033,0.005,272,643,102,AD,,SolarAnywhere3_6,01/02/2021 19:20,105,O,O,0.6,10.9,11.1
+01/02/2021 14:25,70,0,-2,5,83,0.0014,0.033,0.005,262,632,101,AD,,SolarAnywhere3_6,01/02/2021 19:25,70,O,O,0.6,10.9,11.1
+01/02/2021 14:30,67,0,-2,5,83,0.0014,0.033,0.005,252,620,99,AD,,SolarAnywhere3_6,01/02/2021 19:30,67,O,O,0.6,10.9,11.1
+01/02/2021 14:35,64,0,-2,5,82,0.0014,0.033,0.005,241,607,97,AD,,SolarAnywhere3_6,01/02/2021 19:35,64,O,O,0.6,10.9,11.1
+01/02/2021 14:40,160,256,-2,5,82,0.0014,0.033,0.005,230,593,94,AD,,SolarAnywhere3_6,01/02/2021 19:40,102,O,O,0.6,10.9,11.1
+01/02/2021 14:45,131,94,-2,5,82,0.0014,0.033,0.005,219,579,92,AD,,SolarAnywhere3_6,01/02/2021 19:45,110,O,O,0.6,10.9,11.1
+01/02/2021 14:50,137,202,-2,5,82,0.0014,0.033,0.005,208,563,90,AD,,SolarAnywhere3_6,01/02/2021 19:50,95,O,O,0.6,10.9,11.1
+01/02/2021 14:55,236,547,-2,5,82,0.0014,0.033,0.005,197,547,88,AD,,SolarAnywhere3_6,01/02/2021 19:55,127,O,O,0.6,10.9,11.1
+01/02/2021 15:00,157,430,-2,5,82,0.0014,0.033,0.005,185,529,85,AD,,SolarAnywhere3_6,01/02/2021 20:00,76,O,O,0.6,10.9,11.1
+01/02/2021 15:05,110,162,-2,5,82,0.0014,0.033,0.005,175,527,81,AD,,SolarAnywhere3_6,01/02/2021 20:05,81,O,O,0.6,10.9,12.5
+01/02/2021 15:10,125,319,-2,5,81,0.0014,0.033,0.005,163,506,78,AD,,SolarAnywhere3_6,01/02/2021 20:10,71,O,O,0.6,10.9,12.5
+01/02/2021 15:15,109,219,-2,5,81,0.0014,0.033,0.005,151,485,74,AD,,SolarAnywhere3_6,01/02/2021 20:15,74,O,O,0.6,10.9,12.5
+01/02/2021 15:20,144,461,-2,5,81,0.0014,0.033,0.005,139,461,71,AD,,SolarAnywhere3_6,01/02/2021 20:20,76,O,O,0.6,10.9,12.5
+01/02/2021 15:25,87,161,-2,5,81,0.0014,0.033,0.005,127,436,68,AD,,SolarAnywhere3_6,01/02/2021 20:25,65,O,O,0.6,10.9,12.5
+01/02/2021 15:30,88,237,-2,5,81,0.0014,0.033,0.005,114,409,63,AD,,SolarAnywhere3_6,01/02/2021 20:30,58,O,O,0.6,10.9,12.5
+01/02/2021 15:35,66,107,-2,4,80,0.0014,0.033,0.005,102,380,59,AD,,SolarAnywhere3_6,01/02/2021 20:35,54,O,O,0.6,10.9,12.5
+01/02/2021 15:40,68,187,-1,4,80,0.0014,0.033,0.005,90,349,55,AD,,SolarAnywhere3_6,01/02/2021 20:40,49,O,O,0.6,10.9,12.5
+01/02/2021 15:45,46,44,-1,4,80,0.0014,0.033,0.005,78,317,50,AD,,SolarAnywhere3_6,01/02/2021 20:45,42,O,O,0.6,10.9,12.5
+01/02/2021 15:50,27,0,-1,4,80,0.0014,0.033,0.005,66,282,44,AD,,SolarAnywhere3_6,01/02/2021 20:50,27,O,O,0.6,10.9,12.5
+01/02/2021 15:55,28,8,-1,4,80,0.0014,0.033,0.005,54,246,38,AD,,SolarAnywhere3_6,01/02/2021 20:55,28,O,O,0.6,10.9,12.5
+01/02/2021 16:00,17,0,-1,4,79,0.0014,0.033,0.005,42,209,31,AD,,SolarAnywhere3_6,01/02/2021 21:00,17,O,O,0.6,10.9,12.5
+01/02/2021 16:05,19,0,-1,4,79,0.0014,0.033,0.005,32,189,24,AD,,SolarAnywhere3_6,01/02/2021 21:05,19,O,O,0.6,14.3,12.3
+01/02/2021 16:10,14,0,-1,4,79,0.0014,0.033,0.005,21,148,17,AD,,SolarAnywhere3_6,01/02/2021 21:10,14,O,O,0.6,14.3,12.3
+01/02/2021 16:15,3,0,-1,4,80,0.0014,0.033,0.005,12,105,10,AD,,SolarAnywhere3_6,01/02/2021 21:15,3,O,O,0.6,14.3,12.3
+01/02/2021 16:20,1,0,-1,4,80,0.0014,0.033,0.005,4,64,4,AD,,SolarAnywhere3_6,01/02/2021 21:20,1,O,O,0.6,14.3,12.3
+01/02/2021 16:25,0,0,-1,4,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 21:25,0,O,O,0.6,14.3,12.3
+01/02/2021 16:30,0,0,-1,4,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 21:30,0,O,O,0.6,14.3,12.3
+01/02/2021 16:35,0,0,-1,4,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 21:35,0,O,O,0.6,14.3,12.3
+01/02/2021 16:40,0,0,-1,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 21:40,0,O,O,0.6,14.3,12.3
+01/02/2021 16:45,0,0,-1,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 21:45,0,O,O,0.6,14.3,12.3
+01/02/2021 16:50,0,0,-1,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 21:50,0,O,O,0.6,14.3,12.3
+01/02/2021 16:55,0,0,-1,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 21:55,0,O,O,0.6,14.3,12.3
+01/02/2021 17:00,0,0,-1,3,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:00,0,O,O,0.6,14.3,12.3
+01/02/2021 17:05,0,0,-1,3,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:05,0,O,O,0.6,14.3,11.4
+01/02/2021 17:10,0,0,-1,3,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:10,0,O,O,0.6,14.3,11.4
+01/02/2021 17:15,0,0,-1,3,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:15,0,O,O,0.6,14.3,11.4
+01/02/2021 17:20,0,0,-1,3,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:20,0,O,O,0.6,14.3,11.4
+01/02/2021 17:25,0,0,-1,3,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:25,0,O,O,0.6,14.3,11.4
+01/02/2021 17:30,0,0,-1,3,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:30,0,O,O,0.6,14.3,11.4
+01/02/2021 17:35,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:35,0,O,O,0.6,14.3,11.4
+01/02/2021 17:40,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:40,0,O,O,0.6,14.3,11.4
+01/02/2021 17:45,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:45,0,O,O,0.6,14.3,11.4
+01/02/2021 17:50,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:50,0,O,O,0.6,14.3,11.4
+01/02/2021 17:55,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 22:55,0,O,O,0.6,14.3,11.4
+01/02/2021 18:00,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:00,0,O,O,0.6,14.3,11.4
+01/02/2021 18:05,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:05,0,O,O,0.6,14.3,9.7
+01/02/2021 18:10,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:10,0,O,O,0.6,14.3,9.7
+01/02/2021 18:15,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:15,0,O,O,0.6,14.3,9.7
+01/02/2021 18:20,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:20,0,O,O,0.6,14.3,9.7
+01/02/2021 18:25,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:25,0,O,O,0.6,14.3,9.7
+01/02/2021 18:30,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:30,0,O,O,0.6,14.3,9.7
+01/02/2021 18:35,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:35,0,O,O,0.6,14.3,9.7
+01/02/2021 18:40,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:40,0,O,O,0.6,14.3,9.7
+01/02/2021 18:45,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:45,0,O,O,0.6,14.3,9.7
+01/02/2021 18:50,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:50,0,O,O,0.6,14.3,9.7
+01/02/2021 18:55,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/02/2021 23:55,0,O,O,0.6,14.3,9.7
+01/02/2021 19:00,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:00,0,O,O,0.6,14.3,9.7
+01/02/2021 19:05,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:05,0,O,O,0.6,10.2,8.4
+01/02/2021 19:10,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:10,0,O,O,0.6,10.2,8.4
+01/02/2021 19:15,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:15,0,O,O,0.6,10.2,8.4
+01/02/2021 19:20,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:20,0,O,O,0.6,10.2,8.4
+01/02/2021 19:25,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:25,0,O,O,0.6,10.2,8.4
+01/02/2021 19:30,0,0,0,3,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:30,0,O,O,0.6,10.2,8.4
+01/02/2021 19:35,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:35,0,O,O,0.6,10.2,8.4
+01/02/2021 19:40,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:40,0,O,O,0.6,10.2,8.4
+01/02/2021 19:45,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:45,0,O,O,0.6,10.2,8.4
+01/02/2021 19:50,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:50,0,O,O,0.6,10.2,8.4
+01/02/2021 19:55,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 00:55,0,O,O,0.6,10.2,8.4
+01/02/2021 20:00,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:00,0,O,O,0.6,10.2,8.4
+01/02/2021 20:05,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:05,0,O,O,0.6,10.2,7.8
+01/02/2021 20:10,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:10,0,O,O,0.6,10.2,7.8
+01/02/2021 20:15,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:15,0,O,O,0.6,10.2,7.8
+01/02/2021 20:20,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:20,0,O,O,0.6,10.2,7.8
+01/02/2021 20:25,0,0,0,2,80,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:25,0,O,O,0.6,10.2,7.8
+01/02/2021 20:30,0,0,0,2,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:30,0,O,O,0.6,10.2,7.8
+01/02/2021 20:35,0,0,0,2,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:35,0,O,O,0.6,10.2,7.8
+01/02/2021 20:40,0,0,0,2,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:40,0,O,O,0.6,10.2,7.8
+01/02/2021 20:45,0,0,0,2,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:45,0,O,O,0.6,10.2,7.8
+01/02/2021 20:50,0,0,0,2,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:50,0,O,O,0.6,10.2,7.8
+01/02/2021 20:55,0,0,0,2,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 01:55,0,O,O,0.6,10.2,7.8
+01/02/2021 21:00,0,0,0,2,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:00,0,O,O,0.6,10.2,7.8
+01/02/2021 21:05,0,0,0,2,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:05,0,O,O,0.6,10.2,7.8
+01/02/2021 21:10,0,0,0,2,81,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:10,0,O,O,0.6,10.2,7.8
+01/02/2021 21:15,0,0,0,2,82,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:15,0,O,O,0.6,10.2,7.8
+01/02/2021 21:20,0,0,0,2,82,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:20,0,O,O,0.6,10.2,7.8
+01/02/2021 21:25,0,0,-1,2,82,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:25,0,O,O,0.6,10.2,7.8
+01/02/2021 21:30,0,0,-1,2,82,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:30,0,O,O,0.6,10.2,7.8
+01/02/2021 21:35,0,0,-1,2,82,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:35,0,O,O,0.6,10.2,7.8
+01/02/2021 21:40,0,0,-1,2,83,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:40,0,O,O,0.6,10.2,7.8
+01/02/2021 21:45,0,0,-1,2,83,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:45,0,O,O,0.6,10.2,7.8
+01/02/2021 21:50,0,0,-2,2,83,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:50,0,O,O,0.6,10.2,7.8
+01/02/2021 21:55,0,0,-2,2,83,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 02:55,0,O,O,0.6,10.2,7.8
+01/02/2021 22:00,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:00,0,O,O,0.6,10.2,7.8
+01/02/2021 22:05,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:05,0,O,O,0.6,8.3,8.4
+01/02/2021 22:10,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:10,0,O,O,0.6,8.3,8.4
+01/02/2021 22:15,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:15,0,O,O,0.6,8.3,8.4
+01/02/2021 22:20,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:20,0,O,O,0.6,8.3,8.4
+01/02/2021 22:25,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:25,0,O,O,0.6,8.3,8.4
+01/02/2021 22:30,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:30,0,O,O,0.6,8.3,8.4
+01/02/2021 22:35,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:35,0,O,O,0.6,8.3,8.4
+01/02/2021 22:40,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:40,0,O,O,0.6,8.3,8.4
+01/02/2021 22:45,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:45,0,O,O,0.6,8.3,8.4
+01/02/2021 22:50,0,0,-2,2,84,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:50,0,O,O,0.6,8.3,8.4
+01/02/2021 22:55,0,0,-2,2,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 03:55,0,O,O,0.6,8.3,8.4
+01/02/2021 23:00,0,0,-2,2,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:00,0,O,O,0.6,8.3,8.4
+01/02/2021 23:05,0,0,-2,2,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:05,0,O,O,0.6,8.3,8.6
+01/02/2021 23:10,0,0,-2,2,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:10,0,O,O,0.6,8.3,8.6
+01/02/2021 23:15,0,0,-2,2,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:15,0,O,O,0.6,8.3,8.6
+01/02/2021 23:20,0,0,-2,2,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:20,0,O,O,0.6,8.3,8.6
+01/02/2021 23:25,0,0,-2,2,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:25,0,O,O,0.6,8.3,8.6
+01/02/2021 23:30,0,0,-2,2,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:30,0,O,O,0.6,8.3,8.6
+01/02/2021 23:35,0,0,-2,2,85,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:35,0,O,O,0.6,8.3,8.6
+01/02/2021 23:40,0,0,-2,2,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:40,0,O,O,0.6,8.3,8.6
+01/02/2021 23:45,0,0,-2,2,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:45,0,O,O,0.6,8.3,8.6
+01/02/2021 23:50,0,0,-2,2,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:50,0,O,O,0.6,8.3,8.6
+01/02/2021 23:55,0,0,-2,2,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 04:55,0,O,O,0.6,8.3,8.6
+01/03/2021 00:00,0,0,-2,2,86,0.0014,0.033,0.005,0,0,0,AN,,SolarAnywhere3_6,01/03/2021 05:00,0,O,O,0.6,8.3,8.6
diff --git a/pvlib/data/Burlington, United States SolarAnywhere Typical GHI Year Lat_44_465 Lon_-73_205 SA format.csv b/pvlib/data/Burlington, United States SolarAnywhere Typical GHI Year Lat_44_465 Lon_-73_205 SA format.csv
new file mode 100644
index 0000000000..6e4f1bed4b
--- /dev/null
+++ b/pvlib/data/Burlington, United States SolarAnywhere Typical GHI Year Lat_44_465 Lon_-73_205 SA format.csv
@@ -0,0 +1,74 @@
+0,Burlington United States,NA,-5,44.465,-73.205,41,"Data Version: 3.6 / Type: Typical Year / LatLon Resolution: 0.010 / Time Resolution: 60 minutes / Averaging Method: End of Period / TD: No / Copyright 2010-2022 Clean Power Research®, L.L.C. DownloadID=9a0a90e9-cb05-44f6-892c-a1506e8a1185"
+ObservationTime(LST),Global Horizontal Irradiance (GHI) W/m2,Direct Normal Irradiance (DNI) W/m2,AmbientTemperature (deg C),WindSpeed (m/s),Relative Humidity (%),Liquid Precipitation (kg/m2),Solid Precipitation (kg/m2),Snow Depth (m),Clear Sky GHI,Clear Sky DNI,Clear Sky DHI,IrradianceObservationType,LeadTime,DataVersion,ObservationTime(GMT),Diffuse Horizontal Irradiance (DIF) W/m2,AmbientTemperatureObservationType,WindSpeedObservationType,Albedo,Particulate Matter 10 (µg/m3),Particulate Matter 2.5 (µg/m3)
+01/01/2000 01:00,0,0,-6,,,,,,,,,AN,,SolarAnywhereTGY2021,01/01/2000 06:00,0,O,O,,,
+01/01/2000 02:00,0,0,-5,,,,,,,,,AN,,SolarAnywhereTGY2021,01/01/2000 07:00,0,O,O,,,
+01/01/2000 03:00,0,0,-5,,,,,,,,,AN,,SolarAnywhereTGY2021,01/01/2000 08:00,0,O,O,,,
+01/01/2000 04:00,0,0,-5,,,,,,,,,AN,,SolarAnywhereTGY2021,01/01/2000 09:00,0,O,O,,,
+01/01/2000 05:00,0,0,-5,,,,,,,,,AN,,SolarAnywhereTGY2021,01/01/2000 10:00,0,O,O,,,
+01/01/2000 06:00,0,0,-4,,,,,,,,,AN,,SolarAnywhereTGY2021,01/01/2000 11:00,0,O,O,,,
+01/01/2000 07:00,0,0,-4,,,,,,,,,AN,,SolarAnywhereTGY2021,01/01/2000 12:00,0,O,O,,,
+01/01/2000 08:00,3,1,-3,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 13:00,3,O,O,,,
+01/01/2000 09:00,50,24,-3,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 14:00,47,O,O,,,
+01/01/2000 10:00,171,245,-2,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 15:00,109,O,O,,,
+01/01/2000 11:00,234,237,-2,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 16:00,154,O,O,,,
+01/01/2000 12:00,220,168,-2,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 17:00,156,O,O,,,
+01/01/2000 13:00,202,107,1,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 18:00,162,O,O,,,
+01/01/2000 14:00,122,41,1,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 19:00,108,O,O,,,
+01/01/2000 15:00,141,165,1,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 20:00,101,O,O,,,
+01/01/2000 16:00,65,101,3,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 21:00,53,O,O,,,
+01/01/2000 17:00,2,1,4,,,,,,,,,AD,,SolarAnywhereTGY2021,01/01/2000 22:00,2,O,O,,,
+01/01/2000 18:00,0,0,2,,,,,,,,,AN,,SolarAnywhereTGY2021,01/01/2000 23:00,0,O,O,,,
+01/01/2000 19:00,0,0,2,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 00:00,0,O,O,,,
+01/01/2000 20:00,0,0,2,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 01:00,0,O,O,,,
+01/01/2000 21:00,0,0,2,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 02:00,0,O,O,,,
+01/01/2000 22:00,0,0,0,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 03:00,0,O,O,,,
+01/01/2000 23:00,0,0,0,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 04:00,0,O,O,,,
+01/02/2000 00:00,0,0,0,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 05:00,0,O,O,,,
+01/02/2000 01:00,0,0,0,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 06:00,0,O,O,,,
+01/02/2000 02:00,0,0,0,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 07:00,0,O,O,,,
+01/02/2000 03:00,0,0,0,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 08:00,0,O,O,,,
+01/02/2000 04:00,0,0,-1,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 09:00,0,O,O,,,
+01/02/2000 05:00,0,0,0,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 10:00,0,O,O,,,
+01/02/2000 06:00,0,0,0,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 11:00,0,O,O,,,
+01/02/2000 07:00,0,0,0,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 12:00,0,O,O,,,
+01/02/2000 08:00,2,0,0,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 13:00,2,O,O,,,
+01/02/2000 09:00,48,23,0,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 14:00,45,O,O,,,
+01/02/2000 10:00,105,29,1,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 15:00,98,O,O,,,
+01/02/2000 11:00,161,53,2,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 16:00,143,O,O,,,
+01/02/2000 12:00,135,5,2,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 17:00,133,O,O,,,
+01/02/2000 13:00,108,0,4,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 18:00,108,O,O,,,
+01/02/2000 14:00,72,0,3,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 19:00,72,O,O,,,
+01/02/2000 15:00,58,0,3,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 20:00,58,O,O,,,
+01/02/2000 16:00,33,3,3,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 21:00,33,O,O,,,
+01/02/2000 17:00,2,0,3,,,,,,,,,AD,,SolarAnywhereTGY2021,01/02/2000 22:00,2,O,O,,,
+01/02/2000 18:00,0,0,4,,,,,,,,,AN,,SolarAnywhereTGY2021,01/02/2000 23:00,0,O,O,,,
+01/02/2000 19:00,0,0,4,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 00:00,0,O,O,,,
+01/02/2000 20:00,0,0,4,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 01:00,0,O,O,,,
+01/02/2000 21:00,0,0,4,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 02:00,0,O,O,,,
+01/02/2000 22:00,0,0,5,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 03:00,0,O,O,,,
+01/02/2000 23:00,0,0,5,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 04:00,0,O,O,,,
+01/03/2000 00:00,0,0,5,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 05:00,0,O,O,,,
+01/03/2000 01:00,0,0,7,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 06:00,0,O,O,,,
+01/03/2000 02:00,0,0,7,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 07:00,0,O,O,,,
+01/03/2000 03:00,0,0,6,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 08:00,0,O,O,,,
+01/03/2000 04:00,0,0,7,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 09:00,0,O,O,,,
+01/03/2000 05:00,0,0,7,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 10:00,0,O,O,,,
+01/03/2000 06:00,0,0,6,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 11:00,0,O,O,,,
+01/03/2000 07:00,0,0,7,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 12:00,0,O,O,,,
+01/03/2000 08:00,4,0,7,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 13:00,4,O,O,,,
+01/03/2000 09:00,47,7,8,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 14:00,46,O,O,,,
+01/03/2000 10:00,124,86,5,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 15:00,102,O,O,,,
+01/03/2000 11:00,99,6,4,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 16:00,97,O,O,,,
+01/03/2000 12:00,116,0,3,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 17:00,116,O,O,,,
+01/03/2000 13:00,130,1,2,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 18:00,130,O,O,,,
+01/03/2000 14:00,165,96,2,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 19:00,133,O,O,,,
+01/03/2000 15:00,110,47,2,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 20:00,98,O,O,,,
+01/03/2000 16:00,36,5,1,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 21:00,35,O,O,,,
+01/03/2000 17:00,1,0,1,,,,,,,,,AD,,SolarAnywhereTGY2021,01/03/2000 22:00,1,O,O,,,
+01/03/2000 18:00,0,0,-1,,,,,,,,,AN,,SolarAnywhereTGY2021,01/03/2000 23:00,0,O,O,,,
+01/03/2000 19:00,0,0,-1,,,,,,,,,AN,,SolarAnywhereTGY2021,01/04/2000 00:00,0,O,O,,,
+01/03/2000 20:00,0,0,-1,,,,,,,,,AN,,SolarAnywhereTGY2021,01/04/2000 01:00,0,O,O,,,
+01/03/2000 21:00,0,0,-1,,,,,,,,,AN,,SolarAnywhereTGY2021,01/04/2000 02:00,0,O,O,,,
+01/03/2000 22:00,0,0,-1,,,,,,,,,AN,,SolarAnywhereTGY2021,01/04/2000 03:00,0,O,O,,,
+01/03/2000 23:00,0,0,-1,,,,,,,,,AN,,SolarAnywhereTGY2021,01/04/2000 04:00,0,O,O,,,
+01/04/2000 00:00,0,0,-1,,,,,,,,,AN,,SolarAnywhereTGY2021,01/04/2000 05:00,0,O,O,,,
diff --git a/pvlib/data/variables_style_rules.csv b/pvlib/data/variables_style_rules.csv
index 9e3f351839..48a1bcaf8f 100644
--- a/pvlib/data/variables_style_rules.csv
+++ b/pvlib/data/variables_style_rules.csv
@@ -4,6 +4,7 @@ latitude;latitude
longitude;longitude
dni;direct normal irradiance
dni_extra;direct normal irradiance at top of atmosphere (extraterrestrial)
+dni_clear;clear sky direct normal irradiance
dhi;diffuse horizontal irradiance
bhi;beam/direct horizontal irradiance
ghi;global horizontal irradiance
diff --git a/pvlib/iotools/__init__.py b/pvlib/iotools/__init__.py
index 6a4991ee7b..2ec1753eb9 100644
--- a/pvlib/iotools/__init__.py
+++ b/pvlib/iotools/__init__.py
@@ -27,6 +27,8 @@
from pvlib.iotools.acis import get_acis_mpe # noqa: F401
from pvlib.iotools.acis import get_acis_station_data # noqa: F401
from pvlib.iotools.acis import get_acis_available_stations # noqa: F401
+from pvlib.iotools.solaranywhere import get_solaranywhere # noqa: F401
+from pvlib.iotools.solaranywhere import read_solaranywhere # noqa: F401
from pvlib.iotools.solcast import get_solcast_forecast # noqa: F401
from pvlib.iotools.solcast import get_solcast_live # noqa: F401
from pvlib.iotools.solcast import get_solcast_historic # noqa: F401
diff --git a/pvlib/iotools/solaranywhere.py b/pvlib/iotools/solaranywhere.py
new file mode 100644
index 0000000000..dfa7420ccc
--- /dev/null
+++ b/pvlib/iotools/solaranywhere.py
@@ -0,0 +1,297 @@
+"""Functions to read and retrieve SolarAnywhere data."""
+
+import requests
+import pandas as pd
+import numpy as np
+import time
+import json
+
+URL = 'https://service.solaranywhere.com/api/v2'
+
+# Dictionary mapping SolarAnywhere names to standard pvlib names
+# Names with spaces are used in SolarAnywhere files, and names without spaces
+# are used by the SolarAnywhere API
+VARIABLE_MAP = {
+ 'Global Horizontal Irradiance (GHI) W/m2': 'ghi',
+ 'GlobalHorizontalIrradiance_WattsPerMeterSquared': 'ghi',
+ 'DirectNormalIrradiance_WattsPerMeterSquared': 'dni',
+ 'Direct Normal Irradiance (DNI) W/m2': 'dni',
+ 'Diffuse Horizontal Irradiance (DIF) W/m2': 'dhi',
+ 'DiffuseHorizontalIrradiance_WattsPerMeterSquared': 'dhi',
+ 'AmbientTemperature (deg C)': 'temp_air',
+ 'AmbientTemperature_DegreesC': 'temp_air',
+ 'WindSpeed (m/s)': 'wind_speed',
+ 'WindSpeed_MetersPerSecond': 'wind_speed',
+ 'Relative Humidity (%)': 'relative_humidity',
+ 'RelativeHumidity_Percent': 'relative_humidity',
+ 'Clear Sky GHI': 'ghi_clear',
+ 'ClearSkyGHI_WattsPerMeterSquared': 'ghi_clear',
+ 'Clear Sky DNI': 'dni_clear',
+ 'ClearSkyDNI_WattsPerMeterSquared': 'dni_clear',
+ 'Clear Sky DHI': 'dhi_clear',
+ 'ClearSkyDHI_WattsPerMeterSquared': 'dhi_clear',
+ 'Albedo': 'albedo',
+ 'Albedo_Unitless': 'albedo',
+}
+
+DEFAULT_VARIABLES = [
+ 'StartTime', 'ObservationTime', 'EndTime',
+ 'GlobalHorizontalIrradiance_WattsPerMeterSquared',
+ 'DirectNormalIrradiance_WattsPerMeterSquared',
+ 'DiffuseHorizontalIrradiance_WattsPerMeterSquared',
+ 'AmbientTemperature_DegreesC', 'WindSpeed_MetersPerSecond',
+ 'Albedo_Unitless', 'DataVersion'
+]
+
+
+def get_solaranywhere(latitude, longitude, api_key, start=None, end=None,
+ source='SolarAnywhereLatest', time_resolution=60,
+ spatial_resolution=0.01, true_dynamics=False,
+ probability_of_exceedance=None,
+ variables=DEFAULT_VARIABLES, missing_data='FillAverage',
+ url=URL, map_variables=True, timeout=300):
+ """Retrieve historical irradiance time series data from SolarAnywhere.
+
+ The SolarAnywhere API is described in [1]_ and [2]_. A detailed list of
+ API options can be found in [3]_.
+
+ Parameters
+ ----------
+ latitude: float
+ In decimal degrees, north is positive (ISO 19115).
+ longitude: float
+ In decimal degrees, east is positive (ISO 19115).
+ api_key: str
+ SolarAnywhere API key.
+ start: datetime like, optional
+ First timestamp of the requested period. If a timezone is not
+ specified, UTC is assumed. Not applicable for TMY data.
+ end: datetime like, optional
+ Last timestamp of the requested period. If a timezone is not
+ specified, UTC is assumed. Not applicable for TMY data.
+ source: str, default: 'SolarAnywhereLatest'
+ Data source. Options include: 'SolarAnywhereLatest' (historical data),
+ 'SolarAnywhereTGYLatest' (TMY for GHI), 'SolarAnywhereTDYLatest' (TMY
+ for DNI), or 'SolarAnywherePOELatest' for probability of exceedance.
+ Specific dataset versions can also be specified, e.g.,
+ 'SolarAnywhere3_2' (see [3]_ for a full list of options).
+ time_resolution: {60, 30, 15, 5}, default: 60
+ Time resolution in minutes. For TMY data, time resolution has to be 60
+ minutes (hourly).
+ spatial_resolution: {0.1, 0.01, 0.005}, default: 0.01
+ Spatial resolution in degrees.
+ true_dynamics: bool, default: False
+ Whether to apply SolarAnywhere TrueDynamics statistical processing.
+ Only available for the 5-minute time resolution.
+ probability_of_exceedance: int, optional
+ Probability of exceedance in the range of 1 to 99. Only relevant when
+ requesting probability of exceedance (POE) time series. [%]
+ variables: list-like, default: :const:`DEFAULT_VARIABLES`
+ Variables to retrieve (described in [4]_), must include
+ 'ObservationTime'. Available variables depend on whether historical or
+ TMY data is requested.
+ missing_data: {'Omit', 'FillAverage'}, default: 'FillAverage'
+ Method for treating missing data.
+ url: str, default: :const:`pvlib.iotools.solaranywhere.URL`
+ Base url of SolarAnywhere API.
+ map_variables: bool, default: True
+ When true, renames columns of the DataFrame to pvlib variable names
+ where applicable. See :const:`VARIABLE_MAP`.
+ timeout: float, default: 300
+ Time in seconds to wait for requested data to become available.
+
+ Returns
+ -------
+ data: pandas.DataFrame
+ Timeseries data from SolarAnywhere. The index is the observation time
+ (middle of period).
+ metadata: dict
+ Metadata available (includes site latitude, longitude, and altitude).
+
+ See Also
+ --------
+ pvlib.iotools.read_solaranywhere
+
+ Note
+ ----
+ SolarAnywhere data requests are asynchronous, and it might take several
+ minutes for the requested data to become available.
+
+ Examples
+ --------
+ >>> # Retrieve one month of SolarAnywhere data for Atlanta, GA
+ >>> data, meta = pvlib.iotools.get_solaranywhere(
+ ... latitude=33.765, longitude=-84.395, api_key='redacted',
+ ... start=pd.Timestamp(2020,1,1), end=pd.Timestamp(2020,2,1)) # doctest: +SKIP
+
+ References
+ ----------
+ .. [1] `SolarAnywhere API
+ `_
+ .. [2] `SolarAnywhere irradiance and weather API requests
+ `_
+ .. [3] `SolarAnywhere API options
+ `_
+ .. [4] `SolarAnywhere variable definitions
+ `_
+ """ # noqa: E501
+ headers = {'content-type': "application/json; charset=utf-8",
+ 'X-Api-Key': api_key,
+ 'Accept': "application/json"}
+
+ payload = {
+ "Sites": [{
+ "Latitude": latitude,
+ "Longitude": longitude
+ }],
+ "Options": {
+ "OutputFields": variables,
+ "SummaryOutputFields": [], # Do not request summary/monthly data
+ "SpatialResolution_Degrees": spatial_resolution,
+ "TimeResolution_Minutes": time_resolution,
+ "WeatherDataSource": source,
+ "MissingDataHandling": missing_data,
+ }
+ }
+
+ if true_dynamics:
+ payload['Options']['ApplyTrueDynamics'] = True
+
+ if probability_of_exceedance is not None:
+ if not isinstance(probability_of_exceedance, int):
+ raise ValueError('`probability_of_exceedance` must be an integer')
+ payload['Options']['ProbabilityOfExceedance'] = \
+ probability_of_exceedance
+
+ # Add start/end time if requesting non-TMY data
+ if (start is not None) or (end is not None):
+ # Convert start/end to datetime in case they are specified as strings
+ start = pd.to_datetime(start)
+ end = pd.to_datetime(end)
+ # start/end are required to have an associated time zone
+ if start.tz is None:
+ start = start.tz_localize('UTC')
+ if end.tz is None:
+ end = end.tz_localize('UTC')
+ payload['Options']["StartTime"] = start.isoformat()
+ payload['Options']["EndTime"] = end.isoformat()
+
+ # Convert the payload dictionary to a JSON string (uses double quotes)
+ payload = json.dumps(payload)
+ # Make data request
+ request = requests.post(url+'/WeatherData', data=payload, headers=headers)
+ # Raise error if request is not OK
+ if request.ok is False:
+ raise ValueError(request.json()['Message'])
+ # Retrieve weather request ID
+ weather_request_id = request.json()["WeatherRequestId"]
+
+ # The SolarAnywhere API is asynchronous, hence a second request is
+ # necessary to retrieve the data (WeatherDataResult).
+ start_time = time.time() # Current time in seconds since the Epoch
+ # Attempt to retrieve results until the max response time has been exceeded
+ while True:
+ results = requests.get(url+'/WeatherDataResult/'+weather_request_id, headers=headers) # noqa: E501
+ results_json = results.json()
+ if results_json.get('Status') == 'Done':
+ if results_json['WeatherDataResults'][0]['Status'] == 'Failure':
+ raise RuntimeError(results_json['WeatherDataResults'][0]['ErrorMessages'][0]['Message']) # noqa: E501
+ break
+ elif (time.time()-start_time) > timeout:
+ raise TimeoutError('Time exceeded the `timeout`.')
+ time.sleep(5) # Sleep for 5 seconds before each data retrieval attempt
+
+ # Extract time series data
+ data = pd.DataFrame(results_json['WeatherDataResults'][0]['WeatherDataPeriods']['WeatherDataPeriods']) # noqa: E501
+ # Set datetime index
+ data.index = pd.to_datetime(data['ObservationTime'])
+ if map_variables:
+ data = data.rename(columns=VARIABLE_MAP)
+
+ # Parse metadata
+ meta = results_json['WeatherDataResults'][0]['WeatherSourceInformation']
+ meta['time_resolution'] = results_json['WeatherDataResults'][0]['WeatherDataPeriods']['TimeResolution_Minutes'] # noqa: E501
+ meta['spatial_resolution'] = spatial_resolution
+ # Rename and convert applicable metadata parameters to floats
+ meta['latitude'] = float(meta.pop('Latitude'))
+ meta['longitude'] = float(meta.pop('Longitude'))
+ meta['altitude'] = float(meta.pop('Elevation_Meters'))
+ return data, meta
+
+
+def read_solaranywhere(filename, map_variables=True, encoding='iso-8859-1'):
+ """
+ Read a SolarAnywhere formatted file into a pandas DataFrame.
+
+ The SolarAnywhere file format and variables are described in [1]_. Note,
+ the SolarAnywhere file format resembles the TMY3 file format but contains
+ additional variables and metadata.
+
+ Parameters
+ ----------
+ filename: str
+ Filename
+ map_variables: bool, default: True
+ When true, renames columns of the DataFrame to pvlib variable names
+ where applicable. See :const:`VARIABLE_MAP`.
+ encoding : str, default : 'iso-8859-1'
+ Encoding of the file. For SolarAnywhere TMY3 files the 'iso-8859-1'
+ encoding is recommended due to the usage of special characters.
+
+ Returns
+ -------
+ data: pandas.DataFrame
+ Timeseries data from SolarAnywhere.
+ metadata: dict
+ Metadata available in the file.
+
+ See Also
+ --------
+ pvlib.iotools.get_solaranywhere
+
+ References
+ ----------
+ .. [1] `SolarAnywhere historical data file formats
+ `_
+ """
+ with open(str(filename), 'r', encoding=encoding) as fbuf:
+ # Extract first line of file which contains the metadata
+ firstline = fbuf.readline().strip().split(',')
+ # Read remaining part of file which contains the time series data
+ data = pd.read_csv(fbuf)
+
+ # Parse metadata
+ meta = {}
+ meta['USAF'] = int(firstline.pop(0))
+ meta['name'] = firstline.pop(0)
+ meta['state'] = firstline.pop(0)
+ meta['TZ'] = float(firstline.pop(0))
+ meta['latitude'] = float(firstline.pop(0))
+ meta['longitude'] = float(firstline.pop(0))
+ meta['altitude'] = float(firstline.pop(0))
+
+ # SolarAnywhere files contain additional metadata than the TMY3 format.
+ # The additional metadata is specified as key-value pairs, where each entry
+ # is separated by a slash, and the key-value pairs are separated by a
+ # colon. E.g., 'Data Version: 3.4 / Type: Typical Year / ...'
+ for i in ','.join(firstline).replace('"', '').split('/'):
+ if ':' in i:
+ k, v = i.split(':')
+ meta[k.strip()] = v.strip()
+
+ meta['LatLon Resolution'] = float(meta['LatLon Resolution'])
+
+ # Set index
+ data.index = pd.to_datetime(data['ObservationTime(LST)'],
+ format='%m/%d/%Y %H:%M')
+ # Set timezone
+ data = data.tz_localize(int(meta['TZ'] * 3600))
+ # Remove notion of LST in case the index is later converted to another tz
+ data.index.name = data.index.name.replace('(LST)', '')
+ # Missing values can be represented as: blanks, 'NaN', or -999
+ data = data.replace(-999, np.nan)
+
+ if map_variables:
+ data = data.rename(columns=VARIABLE_MAP)
+
+ return data, meta
diff --git a/pvlib/tests/conftest.py b/pvlib/tests/conftest.py
index f579ef45f2..d74dfb35b4 100644
--- a/pvlib/tests/conftest.py
+++ b/pvlib/tests/conftest.py
@@ -95,6 +95,19 @@ def assert_frame_equal(left, right, **kwargs):
not has_bsrn_credentials, reason='requires bsrn credentials')
+try:
+ # Attempt to load SolarAnywhere API key used for testing
+ # pvlib.iotools.get_solaranywhere
+ solaranywhere_api_key = os.environ["SOLARANYWHERE_API_KEY"]
+ has_solaranywhere_credentials = True
+except KeyError:
+ has_solaranywhere_credentials = False
+
+requires_solaranywhere_credentials = pytest.mark.skipif(
+ not has_solaranywhere_credentials,
+ reason='requires solaranywhere credentials')
+
+
try:
import statsmodels # noqa: F401
has_statsmodels = True
diff --git a/pvlib/tests/iotools/test_solaranywhere.py b/pvlib/tests/iotools/test_solaranywhere.py
new file mode 100644
index 0000000000..018c583be8
--- /dev/null
+++ b/pvlib/tests/iotools/test_solaranywhere.py
@@ -0,0 +1,287 @@
+import pandas as pd
+import pytest
+import pvlib
+import os
+from ..conftest import (DATA_DIR, RERUNS, RERUNS_DELAY,
+ requires_solaranywhere_credentials)
+
+# High spatial resolution and 5-min data, true dynamics enabled
+TESTFILE_HIGH_RESOLUTION = DATA_DIR / 'Burlington, United States SolarAnywhere Time Series 20210101 to 20210103 Lat_44_4675 Lon_-73_2075 SA format.csv' # noqa: E501
+# TGY test file (v3.6) containing GHI/DHI and temperature.
+# Note, the test file only contains the first three days.
+TESTFILE_TMY = DATA_DIR / 'Burlington, United States SolarAnywhere Typical GHI Year Lat_44_465 Lon_-73_205 SA format.csv' # noqa: E501
+
+
+@pytest.fixture(scope="module")
+def solaranywhere_api_key():
+ """Supplies the pvlib's SolarAnywhere API key for testing purposes.
+ Users can freely register for an API key."""
+ solaranywhere_api_key = os.environ["SOLARANYWHERE_API_KEY"]
+ return solaranywhere_api_key
+
+
+@pytest.fixture
+def high_resolution_index():
+ index = pd.date_range(start='2021-01-01 00:05-0500',
+ end='2021-01-03 00:00-0500', freq='5min')
+ index.name = 'ObservationTime'
+ return index
+
+
+@pytest.fixture
+def tmy_index():
+ index = pd.date_range(
+ start='2000-01-01 01:00-0500', periods=3*24, freq='1h')
+ index.name = 'ObservationTime'
+ index.freq = None
+ return index
+
+
+@pytest.fixture
+def tmy_ghi_series(tmy_index):
+ ghi = [
+ 0, 0, 0, 0, 0, 0, 0, 3, 50, 171, 234, 220, 202, 122, 141, 65, 2, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 48, 105, 161, 135, 108, 72, 58,
+ 33, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 47, 124, 99, 116,
+ 130, 165, 110, 36, 1, 0, 0, 0, 0, 0, 0, 0
+ ]
+ return pd.Series(data=ghi, index=tmy_index, name='ghi')
+
+
+def test_read_solaranywhere_high_resolution(high_resolution_index):
+ data, meta = pvlib.iotools.read_solaranywhere(TESTFILE_HIGH_RESOLUTION,
+ map_variables=False)
+ # Check that metadata is parsed correctly
+ assert meta['latitude'] == 44.4675
+ assert meta['longitude'] == -73.2075
+ assert meta['altitude'] == 41.0
+ assert meta['name'] == 'Burlington United States'
+ assert meta['TZ'] == -5.0
+ assert meta['Data Version'] == '3.6'
+ assert meta['LatLon Resolution'] == 0.005
+ # Check that columns are parsed correctly
+ assert 'Albedo' in data.columns
+ assert 'Global Horizontal Irradiance (GHI) W/m2' in data.columns
+ assert 'Direct Normal Irradiance (DNI) W/m2' in data.columns
+ assert 'WindSpeed (m/s)' in data.columns
+ assert 'WindSpeedObservationType' in data.columns
+ assert 'Particulate Matter 10 (µg/m3)' in data.columns
+ # Check that data is parsed correctly
+ assert data.loc['2021-01-01 07:00:00-05:00', 'Albedo'] == 0.6
+ assert data.loc['2021-01-01 07:00:00-05:00', 'WindSpeed (m/s)'] == 0
+ # Assert that the index is parsed correctly
+ pd.testing.assert_index_equal(data.index, high_resolution_index)
+
+
+def test_read_solaranywhere_map_variables():
+ # Check that variables are mapped by default to pvlib names
+ data, meta = pvlib.iotools.read_solaranywhere(TESTFILE_HIGH_RESOLUTION)
+ mapped_column_names = ['ghi', 'dni', 'dhi', 'temp_air', 'wind_speed',
+ 'relative_humidity', 'ghi_clear', 'dni_clear',
+ 'dhi_clear', 'albedo']
+ for c in mapped_column_names:
+ assert c in data.columns
+ assert meta['latitude'] == 44.4675
+ assert meta['longitude'] == -73.2075
+ assert meta['altitude'] == 41.0
+
+
+def test_read_solaranywhere_tmy(tmy_index, tmy_ghi_series):
+ # Check that TMY files are correctly parsed
+ data, meta = pvlib.iotools.read_solaranywhere(TESTFILE_TMY)
+ # Check that columns names are correct and mapped to pvlib names
+ assert 'ghi' in data.columns
+ assert 'dni' in data.columns
+ assert 'dhi' in data.columns
+ assert 'temp_air' in data.columns
+ # Check that metadata is parsed correctly
+ assert meta['latitude'] == 44.465
+ assert meta['longitude'] == -73.205
+ assert meta['altitude'] == 41.0
+ assert meta['name'] == 'Burlington United States'
+ assert meta['TZ'] == -5.0
+ assert meta['Data Version'] == '3.6'
+ assert meta['LatLon Resolution'] == 0.010
+ assert meta['Time Resolution'] == '60 minutes'
+ # Assert that the index is parsed correctly
+ pd.testing.assert_index_equal(data.index, tmy_index)
+ # Test one column
+ pd.testing.assert_series_equal(data['ghi'], tmy_ghi_series)
+
+
+@pytest.mark.remote_data
+@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY)
+def test_get_solaranywhere_bad_probability_of_exceedance():
+ # Test if ValueError is raised if probability_of_exceedance is not integer
+ with pytest.raises(ValueError, match="must be an integer"):
+ pvlib.iotools.get_solaranywhere(
+ latitude=44, longitude=-73, api_key='empty',
+ source='SolarAnywherePOELatest', probability_of_exceedance=0.5)
+
+
+@pytest.mark.remote_data
+@requires_solaranywhere_credentials
+@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY)
+def test_get_solaranywhere_missing_start_end(solaranywhere_api_key):
+ # Test if ValueError is raised if start/end is missing for non-TMY request
+ with pytest.raises(ValueError, match="simulation start and end time"):
+ pvlib.iotools.get_solaranywhere(
+ latitude=44, longitude=-73, api_key=solaranywhere_api_key,
+ source='SolarAnywhereLatest')
+
+
+@pytest.fixture
+def time_series_index():
+ index = pd.date_range(start='2019-12-31 19:02:30-05:00', periods=288,
+ freq='5min')
+ index.name = 'ObservationTime'
+ index.freq = None
+ return index
+
+
+@pytest.fixture
+def timeseries_temp_air(time_series_index):
+ temp_air = [
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
+ ]
+ return pd.Series(data=temp_air, index=time_series_index, name='temp_air')
+
+
+@requires_solaranywhere_credentials
+@pytest.mark.remote_data
+@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY)
+def test_get_solaranywhere_no_timezone(
+ solaranywhere_api_key, time_series_index, timeseries_temp_air):
+ # Test if data can be retrieved. This test only retrieves one day of data
+ # to minimize the request time.
+ data, meta = pvlib.iotools.get_solaranywhere(
+ latitude=44.4675, longitude=-73.2075, api_key=solaranywhere_api_key,
+ # specify start/end without timezone information
+ start=pd.Timestamp(2020, 1, 1), end=pd.Timestamp(2020, 1, 2),
+ # test specific version of SolarAnywhere
+ source='SolarAnywhere3_6',
+ spatial_resolution=0.005, time_resolution=5, true_dynamics=True)
+
+ # Check metadata, including that true-dynamics is set
+ assert meta['WeatherSiteName'] == 'SolarAnywhere3_6'
+ assert meta['ApplyTrueDynamics'] is True
+ assert meta['time_resolution'] == 5
+ assert meta['spatial_resolution'] == 0.005
+ assert meta['latitude'] == 44.4675
+ assert meta['longitude'] == -73.2075
+ assert meta['altitude'] == 41.0
+
+ # Check that variables have been mapped (default convention)
+ assert 'StartTime' in data.columns
+ assert 'ObservationTime' in data.columns
+ assert 'EndTime' in data.columns
+ assert 'ghi' in data.columns
+ assert 'dni' in data.columns
+ assert 'dhi' in data.columns
+ assert 'temp_air' in data.columns
+ assert 'wind_speed' in data.columns
+ assert 'albedo' in data.columns
+ assert 'DataVersion' in data.columns
+
+ # Assert index (checks that time resolution is 5 min)
+ pd.testing.assert_index_equal(data.index, time_series_index)
+ # Test one column
+ pd.testing.assert_series_equal(data['temp_air'], timeseries_temp_air)
+
+
+@requires_solaranywhere_credentials
+@pytest.mark.remote_data
+@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY)
+def test_get_solaranywhere_other_options(
+ solaranywhere_api_key, time_series_index, timeseries_temp_air):
+ # Test if data can be retrieved. This test only retrieves one day of data
+ # to minimize the request time.
+ data, meta = pvlib.iotools.get_solaranywhere(
+ latitude=44.4675, longitude=-73.2075, api_key=solaranywhere_api_key,
+ # specify start/end as str with timezone information
+ start='2020-01-01 00:00:00+0000',
+ end='2020-01-02 00:00:00+0000',
+ # test specific version of SolarAnywhere
+ source='SolarAnywhere3_7',
+ # test fewer variables
+ variables=[
+ 'ObservationTime',
+ 'GlobalHorizontalIrradiance_WattsPerMeterSquared',
+ ],
+ map_variables=False)
+
+ # Check metadata
+ assert meta['WeatherSiteName'] == 'SolarAnywhere3_7'
+ assert meta['ApplyTrueDynamics'] is False # default setting
+ assert meta['time_resolution'] == 60 # default resolution
+ assert meta['spatial_resolution'] == 0.01 # default resolution
+ assert meta['latitude'] == 44.4675
+ assert meta['longitude'] == -73.2075
+ assert meta['altitude'] == 41.0
+
+ # Check that variables have been mapped (default convention)
+ assert 'StartTime' not in data.columns
+ assert 'ObservationTime' in data.columns
+ assert 'EndTime' not in data.columns
+ # Check that ghi is not mapped
+ assert 'ghi' not in data.columns
+ assert 'GlobalHorizontalIrradiance_WattsPerMeterSquared' in data.columns
+ assert 'dni' not in data.columns
+ assert 'dhi' not in data.columns
+ assert 'temp_air' not in data.columns
+ assert 'wind_speed' not in data.columns
+ assert 'albedo' not in data.columns
+ assert 'DataVersion' not in data.columns
+
+
+@requires_solaranywhere_credentials
+@pytest.mark.remote_data
+@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY)
+def test_get_solaranywhere_probability_exceedance_error(solaranywhere_api_key):
+ # Test if ValueError is raised when passing start/end to typical year
+ with pytest.raises(ValueError, match="start and end time must be null"):
+ data, meta = pvlib.iotools.get_solaranywhere(
+ latitude=44.4675, longitude=-73.2075,
+ api_key=solaranywhere_api_key,
+ # Probabiliy of exceedance year should not have start/end specified
+ start=pd.Timestamp('2020-01-01 00:00:00+0000'),
+ end=pd.Timestamp('2020-01-05 12:00:00+0000'),
+ source='SolarAnywherePOELatest',
+ probability_of_exceedance=20)
+
+
+@requires_solaranywhere_credentials
+@pytest.mark.remote_data
+@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY)
+def test_get_solaranywhere_timeout_tgy(solaranywhere_api_key):
+ # Test if the service times out when the timeout parameter is close to zero
+ with pytest.raises(TimeoutError, match="Time exceeded"):
+ pvlib.iotools.get_solaranywhere(
+ latitude=44.4675, longitude=-73.2075,
+ api_key=solaranywhere_api_key,
+ source='SolarAnywhereTGYLatest',
+ timeout=0.00001)
+
+
+@requires_solaranywhere_credentials
+@pytest.mark.remote_data
+@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY)
+def test_get_solaranywhere_not_available(solaranywhere_api_key):
+ # Test if RuntimeError is raised if location in the ocean is requested
+ with pytest.raises(RuntimeError, match="Tile is outside of our coverage"):
+ pvlib.iotools.get_solaranywhere(
+ latitude=40, longitude=-70,
+ api_key=solaranywhere_api_key,
+ start=pd.Timestamp('2020-01-01 00:00:00+0000'),
+ end=pd.Timestamp('2020-01-05 12:00:00+0000'))