# Licence: WTFPLv2 <http://www.wtfpl.net/txt/copying/>
# Copyright 2015: Julien Moutinho <julm+air@autogeree.net>

RRD_CF:=AVERAGE
SENSORS:= \
 humidity \
 temperature \
 quality \
 particles

.rrd = $(wildcard rrd/*/*.rrd)

all: png

#
## INO
###

# For GNU/Linux
ARDUINO_DIR   := /usr/share/arduino/
ARDMK_DIR     := /usr/share/arduino/
AVR_TOOLS_DIR := /usr

# For Seeeduino
BOARD_TAG := uno

ARDUINO_LIBS := \
 AirQuality_Sensor \
 DustSensor \
 Humidity_Temperature_Sensor \
 LCD_Display9696 \
 Wire

USER_LIB_PATH := $(abspath ./libraries)

include $(ARDMK_DIR)/Arduino.mk

ino: $(TARGET_EEP) $(TARGET_HEX)

#
## PNG
###
.PHONY: png $(addprefix png/,$(SENSORS))
png: $(addprefix png/,$(SENSORS))
	

ym=$(patsubst %.rrd,,$(notdir $*))
month_begin=$(shell date +'%s' -d '$(ym)/01')
month_end=$(shell date +'%s' -d '$(ym)/01 + 1 month - 1 second')
month_length=$(shell date +'%d' -d '$(ym)/01 + 1 month - 1 second')
day_begin=$(shell date +'%s' -d '$(ym)/$(day)')
day_end=$(shell date +'%s' -d '$(ym)/$(day) + 1 month - 1 second')

define png/sensor
sensor:=$1
label:=$2
png/$(sensor): \
 $(patsubst rrd/%.rrd,png/$(sensor)/%.png,$(.rrd))
	
png/$(sensor)/%.png: rrd/%.rrd
	mkdir -p png/$(sensor)/$$*
	rrdtool graph $$@ \
	 -w 785 -h 120 -a PNG \
	 --slope-mode \
	 --start $$(month_begin) --end $$(month_end) \
	 --vertical-label '$(label)' \
	 --x-grid HOUR:8:DAY:1:DAY:1:86400:%d \
	 DEF:$(sensor)=rrd/$$*.rrd:$(sensor):$$(RRD_CF) \
	 LINE1:$(sensor)'#ff0000':"$(sensor)"
	for day in $$(shell seq -w $$(month_length)); \
	 do \
		day_begin=$$$$(date +'%s' -d "$$(ym)/$$$$day"); \
		day_end=$$$$(date +'%s' -d "$$(ym)/$$$$day + 1 day - 1 second"); \
		rrdtool graph png/$(sensor)/$$*/$$$$day.png \
		 -w 785 -h 120 -a PNG \
		 --slope-mode \
		 --start $$$$day_begin --end $$$$day_end \
		 --vertical-label '$(label)' \
		 --x-grid MINUTE:10:HOUR:1:HOUR:1:0:%H \
		 DEF:$(sensor)=rrd/$$*.rrd:$(sensor):$$(RRD_CF) \
		 LINE1:$(sensor)'#ff0000':"$(sensor)"; \
	 done
endef

)=)
$(eval $(call png/sensor,temperature,Température (°C$)))
$(eval $(call png/sensor,humidity,Humidité (%$)))
$(eval $(call png/sensor,particles,Particules))
$(eval $(call png/sensor,quality,Qualité de l’air))