2014-10-28 2 views
1

ambient_temperature_f에서 https://developer-api.nest.com 또는 리디렉션 된 Firebase URL과 같은 네스트 데이터를 PUT 할 수 없습니다. 나는 내가 사용하고있는 Firebase 모듈 (https://ozgur.github.io/python-firebase/)에서 비틀어 질 필요가있는 Nest에 특정적인 것이 있다고 생각합니다. firebase.py에서NUT로 PUT 할 수 없습니다

:

@http_connection(60) 
def make_put_request(url, data, params, headers, connection): 
    """ 
    Helper function that makes an HTTP PUT request to the given firebase 
    endpoint. Timeout is 60 seconds. 
    `url`: The full URL of the firebase endpoint (DSN appended.) 
    `data`: JSON serializable dict that will be stored in the remote storage. 
    `params`: Python dict that is appended to the URL like a querystring. 
    `headers`: Python dict. HTTP request headers. 
    `connection`: Predefined HTTP connection instance. If not given, it 
    is supplied by the `decorators.http_connection` function. 

    The returning value is a Python dict deserialized by the JSON decoder. However, 
    if the status code is not 2x or 403, an requests.HTTPError is raised. 

    connection = connection_pool.get_available_connection() 
    response = make_put_request('http://firebase.localhost/users', 
           '{"1": "Ozgur Vatansever"}', 
           {'X_FIREBASE_SOMETHING': 'Hi'}, connection) 
    response => {'1': 'Ozgur Vatansever'} or {'error': 'Permission denied.'} 
    """ 
    timeout = getattr(connection, 'timeout') 
    response = connection.put(url, data=data, params=params, headers=headers, timeout=timeout) 

    print('[make_put_request]: [%s][%s][%s][%s]\n' %(url, data, params, headers)) 

    if response.ok or response.status_code == 403: 
     return response.json() if response.content else None 
    else: 
     response.raise_for_status() 

인쇄 아웃 :

[make_put_request]: [https://developer-api.nest.com/devices/thermostats/DEVICE_ID/ambient_temperature_f.json?auth=VALID_AUTH_TOKEN][71][{}][{}] 

반환 오류 :

Traceback (most recent call last): 
    File "C:\py\nest_auth.py", line 90, in <module> 
    put_result = firebase.put(data_url, field_name, 71) 
    File "C:\Python34\lib\site-packages\firebase\decorators.py", line 19, in wrapped 
    return f(*args, **kwargs) 
    File "C:\Python34\lib\site-packages\firebase\firebase.py", line 312, in put 
    connection=connection) 
    File "C:\Python34\lib\site-packages\firebase\decorators.py", line 19, in wrapped 
    return f(*args, **kwargs) 
    File "C:\Python34\lib\site-packages\firebase\firebase.py", line 77, in make_put_request 
    response.raise_for_status() 
    File "C:\Python34\lib\site-packages\requests\models.py", line 808, in raise_for_status 
    raise HTTPError(http_error_msg, response=self) 
requests.exceptions.HTTPError: 400 Client Error: Bad Request 

이것은 firebaseio.com 대상을 사용할 때 작동하지만 가공용 아니다 둥지 잉 :

put_result = firebase.put('/devices/thermostats/DEVICE_ID/', 'ambient_temperature', 71) 

답변

2

documentationambient_temperature_f 따르면 서모 스탯에서보고 된 주위 온도의 판독 전용 나타내는 필드이다. 그것은 센서 독서이기 때문에 그것을 무시하는 것이 합리적이지 않을 것입니다.

서모 스탯이 가열되거나 냉각되어야하는 온도 인 target_temperature_f에 편지를 쓰고 싶습니다.

+0

나는 최근에 알아 챘지만, 불행히도 여전히 같은 오류가 발생했습니다. Nest 용 Chrome 개발자 도구를 사용하여보고 된 온도로 표시된 값을 실제로 변경할 수있었습니다. Nest는 잠시 후 다시 실제 온도 값으로 설정합니다. – Enigma

+0

URL에 원하는 값을 첨부 할 수있는 방법이 있습니까? access_token과 얼마나 비슷합니까? 예를 들어 '? value = 71'을 추가하는 것과 같은 것입니다. – Enigma

+0

아니요, REST API는 쿼리 매개 변수가 아닌 JSON 페이로드 만 허용하며 Firebase API는 Firebase 구문 만 사용합니다. –