you could always just use an equation. FWIW a new compensation integration is coming through that allows you to fit polynomials to datasets, you have a dataset. You can then use the coefficients to do the math for you.
Anyways, here’s the equation that would work for you for any rotation
service: media_player.volume_set
entity_id: media_player.onkyo_tx_nr717
data_template:
volume_level: >-
{% set e = trigger.event.data.event | int %}
{% set v = state_attr('media_player.onkyo_tx_nr717', 'volume_level')|round(2) %}
{{ v + 0.0000625 * e }}
when the new compensation integration is built, you can use it to make fits for you and give you the coefficients
compensation:
media_player_onkyo:
entity_id: media_player.onkyo_tx_nr717
attribute: volume_level
data_points:
- 0.5 -> 8000
- 0.25 -> 4000
- 0 -> 0
- -0.25 -> -4000
- -0.5 -> -8000
service: media_player.volume_set
entity_id: media_player.onkyo_tx_nr717
data_template:
volume_level: >-
{% set e = trigger.event.data.event | int %}
{% set v = state_attr('media_player.onkyo_tx_nr717', 'volume_level')|round(2) %}
{% set c = state_attr('sensor.media_player_onkyo', 'coefficients')[0] %}
{{ v + 1 / c * e }}