Home Assistant - Prepaid Virgin Mobile

Home Assistant - Prepaid Virgin Mobile

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!