buffy007 / garni

Scripts and tools for Garni Meteo devices.
MIT License
5 stars 3 forks source link

My setup #1

Open juriad opened 4 years ago

juriad commented 4 years ago

Hi, I made a similar script which puts the data into InfluxDB and then shows them in Grafana.

Php script:

<?php

# forward data to weatherunderground
$url = 'http://rtupdate.wunderground.com/weatherstation/updateweatherstation.php?' . http_build_query($_GET);
$result = file_get_contents($url);

# no need to save to file, but I like to see that the script works
file_put_contents('update', json_encode([$_GET, $result]));

# utility functions for unit conversion
function f2c($f) {
    return 5 / 9 * ($f - 32);
}
function in2hpa($in) {
    return $in * 33.86389;
}
function p2dec($p) {
    return $p / 100;
}
function mph2kmph($mph) {
    return $mph * 1.609344;
}
function in2mm($in) {
    return $in * 25.4;
}

function toInflux() {
    $barometric_pressure_hpa = in2hpa($_GET['baromin']);

    $temperature_c = f2c($_GET['tempf']);
    $humidity = $_GET['humidity'];
    $dew_point_c = f2c($_GET['dewptf']);

    $wind_speed_kmph = mph2kmph($_GET['windspeedmph']);
    $wind_gust_kmph = mph2kmph($_GET['windgustmph']);
    $wind_direction = $_GET['winddir'];

    $rain_mm = in2mm($_GET['rainin']);
    $daily_rain_mm = in2mm($_GET['dailyrainin']);

    $indoor_temperature_c = f2c($_GET['indoortempf']);
    $indoor_humidity = $_GET['indoorhumidity'];

    $content = [
        'barometric_pressure_hpa' => $barometric_pressure_hpa,
        'temperature_c' => $temperature_c,
        'humidity' => $humidity,
        'dew_point_c' => $dew_point_c,
        'wind_speed_kmph' => $wind_speed_kmph,
        'wind_gust_kmph' => $wind_gust_kmph,
        'wind_direction' => $wind_direction,
        'rain_mm' => $rain_mm,
        'daily_rain_mm' => $daily_rain_mm,
        'indoor_temperature_c' => $indoor_temperature_c,
        'indoor_humidity' => $indoor_humidity
    ];

    $opts = [
        'http' => [
            'method' => "POST",
            'content' => "weather " . http_build_query($content, '', ','),
        ]
    ];

    $params = [
        "db" => "meteo"
    ];

        # no need to store to file
    file_put_contents('influx', json_encode($opts));

    file_get_contents(
        'http://localhost:8086/write?' . http_build_query($params),
        false,
        stream_context_create($opts)
    );
}

toInflux();

docker-compose.yml:

version: '3'

services:
  influxdb:
    image: influxdb:1.8
    ports:
      - 8086:8086
    volumes:           
      - /srv/influxdvb:/var/lib/influxdb
  chronograf:
    image: chronograf:1.8
    ports:
      - 8888:8888
    environment:
      INFLUXDB_URL: http://influxdb:8086
  grafana:
    image: grafana/grafana:7.0.0
    ports:
      - 3000:3000
    volumes:
      - /srv/grafana:/var/lib/grafana

It would be easy to add php to the docker setup, I haven't done it yet.

The result can then look like this (grafana dashboard): image

My setup does not include UV as my UV sensor is faulty and always reports 0. It would be very easy to add.

qaxi commented 4 years ago

Nice work!