Numer w Virgin Mobile z ofertą prepaid, zarejestrowany, używany. Czasami kończą się środki i.. nie można dzwonić. Rozwiązanie? Dopiąć do HA i tam go monitorować :-)
Virginmobile nie udostępnia niestety żadnego api. Ale - po małych poszukiwaniach można kilkoma requestami do ich strony uzyskać potrzebne informacje.
Skrypt .py
Tworzymy więc skrypcik (pod xxx podstawiamy login/hasło i numer telefonu z Virgin Mobile - używane do zalogowania przez stronę.
#!/usr/bin/env python
import requests
import json
username=’xxx’
password=’xxx’
phone=’xxx’
payload = {
"username" : username,
"password" : password
}
s = requests.Session()
login = s.post("https://virginmobile.pl/spitfire-web-api/api/v1/authentication/login", payload)
getdetails = s.get("https://virginmobile.pl/spitfire-web-api/api/v1/selfCare/msisdnDetails", headers={'msisdn': phone})
logout = s.get("https://virginmobile.pl/spitfire-web-api/api/v1/authentication/logout")
print(getdetails.text)
Ja umieszczam takie rzeczy w katalogu z konfiguracją HA, w podkatalogu bin. Dzięki czemu w dockerze są dostępne pod ścieżką /config/bin/ - ten skrypt umieściłem jako /config/bin/virgin.py.
Sensor w HA
Następnie dodajemy nowy sensor do konfiguracji home assistant:
- platform: command_line
name: 'Virgin'
command: "/config/bin/virgin.py"
value_template: '{{ value_json.msisdn }}'
scan_interval: 3600
json_attributes:
- customerBalancesDto
- splitBalancesDto
- complexBundleValidDate
- complexBundleName
- tariffName
- accountValidDate
I rozbijamy dane wyciągnięte z tego sensora na poszczególne sensory za pomocą template:
- platform: template
sensors:
virgin_bundle_valid_days:
value_template: '{{ (as_timestamp(states.sensor.virgin.attributes["complexBundleValidDate"]) - as_timestamp(now())) |timestamp_custom("%j")| int }}'
virgin_account_valid_days:
value_template: '{{ (as_timestamp(states.sensor.virgin.attributes["accountValidDate"]) - as_timestamp(now())) |timestamp_custom("%j")| int }}'
virgin_balance:
value_template: '{{ states.sensor.virgin.attributes["customerBalancesDto"]["generalBalance"]["quantity"] }}'
unit_of_measurement: 'PLN'
virgin_voicebalance:
value_template: '{{ states.sensor.virgin.attributes["customerBalancesDto"]["complexBundleVoiceBalance"]["quantity"] / 60 |int }}'
unit_of_measurement: 'minut'
virgin_smsbalance:
value_template: '{{ states.sensor.virgin.attributes["customerBalancesDto"]["smsBalance"]["quantity"] }}'
unit_of_measurement: 'unit'
virgin_databalance:
value_template: '{{ states.sensor.virgin.attributes["customerBalancesDto"]["dataBalance"]["quantity"] / 1024 |int}}'
unit_of_measurement: 'MB'
Zostaje restart HA i ewentualne wpięcie do automatyki by uzyskać alarm przy spadku konta :-)
Chcesz wiedzieć więcej? Dołącz do naszej grupy na FB - będzie nam też miło jak polubisz nasz Fanpage!
Dziwi brak reklam? Przeczytaj dlaczego i wesprzyj projekt na lub