Example #1
0
    def test_badParameterEndDateString(self):

        start_date = datetime(2018, 10, 5, 12, 0, 0)

        client = SrpEnergyClient(self.accountid, self.username, self.password)

        with self.assertRaises(ValueError):
            client.usage(start_date, '20181001')
Example #2
0
    def test_bad_crendentials(self):

        start_date = datetime(2018, 9, 19, 0, 0, 0)
        end_date = datetime(2018, 9, 19, 23, 0, 0)
        client = SrpEnergyClient('a', 'b', 'c')

        with self.assertRaises(TypeError):
            client.usage(start_date, end_date)
Example #3
0
    def test_getUsage(self):

        start_date = datetime(2018, 10, 1, 6, 0, 0)
        end_date = datetime(2018, 10, 5, 12, 0, 0)
        client = SrpEnergyClient(self.accountid, self.username, self.password)

        usage = client.usage(start_date, end_date)

        self.assertEqual(len(usage), 120)
Example #4
0
    def test_badParameterStartDateAfterNow(self):

        start_date = datetime.now() + timedelta(days=10)
        end_date = datetime(2018, 10, 5, 12, 0, 0)

        client = SrpEnergyClient(self.accountid, self.username, self.password)

        with self.assertRaises(ValueError):
            client.usage(start_date, end_date)
def test_error_validate_user():
    """Test error Validation of user."""
    with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post:

        session_post.return_value = MOCK_BAD_LOGIN_RESPONSE
        session_get.side_effect = get_mock_requests(ROUTES)

        client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME,
                                 TEST_PASSWORD)

        is_valid = client.validate()

        assert is_valid is False
Example #6
0
    def test_latestDayUsageKw(self):

        start_date = datetime(2018, 9, 19, 0, 0, 0)
        end_date = datetime(2018, 9, 19, 23, 0, 0)
        client = SrpEnergyClient(self.accountid, self.username, self.password)

        usage = client.usage(start_date, end_date)

        self.assertEqual(len(usage), 24)

        date, hour, isodate, kwh, cost = usage[-1]

        self.assertEqual(kwh, '0.4')
        self.assertEqual(cost, '0.09')
def test_bad_parameter_end_date_string():
    """Test end date is date."""
    with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post:

        session_post.return_value = MOCK_LOGIN_RESPONSE
        session_get.side_effect = get_mock_requests(ROUTES)

        client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME,
                                 TEST_PASSWORD)

        start_date = datetime(2018, 10, 5, 12, 0, 0)

        with pytest.raises(ValueError):
            client.usage(start_date, "20181001")
def test_error_usage_payload():
    """Test error with invalid usage payload."""
    with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post:

        session_post.return_value = MOCK_LOGIN_RESPONSE
        session_get.side_effect = get_mock_requests(ROUTES)

        client = SrpEnergyClient(TEST_BAD_ACCOUNT_ID, TEST_USER_NAME,
                                 TEST_PASSWORD)

        start_date = datetime(2018, 9, 19, 0, 0, 0)
        end_date = datetime(2018, 9, 19, 23, 0, 0)

        with pytest.raises(Exception):
            client.usage(start_date, end_date)
def test_bad_parameter_start_date_after_now():
    """Test start date is not after Now."""
    with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post:

        session_post.return_value = MOCK_LOGIN_RESPONSE
        session_get.side_effect = get_mock_requests(ROUTES)

        client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME,
                                 TEST_PASSWORD)

        start_date = datetime.now() + timedelta(days=10)
        end_date = datetime.now() + timedelta(days=15)

        with pytest.raises(ValueError):
            client.usage(start_date, end_date)
def test_get_usage():
    """Test usage."""
    with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post:

        session_post.return_value = MOCK_LOGIN_RESPONSE
        session_get.side_effect = get_mock_requests(ROUTES)

        client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME,
                                 TEST_PASSWORD)

        start_date = datetime(2018, 10, 1, 6, 0, 0)
        end_date = datetime(2018, 10, 5, 12, 0, 0)

        usage = client.usage(start_date, end_date)

        assert len(usage) == 3
def test_bad_parameter_account_id_hyphens():
    """Test accountid has hybhens in it."""
    with pytest.raises(ValueError) as err_info:
        SrpEnergyClient("123-456", "b", "a")

    assert "Parameter account should only contain numbers." in str(
        err_info.value)
Example #12
0
def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the SRP energy."""
    name = config[CONF_NAME]
    username = config[CONF_USERNAME]
    password = config[CONF_PASSWORD]
    account_id = config[CONF_ID]

    from srpenergy.client import SrpEnergyClient

    srp_client = SrpEnergyClient(account_id, username, password)

    if not srp_client.validate():
        _LOGGER.error("Couldn't connect to %s. Check credentials", name)
        return

    add_entities([SrpEnergy(name, srp_client)], True)
    async def async_step_user(self, user_input=None):
        """Handle a flow initialized by the user."""
        errors = {}

        if self._async_current_entries():
            return self.async_abort(reason="single_instance_allowed")

        if user_input is not None:
            try:

                srp_client = SrpEnergyClient(
                    user_input[CONF_ID],
                    user_input[CONF_USERNAME],
                    user_input[CONF_PASSWORD],
                )

                is_valid = await self.hass.async_add_executor_job(
                    srp_client.validate)

                if is_valid:
                    return self.async_create_entry(title=user_input[CONF_NAME],
                                                   data=user_input)

                errors["base"] = "invalid_auth"

            except ValueError:
                errors["base"] = "invalid_account"
            except Exception:  # pylint: disable=broad-except
                _LOGGER.exception("Unexpected exception")
                errors["base"] = "unknown"

        return self.async_show_form(step_id="user",
                                    data_schema=vol.Schema(self.config),
                                    errors=errors)
Example #14
0
def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the SRP energy."""
    name = config[CONF_NAME]
    username = config[CONF_USERNAME]
    password = config[CONF_PASSWORD]
    account_id = config[CONF_ID]

    from srpenergy.client import SrpEnergyClient

    srp_client = SrpEnergyClient(account_id, username, password)

    if not srp_client.validate():
        _LOGGER.error("Couldn't connect to %s. Check credentials", name)
        return

    add_entities([SrpEnergy(name, srp_client)], True)
Example #15
0
def test_daily_aggregation_tou():
    """Test that hourly roll up matches SRP Daily."""
    # "dailyReadList": [{
    #             "day": "2018-06-28T07:00:00Z",
    #             "date": "2018-06-28T07:00:00Z",
    #             "meterReadDate": "2018-06-29T00:00:00-07:00",
    #             "superOffPeakKwh": 0.0,
    #             "shoulderKwh": 0.0,
    #             "offPeakKwh": 61.0,
    #             "onPeakKwh": 39.0,
    #             "totalKwh": 0.0,
    #             "onPeakCost": 9.33,
    #             "offPeakCost": 5.51,
    #             "shoulderCost": 0.0,
    #             "superOffPeakCost": 0.0,
    #             "totalCost": 0.0,
    #             "dailyCost": 14.84
    #         }

    with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post:

        session_post.return_value = MOCK_LOGIN_RESPONSE
        session_get.side_effect = get_mock_requests(ROUTES)

        client = SrpEnergyClient(TEST_ACCOUNT_TOU_ID, TEST_USER_NAME,
                                 TEST_PASSWORD)

        start_date = datetime(2020, 6, 28, 0, 0, 0)
        end_date = datetime(2020, 6, 28, 23, 0, 0)

        usage = client.usage(start_date, end_date, True)

        total_kwh = 0
        total_cost = 0
        for line in usage:
            _date, _hour, _isodate, kwh, cost = line
            total_kwh = total_kwh + kwh
            total_cost = total_cost + cost

        assert len(usage) == 24
        assert total_kwh == 123
        assert total_cost == 8.92
def test_latest_day_usage_kw():
    """Test Latest Day Usage for kwh."""
    with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post:

        session_post.return_value = MOCK_LOGIN_RESPONSE
        session_get.side_effect = get_mock_requests(ROUTES)

        client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME,
                                 TEST_PASSWORD)

        start_date = datetime(2018, 9, 19, 0, 0, 0)
        end_date = datetime(2018, 9, 19, 23, 0, 0)

        usage = client.usage(start_date, end_date)

        assert len(usage) == 3

        _date, _hour, _isodate, kwh, cost = usage[-1]

        assert kwh == 0.4
        assert cost == 0.08
Example #17
0
def test_time_of_use_winter_on_peak_usage():
    """Test Time of Use for winter on Peak Usage for kwh."""
    with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post:

        session_post.return_value = MOCK_LOGIN_RESPONSE
        session_get.side_effect = get_mock_requests(ROUTES)

        client = SrpEnergyClient(TEST_ACCOUNT_TOU_ID, TEST_USER_NAME,
                                 TEST_PASSWORD)

        start_date = datetime(2019, 12, 19, 0, 0, 0)
        end_date = datetime(2019, 12, 19, 23, 0, 0)

        usage = client.usage(start_date, end_date, True)

        assert len(usage) == 3

        _date, _hour, _isodate, kwh, cost = usage[0]

        assert kwh == 2.5
        assert cost == 0.24
Example #18
0
def test_date_timezone_error():
    """Test error with invalid usage payload."""
    with patch(PATCH_GET) as session_get, patch(PATCH_POST) as session_post:

        session_post.return_value = MOCK_LOGIN_RESPONSE
        session_get.side_effect = get_mock_requests(ROUTES)

        client = SrpEnergyClient(TEST_ACCOUNT_ID, TEST_USER_NAME,
                                 TEST_PASSWORD)

        start_date = datetime.now(timezone.utc) + timedelta(days=-1)
        end_date = datetime.now(timezone.utc)

        usage = client.usage(start_date, end_date)

        assert len(usage) == 3

        _date, _hour, _isodate, kwh, cost = usage[-1]

        assert kwh == 0.4
        assert cost == 0.08
Example #19
0
def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the SRP energy."""
    _LOGGER.warning(
        "The srp_energy integration is deprecated and will be removed "
        "in Home Assistant 0.100.0. For more information see ADR-0004:"
        "https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md"
    )

    name = config[CONF_NAME]
    username = config[CONF_USERNAME]
    password = config[CONF_PASSWORD]
    account_id = config[CONF_ID]

    from srpenergy.client import SrpEnergyClient

    srp_client = SrpEnergyClient(account_id, username, password)

    if not srp_client.validate():
        _LOGGER.error("Couldn't connect to %s. Check credentials", name)
        return

    add_entities([SrpEnergy(name, srp_client)], True)
Example #20
0
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
    """Set up the SRP Energy component from a config entry."""
    # Store an SrpEnergyClient object for your srp_energy to access
    try:
        srp_energy_client = SrpEnergyClient(
            entry.data.get(CONF_ID),
            entry.data.get(CONF_USERNAME),
            entry.data.get(CONF_PASSWORD),
        )
        hass.data[SRP_ENERGY_DOMAIN] = srp_energy_client
    except (Exception) as ex:
        _LOGGER.error("Unable to connect to Srp Energy: %s", str(ex))
        raise ConfigEntryNotReady from ex

    await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

    return True
Example #21
0
async def async_setup_entry(opp: OpenPeerPower, entry: ConfigEntry):
    """Set up the SRP Energy component from a config entry."""
    # Store an SrpEnergyClient object for your srp_energy to access
    try:
        srp_energy_client = SrpEnergyClient(
            entry.data.get(CONF_ID),
            entry.data.get(CONF_USERNAME),
            entry.data.get(CONF_PASSWORD),
        )
        opp.data[SRP_ENERGY_DOMAIN] = srp_energy_client
    except (Exception) as ex:
        _LOGGER.error("Unable to connect to Srp Energy: %s", str(ex))
        raise ConfigEntryNotReady from ex

    opp.config_entries.async_setup_platforms(entry, PLATFORMS)

    return True
Example #22
0
    def test_none_password(self):

        with self.assertRaises(TypeError):
            client = SrpEnergyClient('a', 'b', None)
def test_none_password():
    """Test No password parameter exception."""
    with pytest.raises(TypeError):
        SrpEnergyClient(TEST_ACCOUNT_ID, "b", None)
Example #24
0
    def test_none_accountid(self):

        with self.assertRaises(TypeError):
            client = SrpEnergyClient(None, 'b', 'c')
Example #25
0
    def test_none_username(self):

        with self.assertRaises(TypeError):
            client = SrpEnergyClient('a', None, 'c')
def test_blank_accountid():
    """Test blank account parameter exception."""
    with pytest.raises(ValueError):
        SrpEnergyClient("", "b", "c")
Example #27
0
    def test_blank_accountid(self):

        with self.assertRaises(ValueError):
            client = SrpEnergyClient('', 'b', 'c')
Example #28
0
    def test_invalid_crendentials(self):

        client = SrpEnergyClient('a', 'b', 'c')

        self.assertFalse(client.validate())
Example #29
0
    def test_valid_crendentials(self):

        client = SrpEnergyClient(self.accountid, self.username, self.password)

        self.assertTrue(client.validate())
Example #30
0
    def test_blank_username(self):

        with self.assertRaises(ValueError):
            client = SrpEnergyClient('a', '', 'c')
Example #31
0
    def test_blank_password(self):

        with self.assertRaises(ValueError):
            client = SrpEnergyClient('a', 'b', '')