# BlueWeather

A (hopefully soon) fully featured  selft-hosted web interface and server-backend to store weather data (comparable to opensensemap.org)

# State of development

- interface and backend planned
- readonly dashboard is working

# Installation
1. Install the required packages
```
sudo apt install git apache2 mysql-server mysql-client php libapache2-mod-php php-mysql php-cli php-common -y
```
2. Prepare the working directory and download SafeMail
```
cd /var/www/html/

git clone https://git.itsblue.de/dorian/blueweather.git
```
3. Create the database
```
sudo mysql -u root

CREATE DATABASE blueweather;
```
4. now create the database user, if you change the username, password or database name, don't forget to change that data in the config.php file!

```
GRANT ALL ON blueweather.* TO 'blueweather'@'localhost' IDENTIFIED BY 'root';

FLUSH PRIVILEGES;

exit;
```
```
5. Prepare database for usage (create Tables and Keys)
```
cd /var/www/html/blueweather/api

sudo mysql -u root blueweather < blueweather.sql
```
Your BlueWeather instance can now be reached under: <your_ip>/blueweather


# API docs

## get locations
triggered by setting no GET parameter at all
### Parameters
no parameters

### Tags
- id
- locationname
- latitude
- longitude
- countryname

## get location data
triggered by setting GET parameter 'locId' to a vaild location id
### Parameters
- locId:    id of the location to display
- range:    range of the data to display in unix time
    - from
    - to
- max vals: maximum measvals to be transmitted; if more are present in the timespan, the avarage will be calculated

### Tags
- id
- locationname
- latitude
- longitude
- countryname
- measvalues
    - measvalue
    - sensorid
    - timestamp
- sensors
    - id
    - added
    - userid
    - sensorname
    - property ('indoor' || 'sunny' || 'shadow' )
    - valuetypeid
- valuetypes
    - id
    - valuetype ('temperature' || 'humidity')
    - valueunit (html coding)
    - displayproperty
        - widget (properties for small widget)
            - type ('doughnut' || 'text')
            - properties (chartjs dataset properties if type is a chartjs type)
        - chart (properties for large chart)
            - type ('scatter')
            - properties (chartjs dataset properties)
- range (actual range of present measvalues)
    - from
    - to


