C# 尝试使用提供的API、TCP和C上的JSON与Heatmiser neoHub通信#
我正试图编写一个简单的程序来与Heatmiser neoHub进行通信,它应该能够获取和设置有关我的加热系统的各种信息 根据Heatmiser API文档,我应该在neoHub的端口4242上使用TCP上的JSON,我认为我的发送代码可以工作,但没有收到响应C# 尝试使用提供的API、TCP和C上的JSON与Heatmiser neoHub通信#,c#,json,tcp,C#,Json,Tcp,我正试图编写一个简单的程序来与Heatmiser neoHub进行通信,它应该能够获取和设置有关我的加热系统的各种信息 根据Heatmiser API文档,我应该在neoHub的端口4242上使用TCP上的JSON,我认为我的发送代码可以工作,但没有收到响应 using System.Net.Sockets; using System.Text; namespace NeoHub { class Program { static void Main(string
using System.Net.Sockets;
using System.Text;
namespace NeoHub
{
class Program
{
static void Main(string[] args)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect("192.168.0.204", 4242);
socket.ReceiveTimeout = 10000;
Console.WriteLine("connected...");
string jsonData = "{\"GET_LIVE_DATA\":0}";
byte[] sendData = Encoding.UTF8.GetBytes(jsonData);
byte[] readData = new byte[1024 * 4];
try
{
int sendBytes = socket.Send(sendData);
Console.WriteLine("sent {0}...", sendBytes);
int readBytes = socket.Receive(readData);
Console.WriteLine("receive {0}...", readBytes);
Console.WriteLine(Encoding.UTF8.GetString(readData));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
}
}
目前,我有一个小型的.Net Core 2.2控制台应用程序,它将JSON命令编码为字节数组,并将其发送到连接到neoHub的TCP套接字,然后等待neoHub的响应
我的第一次尝试将解析返回的JSON,连接没有超时,并等待了几分钟,然后我将在没有响应的情况下终止应用程序。当前版本已经进一步简化,只需将任何未解析的JSON响应输出到控制台,只需等待10秒,但仍然没有得到响应
using System.Net.Sockets;
using System.Text;
namespace NeoHub
{
class Program
{
static void Main(string[] args)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect("192.168.0.204", 4242);
socket.ReceiveTimeout = 10000;
Console.WriteLine("connected...");
string jsonData = "{\"GET_LIVE_DATA\":0}";
byte[] sendData = Encoding.UTF8.GetBytes(jsonData);
byte[] readData = new byte[1024 * 4];
try
{
int sendBytes = socket.Send(sendData);
Console.WriteLine("sent {0}...", sendBytes);
int readBytes = socket.Receive(readData);
Console.WriteLine("receive {0}...", readBytes);
Console.WriteLine(Encoding.UTF8.GetString(readData));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
}
}
{“GET_LIVE_DATA”:0}的结果应该是一个类似于下面的JSON文件(我已经截断了示例输出)
通过查看GitHub上的Python解决方案,我成功地解决了自己的问题 这个小而关键的补充是一条线的尽头:
string jsonData = "{\"GET_LIVE_DATA\":0}";
需要
string jsonData = "{\"GET_LIVE_DATA\":0}" + "\0\r";
我正在寻找自己的API。你有文档的链接吗?欢迎任何其他相关文档/指南!我不确定这是否仍然是最新的,但它是由Heatmiser的支持团队在与他们进行电子邮件交谈后发送的