2017-04-24 1 views
2

다음 문제 해결에 도움이 필요합니다. 나는 TCP 명령을 보내는 아주 간단한 프로그램을 가지고 있는데, 성공적으로 json 데이터를 내 노트북의 Yeelight RGB 표시등에 보내지 만 라스베리 파이에서는 표시하지 않습니다.TCP JSON 명령이 도착하지 않음

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(); 
     } 
} 

나는 또한 내가 내 노트북의 IP에 동일한 메시지를주고받을 수 있다면 그래서 내가 볼 수있는 내 노트북에 tcpserver는 역할을하는 프로그램이 있습니다.

RPI, 노트북, Yeelight -> 모든 Yeelight IPadress에 노트북에

  • 프로그램 실행 위의 동일한 네트워크에 - Yeelight IPadress에 RPI에 프로그램 이상> 성공
  • 실행이 - 응답을 기다리는 계속> 타임 아웃. Yeelight IPadress에 노트북에 프로그램 위
  • 실행 -> 성공 노트북 IPadress에 RPI에 위의 프로그램
  • 실행 -> 성공은 노트북 로컬 호스트에 노트북에 프로그램 위
  • 실행 (JSON가 도착하면 바로 확인) -> 성공은 수신 메시지는 정확히 동일합니다. yeelight의 IP + 포트에 JSON을 보내기 위해 RPI에 텔넷을 사용하여
  • -> 성공 ...

임은 정말 내 RPI에서 실행할 때 프로그램이 작동하지 않는 이유에 대해 잃었다.

누군가가 도움을 줄 수 있기를 바랍니다.

답변

1

이 문제는 println 함수에 있다고 생각합니다. yeelight 용 공개 API는 명령의 끝이 \r\n이어야 함을 나타냅니다. 이것은 Windows 컴퓨터에서 기본적으로 사용됩니다 (랩톱에서 사용하는 것으로 가정). 그러나 라즈베리 파이는 리눅스 일 뿐이며 \n과 함께 줄 바꿈을 수행합니다. println() 대신 수동으로 \r\n을 명령에 추가하십시오. 이 문제가 해결 될 것으로 믿습니다.

yeelight API에 대한

문서가 여기있다 : 참고로

http://www.yeelight.com/download/Yeelight_Inter-Operation_Spec.pdf는 모든 메시지는 TCP 연결에 정의 된 JSON 형식으로 제공되어야하며, 각각의 메시지 있어야합니다 "상태 페이지 8 일

종료 : "\r\n". "

+0

이 작은 취미 프로젝트를 계속했습니다. 대단히 고마워요, 이것이 해결책이었습니다! 이제 RGB 라이트 값에 대한 나의 에너지 소비가 효과적입니다! – Snuur