Bonjour à tous
J’utilise depuis 2 ans environ Pyicloud pour localiser les iPhone de la famille. Fonctionnement totalement transparent jusqu’à aujourd’hui…
Lors d’un redémarrage Jeedom, il faut refaire la procédure de double authentification. Celle-ci n’a jamais posé de problème…sauf maintenant :
en SSH, j’ai systématiquement ce retour :
pi@raspberrypi:~ $ sudo python3 geoloc.py
Setup Time Zone
Py iCloud Services
Two-factor authentication required. Your trusted devices are:
Which device would you like to use? [0]: 0
Traceback (most recent call last):
File "geoloc.py", line 29, in <module>
device = devices[device]
IndexError: list index out of range
Du coup, impossible de recevoir le SMS puisque le message d’erreur m’empêche d’aller plus loin.
Aucune modification de ma config, stable depuis des mois. La page santé est totalement verte.
Voici le script que je lance en SSH pour valider la double authentification :
import os
import click
import datetime
import time
import requests
from pyicloud import PyiCloudService
print("Setup Time Zone")
time.strftime("%X %x %Z")
os.environ["TZ"] = "Europe/Paris"
print("Py iCloud Services")
#remplacer par votre mail et password de compte icloud
api = PyiCloudService("abc.def@gmail.com", "XYZ")
if api.requires_2fa:
print("Two-factor authentication required. Your trusted devices are:")
devices = api.trusted_devices
for i, device in enumerate(devices):
print(
" %s: %s"
% (i, device.get("deviceName", "SMS to %s" % device.get("phoneNumber")))
)
device = click.prompt("Which device would you like to use?", default=0)
device = devices[device]
if not api.send_verification_code(device):
print("Failed to send verification code")
sys.exit(1)
code = click.prompt("Please enter validation code")
if not api.validate_verification_code(device, code):
print("Failed to verify verification code")
sys.exit(1)
i = 0
#permet d'obtenir l'id de votre device
for c in api.devices:
print("%d :%s" % (i,c))
i = i+1
iphone_loc = {}
#remplacer 16 par l'id voulu
iphone_loc = api.devices[1].location()
location = "%s,%s" % (iphone_loc['latitude' ] , iphone_loc['longitude'])
print(location)
#url du device geotrav
url = "%s%s" % ("https://jeedom.XYZ.ovh/plugins/geotrav/core/api/jeeGeotrav.php?apikey=ABCD&id=644&value=",location)
print(url)
requests.get(url)
Auriez-vous une piste ?
Merci !!