API decodeur TV plus

sabato
Visiteur

Bonjour,

 

j'aimerais savoir si il existe un API pour commander le décodeur TV plus?

 

Car j'aimerais pouvoir allumer mon décodeur avec ma box domotique. Il doit bien exister un moyen vu que l'appli telephone SFR TV arrive à commander le décodeur.

 

Merci

9 RÉPONSES 9

Re: API decodeur TV plus

sabato
Visiteur

Je vois que le sujet inspire beaucoup de monde 😄

Re: API decodeur TV plus

BENWOOD
Visiteur

Bonjour,
je suis dans le même cas que vous mais pour la box THD SFR
j'aimerais savoir s'il existe l'API Html pour la box THD de SFR.

Si vous avez des infos de vos recherches...

Merci

Re: API decodeur TV plus

sabato
Visiteur

Je n'ai rien trouvé .... J'ai peur que SFR ne soit pas intéressé pour donner la main sur leur box au client :'(

 

Du coup avec un broadlink RM PRO j'ai enregistré ma télécommande et j'envoie grace à ma box domotique les commandes vers mon decodeur.

 

Re: API decodeur TV plus

patdenice
Visiteur

Bonjour,

 

Un script Python existe... je m'en suis inspiré pour faire un script PHP pour la box de domotique eedomus.

https://github.com/dragouf/sfrtvctl

Re: API decodeur TV plus

ELDOMO
Visiteur

Bonjour

N aurais tu pas pour  idéée de partager ton scritp en PHP ?

j'utilise un raspeberry et Domoticz  et je n'arrive pas a tirer profit des frtvctl 

Re: API decodeur TV plus

titidbk
Visiteur

bonsoir

je suis curieux de jeter un oeil a ton script tu partages ? 

Re: API decodeur TV plus

ddjeo
Visiteur

Bonjour,

 

J'ai pas mal cherché (et perdu du temps) donc je partage...

Merci mille fois dragouf pour ton script python : https://github.com/dragouf/sfrtvctl

 

Ci-joint, un mini script en php pour utiliser les web sockets et démarrer le décodeur tv sfr SBT7.

 

 

<?php

$IP="192.168.1.100"; // a changer
$PORT=7682;

$ws = new ws(array('host' => $IP,'port' => $PORT,'wskey' => 'XXXXXXXXXXXXXXXXXXXXXX=='));
$ws->send('{"Params": {"Token": "LAN", "DeviceSoftVersion": "11.2.2", "Action": "ButtonEvent", "Press": [303], "DeviceModel": "iPhone"}}');
$ws->close();

class ws { private $params; private $head; private $instance; public function __construct($params) { foreach($params as $key => $value) $this->params[$key] = $value; $this->head = "GET / HTTP/1.1\r\n" . "Upgrade: websocket\r\n" . "Host: ".$this->params['host'].":".$this->params['port']."\r\n" . "Origin: ".$this->params['host'].":".$this->params['port']."\r\n" . "Sec-WebSocket-Key: ".$this->params['wskey']."\r\n" . "Sec-WebSocket-Version: 13\r\n" . "Connection: upgrade\r\n" . "Sec-WebSocket-Protocol: lws-bidirectional-protocol\r\n"; } public function send($method) { $this->head .= "Content-Length: ".strlen($method)."\r\n\r\n"; $this->connect(); fwrite($this->instance, $this->hybi10Encode($method)); //$wsdata = fread($this->instance, 2000); //return $this->hybi10Decode($wsdata); } public function close() { if($this->instance) { fclose($this->instance); $this->instance = NULL; } } private function connect() { $sock = fsockopen($this->params['host'], $this->params['port'], $errno, $errstr, 2); fwrite($sock, $this->head); $headers = fread($sock, 2000); $this->instance = $sock; } private function hybi10Decode($data) { $bytes = $data; $dataLength = ''; $mask = ''; $coded_data = ''; $decodedData = ''; $secondByte = sprintf('%08b', ord($bytes[1])); $masked = ($secondByte[0]=='1') ? true : false; $dataLength = ($masked===true) ? ord($bytes[1]) & 127 : ord($bytes[1]); if ($masked===true) { if ($dataLength===126) { $mask = substr($bytes, 4, 4); $coded_data = substr($bytes, 8); } elseif ($dataLength===127) { $mask = substr($bytes, 10, 4); $coded_data = substr($bytes, 14); } else { $mask = substr($bytes, 2, 4); $coded_data = substr($bytes, 6); } for ($i = 0; $i<strlen($coded_data); $i++) $decodedData .= $coded_data[$i] ^ $mask[$i % 4]; } else { if ($dataLength===126) $decodedData = substr($bytes, 4); elseif ($dataLength===127) $decodedData = substr($bytes, 10); else $decodedData = substr($bytes, 2); } return $decodedData; } private function hybi10Encode($payload, $type = 'text', $masked = true) { $frameHead = array(); $frame = ''; $payloadLength = strlen($payload); switch ($type) { case 'text' : // first byte indicates FIN, Text-Frame (10000001): $frameHead[0] = 129; break; case 'close' : // first byte indicates FIN, Close Frame(10001000): $frameHead[0] = 136; break; case 'ping' : // first byte indicates FIN, Ping frame (10001001): $frameHead[0] = 137; break; case 'pong' : // first byte indicates FIN, Pong frame (10001010): $frameHead[0] = 138; break; } // set mask and payload length (using 1, 3 or 9 bytes) if ($payloadLength>65535) { $payloadLengthBin = str_split(sprintf('%064b', $payloadLength), 8); $frameHead[1] = ($masked===true) ? 255 : 127; for ($i = 0; $i<8; $i++) $frameHead[$i + 2] = bindec($payloadLengthBin[$i]); // most significant bit MUST be 0 (close connection if frame too big) if ($frameHead[2]>127) { $this->close(1004); return false; } } elseif ($payloadLength>125) { $payloadLengthBin = str_split(sprintf('%016b', $payloadLength), 8); $frameHead[1] = ($masked===true) ? 254 : 126; $frameHead[2] = bindec($payloadLengthBin[0]); $frameHead[3] = bindec($payloadLengthBin[1]); } else $frameHead[1] = ($masked===true) ? $payloadLength + 128 : $payloadLength; // convert frame-head to string: foreach (array_keys($frameHead) as $i) $frameHead[$i] = chr($frameHead[$i]); if ($masked===true) { // generate a random mask: $mask = array(); for ($i = 0; $i<4; $i++) $mask[$i] = chr(rand(0, 255)); $frameHead = array_merge($frameHead, $mask); } $frame = implode('', $frameHead); // append payload to frame: for ($i = 0; $i<$payloadLength; $i++) $frame .= ($masked===true) ? $payload[$i] ^ $mask[$i % 4] : $payload[$i]; return $frame; } }
?>

 

Les autres commandes disponibles : (https://github.com/dragouf/sfrtvctl/blob/master/sfrtvctl/remote.py)

    "VUP": 308,
    "VDOWN": 307,
    "RIGHT": 222,
    "LEFT": 293,
    "UP": 297,
    "DOWN": 294,
    "PUP": 290,
    "PDOWN": 291,
    "INFO": 301,
    "RETURN": 27,
    "OK": 13,
    "NUMBER": "THIRDARGUMENT_UTF8DECIMALCODE",
    "PLAYPAUSE": 306,
    "FORWARD": 305,
    "REWIND": 304,
    "MUTE": 302,
    "POWER": 30

Le payload pour afficher la chaine TF1 :

$key=1
$ws->send("{\"Params\": {\"Token\": \"LAN\", \"DeviceSoftVersion\": \"11.2.2\", \"Params\": [$key, \"zapdigit\"], \"Action\": \"CustomEvent\", \"DeviceModel\": \"iPhone\", \"Event\": \"GotoLive\"}}");

Bonne journée,

 

Re: API decodeur TV plus

NicolasLaf
Visiteur
Merci ça fonctionne par contre je n’arrive plus à naviguer quand j’arrive sur Netflix... sauriez vous comment faire ?

Re: API decodeur TV plus

Luck_skynet
Visiteur

Bonjour,

 

Serait il possible d'avoir plus de précision...

Entre l'installation du script Python de Github qui me semble un peu léger. 

Quand je lance l'instruction : "python setup.py install", j'ai un message d'erreur disant qu'il ne trouve pas le setup.py

 

Et ensuite votre script PHP, ou l'installe t'on ?

désolé pour ces questions qui vous sembleront surement basic.

Comment gagner des badges

Badges En savoir plus