Commande SOMFY TAHOMA avec l’API locale

mais c’est super ça

Je viens de pousser une beta qui corrige :

  • pb type des commandes infos setClosure
  • possibilité de déplacer les commandes dans le panel des cammandes des équipements

Bonne soirée à tous et à demain
@chris94440

2 « J'aime »

Et alors tu auras le droit d’avoir ton tag #plugin-somfylocalapi

Mais je viens de voir que tu as déjà sauté le pas : SOMFY LOCAL API :+1:

Non ça fait un pti moment qu’il est sur le store mais pas validé encore …

1 « J'aime »

petite question
dans les volets il n’y a pas de refresh (comme dans le plugin klf)… c’est parce que la commande n’existe pas chez somfy

Merci

Hello
Refresh pour faire quoi ?

etre sur que la commande est correctement passé .
avec klf apres 10sec je regarde si la commande a été correctement effectuée

dans le cas de ton plugin ce n’est surement pas utile (je suis en train de migrer mes volets virtuels vers ton plugin)

Je sais pas comment tu gères ta domotique mais avec une app comme Jeedomconnect tu vois en direct l’évolution de ton device

homekit uniquement (pour siri et raccourcis)
par ex le portail ne se met pas a jour rapidement (ouvert/fermé et ce n’est deja pas rapide dans l’app tahoma de somfy).
et souvent dans les scenarios je lance un refresh

Normalement aucun besoin avec ce plugin mais on peut en discuter…là je crois que je pool toutes les secondes
Tu observés une remonte d’information lente ?

1 « J'aime »

Sur volet non
Sur portail oui mais sur l’app TaHoma c’est mauvais aussi pour être honnête

Salut à tous,
@chris94440 , j’ai pas eu le temps ni de tester ton plugins, ni de voir ton codage mais je connais le problème de @stanthewizzard pour l’avoir rencontré en optimisé.

Voici la partie de mon script pour récupérer le portail +/- correctement:

Config:

  • Mise à jour des infos générales de tous les périphériques IO: 60sec
  • Délai avant d’actualiser les infos suite à une action (Ouverture/Fermeture/Stop): 90sec

Cette config me permet d’avoir un retour d’info 3 à 4 fois dans une période de 2min.

Commande attaché à la fin d’une action:

$url = "https://" .$ip_address. "/enduser-mobile-web/1/enduserAPI/exec/apply";
  
  //Commandes a Envoyer
  $commandName = "advancedRefresh";
  $parameters = "p1";

Script du Listener:

$url = "https://" .$ip_address. "/enduser-mobile-web/1/enduserAPI/events/" . $Register_Listener_ID ."/fetch";

.
.
.

foreach ($data as &$data_IO_URL) {
        $IO_Device_URL = $data_IO_URL["deviceURL"];
        $IO_Device = substr($IO_Device_URL, strrpos($IO_Device_URL, "/") + 1); //Recherche la valeur après le dernier dernier slash
        
        if ($data_IO_URL["deviceStates"][0]["name"] == "core:ManufacturerSettingsState") {
                    
          switch ($data_IO_URL["deviceStates"][0]["value"]["current_position"]) {
            case 51200:
              $current_position = 0; //Ferme
              break;
            case 55303:
              $current_position = 25; //Pieton
              break;
            case 54272:
              $current_position = 50; //Ouverture Partiel
              break;
            case 0:
              $current_position = 100; //Ouvert
              break;
          }
                      
            $Device_Data = Jeedom_Ask_Device_Data($ID_Commands);
          
          foreach ($Device_Data as $row) {
            if ($row["Somfy_IO_ID"] == $IO_Device) { //Action si le numéro IO est dans la liste des périphériques demandés en paramètre
              Update_Into_Jeedom_Device_state($IO_Device,$row["Chemin_Etat"],$current_position);
              break;
            }
          }        
        }else{
          log::add('script', 'debug', "Get_Last_Info OK / No Data Found to Update with 'IO_Device':" . $IO_Device);

        }
      }

Si toutefois ça peut t’aider a améliorer les choses…
A ta dispo

ton script effectivement est interessant.
Je n’ai mon portail IO que depuis lundi et je n’ai qu’un retours d’etat binaire avec (open/closed)
Merci :slight_smile:

Édit: j’ai remarqué qu’en lançant l’app TaHoma (v2) ça forçait l’actualisation du statut portail

Moi le daemon pool les event toutes les secondes alors on est quasi en temps réel …par contre je n exécuté pas la commande advancedrefresh après chaque exécution…je vais regarder pour le faire et qu’elle est son impact
Sans elle tu n’avais pas tous les retour d’état notamment pour les portes de garage c’est bien cela ?

1 « J'aime »

Tu as cette inf, ocore:ManufacturerSettingsState, dans les commandes de te ton équipement ?

COOL
Si je l’ai mais j’ai l’impression que somfy ne renvoit cet etat que si on demande le portail (par leur widget dans l’app ou en ayant la visu sur l’accessoire)

1 « J'aime »

oui cette commande existe

peut etre que c’est la fonction advancedRefresh qui permet cela … je vais voir pour l’implémenter …
PEux tu vider les logs du plugin, actionner ton portail depuis le plugin … attendre un peu et m’envoyer les logs stp

1 « J'aime »

[2023-10-26 10:48:52][INFO] : Client connected to [127.0.0.1:45100]
[2023-10-26 10:48:52][INFO] : Message read from socket: b'{"deviceId":"2363","action":"execCmd","deviceUrl":"io:\/\/1201-4430-6743\/4160700","commandName":"open","parameters":"","name":"open","execId":"18866eaf-67e9-483c-8610-90bd76ee5738","apikey":""}'
[2023-10-26 10:48:52][INFO] : Client disconnected from [127.0.0.1:45100]
[2023-10-26 10:48:52][INFO] : == action execute command ==
[2023-10-26 10:48:52][INFO] : Send to jeedom : {'execIdEvent': '{"deviceId": "2363", "execId": "d399bd5f-26da-441f-be85-171e53568214"}'}
[2023-10-26 10:48:53][INFO] : Send to jeedom : {'eventItem': {'name': 'ExecutionRegisteredEvent', 'execId': 'd399bd5f-26da-441f-be85-171e53568214', 'actions': [{'command': 'open', 'execId': '04b64170-af87-4d70-9e5f-7b0ae61f3e97', 'state': 'INITIALIZED', 'deviceURL': 'io://1201-4430-6743/4160700', 'rank': 0}]}}
[2023-10-26 10:48:53][INFO] : Send to jeedom : {'eventItem': {'name': 'ExecutionStateChangedEvent', 'oldState': 'INITIALIZED', 'execId': 'd399bd5f-26da-441f-be85-171e53568214', 'newState': 'IN_PROGRESS'}}
[2023-10-26 10:48:55][INFO] : Send to jeedom : {'eventItem': {'deviceURL': 'io://1201-4430-6743/4160700', 'deviceStates': [{'type': 11, 'name': 'core:ManufacturerSettingsState', 'value': {'current_position': 54272}}], 'name': 'DeviceStateChangedEvent'}}
[2023-10-26 10:48:55][INFO] : Send to jeedom : {'eventItem': {'deviceURL': 'io://1201-4430-6743/4160700', 'deviceStates': [{'type': 3, 'name': 'core:OpenClosedPedestrianState', 'value': 'unknown'}], 'name': 'DeviceStateChangedEvent'}}
[2023-10-26 10:48:59][INFO] : Client connected to [127.0.0.1:51138]
[2023-10-26 10:48:59][INFO] : Message read from socket: b'{"deviceId":"2363","action":"execCmd","deviceUrl":"io:\/\/1201-4430-6743\/4160700","commandName":"close","parameters":"","name":"close","execId":"d399bd5f-26da-441f-be85-171e53568214","apikey":""}'
[2023-10-26 10:48:59][INFO] : Client disconnected from [127.0.0.1:51138]
[2023-10-26 10:49:00][INFO] : == action execute command ==
[2023-10-26 10:49:00][INFO] : Send to jeedom : {'execIdEvent': '{"deviceId": "2363", "execId": "00ce9090-ee79-40e5-8a08-9efb47344786"}'}
[2023-10-26 10:49:00][INFO] : Send to jeedom : {'eventItem': {'failureType': 'CMDCANCELLED', 'command': {'failureType': 'CMDCANCELLED', 'command': 'open', 'execId': '04b64170-af87-4d70-9e5f-7b0ae61f3e97', 'state': 'FAILED', 'rank': 0, 'deviceURL': 'io://1201-4430-6743/4160700'}, 'execId': 'd399bd5f-26da-441f-be85-171e53568214', 'name': 'CommandExecutionStateChangedEvent', 'state': 'FAILED', 'rank': 0, 'CommandName': 'open', 'deviceURL': 'io://1201-4430-6743/4160700'}}
[2023-10-26 10:49:00][INFO] : Send to jeedom : {'eventItem': {'name': 'ExecutionRegisteredEvent', 'execId': '00ce9090-ee79-40e5-8a08-9efb47344786', 'actions': [{'command': 'close', 'execId': '73db2d00-acb9-4d99-9b4e-47b133dd3880', 'state': 'INITIALIZED', 'deviceURL': 'io://1201-4430-6743/4160700', 'rank': 0}]}}
[2023-10-26 10:49:00][INFO] : Send to jeedom : {'eventItem': {'failureType': 'CMDCANCELLED', 'oldState': 'IN_PROGRESS', 'execId': 'd399bd5f-26da-441f-be85-171e53568214', 'name': 'ExecutionStateChangedEvent', 'newState': 'FAILED'}}
[2023-10-26 10:49:01][INFO] : Send to jeedom : {'eventItem': {'name': 'ExecutionRegisteredEvent', 'execId': '00ce9090-ee79-40e5-8a08-9efb47344786', 'actions': [{'command': 'close', 'execId': '73db2d00-acb9-4d99-9b4e-47b133dd3880', 'state': 'INITIALIZED', 'deviceURL': 'io://1201-4430-6743/4160700', 'rank': 0}]}}
[2023-10-26 10:49:01][INFO] : Send to jeedom : {'eventItem': {'name': 'ExecutionStateChangedEvent', 'oldState': 'INITIALIZED', 'execId': '00ce9090-ee79-40e5-8a08-9efb47344786', 'newState': 'IN_PROGRESS'}}
[2023-10-26 10:49:24][INFO] : Send to jeedom : {'eventItem': {'name': 'ExecutionStateChangedEvent', 'oldState': 'IN_PROGRESS', 'execId': '00ce9090-ee79-40e5-8a08-9efb47344786', 'newState': 'COMPLETED'}}
[2023-10-26 10:49:24][INFO] : Send to jeedom : {'eventItem': {'deviceURL': 'io://1201-4430-6743/4160700', 'deviceStates': [{'type': 11, 'name': 'core:ManufacturerSettingsState', 'value': {'current_position': 51200}}], 'name': 'DeviceStateChangedEvent'}}
[2023-10-26 10:49:24][INFO] : Send to jeedom : {'eventItem': {'deviceURL': 'io://1201-4430-6743/4160700', 'deviceStates': [{'type': 3, 'name': 'core:OpenClosedPedestrianState', 'value': 'closed'}], 'name': 'DeviceStateChangedEvent'}}

Open puis Close

Pour info:
si je reste dans ton plugin
Open
ca passe assez vite en unknown (puisque pas de retours d’etat en pourcentage d’ouverture)
Close
ca met un peu de temps à passer en close

Dans ton plugin le retours d’etat est somme toute assez rapide et parfaitement gérable
Le pb c’est que le unknown doit perturber homebridge

C’est pas ça que je veux … je veux voir les events qui sont récupéré …
vide les logs
Fait un open … attend qu’il soit ouvert
puis fait un close …attend qu’il soit fermé

et envoi moi en MP les logs stp