Skip to content

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

License

Notifications You must be signed in to change notification settings

gcclinux/easyweather

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published