Files
core/requirements_test_all.txt
Eugenio Panadero 8d2e72cdf6 Add pvpc electricity prices integration (#32092)
* Add new integration: pvpc_hourly_pricing

to add a sensor with the current hourly price of electricity in Spain.
Configuration is done by selecting one of the 3 reference tariffs, with
1, 2, or 3 billing periods.

* Features config flow, entity registry, RestoreEntity, options flow
  to change tariff, manual yaml config as integration or sensor platform
* Cloud polling sensor with minimal API calls (3/hour at random times)
  and smart retry; fully async
* Only 1 state change / hour (only when the price changes)
* At evening, try to download published tomorrow prices, to always store
  prices info for a window of [3, 27] hours in the future.
* Include useful state attributes to program automations to be run
  at best electric prices.
* Add spanish and english translations.

* Requires `xmltodict` to parse official xml file with hourly prices
for each day.

* Update requirements and add to codeowners

* Avoid passing in hass as a parameter to the entity

Instead, create time change listeners in async_added_to_hass and
call async_generate_entity_id before async_add_entities

* Fix lint issues

* Add tests for config & options flow

* Add tests for manual yaml config

with entity definition as integration and also as a sensor platform

* Fix placement of PLATFORM_SCHEMA and update generated config_flows

* Store prices internally linked to UTC timestamps

- to deal with days with DST changes
- and work with different local timezones

* Add availability to sensor

to 'expire' the sensor if there is no connection available
 and current hour is not in the stored prices.

Also, turn off logging and retrying if prices can't be downloaded
repeatedly, by flagging `data_source_available` as False, so there is no
log-flood mess.

* Add more tests

- to cover behavior in DST changes and complete coverage of sensor logic
- to cover abort config flow

* fix linter

* Better handling of sensor availability and minor enhancements

- Emmit 1 error if data source is marked as unavailable
  (after some retries), and be silent until cloud access is recovered,
  then emmit 1 warning.
- Follow standard of camel_case keys in attributes

* Mock aiosession to not access real API, store fixture data

- Store a set of daily xml files to test sensor logic for all situations
- Mock time and session to run tests with stored API responses
- Add availability test to simulate a lost + recovery of cloud access,
  checking that logging is reasonable: 1 error to flag the continued
  disconnection + 1 warning in recovery.

* Change API endpoint to retrieve JSON data

and remove xmltodict from reqs.

It seems that this endpoint is more reliable than the XML.

* Adapt tests to new API endpoint

* Translate tariff labels to plain English

and sync the default timeout value for all ways of configuration.

* Relax logging levels to meet silver requirements

- 1 warning when becoming unavailable, another warning when recovered.
- Warnings for unexpected TimeoutError or ClientError
- Move the rest to debug level, leaving info for HA internals

Also reduce number of API calls from 3 to 2 calls/hour.

* Fix requirements

* Mod tests to work with timezone Atlantic/Canary

and fix state attributes for timezones != reference, by using 3 price
prefixes: 'price_last_day_XXh', 'price_next_day_XXh' and 'price_XXh',
all generated with local time (backend timezone)

* Try to fix CI tests

* Externalize pvpc data and simplify sensor.py

* add new `aiopvpc` to requirements
* Remove data parsing and price logic from here
* Replace some constant properties with class variables

* Simplify tests for pvpc_hourly_pricing

* Fix updater for options flow

* Updater always reloads
* `tariff` value comes 1st from entry.options, 2nd from entry.data

* Fix lint

* Bump aiopvpc

* Remove options flow and platform setup

- Remove PLATFORM_SCHEMA and async_setup_platform
- Generate config_entry.unique_id with tariff instead of entity_id, in flow step.
- Remove TariffSelectorConfigFlow
- Adapt tests to maintain full coverage

* Fix docstring on test

and rename SENSOR_SCHEMA to SINGLE_SENSOR_SCHEMA to avoid confusion

* Remove timeout manual config, fix entry.options usage, simplify unique_id

* Simplify tests

- No need for a test_setup now, as platform setup is removed and integration
  setup is already used in `test_availability`
- Simplified `_process_time_step`: only one async_fire(EVENT_TIME_CHANGED)/hour

* Fix possible duplicated update

when source is not available.

* Do not access State last_changed for log messages

* Do not update until entity is added to hass

and call to async_update after 1st download or when recovering access, so
async_write_ha_state is not called twice on those.

* minor changes

* Rename method to select current price and make it a callback
2020-03-22 14:25:31 -05:00

798 lines
15 KiB
Plaintext

# Home Assistant tests, full dependency set
# Automatically generated by gen_requirements_all.py, do not edit
-r requirements_test.txt
# homeassistant.components.homekit
HAP-python==2.7.0
# homeassistant.components.mobile_app
# homeassistant.components.owntracks
PyNaCl==1.3.0
# homeassistant.auth.mfa_modules.totp
PyQRCode==1.2.1
# homeassistant.components.rmvtransport
PyRMVtransport==0.2.9
# homeassistant.components.transport_nsw
PyTransportNSW==0.1.1
# homeassistant.components.remember_the_milk
RtmAPI==0.7.2
# homeassistant.components.yessssms
YesssSMS==0.4.1
# homeassistant.components.abode
abodepy==0.18.1
# homeassistant.components.androidtv
adb-shell==0.1.1
# homeassistant.components.adguard
adguardhome==0.4.1
# homeassistant.components.geonetnz_quakes
aio_geojson_geonetnz_quakes==0.12
# homeassistant.components.geonetnz_volcano
aio_geojson_geonetnz_volcano==0.5
# homeassistant.components.nsw_rural_fire_service_feed
aio_geojson_nsw_rfs_incidents==0.3
# homeassistant.components.gdacs
aio_georss_gdacs==0.3
# homeassistant.components.ambient_station
aioambient==1.0.4
# homeassistant.components.asuswrt
aioasuswrt==1.2.3
# homeassistant.components.automatic
aioautomatic==0.6.5
# homeassistant.components.aws
aiobotocore==0.11.1
# homeassistant.components.esphome
aioesphomeapi==2.6.1
# homeassistant.components.freebox
aiofreepybox==0.0.8
# homeassistant.components.harmony
aioharmony==0.1.13
# homeassistant.components.homekit_controller
aiohomekit[IP]==0.2.35
# homeassistant.components.emulated_hue
# homeassistant.components.http
aiohttp_cors==0.7.0
# homeassistant.components.hue
aiohue==2.0.0
# homeassistant.components.notion
aionotion==1.1.0
# homeassistant.components.pvpc_hourly_pricing
aiopvpc==1.0.2
# homeassistant.components.webostv
aiopylgtv==0.3.3
# homeassistant.components.switcher_kis
aioswitcher==2019.4.26
# homeassistant.components.unifi
aiounifi==15
# homeassistant.components.wwlln
aiowwlln==2.0.2
# homeassistant.components.airly
airly==0.0.2
# homeassistant.components.ambiclimate
ambiclimate==0.2.1
# homeassistant.components.androidtv
androidtv==0.0.39
# homeassistant.components.apns
apns2==0.3.0
# homeassistant.components.apprise
apprise==0.8.4
# homeassistant.components.aprs
aprslib==0.6.46
# homeassistant.components.arcam_fmj
arcam-fmj==0.4.3
# homeassistant.components.dlna_dmr
# homeassistant.components.upnp
async-upnp-client==0.14.12
# homeassistant.components.stream
av==6.1.2
# homeassistant.components.axis
axis==25
# homeassistant.components.zha
bellows-homeassistant==0.14.0
# homeassistant.components.bom
bomradarloop==0.1.4
# homeassistant.components.broadlink
broadlink==0.12.0
# homeassistant.components.brother
brother==0.1.9
# homeassistant.components.buienradar
buienradar==1.0.4
# homeassistant.components.caldav
caldav==0.6.1
# homeassistant.components.coinmarketcap
coinmarketcap==5.0.3
# homeassistant.scripts.check_config
colorlog==4.1.0
# homeassistant.components.eddystone_temperature
# homeassistant.components.eq3btsmart
# homeassistant.components.xiaomi_miio
construct==2.9.45
# homeassistant.components.coronavirus
coronavirus==1.1.0
# homeassistant.scripts.credstash
# credstash==1.15.0
# homeassistant.components.datadog
datadog==0.15.0
# homeassistant.components.ihc
# homeassistant.components.namecheapdns
# homeassistant.components.ohmconnect
# homeassistant.components.ssdp
defusedxml==0.6.0
# homeassistant.components.denonavr
denonavr==0.8.0
# homeassistant.components.directv
directpy==0.7
# homeassistant.components.updater
distro==1.4.0
# homeassistant.components.dsmr
dsmr_parser==0.18
# homeassistant.components.dynalite
dynalite_devices==0.1.32
# homeassistant.components.ee_brightbox
eebrightbox==0.0.4
# homeassistant.components.elgato
elgato==0.2.0
# homeassistant.components.emulated_roku
emulated_roku==0.2.1
# homeassistant.components.season
ephem==3.7.7.0
# homeassistant.components.feedreader
feedparser-homeassistant==5.2.2.dev1
# homeassistant.components.foobot
foobot_async==0.3.1
# homeassistant.components.google_translate
gTTS-token==1.1.3
# homeassistant.components.garmin_connect
garminconnect==0.1.8
# homeassistant.components.geo_json_events
# homeassistant.components.usgs_earthquakes_feed
geojson_client==0.4
# homeassistant.components.aprs
geopy==1.19.0
# homeassistant.components.geo_rss_events
georss_generic_client==0.3
# homeassistant.components.ign_sismologia
georss_ign_sismologia_client==0.2
# homeassistant.components.qld_bushfire
georss_qld_bushfire_alert_client==0.3
# homeassistant.components.braviatv
# homeassistant.components.huawei_lte
# homeassistant.components.kef
# homeassistant.components.minecraft_server
# homeassistant.components.nmap_tracker
getmac==0.8.1
# homeassistant.components.gios
gios==0.0.4
# homeassistant.components.glances
glances_api==0.2.0
# homeassistant.components.google
google-api-python-client==1.6.4
# homeassistant.components.google_pubsub
google-cloud-pubsub==0.39.1
# homeassistant.components.griddy
griddypower==0.1.0
# homeassistant.components.ffmpeg
ha-ffmpeg==2.0
# homeassistant.components.hangouts
hangups==0.4.9
# homeassistant.components.cloud
hass-nabucasa==0.32.2
# homeassistant.components.mqtt
hbmqtt==0.9.5
# homeassistant.components.jewish_calendar
hdate==0.9.5
# homeassistant.components.here_travel_time
herepy==2.0.0
# homeassistant.components.pi_hole
hole==0.5.0
# homeassistant.components.workday
holidays==0.10.1
# homeassistant.components.frontend
home-assistant-frontend==20200318.1
# homeassistant.components.zwave
homeassistant-pyozw==0.1.9
# homeassistant.components.homematicip_cloud
homematicip==0.10.17
# homeassistant.components.google
# homeassistant.components.remember_the_milk
httplib2==0.10.3
# homeassistant.components.huawei_lte
huawei-lte-api==1.4.11
# homeassistant.components.iaqualink
iaqualink==0.3.1
# homeassistant.components.influxdb
influxdb==5.2.3
# homeassistant.components.rest
# homeassistant.components.verisure
jsonpath==0.82
# homeassistant.scripts.keyring
keyring==20.0.0
# homeassistant.scripts.keyring
keyrings.alt==3.4.0
# homeassistant.components.konnected
konnected==1.1.0
# homeassistant.components.dyson
libpurecool==0.6.1
# homeassistant.components.mikrotik
librouteros==3.0.0
# homeassistant.components.soundtouch
libsoundtouch==0.7.2
# homeassistant.components.logi_circle
logi_circle==0.2.2
# homeassistant.components.luftdaten
luftdaten==0.6.3
# homeassistant.components.mythicbeastsdns
mbddns==0.1.2
# homeassistant.components.minecraft_server
mcstatus==2.3.0
# homeassistant.components.meteo_france
meteofrance==0.3.7
# homeassistant.components.mfi
mficlient==0.3.0
# homeassistant.components.minio
minio==4.0.9
# homeassistant.components.tts
mutagen==1.43.0
# homeassistant.components.ness_alarm
nessclient==0.9.15
# homeassistant.components.discovery
# homeassistant.components.ssdp
netdisco==2.6.0
# homeassistant.components.nexia
nexia==0.7.1
# homeassistant.components.nsw_fuel_station
nsw-fuel-api-client==1.0.10
# homeassistant.components.nuheat
nuheat==0.3.0
# homeassistant.components.iqvia
# homeassistant.components.opencv
# homeassistant.components.tensorflow
# homeassistant.components.trend
numpy==1.18.1
# homeassistant.components.google
oauth2client==4.0.0
# homeassistant.components.mqtt
# homeassistant.components.shiftr
paho-mqtt==1.5.0
# homeassistant.components.aruba
# homeassistant.components.cisco_ios
# homeassistant.components.pandora
# homeassistant.components.unifi_direct
pexpect==4.6.0
# homeassistant.components.pilight
pilight==0.1.1
# homeassistant.components.doods
# homeassistant.components.proxy
# homeassistant.components.qrcode
# homeassistant.components.seven_segments
# homeassistant.components.sighthound
# homeassistant.components.tensorflow
pillow==7.0.0
# homeassistant.components.plex
plexapi==3.3.0
# homeassistant.components.plex
plexauth==0.0.5
# homeassistant.components.plex
plexwebsocket==0.0.6
# homeassistant.components.mhz19
# homeassistant.components.serial_pm
pmsensor==0.4
# homeassistant.components.reddit
praw==6.5.1
# homeassistant.components.islamic_prayer_times
prayer_times_calculator==0.0.3
# homeassistant.components.prometheus
prometheus_client==0.7.1
# homeassistant.components.ptvsd
ptvsd==4.2.8
# homeassistant.components.androidtv
pure-python-adb==0.2.2.dev0
# homeassistant.components.pushbullet
pushbullet.py==0.11.0
# homeassistant.components.august
py-august==0.25.0
# homeassistant.components.canary
py-canary==0.5.0
# homeassistant.components.melissa
py-melissa-climate==2.0.0
# homeassistant.components.seventeentrack
py17track==2.2.2
# homeassistant.components.tplink
pyHS100==0.3.5
# homeassistant.components.met
# homeassistant.components.norway_air
pyMetno==0.4.6
# homeassistant.components.rfxtrx
pyRFXtrx==0.25
# homeassistant.components.nextbus
py_nextbusnext==0.1.4
# homeassistant.components.hisense_aehw4a1
pyaehw4a1==0.3.4
# homeassistant.components.airvisual
pyairvisual==3.0.1
# homeassistant.components.almond
pyalmond==0.0.2
# homeassistant.components.arlo
pyarlo==0.2.3
# homeassistant.components.netatmo
pyatmo==3.3.0
# homeassistant.components.blackbird
pyblackbird==0.5
# homeassistant.components.neato
pybotvac==0.0.17
# homeassistant.components.cast
pychromecast==4.2.0
# homeassistant.components.coolmaster
pycoolmasternet==0.0.4
# homeassistant.components.daikin
pydaikin==1.6.2
# homeassistant.components.deconz
pydeconz==70
# homeassistant.components.zwave
pydispatcher==2.0.5
# homeassistant.components.everlights
pyeverlights==0.1.0
# homeassistant.components.fido
pyfido==2.1.1
# homeassistant.components.fritzbox
pyfritzhome==0.4.0
# homeassistant.components.ifttt
pyfttt==0.3
# homeassistant.components.bluetooth_le_tracker
# homeassistant.components.skybeacon
pygatt[GATTTOOL]==4.0.5
# homeassistant.components.version
pyhaversion==3.3.0
# homeassistant.components.heos
pyheos==0.6.0
# homeassistant.components.homematic
pyhomematic==0.1.65
# homeassistant.components.icloud
pyicloud==0.9.5
# homeassistant.components.ipma
pyipma==2.0.5
# homeassistant.components.iqvia
pyiqvia==0.2.1
# homeassistant.components.kira
pykira==0.1.1
# homeassistant.components.linky
pylinky==0.4.0
# homeassistant.components.litejet
pylitejet==0.1
# homeassistant.components.mailgun
pymailgunner==1.4
# homeassistant.components.melcloud
pymelcloud==2.4.0
# homeassistant.components.somfy
pymfy==0.7.1
# homeassistant.components.mochad
pymochad==0.2.0
# homeassistant.components.modbus
pymodbus==1.5.2
# homeassistant.components.monoprice
pymonoprice==0.3
# homeassistant.components.myq
pymyq==2.0.1
# homeassistant.components.nws
pynws==0.10.4
# homeassistant.components.nx584
pynx584==0.4
# homeassistant.components.openuv
pyopenuv==1.0.9
# homeassistant.components.opnsense
pyopnsense==0.2.0
# homeassistant.components.opentherm_gw
pyotgw==0.5b1
# homeassistant.auth.mfa_modules.notify
# homeassistant.auth.mfa_modules.totp
# homeassistant.components.otp
pyotp==2.3.0
# homeassistant.components.point
pypoint==1.1.2
# homeassistant.components.ps4
pyps4-2ndscreen==1.0.7
# homeassistant.components.qwikswitch
pyqwikswitch==0.93
# homeassistant.components.signal_messenger
pysignalclirestapi==0.2.4
# homeassistant.components.sma
pysma==0.3.5
# homeassistant.components.smartthings
pysmartapp==0.3.2
# homeassistant.components.smartthings
pysmartthings==0.7.0
# homeassistant.components.soma
pysoma==0.0.10
# homeassistant.components.sonos
pysonos==0.0.25
# homeassistant.components.spc
pyspcwebgw==0.4.0
# homeassistant.components.ecobee
python-ecobee-api==0.2.3
# homeassistant.components.darksky
python-forecastio==1.4.0
# homeassistant.components.izone
python-izone==1.1.2
# homeassistant.components.xiaomi_miio
python-miio==0.4.8
# homeassistant.components.nest
python-nest==4.1.0
# homeassistant.components.twitch
python-twitch-client==0.6.0
# homeassistant.components.velbus
python-velbus==2.0.43
# homeassistant.components.awair
python_awair==0.0.4
# homeassistant.components.traccar
pytraccar==0.9.0
# homeassistant.components.tradfri
pytradfri[async]==6.4.0
# homeassistant.components.vera
pyvera==0.3.7
# homeassistant.components.vesync
pyvesync==1.1.0
# homeassistant.components.vizio
pyvizio==0.1.35
# homeassistant.components.html5
pywebpush==1.9.2
# homeassistant.components.rachio
rachiopy==0.1.3
# homeassistant.components.rainmachine
regenmaschine==1.5.1
# homeassistant.components.python_script
restrictedpython==5.0
# homeassistant.components.rflink
rflink==0.0.52
# homeassistant.components.ring
ring_doorbell==0.6.0
# homeassistant.components.roku
roku==4.0.0
# homeassistant.components.yamaha
rxv==0.6.0
# homeassistant.components.samsungtv
samsungctl[websocket]==0.7.1
# homeassistant.components.samsungtv
samsungtvws[websocket]==1.4.0
# homeassistant.components.sense
sense_energy==0.7.1
# homeassistant.components.sentry
sentry-sdk==0.13.5
# homeassistant.components.sighthound
simplehound==0.3
# homeassistant.components.simplisafe
simplisafe-python==9.0.5
# homeassistant.components.sleepiq
sleepyq==0.7
# homeassistant.components.smhi
smhi-pkg==1.0.10
# homeassistant.components.solaredge
solaredge==0.0.2
# homeassistant.components.honeywell
somecomfort==0.5.2
# homeassistant.components.marytts
speak2mary==1.4.0
# homeassistant.components.spotify
spotipy==2.10.0
# homeassistant.components.recorder
# homeassistant.components.sql
sqlalchemy==1.3.15
# homeassistant.components.starline
starline==0.1.3
# homeassistant.components.statsd
statsd==3.2.1
# homeassistant.components.huawei_lte
# homeassistant.components.solaredge
# homeassistant.components.thermoworks_smoke
# homeassistant.components.traccar
stringcase==1.2.0
# homeassistant.components.solarlog
sunwatcher==0.2.1
# homeassistant.components.tellduslive
tellduslive==0.10.10
# homeassistant.components.powerwall
tesla-powerwall==0.1.1
# homeassistant.components.tesla
teslajsonpy==0.5.1
# homeassistant.components.toon
toonapilib==3.2.4
# homeassistant.components.transmission
transmissionrpc==0.11
# homeassistant.components.twentemilieu
twentemilieu==0.2.0
# homeassistant.components.twilio
twilio==6.32.0
# homeassistant.components.huawei_lte
url-normalize==1.4.1
# homeassistant.components.uvc
uvcclient==0.11.0
# homeassistant.components.meteo_france
vigilancemeteo==3.0.0
# homeassistant.components.vilfo
vilfo-api-client==0.3.2
# homeassistant.components.verisure
vsure==1.5.4
# homeassistant.components.vultr
vultr==0.1.2
# homeassistant.components.panasonic_viera
# homeassistant.components.wake_on_lan
wakeonlan==1.1.6
# homeassistant.components.folder_watcher
watchdog==0.8.3
# homeassistant.components.withings
withings-api==2.1.3
# homeassistant.components.wled
wled==0.3.0
# homeassistant.components.bluesound
# homeassistant.components.rest
# homeassistant.components.startca
# homeassistant.components.ted5000
# homeassistant.components.yr
# homeassistant.components.zestimate
xmltodict==0.12.0
# homeassistant.components.yandex_transport
ya_ma==0.3.8
# homeassistant.components.yweather
yahooweather==0.10
# homeassistant.components.zeroconf
zeroconf==0.24.5
# homeassistant.components.zha
zha-quirks==0.0.37
# homeassistant.components.zha
zigpy-cc==0.3.0
# homeassistant.components.zha
zigpy-deconz==0.7.0
# homeassistant.components.zha
zigpy-homeassistant==0.16.0
# homeassistant.components.zha
zigpy-xbee-homeassistant==0.10.0
# homeassistant.components.zha
zigpy-zigate==0.5.1