Passer au contenu principalPasser à la recherchePasser au pied de page

API decodeur TV plus

utilisateur_supprimé
Non applicable

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
utilisateur_supprimé
Non applicable

Je vois que le sujet inspire beaucoup de monde 😄

utilisateur_supprimé
Non applicable

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

utilisateur_supprimé
Non applicable

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.

 

utilisateur_supprimé
Non applicable

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

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 

utilisateur_supprimé
Non applicable

bonsoir

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

utilisateur_supprimé
Non applicable

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,

 

utilisateur_supprimé
Non applicable
Merci ça fonctionne par contre je n’arrive plus à naviguer quand j’arrive sur Netflix... sauriez vous comment faire ?
utilisateur_supprimé
Non applicable

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