Exemplo n.º 1
0
    def update(self):
        """Fetch new state data for the sensor.

        This is the only method that should fetch new data for Home Assistant.
        """
        startDate = _getStartDate(datetime.date.today(), args.days)
        endDate = _dayToStr(datetime.date.today())
        resGrdf = gazpar.get_data_per_day(token, startDate, endDate)

        for d in resGrdf:
            # Use the formula to create timestamp, 1 ordre = 30min
            t = datetime.datetime.strptime(d['date'] + " 12:00",
                                           '%d-%m-%Y %H:%M')
            logging.info(
                ("found value : {0:3} kWh / {1:7.2f} m3 at {2}").format(
                    d['kwh'], d['mcube'], t.strftime('%Y-%m-%dT%H:%M:%SZ')))
Exemplo n.º 2
0
        firstTS = _getDateTS(int(startDate[0]), int(startDate[1]),
                             int(startDate[2]), 12, 0)
        startDate = startDate[2] + "/" + startDate[1] + "/" + startDate[0]
    else:
        logging.warn(
            "GRDF will perhaps has not all data for the last %s days ",
            args.days)
        startDate = _getStartDate(datetime.date.today(), args.days)
        firstTS = _getStartTS(args.days)

    logging.info("will use %s as firstDate and %s as startDate", firstTS,
                 startDate)
    endDate = _dayToStr(datetime.date.today())

    # Try to get data from Enedis API
    resGrdf = gazpar.get_data_per_day(token, startDate, endDate)
    try:
        logging.info("get Data from GRDF from {0} to {1}".format(
            startDate, endDate))
        # Get result from Enedis by 30m
        resGrdf = gazpar.get_data_per_day(token, startDate, endDate)

        if (args.verbose):
            pp.pprint(resGrdf)

    except:
        logging.error("unable to get data from GRDF")
        sys.exit(1)

    # When we have all values let's start parse data and pushing it
    jsonInflux = []
Exemplo n.º 3
0
def main():
    params = _openParams(PFILE)

    # Try to log in InfluxDB Server
    try:
        logging.info("logging in InfluxDB Server Host %s...", params['influx']['host'])
        client = InfluxDBClient(params['influx']['host'], params['influx']['port'],
                    params['influx']['username'], params['influx']['password'],
                    params['influx']['db'], ssl=params['influx']['ssl'], verify_ssl=params['influx']['verify_ssl'])
        logging.info("logged in InfluxDB Server Host %s succesfully", params['influx']['host'])
    except:
        logging.error("unable to login on %s", params['influx']['host'])
        sys.exit(1)

    # Try to log in GRDF API
    try:
        logging.info("logging in GRDF URI %s...", gazpar.API_BASE_URI)
        token = gazpar.login(params['grdf']['username'], params['grdf']['password'])
        logging.info("logged in successfully!")
    except:
        logging.error("unable to login on %s", gazpar.API_BASE_URI)
        sys.exit(1)


    # Calculate start/endDate and firstTS for data to request/parse
    if args.last:
        logging.info("looking for last value date on InfluxDB 'conzo_gaz' on host %s...", params['influx']['host'])
        startDate = _getStartDateInfluxDb(client,"conso_gaz")
        logging.info("found last fetch date %s on InfluxDB 'conzo_gaz' on host %s...", startDate[2]+"/"+startDate[1]+"/"+startDate[0], params['influx']['host'])
        firstTS =  _getDateTS(int(startDate[0]),int(startDate[1]),int(startDate[2]),12,0)
        startDate = startDate[2]+"/"+startDate[1]+"/"+startDate[0]
    else :
        logging.warning("GRDF will perhaps has not all data for the last %s days ",args.days)
        startDate = _getStartDate(datetime.date.today(), args.days)
        firstTS =  _getStartTS(args.days)

    logging.info("will use %s as firstDate and %s as startDate", firstTS, startDate)
    endDate = _dayToStr(datetime.date.today())

    # Try to get data from GRDF API
    resGrdf = gazpar.get_data_per_day(token, startDate, endDate)
    try:
        logging.info("get Data from GRDF from {0} to {1}".format(startDate, endDate))
        # Get result from GRDF by day
        resGrdf = gazpar.get_data_per_day(token, startDate, endDate)

        if (args.verbose):
            pp.pprint(resGrdf)

    except:
        logging.error("unable to get data from GRDF")
        sys.exit(1)

    # When we have all values let's start parse data and pushing it
    jsonInflux = []
    i = 0
    for d in resGrdf:
        t = datetime.datetime.strptime(d['date'] + " 12:00", '%d-%m-%Y %H:%M')
        logging.info(("found value : {0:3} kWh / {1:7.2f} m3 at {2}").format(d['kwh'], d['mcube'], t.strftime('%Y-%m-%dT%H:%M:%SZ')))
        if t.timestamp() > firstTS:
            logging.info(("value added to jsonInflux as {0} > {1}").format(t.strftime('%Y-%m-%d %H:%M'), datetime.datetime.fromtimestamp(firstTS).strftime('%Y-%m-%d %H:%M')))
            jsonInflux.append({
                           "measurement": "conso_gaz",
                           "tags": {
                               "fetch_date" : endDate
                           },
                           "time": t.strftime('%Y-%m-%dT%H:%M:%SZ'),
                           "fields": {
                               "kwh": d['kwh'],
                               "mcube": d['mcube']
                           }
                         })
        else:
            logging.info(("value NOT added to jsonInflux as {0} > {1}").format(t.timestamp(), firstTS))
        i=+1
    if (args.verbose):
        pp.pprint(jsonInflux)
    logging.info("trying to write {0} points to influxDB".format(len(jsonInflux)))
    try:
        client.write_points(jsonInflux)
    except:
        logging.info("unable to write data points to influxdb")
    else:
        logging.info("done")
Exemplo n.º 4
0
                             params['grdf']['password'])
        logging.info("logged in successfully!")
    except:
        logging.error("unable to login on %s : %s", gazpar.API_BASE_URI, exc)
        sys.exit(1)

    start = _getStartDate(datetime.date.today(), args.days)
    end = _dayToStr(datetime.date.today())

    logging.info("querying from {} to {}".format(start, end))

    # Try to get data from Enedis API
    try:
        logging.info("get Data from GRDF from {0} to {1}".format(start, end))
        # Get result from Enedis by 30m
        resGrdf = gazpar.get_data_per_day(token, start, end)

        if (args.verbose):
            pp.pprint(resGrdf)

    except:
        logging.error("unable to get data from GRDF")
        sys.exit(1)

    # When we have all values let's start parse data and pushing it
    output = []
    for d in resGrdf:
        # Use the formula to create timestamp, 1 ordre = 30min
        t = datetime.datetime.strptime(d['date'], '%d-%m-%Y')
        date_showed = t.strftime('%Y-%m-%d')
        logging.info(("found value : {0:3} kWh / {1:7.2f} m3 at {2}").format(