Verwandeln Sie das Xiaomi Smart Home Gateway in eine Spalte

Hallo Habra Giktayms-Leser! Heute werde ich Ihnen beibringen, wie Sie aus nutzlosen Funktionen Nutzen ziehen können. Wir erhalten am Beispiel eines Smart Homes von der berüchtigten Firma Xiaomi und seinem Produkt in Form eines ZigBee-Gateways.

Besitzer von Xiaomi Smart Home-Komponenten wissen, dass die meisten von ihnen in diejenigen unterteilt sind, die über ZigBee oder Bluetooth kommunizieren können. Wir werden uns für das Gateway für ZigBee-Geräte Version 2 interessieren, weil Dort erschien die Radiofunktionalität, die standardmäßig nur chinesische Internetradiosender wiedergeben kann.


Natürlich gibt es ein Projekt im Internet, mit dessen Hilfe Sie nicht einfach verschiedene andere Radiosender hinzufügen können, aber wir werden den anderen Weg gehen und einen drahtlosen Lautsprecher vom Gateway aus herstellen.

Was brauchst du


Für die erfolgreiche Implementierung der Operation benötigen Sie:

  • Tatsächlich ist die ZigBee-Gateway-Version mindestens 2 (ein Radio erschien darin)
  • Beliebiger Webserver
  • Ein Smartphone, auf dem sich ein Root und eine installierte Software MiHome mit dem ausgewählten Land China Mainland befinden

Was machen wir?


Um aus unserem Gateway einen drahtlosen Lautsprecher zu machen, müssen Sie sich als Internetradio-Stream ausgeben und das Gateway trainieren, das Sie benötigen, um auf die Liste der Sender zu klopfen, und nicht auf die chinesische API.

Um zu verstehen, wie die Anwendung auf dem Telefon mit chinesischen Servern kommuniziert, können Sie den Datenverkehr abhören, aber ich werde Sie vor diesen Hämorrhoiden bewahren :) Wenn Sie Ihren Horizont erweitern möchten, können Sie dies optional tun.

Wir werden uns also für drei Anfragen und dementsprechend für die Antwort auf die chinesische API interessieren, die unter api.ximalaya.com verfügbar ist:

  • / openapi-gateway-app / live / radios
  • / openapi-gateway-app / live / get_radios_by_ids
  • / openapi-gateway-app / search / radios

Das Wort openapi deutet im Weg auf etwas Offenes hin, aber ich habe keine öffentliche Spezifikation gefunden. Die Anfrage enthält Parameter, die für unsere Zwecke nicht benötigt werden. Daher verwerfen wir sie.

Ich habe nginx als Webserver verwendet, hier ist die Konfiguration:

server { listen *:80; server_name api.io.mi.com ximalaya.com www.ximalaya.com api.ximalaya.com mobile.ximalaya.com open.ximalaya.com ximiraga.ru www.ximiraga.ru; root /opt/xiaomiradio/www; index index.php index.html index.htm; access_log /var/log/nginx/radio_access.log; error_log /var/log/nginx/radio_error.log; location @ximalaya { proxy_pass http://api.ximalaya.com; } } 

Erstellen Sie dieselbe Hierarchie im Stammverzeichnis Ihres Webservers. Erstellen Sie außerdem die Ordner radio und hls im Webserver-Stammverzeichnis. Alle Aufrufe auf diesen Pfaden sollten denselben JSON ausgeben, daher ist es sinnvoll, sie mit einer Datei zu verknüpfen, die wir station.json nennen

Hier sind die Inhalte:

 { "total_page":1, "total_count":1, "current_page":0, "radios":[ { "id":527782023, "kind":"radio", "program_name":"AirSound1", "radio_name":"AirSound1", "radio_desc":"", "schedule_id":0, "support_bitrates":[ 64 ], "rate24_aac_url":"", "rate64_aac_url":"http://<    >/hls/live1.m3u8", "rate24_ts_url":"", "rate64_ts_url":"", "radio_play_count":1, "cover_url_small":"http://<    >/radio/527782023/cover_small.png", "cover_url_large":"http://<    >/radio/527782023/cover_big.png", "updated_at":0, "created_at":0 } ] } 

Wie Sie sehen können, ist hier alles einfach - wir verschenken eine Reihe von Funkgeräten, die angeben, wo nach dem Stream gesucht werden soll. Wenn Sie mehrere Gateways haben, können Sie mehrere Kanäle erstellen. Ein wichtiger Hinweis - die hier angegebene Adresse muss vom Gateway aus zugänglich sein!

Damit die Anwendung Ihre Änderungen sehen kann, müssen Sie die Hosts auf Ihrem Smartphone bearbeiten und api.ximalaya.com registrieren, um der Adresse Ihres Webservers zu entsprechen.

Nun dazu, wie man den Stream bekommt. Ich habe beschlossen, alles von meiner Soundkarte von dem PC auszugeben, auf dem der Webserver bereitgestellt wird. Dafür verwenden wir ffmpeg:

 #!/bin/bash ffmpeg -f alsa -i hw:Loopback,1,0 -c:a libfdk_aac -b:a 64k -f ssegment -segment_list /opt/xiaomiradio/hls/live1.m3u8 -segment_list_flags +live -segment_time 1 -segment_list_size 1 -segment_wrap 5 -segment_list_entry_prefix http://<    >/hls/ /opt/xiaomiradio/hls/64%03d.aac 

Achten Sie auf die Pfade und Adressen des Webservers - ersetzen Sie Ihre.

Im Prinzip ist dies alles für eine erfolgreiche Arbeit - führen Sie das ffmpeg-Skript aus, es beginnt mit der Erstellung von Segmenten mit Sound von Ihrer Soundkarte, startet die Anwendung auf dem Telefon und wählt Ihren Sender aus - nach ein oder zwei Sekunden sollte der Sound vom PC ausgehen.

Source: https://habr.com/ru/post/de411003/


All Articles