def load(self, meterReadingFrequency: Frequency, lastNRows: int, lastNDays: int) -> Entity: client = Client(self.__pygazparOptions.username, self.__pygazparOptions.password, self.__pygazparOptions.webdriver, self.__pygazparOptions.wait_time, self.__pygazparOptions.tmpdir, lastNRows, self.__pygazparOptions.headlessMode, meterReadingFrequency, lastNDays, self.__pygazparOptions.testMode) client.update() history = client.data() if len(history) > 0: entityIdByFrequency = { Frequency.HOURLY: "sensor.gazpar_hourly_energy", Frequency.DAILY: "sensor.gazpar_daily_energy", Frequency.WEEKLY: "sensor.gazpar_weekly_energy", Frequency.MONTHLY: "sensor.gazpar_monthly_energy" } entity = Entity("sensor", entityIdByFrequency[meterReadingFrequency]) for i in range(len(history)): timePeriod = TimePeriod.parse(history[i][PropertyName.TIME_PERIOD.value], meterReadingFrequency) recordTime = timePeriod.endTime state = str(Util.toState(history[0:i + 1])) attributes = json.dumps(Util.toAttributes(self.__pygazparOptions.username, meterReadingFrequency, history[0:i + 1])) entity.addRecord(self.__context_id, recordTime, state, attributes) return entity else: return None
def test_monthly_live(self): client = Client(self.__username, self.__password, self.__pceIdentifier, Frequency.MONTHLY, tmpDirectory=self.__tmp_directory, lastNDays=30) client.update() assert (len(client.data()) > 0)
def test_login_error(self): client = Client("WrongUserName", "WrongPassword", "WrongPCENumber", Frequency.DAILY, tmpDirectory=self.__tmp_directory, lastNDays=365, testMode=False) with pytest.raises(LoginError): client.update()
def test_weekly_sample(self): client = Client(self.__username, self.__password, self.__pceIdentifier, Frequency.WEEKLY, tmpDirectory=self.__tmp_directory, lastNDays=365, testMode=True) client.update() assert (len(client.data()) > 0)
def main(): """Main function""" parser = argparse.ArgumentParser() parser.add_argument("-u", "--username", required=True, help="GRDF username (email)") parser.add_argument("-p", "--password", required=True, help="GRDF password") parser.add_argument("-w", "--webdriver", required=True, help="Firefox webdriver executable (geckodriver)") parser.add_argument( "-s", "--wait_time", required=False, type=int, default=30, help= "Wait time in seconds (see https://selenium-python.readthedocs.io/waits.html for details)" ) parser.add_argument("-t", "--tmpdir", required=False, default="/tmp", help="tmp directory (default is /tmp)") parser.add_argument( "-l", "--lastNRows", required=False, type=int, default=0, help= "Get only the last N rows (default is 0: it means all rows are retrieved)" ) args = parser.parse_args() client = Client(args.username, args.password, args.webdriver, int(args.wait_time), args.tmpdir, int(args.lastNRows)) try: client.update() except BaseException: print('An error occured while querying PyGazpar library : %s', traceback.format_exc()) return 1 print(json.dumps(client.data(), indent=2))
def update_gazpar_data(self, event_time): """Fetch new state data for the sensor.""" _LOGGER.debug("Querying PyGazpar library for new data...") try: for frequency in Frequency: if frequency is not Frequency.HOURLY: # Hourly not yet implemented. client = Client(username=self._username, password=self._password, pceIdentifier=self._pceIdentifier, meterReadingFrequency=frequency, lastNDays=30, tmpDirectory=self._tmpdir, testMode=self._testMode) client.update() self._dataByFrequency[frequency] = client.data() _LOGGER.debug( f"data[{frequency}]={json.dumps(self._dataByFrequency[frequency], indent=2)}" ) if event_time is not None: for sensor in self.sensors: sensor.async_schedule_update_ha_state(True) _LOGGER.debug( f"HA notified that new {frequency} data are available" ) _LOGGER.debug( f"New {frequency} data have been retrieved successfully from PyGazpar library" ) except BaseException: _LOGGER.error( "Failed to query PyGazpar library with exception : %s", traceback.format_exc()) if event_time is None: raise
def test_client(self): client = Client(self.username, self.password, self.webdriver, self.wait_time, self.tmp_directory) client.update() assert len(client.data()) != 0