Нужен рабочий пример Nest REST API без использования Firebase API

Я изо всех сил пытаюсь найти рабочий пример записи данных в Nest Thermostat API с использованием простого отдыха. Попытка написать приложение C# и не может использовать Firebase. Многочисленные примеры Curl, опубликованные до сих пор, не работают. У меня есть действительный auth_token, и я могу читать данные без проблем. Найти правильный URL-адрес поста сложно. Кто-нибудь может помочь?

Примеры как

curl -v -X PUT "https://developer-api.nest.com/structures/g-9y-2xkHpBh1MGkVaqXOGJiKOB9MkoW1hhYyQk2vAunCK8a731jbg?auth=<AUTH_TOKEN>" -H "Content-Type: application/json" -d '{"away":"away"}'

не меняйте никаких данных.


person user3791884    schedule 30.06.2014    source источник


Ответы (2)


Две вещи. Во-первых, следуйте перенаправлениям с -L. Во-вторых, поместите непосредственно в место хранения данных, например

curl -v -L -X PUT "https://developer-api.nest.com/structures/g-9y-2xkHpBh1MGkVaqXOGJiKOB9MkoW1hhYyQk2vAunCK8a731jbg/away?auth=<AUTH_TOKEN>" -H "Content-Type: application/json" -d '"away"'

PUT перезаписывает все данные в местоположении. Предыдущая команда логически устанавливала бы данные структуры только в {"away":"away"}.

person mccv    schedule 30.06.2014
comment
Вроде должно работать, но ничего не делает. Никаких ошибок от Curl. Состояние термостата не меняется. Я пробовал всевозможные варианты всех записываемых параметров. Ничего не работает. - person user3791884; 01.07.2014
comment
Если были выбраны неправильные области видимости, вы должны увидеть ошибку 401. Это похоже на несоблюдение перенаправлений, о которых curl не сообщает в неподробном режиме. - person mccv; 01.07.2014

user3791884, Вам повезло с C# PUT? Вот код С#, который работает:

    using System.Net.Http;

private async void changeAway()
{
    using (HttpClient http = new HttpClient()) 
    {
        string url = "https://developer-api.nest.com/structures/" + structure.structure_id + "/?auth=" + AccessToken;
        StringContent content = new StringContent("{\"away\":\"home\"}"); // derived from HttpContent
        HttpResponseMessage rep = await http.PutAsync(new Uri(url), content);
        if (null != rep)
        {
            Debug.WriteLine("http.PutAsync2=" + rep.ToString());
        }
    }
}

Debug.WriteLine записывает это в окно вывода: «http.PutAsync2=StatusCode: 200, ReasonPhrase: «ОК», версия: 1.1, содержимое: System.Net.Http.StreamContent, заголовки: { Access-Control-Allow-Origin: * Cache-Control: no-cache, max-age=0, private Content-Length: 15 Content-Type: application/json; charset=UTF-8 }"

Эти два метода возвращают действительную структуру моих данных.

1/ командная строка curl -v -k -L -X GET "https://developer-api.nest.com/structures/Za6hCZpmt4g6mBTaaA96yuY87lzLtsucYjbxW_b_thAuJJ7oUOelKA/?auth=c.om2...AeiE"

2/ C#

private bool getStructureInfo()
{
    bool success = false;
    try
    {
        // Create a new HttpWebRequest Object to the devices URL.
        HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create("https://developer-api.nest.com/structures/?auth=" + AccessToken);
        // Define the request access method.
        myHttpWebRequest.Method = "GET";
        myHttpWebRequest.MaximumAutomaticRedirections=3;
        myHttpWebRequest.AllowAutoRedirect=true;
        myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;

        using(HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse())
        {
            if (null != myHttpWebResponse)
            {
                // Store the response.
                Stream sData = myHttpWebResponse.GetResponseStream();
                // Pipes the stream to a higher level stream reader with the required encoding format. 
                StreamReader readStream = new StreamReader (sData, Encoding.UTF8);

                Debug.WriteLine("Response Structure stream received.");
                string data = readStream.ReadToEnd();
                Debug.WriteLine(data);
                readStream.Close();
                success = deserializeStructure(data);
            }
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine("getStructure Exception=" + ex.ToString());
    }
    return success;
}
person Kim Gregory    schedule 28.07.2014