Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

My setup #1

Open
juriad opened this issue May 31, 2020 · 1 comment
Open

My setup #1

juriad opened this issue May 31, 2020 · 1 comment

Comments

@juriad
Copy link

juriad commented May 31, 2020

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
Copy link

qaxi commented Jun 9, 2020

Nice work!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants