Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/gcclinux/easyweather

EasyWeather is designed to help weather hobbies storing weather data locally in a PostgreSQL database!
https://github.com/gcclinux/easyweather

weather weather-api weather-data

Last synced: about 2 months ago
JSON representation

EasyWeather is designed to help weather hobbies storing weather data locally in a PostgreSQL database!

Awesome Lists containing this project

README

        

# EASYWEATHER

This application / code is currently still working progress several know facts still to be corrected and completed.

**New Weather collector that get weather data from weather.com and openweathermap.org**

This easyweather application will collect the weather data from either or both above data source and store it in a PostgreSQL database.

Requires: APIKEY from either or both Weather Sites

**If you don't have your own weather station.**

*https://openweathermap.org/api*

**If you do have your own weather station that can upload data.**

*https://www.wunderground.com/member/api-keys*

**Table definiton and differences captured between weather.com and openweathermap.org**

```
Wunderground SQL Struct OpenWeather Example
id(integer)
obsTimeUtc obsTimeUtc(timestamp) time.Time Convert 2023-12-04T10:03:24Z
obsTimeLocal obsTimeLocal(timestamp) string Convert 2023-12-04 10:03:24
neighborhood neighborhood(character) string name Edinburgh
country country(character) string country GB
solarRadiation solarRadiation(double) float64 nil 8.6
lon lon(double) float64 lon -3.456
realtimeFrequency realtimeFrequency(double) int nil 0
epoch epoch(double) int dt 1701684204
lat lat(double) float64 lat 55.932
uv uv(double) float64 nil 0
winddir winddir(integer) float64 nil 118
humidity humidity(integer) float64 humidity 93
qcStatus qcStatus(integer) float64 nil 1
temp temp(double) float64 temp 3.6
heatIndex heatIndex(double) float64 feels_like 3.6
dewpt dewpt(double) float64 Convert 2.5
windChill windChill(double) float64 nil 3.7
windSpeed windSpeed(double) float64 speed 1.1
windGust windGust(double) float64 gust 1.8
pressure pressure(double) float64 pressure 1020.79
precipRate precipRate(double) float64 nil 0
precipTotal precipTotal(double) float64 nil 0.71
nil freetext(character) string description broken clouds
```
**Config example if you upload data to weather.com**
```
{
"DB_HOST": ["host_name"], (Database hostname or ip address)
"DB_PORT": ["5432"], (PostgreSQL default port)
"DB_USER": ["user_name"], (PostgreSQL database user)
"DB_PASS": ["Passw0rd"], (PostgreSQL user password)
"DB_NAME": ["weather"], (PostgreSQL database name)
"TB_NAME": ["easyweather"], (PostgreSQL database table name)
"OpenWeatherApi": ["12345678909876543212345678909876"], (OpenWeatherApi key)
"WundergroundApi": [""], (WundergroundApi key)
"StationId": [""], (Wunderground StationId)
"WebPort": ["8081"], (Web port for Admin & Chart)
"Language": ["en"], (OpenWeatherApi Description language)
"DefaultCity": ["Edinburgh"], (Default city if not varble passed)
"Interval": [10], (Freequency data will be collected in minutes)
"Retry": [10], (Freequency of data capture if failed)
"PrivKeyPATH": [""], (String with Full PATH to your /path/privkey.pem)
"CertPemPATH": [""] (String with Full PATH to you /path/cert.pem)
}
```
**PostgreSQL database structure example and syntax**

*There is a script under sertup flder called setup/create_table.sql*

```
CREATE TABLE public.easyweather (
id int4 NOT NULL DEFAULT nextval('easyweather_id_seq'::regclass),
obstimeutc timestamp NULL,
obstimelocal timestamp NULL,
neighborhood varchar(50) NULL,
country bpchar(2) NULL,
solarradiation float8 NULL,
lon float8 NULL,
realtimefrequency int4 NULL,
epoch int8 NULL,
lat float8 NULL,
uv float8 NULL,
winddir int4 NULL,
humidity int4 NULL,
qcstatus int4 NULL,
"temp" float8 NULL,
heatindex float8 NULL,
dewpt float8 NULL,
windchill float8 NULL,
windspeed float8 NULL,
windgust float8 NULL,
pressure float8 NULL,
preciprate float8 NULL,
preciptotal float8 NULL,
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP,
freetext varchar NULL,
CONSTRAINT easyweather_pkey_1 PRIMARY KEY (id)
);
```

When everything is created and configured like your PostgreSQL database and your config and API accounts! The first thing yu should do is run an integrity check to make sure everything is working and configured using the --integrity flag

The compile script creates easyweather.exe but you can compile the program manually if you want:

*go build -o easyweather.exe *.go*

*go build -o easyweather *.go*

*go build -o easyweather-\$(uname)-\$(uname -m) *.go*

**Function to run through the setup and check the integrity of the application setup**

*./compile.sh && ./easyweather.exe --integrity*

**Quick example how to compile and lanch the application for data collection**

*./compile.sh && ./easyweather.exe --collect*

**Quick example how to compile and lanch the application to launch the web interface!**

*./compile.sh && ./easyweather.exe --web*

To run the program you will need to set it in the background to collect and to serve the web!


Linux Example:

*cd /server/easyweather && /usr/bin/screen -dmS WEATHER-GUI /server/easyweather/easyweather-Linux-aarch64 --web*

*cd /server/easyweather && /usr/bin/screen -dmS WEATHER-COL /server/easyweather/easyweather-Linux-aarch64 --collect*


Windows Example (CMD):

*C:\Users\ricar\easyweather> start /b easyweather.exe --web*

*C:\Users\ricar\easyweather> start /b easyweather.exe --collect*


Windows Example (PS):

*PS C:\Users\ricar\easyweather> Start-Process -FilePath ".\easyweather.exe" -ArgumentList "--web" -NoNewWindow -PassThru | Out-Null*

*PS C:\Users\ricar\easyweather> Start-Process -FilePath ".\easyweather.exe" -ArgumentList "--collect" -NoNewWindow -PassThru | Out-Null*