|  | Introduction | 
|  | ------------------------------------------------------------ | 
|  |   | 
|  | WeatherService lets you collect, share and organize | 
|  | measurements of weather stations. A station can be public | 
|  | available or only for registered users. | 
|  |   | 
|  |   | 
|  | Setup | 
|  | ------------------------------------------------------------ | 
|  |   | 
|  | Dependencies | 
|  | ------------ | 
|  |   | 
|  | The solution is based on .NET Core 2. To install | 
|  | dependencies go to the checked out "WeatherService" | 
|  | directory and run these commands: | 
|  |   | 
|  |   $ dotnet restore | 
|  |   $ cd WeatherStation | 
|  |   $ bower install | 
|  |   | 
|  |   | 
|  | Database | 
|  | -------- | 
|  |   | 
|  | WeatherService uses LINQ to DB for database access. You find | 
|  | scripts for Firebird and SQLite in the SQL subfolder. | 
|  |   | 
|  | Creating a SQLite database is simple: | 
|  |   | 
|  |   $ sqlite3 database/WeatherService.db < SQL/sqlite.sql | 
|  |   | 
|  | After setting up the database define the connection string | 
|  | and database provider in the configuration file | 
|  | "WeatherService.ini". | 
|  |   | 
|  |   | 
|  | Administrator Account | 
|  | --------------------- | 
|  |   | 
|  | Now it's time to start the web application: | 
|  |   | 
|  |   $ dotnet run | 
|  |   | 
|  | Visit the following website to create the administrator | 
|  | account: | 
|  |   | 
|  | Login and change the password under "My Account" -> | 
|  | "My Profile". | 
|  |   | 
|  |   | 
|  | Quick Guide | 
|  | ------------------------------------------------------------ | 
|  |   | 
|  | User Accounts | 
|  | ------------- | 
|  |   | 
|  | Go to "Administration" -> "User Accounts" to manage users. | 
|  | The following screen displays a list of registered user | 
|  | accounts. | 
|  |   | 
|  | User Accounts 1 | 
|  |   | 
|  | Click the "Edit" or "Remove" button to change or delete a | 
|  | user profile. A new user account can be created with the | 
|  | "Create new user" button below the table. | 
|  |   | 
|  | User Accounts 2 | 
|  |   | 
|  | Users must have a unique login name and password. | 
|  | Additionally, you can set an optional mail address. | 
|  |   | 
|  | By setting the "admin" flag an account is allowed to access | 
|  | the user and weather station management screens. | 
|  |   | 
|  |   | 
|  | Weather Stations | 
|  | ---------------- | 
|  |   | 
|  | Go to "Administration" -> "Weather Stations" to organize | 
|  | weather stations. The following screen displays a list of | 
|  | existing stations. Each one has an automatic generated GUID. | 
|  |   | 
|  | Click the "Edit" or "Remove" button to change or delete a | 
|  | weather station. A new station can be registered with the | 
|  | "Create new station" button below the table. | 
|  |   | 
|  | Weather Stations 1 | 
|  |   | 
|  | Station names have to be unique. The shared secret is | 
|  | required if you want to upload measurements with the REST | 
|  | API. | 
|  |   | 
|  | At the current stage a station can provide Temperature (°C), | 
|  | Pressure (hPa), absolute Humidity (percent), UV (mW/cm²) and | 
|  | a webcam link. | 
|  |   | 
|  | By setting the "public" flag a station is accessible anonymously. | 
|  |   | 
|  | Weather Stations 2 | 
|  |   | 
|  |   | 
|  | Log Values | 
|  | ---------- | 
|  |   | 
|  | To display measurements select a station from the "Stations" | 
|  | list. | 
|  |   | 
|  | Measurements | 
|  |   | 
|  |   | 
|  | Dashbaord | 
|  | --------- | 
|  |   | 
|  | Users have their own customizable dashboard. It's possible | 
|  | to add widgets and move them by drag & drop. | 
|  |   | 
|  | Dashboard | 
|  |   | 
|  | The "Add widget" button opens a dialog where you can chose a | 
|  | widget that you want to show on your dashboard. | 
|  |   | 
|  | Widget 1 | 
|  |   | 
|  | Move the mouse cursor over a widget if you want to delete it or change the data source. | 
|  |   | 
|  | Widget 2 | 
|  |   | 
|  |   | 
|  | REST Interface | 
|  | ------------------------------------------------------------ | 
|  |   | 
|  | To send your measurements post a JSON array to | 
|  | /api/WeaterLog/{guid}. The example below describes the | 
|  | format: | 
|  |   | 
|  |   [{ timestamp: 1523899859, // UNIX timestamp (UTC) | 
|  |      temperature: 23.5, | 
|  |      pressure: 998, | 
|  |      humidity: 55, | 
|  |      uv: 0.31 | 
|  |    }] | 
|  |   | 
|  |   | 
|  | Authentication | 
|  | -------------- | 
|  |   | 
|  | The client has to send the following HTTP headers for authentication: | 
|  |   | 
|  |   * X-WeatherStation-SenderId GUID of the station | 
|  |   * X-WeatherStation-Timestamp current UNIX timestamp (UTC) | 
|  |   * X-WeatherStation-HMAC lower case hexadecimal checksum of the timestamp | 
|  |   | 
|  | The timestamp is hashed with HMAC-SHA1: | 
|  |   | 
|  |   HMAC_SHA1($timestamp, $secret) | 
|  |   | 
|  |   | 
|  | Links | 
|  | ------------------------------------------------------------ | 
|  | master.zip | 
|  | GitHub |