Använda Fibaro api från C#
Posted: 23 Jan 2016, 20:04
Hej
Försöker ändra variabler i min fibaro (4.056) från ett program skrivet i c#.
Har inga problem att läsa ut information men så fort jag försöker ändra en variabel så får jag olika felmeddelanden.
Kontrollerar vad som i verkligheten har skickats (använder Fiddler4) så korrekt anrop verkar ha skapats.
Är det nån som har en aning om varför det inte fungerar.
I nedanstående exempel försöker jag sätta en variabel med namn "test" (den finns skapad) till ett nytt värde.
(Jag använder VisualStudio 2013)
Tacksam för hjälp
Leif
Försöker ändra variabler i min fibaro (4.056) från ett program skrivet i c#.
Har inga problem att läsa ut information men så fort jag försöker ändra en variabel så får jag olika felmeddelanden.
Kontrollerar vad som i verkligheten har skickats (använder Fiddler4) så korrekt anrop verkar ha skapats.
Är det nån som har en aning om varför det inte fungerar.
I nedanstående exempel försöker jag sätta en variabel med namn "test" (den finns skapad) till ett nytt värde.
(Jag använder VisualStudio 2013)
Tacksam för hjälp
Leif
Code: Select all
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.IO;
using System.Net;
public enum HttpVerb
{
GET,
POST,
PUT,
DELETE
}
namespace HttpUtils
{
public class RestClient
{
public string EndPoint { get; set; }
public HttpVerb Method { get; set; }
public string ContentType { get; set; }
public string PostData { get; set; }
public RestClient(string endpoint, HttpVerb method)
{
EndPoint = endpoint;
Method = method;
ContentType = "application/json";
PostData = "";
}
public string MakeRequest(string parameters)
{
var request = (HttpWebRequest)WebRequest.Create(EndPoint + parameters);
request.Credentials = new NetworkCredential("admin", "xxxxx");
request.Method = Method.ToString();
var bytes = Encoding.UTF8.GetBytes(PostData);
request.ContentLength = bytes.Length;
request.ContentType = ContentType;
//ServicePointManager.Expect100Continue = false;
//request.KeepAlive = true;
if (!string.IsNullOrEmpty(PostData) && (Method == HttpVerb.POST | Method == HttpVerb.PUT))
{
Stream writeStream = request.GetRequestStream();
writeStream.Write(bytes, 0, bytes.Length);
writeStream.Close();
}
using (var response = (HttpWebResponse)request.GetResponse())
{
var responseValue = string.Empty;
if (response.StatusCode != HttpStatusCode.OK)
{
var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode);
throw new ApplicationException(message);
}
// grab the response
using (var responseStream = response.GetResponseStream())
{
if (responseStream != null)
using (var reader = new StreamReader(responseStream))
{
responseValue = reader.ReadToEnd();
}
}
return responseValue;
}
}
}
static class Program
{
static void Main()
{
Console.WriteLine("Fibaro test");
try
{
string value = "99";
string endPoint = @"http://192.168.0.30/api/globalVariables";
var client = new RestClient(endPoint, HttpVerb.GET );
var json = client.MakeRequest(@"/test");
Console.WriteLine(json);
var client2 = new RestClient(endPoint, HttpVerb.PUT);
string data = "{ \"value\":\"" + value + "\"}";
client2.PostData = data;
var json2 = client2.MakeRequest(@"/api/globalVariables/test");
Console.WriteLine(json2);
}
finally
{
Console.ReadLine();
}
}
}
}