#!/usr/bin/python3
#
#see /home/luc/Documents/electronique/P1/gejanssen.com/raspi/P1_info.txt
#
'''
source file refreshed by GET from P1 raspi, treated by  /home/pi/slimmemeter-rpi/P1_ReadPortSendThingspeak.py
see file P1_info.txt

watch -d -n1 "cat /var/www/html/rrdpower/P1_data.txt  /var/www/html/rrdpower/P1_data.csv"

read json file
? make rt data cute  html file  ?
push data in rrd        rrdtool update
regenerate graphs pics  rrdtool graph
---------------------
Read  /var/www/html/rrdpower/P1_data.json
{"1.8.1 Counter day consumption (kWh)":"3003.8","1.8.2 Counter off-peak consumption (kWh)":"3962.548","2.8.1 Counter day injection (kWh)":"1171.505","2.8.2 Counter off-peak injection (kWh)":"590.598","1.7.0 Consumption (W)":"0.543","2.7.0 Injection (W)":"0.0","netconsumption":"0.543","YY MM DD HH MM SS .d":"231229130919.0"}

---------------------
systemctl status P1_updRRD.service
'''

import subprocess
import json
import csv
import time
import random
import subprocess
# From Python3.7 you can add
# keyword argument capture_output
# test data

#fin="/home/jacqueline/data.txt"

#fin="/home/jacqueline/P1_data.csv"
fin="/var/www/html/rrdpower/P1_data.csv"

'''   typical  .csv  :
0"YY MM DD HH MM SS .d",231231030901.0
1"1.8.1 Counter day consumption (kWh)",3010.226
2"1.8.2 Counter off-peak consumption (kWh)",3978.687
3"2.8.1 Counter day injection (kWh)",1171.505
4"2.8.2 Counter off-peak injection (kWh)",590.618
5"1.7.0 Consumption (W)",0.733
6"2.7.0 Injection (W)",0.0
7netconsumption,0.733

### OBIS labels
# 0  timestamp  yy mm dd hh mm ss . dd   # 231227160552.0
# 1  1.8.1- total consumption (kWh)
# 2  1.8.2 off-peak consumption (kWh)
# 3  2.8.1 peak injection (kWh)
# 4  2.8.2 off-peak injection (kWh)
# 5  1.7.0 current consumption (W)
# 6  2.7.0 current injection (W)
# 7  sum net consumption: (1.7.0) - (2.7.0)  [4]-[5]

24-01-01 14:50.00
CompletedProcess(args=['/usr/bin/rrdtool update /var/www/html/rrdpower/power.rrd N:0.343:0.0'], returncode=0, stdout='', stderr='')
CompletedProcess(args=['/var/www/html/rrdpower/P1_rrdrefresh.sh'], returncode=0, stdout='', stderr='')

check if returncode=0
else log/stop..  ?
'''
defDir="/var/www/html/rrdpower/"
sous_chaine = "returncode=0"

#debugRRDUpdate=True
debugRRDUpdate=False

def pushrrd(d):
	global sous_chaine
	#update rrd
	rrd_upd="/usr/bin/rrdtool update "+defDir+"power.rrd N:"+d[1]+":"+d[2]
	vcmd="/usr/bin/rrdtool"
	varg=" update " +defDir+"power.rrd N:"+d[1]+":"+d[2]

	#print (rrd_upd )
	#print(subprocess.run([rrd_upd], shell=True, capture_output=True, text=True))
	response=subprocess.run([rrd_upd], capture_output=False, shell=True, text=True,stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)

	if (debugRRDUpdate):
		print (d[0])
		print(response)
	if response.returncode != 0:
		print (d[0])
		print(response)


	#refresh png graphs
	rrd_upd=defDir+"P1_rrdrefresh.sh"
	#print (rrd_upd )
	#print(subprocess.run([rrd_upd], shell=True, capture_output=True, text=True))
	#response=subprocess.run([rrd_upd], shell=True, capture_output=True, text=True)
	response=subprocess.run([rrd_upd], capture_output=False, shell=True, text=True, stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)

	#print()
	if (debugRRDUpdate):
		print (d[0])
		print(response)
	if response.returncode != 0:
		print (d[0])
		print (response)


def readcsv(fin):
	data=[]
	fcsv="fcsv"    # fcsv="r"+ str(random.randint(1, 99999))
	#print("Reading ",fin,fcsv )
	with open(fin, newline='') as fcsv:
		#dialect = csv.Sniffer().sniff(fcsv.read(1024))
		#fcsv.seek(0)
		lecteur_csv = csv.reader(fcsv)
		for ligne in lecteur_csv:
			data.append(ligne)
	return [ data[0][1], data[5][1],  data[6][1] ]  #net , inj , conso

def main():
	#global conso, injec
	#pushrrd(conso,injec)
	#while True:

	dt= readcsv(fin)
	#print (dt )
	pushrrd (dt)


if __name__ == '__main__':
	'''
	while True:
		main()
		time.sleep(0.9)
	'''
	main()
	time.sleep(0.9)
