import requests import re import csv import fitz import re import pysftp import os import time import paho.mqtt.client as paho from selenium import webdriver import subprocess import platform from pyzabbix import ZabbixMetric, ZabbixSender import logging import logging.handlers from pathlib import Path import config # python -m venv env # attivare ambiente # pip install -r requirements.txt versione = '0.1' #logging, max 2M a file e ne tengo solo 5 LOG_FILENAME = Path('agsm.log') logger = logging.getLogger('agsmlog') logger.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') handler = logging.handlers.RotatingFileHandler( LOG_FILENAME, maxBytes=2097152, backupCount=5) handler.setFormatter(formatter) logger.addHandler(handler) mqttbroker=config.mqttbroker mqttport=config.mqttport login = config.login passwd = config.passwd loginacq = config.loginacq passwdacq = config.passwdacq loginds = config.loginds passds = config.passds diskstation = config.diskstation url = 'https://countbox.agsm.it/' cnopts = pysftp.CnOpts() cnopts.hostkeys = None def bollettaGasEnergia(dati): r = re.compile('Fattura n° *.*') data = ([x.split()[-1] for x in r.findall(dati)]) #data fattura fattura = ([x.split()[-3] for x in r.findall(dati)]) #n. fattura data=data[0] fattura=fattura[0] r = re.compile('energia in *.*') dove = ([x.split()[4:5] for x in r.findall(dati)]) dove=dove[0][0] r = re.compile('TV: € [0-9]+,[0-9]+') elettricita=([x.split()[-1] for x in r.findall(dati)]) elettricita = elettricita[0] elettricita = elettricita.replace(',','.') client1= paho.Client("control1") #create client object client1.on_publish = on_publish #assign function to callback client1.connect(mqttbroker,mqttport) #establish connection client1.publish('bollette/'+ dove.lower() +'/elettricita', elettricita, qos=0,retain=True) #publish r = re.compile('NATURALE: € [0-9]+,[0-9]+') gas=([x.split()[-1] for x in r.findall(dati)]) gas = gas[0] gas = gas.replace(',','.') client1= paho.Client("control1") #create client object client1.on_publish = on_publish #assign function to callback client1.connect(mqttbroker,mqttport) #establish connection client1.publish('bollette/'+ dove.lower() +'/gas', gas, qos=0,retain=True) #publish r = re.compile('TOTALE DA PAGARE: euro [0-9]+,[0-9]+') tot=([x.split()[-1] for x in r.findall(dati)]) tot = tot[0] tot = tot.replace(',','.') print('Lettura data: {} n: {} dove: {} importo gas: {}€ importo elettricità: {}€ Totale: {}€'.format(data,fattura,dove,gas,elettricita,tot)) f = open("bollette.csv", "a") f.write(data + ',' + fattura + ',' + dove.lower() + ',' + gas + ',' + elettricita + ',' + tot + '\n') f.close() def bollettaGas(dati): r = re.compile('Fattura n° *.*') data = ([x.split()[-1] for x in r.findall(dati)]) #data fattura fattura = ([x.split()[-3] for x in r.findall(dati)]) #n. fattura data=data[0] fattura=fattura[0] r = re.compile('fornendo gas in *.*') dove = ([x.split()[4:5] for x in r.findall(dati)]) dove=dove[0][0] r = re.compile('TOTALE DA PAGARE: euro [0-9]+,[0-9]+') gas=([x.split()[-1] for x in r.findall(dati)]) gas = gas[0] gas = gas.replace(',','.') client1= paho.Client("control1") #create client object client1.on_publish = on_publish #assign function to callback client1.connect(mqttbroker,mqttport) #establish connection client1.publish('bollette/'+ dove.lower() +'/gas', gas, qos=0,retain=True) #publish print('Lettura data: {} n: {} dove: {} importo gas: {}€ '.format(data,fattura,dove,gas)) f = open("bollette.csv", "a") f.write(data + ',' + fattura + ',' + dove + ',' + gas + ',,' + gas + '\n') f.close() def bollettaElettrica(dati): r = re.compile('Fattura n° *.*') data = ([x.split()[-1] for x in r.findall(dati)]) #data fattura fattura = ([x.split()[-3] for x in r.findall(dati)]) #n. fattura data=data[0] fattura=fattura[0] r = re.compile('fornendo energia in *.*') dove = ([x.split()[4:5] for x in r.findall(dati)]) dove=dove[0][0] r = re.compile('TOTALE DA PAGARE: euro [0-9]+,[0-9]+') elettricita=([x.split()[-1] for x in r.findall(dati)]) elettricita = elettricita[0] elettricita = elettricita.replace(',','.') client1= paho.Client("control1") #create client object client1.on_publish = on_publish #assign function to callback client1.connect(mqttbroker,mqttport) #establish connection client1.publish('bollette/'+ dove.lower() +'/elettricita', elettricita, qos=0,retain=True) #publish print('Lettura data: {} n: {} dove: {} importo elettricità: {}€ '.format(data,fattura,dove,elettricita)) f = open("bollette.csv", "a") f.write(data + ',' + fattura + ',' + dove + ',,' + elettricita + ',' + elettricita + '\n') f.close() def on_publish(client,userdata,result): #create function for callback print("data published \n") pass def agsmenergia(): giaScaricati = [] #doc che si trovano gia in csv. with open('bollette.csv') as csv_file: csv_reader = csv.reader(csv_file, delimiter=',') line_count = 0 for row in csv_reader: if line_count == 0: line_count += 1 else: try: a = row[1] a=a.split('/') giaScaricati.append(a[1]) except: #mai scaricato nulla pass # Fill in your details here to be posted to the login form. payload = { 'username': login, 'password': passwd } # Use 'with' to ensure the session context is closed after use. with requests.Session() as s: p = s.post(url, data=payload) # print the html returned or something more intelligent to see if it's a successful login page. #print (p.text) try: page = s.get('https://countbox.agsm.it/bills') html = page.text r = re.compile('