我需要帮助排除以下故障。我有一个非常简单的程序发送TCP命令,成功地将JSON数据从我的笔记本电脑发送到我的Yeelight RGB Light,但不是从Raspberry PI。
import java.io.*;
import java.net.*;
class TCPClient
{
public static void main(String args[]) throws Exception
{
String modifiedSentence;
Socket clientSocket = new Socket(args[0], 55443);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
PrintWriter printWriterw = new PrintWriter(outToServer);
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String command = "{\"id\":1,\"method\":\"set_rgb\",\"params\":[13631232, \"smooth\", 500]}";
printWriterw.println(command);
printWriterw.flush();
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
我的笔记本电脑上还有一个充当tcpserver的程序,这样我就可以看到是否可以向笔记本电脑ip发送和接收相同的消息。
RPI、笔记本电脑、YeeLight->All在同一网络中
在笔记本电脑上运行以上程序,以突出显示iPadress->Success
在RPI上运行以上程序到Yeelight iPadress->一直等待响应,超时。
在笔记本电脑上运行以上程序,以突出显示iPadress->Success
在rpi-to-laptop ipaddress上运行上述程序->成功(只需检查json是否到达)
在笔记本电脑上运行上述程序到笔记本电脑本地主机->成功接收消息完全相同。
使用rpi上的telnet将json发送到yeelight ip+端口->成功…
从我的RPI运行时,我真的搞不懂程序为什么不工作。
希望有人能帮忙。
最佳答案
我认为问题在于println函数。open api for yeelight声明命令结尾必须有\r\n
。这是Windows机器上的默认值(我想您在笔记本电脑上使用),而Raspberry PI可能是Linux,它只使用\n
进行换行。代替println(),手动将\r\n
附加到命令。我相信这能解决你的问题。
供参考:
此处可找到YeeLight API的文档:http://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf
在第8页上,它指出“所有消息必须在定义的
TCP连接上的JSON格式和每个单独的消息必须由
“\r\n
”。