예제 #1
0
    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
예제 #2
0
    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)
예제 #3
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()
예제 #4
0
    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)
예제 #5
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))
예제 #6
0
    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
예제 #7
0
    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