Sleepyq 클라이언트가 로그인할 수 없습니다.

7385 단어 sleepyq

묘사

지금까지 Sleepyq 클라이언트는 더 이상 작동하지 않는 것 같습니다.다음은 간단한 테스트입니다.
from sleepyq import Sleepyq
client = Sleepyq("my_sleepiq_username", "my_sleepiq_password")
client.login()
다음 오류가 발생했습니다.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/jreagan/.local/lib/python3.8/site-packages/sleepyq/__init__.py", line 125, in login
    self._session.params['_k'] = r.json()['key']
  File "/usr/lib/python3.8/site-packages/requests/models.py", line 898, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/lib/python3.8/site-packages/simplejson/__init__.py", line 525, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.8/site-packages/simplejson/decoder.py", line 370, in decode
    obj, end = self.raw_decode(s)
  File "/usr/lib/python3.8/site-packages/simplejson/decoder.py", line 400, in raw_decode
    return self.scan_once(s, idx=_w(s, idx).end())
simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

토론 #1

를 깊이 연구한 결과'/login'요청이 403로 되돌아온 것 같다.나는 몇 가지 실험을 했는데, 그들은 '사용자 에이전트' 로 요청을 막은 것 같다.'python 요청/2.24.0 '.이것은 Python 요청 라이브러리에서 기본적으로 사용하는 것입니다.나는 그들이 가정 보조 사용자의 모든 요청을 좋아하지 않을 것이라고 추측한다.폭소:
어쨌든 다음과 같이 세션 put 명령에 User Agent "foo"헤더를 전달하여 이 문제를 해결할 수 있습니다.
...
data = {'login': self._login, 'password': self._password}
headers = {'User-Agent': 'foo'}
r = self._session.put(self._api+'/login', headers=headers, json=data)
...
하지만 이런 복구가 얼마나 지속될지 모른다.나는 그들이 그것을 막기 위해 다른 방법을 찾을 것이라고 추측한다.사용자 에이전트를 크롬(Mozilla/5.0(X11; Linux x86 64) Apple WebKit/537.36(KHTML, Gecko) 크롬/87.0.4280.66 Safari/537.36) 같은 브라우저로 설정할 수도 있습니다.그들에게 봉쇄는 더 어려울 수도 있지만, 그들이 왜 봉쇄를 선택했는지 알아낼 필요가 있을지도 모른다.다만 수면 지능에 대해 누구에게 연락할지 확실하지 않다.

토론 #2

우리는 응용 프로그램 사용자 에이전트를 모방할 수 있습니까?

토론 #셋

No idea how long that fix would last though. I'm guessing they'll find another way to block it. You could also set the 'User-Agent' to mimic a browser like Chrome (ie, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'). It might be harder for them to block, but it might be worth figuring out why they chose to block it in the first place. Just not sure who to contact on the Sleep IQ side.


허비타트 사람들이 그렇게 하는 것 같아.
private def ApiUserAgent() { "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36" }
https://community.hubitat.com/t/sleepiq-sleep-number/15053/11

토론 #4

사용자 에이전트를 사용하여 로그인이 성공적으로 허용되었지만 추가 API 호출이 실패한 것 같습니다.
Python 3.7.5 (default, Apr 19 2020, 20:18:17)
[GCC 9.2.1 20191008] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from sleepyq import Sleepyq
>>> from pprint import pprint
>>> client = Sleepyq('sleepiq_user', 'sleepiq_pass')
>>> client.login()
True
>>> pprint(client.sleepers())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/srv/homeassistant/venv/lib/python3.7/site-packages/sleepyq/__init__.py", line 130, in sleepers
    r=self.__make_request('/sleeper')
  File "/srv/homeassistant/venv/lib/python3.7/site-packages/sleepyq/__init__.py", line 101, in __make_request
    retry = self.__make_request(url, mode, data, attempt+1)
  File "/srv/homeassistant/venv/lib/python3.7/site-packages/sleepyq/__init__.py", line 101, in __make_request
    retry = self.__make_request(url, mode, data, attempt+1)
  File "/srv/homeassistant/venv/lib/python3.7/site-packages/sleepyq/__init__.py", line 101, in __make_request
    retry = self.__make_request(url, mode, data, attempt+1)
  File "/srv/homeassistant/venv/lib/python3.7/site-packages/sleepyq/__init__.py", line 104, in __make_request
    r.raise_for_status()
  File "/srv/homeassistant/venv/lib/python3.7/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://prod-api.sleepiq.sleepnumber.com/rest/sleeper?_k=xxxxxxxxxxxxx
>>>

토론 #5

While using that user agent did allow the login to succeed, further API calls appear to fail: ...


나는 네가 매번 통화에서 제목을 설정해야 한다고 생각한다.

토론 #6

하하!어?네.
테스트 좀 해볼게요...

토론 #7

세션 초기화 부분에 사용자 프록시 헤더만 추가하면 됩니다.
HA에서 사용자 에이전트를 수동으로 변경하는 방법을 설명해 주실 수 있습니까?
편집: 그러면 사람들이 핵심에 통합될 때까지 그것을 잠시 복구할 수 있습니다.

토론 #8

@tagno25 감사합니다!나는python 프로그래머가 아니기 때문에 이것은 아주 좋은 도움말입니다. 마치 API를 복구한 것 같습니다.
@Tower 방금 Tagno25의 설명에 따라 변경한 것을 테스트해야 합니다.

토론 #9

네, @tagno25에서 추천한 복구 방법으로 HA 문제를 해결했습니다.python venv를 실행하고 있기 때문에, 수동으로 복구하는 방법을 설명할 수 밖에 없습니다.만약 당신이 다른 스타일의 HA를 운행한다면, 당신은 반드시 이 라이브러리를 찾아야 합니다.
나의 예에서, 나는

토론 #10

에서sleepyq 라이브러리를 찾았다.라이브러리 디렉터리를 자신의 차원 구조에서 찾아야 합니다.
이 디렉터리에 ~homeassistant/venv/lib/python3.7/site-packages/sleepyq 파일이 편집되어야 합니다.80행 근처에서 이 코드를 찾습니다.
...
self._session = requests.Session()
self._session.headers.update({'User-Agent': 'foo'})
self._api = "https://api.sleepiq.sleepnumber.com/rest"
... 
__init__.py 다음에 다음 선을 삽입하여 위의 선과 정렬합니다.
class Sleepyq:
    def __init__(self, login, password):
        self._login = login
        self._password = password
        self._session = requests.Session()
        self._api = "https://prod-api.sleepiq.sleepnumber.com/rest"
결과는 다음과 같습니다.
self._session.headers.update({'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36'})
self._session = requests.Session()sleepyq 디렉터리

토론 #11

테스트 작업.위에서 문제를 발견하고 수동 복구를 발표한 분들께 감사드립니다./usr/local/lib/python3.8/site-packages/sleepyq/__init__.py 나는 다른 방법을 발견했다.
  • 커뮤니티 SSH 및 웹 터미널 플러그인을 통해 SSH에 로그인합니다.(보호 모드 해제)
  • 실행된 명령:

    토론 #12

  • ratsputin의 설명에 따라 이 줄을 추가했습니다.
  • 헥타르.
  • 빠른 복구에 감사드립니다.docker exec -it homeassistant vi /usr/local/lib/python3.8/site-packages/sleepyq/__init__.py 네, 빠른 복구에 감사드립니다. 저에게도 효과가 있는지 확인하세요.

    토론 #13

    나는 내일 아침에 PR 한 부를 제출할 것이다. 그러면 우리는 합병하여 복원할 수 있고 다음 버전으로 들어갈 수 있기를 바란다.이와 동시에python 원본 파일의 로컬 복사본을 수동으로 업데이트하는 것이 좋은 해결책인 것 같습니다.

    토론 #14

    복구 감사합니다!!!!

    토론 #15

    Sleep numberIQ는 복구

    토론 #16

    가 권한이 부여되지 않은 API 호출 부하로 인해 SleepIQ에 중대한 문제가 있음을 다시 한 번 중지했습니다.그들의 서비스는 믿을 수 없게 변했지만, 결국 효과를 보았다.
    현재 존재하는지 확인하는 데 몇 분(10분 이상)이 걸립니다.

    좋은 웹페이지 즐겨찾기