Skip to content

Commit

Permalink
Merge branch 'release/2.0.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
sabinus52 committed Feb 19, 2021
2 parents f3b6c15 + 337799d commit 0177e53
Show file tree
Hide file tree
Showing 27 changed files with 1,190 additions and 636 deletions.
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Changelog

### Version 2.0.0 - 19/02/2021

Quelques changements majeurs ([voir la release note](RELEASE-2.md)) :
- Aucun changement sur la session
- Création d'une classe abstraite `Request` pour chaque type de requêtes `DiscoveryRequest`, `QueryRequest` et `ControlRequest`
- Membre d'une `Session` inclus dans les classes `Device`
- Suppression de la classe `DeviceEvent`
- Ajout de fonction de test de connexion
- Corrections et améliorations diverses


### v1.2.0 - 21/01/2021

- Thermostat (x10)
Expand Down
97 changes: 66 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
# TuyaCloudApi
Library to control the Tuya device

## Version 2.0

[See release notes](RELEASE-2.md)


## Support devices

- Switch
- Scene
- Light
- Cover
- Climate


## Installation
Expand All @@ -24,77 +30,106 @@ require __DIR__ . '../vendor/autoload.php';
use Sabinus\TuyaCloudApi\TuyaCloudApi;
use Sabinus\TuyaCloudApi\Session\Session;
use Sabinus\TuyaCloudApi\Session\Platform;
use Sabinus\TuyaCloudApi\Device\DeviceFactory;
use Sabinus\TuyaCloudApi\Device\SwitchDevice;
use Sabinus\TuyaCloudApi\Device\SceneDevice;
use Sabinus\TuyaCloudApi\Device\LightDevice;
use Sabinus\TuyaCloudApi\Device\CoverDevice;
use Sabinus\TuyaCloudApi\Device\ClimateDevice;

$codeReturn = [ 0 => 'OK', 1 => 'IN CACHE', 9 => 'ERROR' ];

/**
* @param String Identifiant de connexion
* @param String Mot de passe
* @param String Code pays
* @param String Plateforme (tuya ou smartlife)
* @param Float timeout des requêtes http en secondes
*/
$session = new Session($argv[1], $argv[2], '33', Platform::SMART_LIFE, 5.0);
// FACULTATIF : Change le dossier de stockage du jeton, par défaut dans sys_get_temp_dir()
$session->setFolderStorePool('/tmp');

// Initialize object API
$api = new TuyaCloudApi($session);

// Lance une découverte
$isSuccess = $api->discoverDevices();
var_dump($isSuccess);

// Retourne la liste des objets
$return = $api->discoverDevices();
var_dump($return);
$devices = $api->getAllDevices();
//var_dump($devices);


/**
* Scene
* Création des objets
*/
$device = $api->getDeviceById('1654566545484');
// Active la scene
$device->activate($api);
// Methode 1 : à partir d'un découverte
$device = $api->getDeviceById('012345678901234598');
// Methode 2
$device = new SwitchDevice($session, '012345678901234598');
// Méthose 3
$device = DeviceFactory::createDeviceFromId($session, '012345678901234598', DeviceFactory::TUYA_SWITCH);


/**
* Prise : Méthode 1
* Scene
*/
$device = $api->getDeviceById('012345678901234598');
// Allume la prise
$rep = $api->sendEvent($device->getTurnOnEvent());
// Mets à jour l'objet pour récupérer le dernier état
$device->update($api);
print 'Etat : ' . $device->getState();
$device = new SceneDevice($session, '012345678901234598');
$device->activate();


/**
* Prise : Méthode 2
* Prise
*/
$device = $api->getDeviceById('012345678901234598');
$device = new SwitchDevice($session, '012345678901234598');
// Allume la prise
$device->turnOn($api);
sleep(3);
$isSuccess = $device->turnOn();
// Eteins la prise
$device->turnOff($api);
$isSuccess = $device->turnOff();
// Mets à jour l'objet pour récupérer le dernier état
$isSuccess = $device->update();
print 'Etat : ' . $device->getState();


/**
* Lampe
*/
$device = $api->getDeviceById('012345678901234598');
$device = new LightDevice($session, '012345678901234598');
// Allume la lampe
$api->sendEvent($device->getTurnOnEvent());
sleep(3);
$isSuccess = $device->turnOn();
// Change la couleur
$api->sendEvent($device->getSetColorEvent(100, 80));
sleep(3);
$isSuccess = $device->setColor(100, 80);
// Luminosité à 50%
$api->sendEvent($device->getSetBrightnessEvent(50));
sleep(3);
$isSuccess = $device->setBrightness(50);
// Eteins la lampe
$api->sendEvent($device->getTurnOffEvent());
$isSuccess = $device->turnOff();
print 'Eteins la lampe : ' . $codeReturn[$isSuccess]; print "\n";


/**
* Volet
*/
$device = $api->getDeviceById('012345678901234598');
$device = new CoverDevice($session, '012345678901234598');
// Ferme le volet
$rep = $api->sendEvent($device->getCloseEvent());
sleep(5);
$isSuccess = $device->close();
// Stoppe le volet
$rep = $api->sendEvent($device->getStopEvent());
$isSuccess = $device->stop();
// Ouvre le volet
$rep = $api->sendEvent($device->getOpenEvent());
$isSuccess = $device->open();


/**
* Climatisation
*/
$device = new ClimateDevice($session, '012345678901234598');
// Allume la clim
$isSuccess = $device->turnOn();
// Change la température
$isSuccess = $device->setThermostat();
// Eteins la clim
$isSuccess = $device->open();
~~~

See the file `./test/exemple.php`
136 changes: 136 additions & 0 deletions RELEASE-2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# RELEASE NOTE Version 2.X

A cause des restrictions du Cloud Tuya pour limiter le nombre de requêtes, le code a du être adapté et ce dernier conserve en cache les requêtes trop fréquentes.


## Class `Session`

- Aucun changement


## Class `TuyaCloudApi`

- Suppression des fonctions *controlDevice()* et *sendEvent()*

- Ajout de la fonction de test de connexion
~~~ php
$isSuccess = $api->checkConnection();
~~~

- Ajout de la fonction *getSession()*

- La fonction *discoverDevices()* ne retourne plus la liste des objets trouvés, mais un code retour pour savoir si la requête a réussi ou provient du cache.

- En échange la fonction *getAllDevices()* retourne la liste des objets trouvés.


## Abstract Class `Request`

Nouvelle classe abstraite pour chaque type de requêtes au CLoud Tuya


### Class `DiscoveryRequest`

~~~ php
$session = new Session('login', 'password', '33', Platform::SMART_LIFE);
$api = new TuyaCloudApi($session);

// METHOD 1
$discovery = new DiscoveryRequest($session);
// Code Integer en retour (@see Sabinus\TuyaCloudApi\Request\Request)
$isSuccess = $discovery->request();
// Récupération de la réponse brute de le requête
$response = $discovery->getResponse();
// Listes des objets découverts
$devices = $discovery->fetchDevices();

// METHOD 2
// Before in v1
$devices = $api->discoverDevices();
// Now in v2
$isSuccess = $api->discoverDevices();
$devices = $api->getAllDevices();

// METHOD 3
$devices = $api->getAllDevices();
~~~


~~~ php
$session = new Session('login', 'password', '33', Platform::SMART_LIFE);
$api = new TuyaCloudApi($session);

// METHOD 1
$query = new QueryRequest($session);
// Code Integer en retour (@see Sabinus\TuyaCloudApi\Request\Request)
$isSuccess = $query->request('QueryDevice', ['devId' => '1234567890']);
// Récupération de la réponse brute de le requête
$response = $discovery->getResponse();
// Récupération des donnees
$datas = $discovery->getDatas();

// METHOD 2
$device = $api->getDeviceById('1234567890')
// Before in v1
$device->update($api);
// Now in v2
$isSuccess = $device->update();
~~~


### Class `ControlRequest`

~~~ php
$session = new Session('login', 'password', '33', Platform::SMART_LIFE);
$api = new TuyaCloudApi($session);

// METHOD 1
$query = new ControlRequest($session);
// Code Integer en retour (@see Sabinus\TuyaCloudApi\Request\Request)
$isSuccess = $query->request('turnOnOff', ['devId' => '1234567890', 'value' => 1]);
// Récupération de la réponse brute de le requête
$response = $discovery->getResponse();

// METHOD 2
$device = $api->getDeviceById('1234567890')
// Before in v1
$device->turnOn($api);
// Now in v2
$isSuccess = $device->turnOn();
~~~


## Class `Device`

Ajout du membre `Session` inclus dans les classes `Device`
~~~ php
$session = new Session('login', 'password', '33', Platform::SMART_LIFE);
$api = new TuyaCloudApi($session);

// Before in v1.x
$device = new SwitchDevice('1234567890');
$device->turnOn($api);
$device->update($api);

// Now in v2.x
$device = new SwitchDevice($session, '1234567890');
$device->turnOn();
$device->update();
~~~

Retour du succès de la commande
~~~ php
$device = new SwitchDevice($session, '1234567890');
$result = $device->turnOn();
echo $result // 0 si OK
~~~


## Class `DeviceEvent`

- Suppression de la classe et des fonctions liées dans les classes `Device`


## Class `CachePool`

- Mettre en cache la réponses des requêtes pour éviter les erreurs aux appels trop fréquents suite aux restrictions de Tuya.
3 changes: 1 addition & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
"require": {
"php": "^5.2||^7",
"guzzlehttp/guzzle": "6.5.0",
"mexitek/phpcolors": "0.*",
"symfony/filesystem": "3.*"
"mexitek/phpcolors": "0.*"
},
"autoload": {
"psr-4" : {
Expand Down
Loading

0 comments on commit 0177e53

Please sign in to comment.