Nouveau Plugin Freebox

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
chrisgen
Messages : 14
Inscription : 06 janv. 2023, 22:22

Re: Nouveau Plugin Freebox

Message par chrisgen »

Bonjour
J’ ai changé récemment de box ( Livebox orange pour Freebrox) . Actuellement j’ ai donc une box Pop .Utilisateur de Domoticz depuis plusieurs années et lecteur attentif de votre forum , j’ utilisais jusqu’ alors l’ excellent script de Neutrino et Papoo en Dzvents que j’ avais adapté (très légèrement) pour se baser sur les idx .
Je viens de découvrir le plugin pour la freebox et ..le python .
D’ abord bravo et chapeau à Supermat & Ilionel
Le plugin s' est installé sans problème , mais signale une erreur lors de la création des devices players et precord lors de l’ exécution de def onStart(self) , ce qui ne l’ empêche pas de fonctionner pour le principal (pour moi.. )

Etant un néophyte en python , je me suis alors lancé après quelques lectures (mon P’tit Python..) et j’ ai mis en commentaire ( dans plugin,py ) dans onStart self._create_devices_players(f) et self._create_devices_precord(f) et dans onHeartbeat(self) self._refresh_devices_players(f) et self._refresh_devices_precord(f) .
Plus d’ erreur affiché dans le log domoticz , (mais sans les deux devices impactés bien sûr… il faut que je bosse un peu plus mon python)
Dans un deuxième temps j’ ai placé un try except dans les différentes fonctions , ce qui permet également d’ avoir un programme fonctionnel sans avoir à commenter dans onHeartbeat .
Voulant continuer mon auto-formation accélérée en python ,le débit up et down fournissant de nombreux chiffres non significatif , j’ ai également modifié ( dans freebox,py ) dans def connection_rate(self) en remplaçant
result.update({str('rate_down'): str(connection['rate_down']/1024)}) par
result.update({str('rate_down'): str(int(connection['rate_down']*100/1024)/100)})
idem pour up,,
Les débits sont donnés avec deux chiffres significatifs
Si cela peu aider et donner du grain à moudre ..
Bonne année
Keros
Messages : 4932
Inscription : 23 juil. 2019, 20:57

Re: Nouveau Plugin Freebox

Message par Keros »

Bonjour chrisgen et bienvenu sur le forum :)

Merci de nous avoir partagé tes modifications.
garycooper
Messages : 453
Inscription : 07 août 2017, 23:58

Re: Nouveau Plugin Freebox

Message par garycooper »

Merci Chrisgen pour la partage. Pour ma part j'ai installé le plugin il y a peu et je n'ai pas rencontré de problème. As-tu bien tout activé dans l'interface Freebox comme c'est précisé dans le github ?
IMPORTANT : Pour piloter le wifi, le redémarrage de la box, gérer le player ou l'alarme, il est nécessaire d'accorder des droits spécifiques au plugin. Effectivement après l'inscription, le plugin n'aura que de simples droits de consultations. Les droits de modification devront être positionnés manuellement via l'interface Freebox OS (depuis un navigateur http://mafreebox.freebox.fr) : menu "Paramètres de la Freebox" > "Gestion des accès" > "onglet Applications", sélectionner le plugin Domoticz puis cocher :

"Modifications des réglages de la Freebox" (pour permettre la gestion du wifi ou le redémarrage de la box)
"Gestion de l'alarme et maison connectée" (pour permettre la gestion de l'alarme "Freebox Delta")
"Contrôle du Freebox Player" (pour mettre la supervision du player TV)
chrisgen
Messages : 14
Inscription : 06 janv. 2023, 22:22

Re: Nouveau Plugin Freebox

Message par chrisgen »

Bonjour, oui , j' ai tout validé .. Je suis entrain de décortiquer le script pour d' abord comprendre le programme python et voir ensuite s'il n' existe pas quelque chose à modifier pour mon cas ..
chrisgen
Messages : 14
Inscription : 06 janv. 2023, 22:22

Re: Nouveau Plugin Freebox

Message par chrisgen »

Voici quelques nouvelles après avoir poursuivi mon apprentissage sur Python.. J' ai recréé un programme sur Pycharm en m' inspirant de la doc de la Freebox et du très bon travail de Supermat & Ilionel.
Le player Pop n' est pas compatible avec le plugin .. Pour une requête suivante :
https://xxxxxx.fbxos.fr:monporthttps/api/v10/player
Le json attendu est le suivant :

Code : Tout sélectionner

{
   "success": true,
   "result": [
      {
         "device_name": "Freebox Player",
         "stb_type": "stb_v7",
         "uid": "123456789012345678911234567892123",
         "reachable": true,
         "api_version": "6.0",
         "id": 11,
         "api_available": true
      }
   ]
}
J' ai obtenu : {
    "success": true,
    "result": [
        {
            "mac": "20:xx:xx:xx:xx:xx",
            "stb_type": "stb_v8",
            "last_time_reachable": 1675001396,
            "api_available": false,
            "device_name": "Freebox Player POP",
            "device_model": "fbx8am",
            "reachable": true,
            "lan_gids": [
                "ether-20:xx:xx:xx:xx:xx0"
            ]
        }
    ]
}
Comme la recherche du player se fait sur l' ui(d)... Je le shunte donc (je vais essayer de faire un test sur l' api (pour moi version10). On peut aisément récupérer l' état du player en se basant sur l' adresse mac et sa détection.
A noter que l'on peut également récupérer les appels téléphoniques entre autres ..
exemple

Code : Tout sélectionner

{
    "success": true,
    "result": [
        {
            "number": "06xxxxxxx",
            "type": "accepted",
            "id": 44,
            "duration": 286,
            "datetime": 1675005278,
            "contact_id": 0,
            "line_id": 0,
            "name": "0xxxxx",
            "new": true
        },
        {
            "number": "0xxxxx",
            "type": "accepted",
            "id": 43,
            "duration": 506,
            "datetime": 1675002574,
            "contact_id": 0,
            "line_id": 0,
            "name": "xxxxxx",
            "new": true
        },
        {
            "number": "xxxxxx",
            "type": "accepted",
            "id": 42,
            "duration": 421,
            "datetime": 1674925666,
            "contact_id": 0,
            "line_id": 0,
            "name": "xxxx",
            "new": true
        },
        {
            "number": "01xxxxxxx",
            "type": "missed",
            "id": 41,
            "duration": 32,
            "datetime": 1674921595,
            "contact_id": 0,
            "line_id": 0,
            "name": "01xxxxxx",
            "new": true
        },
        {
            "number": "04xxxxxx",
            "type": "accepted",
            "id": 40,
            "duration": 33,
            "datetime": 1674554900,
            "contact_id": 0,
            "line_id": 0,
            "name": "04xxxxxx",
            "new": false
        },
        {
Dernière modification par Keros le 29 janv. 2023, 17:56, modifié 1 fois.
Raison : Ajout des balises
chrisgen
Messages : 14
Inscription : 06 janv. 2023, 22:22

Re: Nouveau Plugin Freebox

Message par chrisgen »

Bonsoir
un petit problème , j' arrive bien à récupérer les appels téléphoniques et à les mettre dans un device text , mais je bute sur la transformation dans une method python .. en voulant transformer la date par datetime.fromtimestamp().
Voici ma def (fonction..)

Code : Tout sélectionner

    def str_call_phone(self):
         try:
            malist = []
            ls_calls = self.ls_phones()

            for appel in ls_calls:
                x = appel["datetime"]
                #z = datetime.fromtimestamp(x)
                y = appel["type"]

                test = "{}' '{}' '{}".format(appel["number"], y, x)
                malist.append(test + '<BR>')

        except:
            Domoticz.Log(f"Erreur srt_call_phone 312 " + ls_calls)
        else:
            mystr = str(malist)[1:-1]
            return mystr

Vous avez compris : avec x pas de problème ; si j' essaye z , plantage .
J' ai essayé différents formats , je ne trouve pas ; Si vous avez des lumières , merci d' avance .
Dernière modification par Keros le 07 févr. 2023, 12:35, modifié 1 fois.
Raison : Ajout des blaises [code]
chrisgen
Messages : 14
Inscription : 06 janv. 2023, 22:22

Re: Nouveau Plugin Freebox

Message par chrisgen »

Après un tour en vélo et quelques cotes , j 'ai trouvé la réponse : j' avais "oublié" datetime import * ...
Comme disait Vil1driver , google est ton ami (en l' occurrence pour moi c'est Qwant)
Cela fonctionne et affiche (pour les appels manqués par exemple)
"03xxxxx97' 'manqué' '2023-02-06 15:51:08
", "09xxxxx60' 'manqué' '2023-02-02 14:39:18
", "02xxxxxx12' 'manqué' '2023-02-02 10:28:52
", "01xxxxx32' 'manqué' '2023-01-28 16:59:55
", "03xxxxx12' 'manqué' '2023-01-20 16:46:20
", "03xxxxx02' 'manqué' '2023-01-19 18:42:38
"
Je continue..
chrisgen
Messages : 14
Inscription : 06 janv. 2023, 22:22

Re: Nouveau Plugin Freebox

Message par chrisgen »

J’ ai donc progressé dans mon apprentissage du python .. J’ ai découvert un nouveau langage qui m’ a bien amusé ..
J’ ai rajouté dans le plugin quelques fonctionnalités  pour parfaire ma compréhension du python .
Pardonnez alors mes lourdeurs dans ma programmation , le choix des couleurs dans les listes , etc..
On trouvera :
Le nombre d’ appel téléphoniques
Les appels manqués
Les appels acceptés (je n’ ai pas traités les appels sortants mais ..)
Le reset des appels téléphoniques
La liste des appareils connéctés avec IPV4 et adresses mac depuis 30 j (on peut modifier la durée en dur dans le code)
Pour l’installer :
- arrêter le plugin dans l’ interface
- faire une sauvegarde par exemple avec winscp de freebox,py et plugin,py ,(ça peut servir..)
- installer le nouveau freebox.py et plugin.py
- dans configuration autoriser l’ ajout de nouveau device
-relancer le plugin
-croiser les doigts ..
A noter que ayant une freebox pop , l’ accès du players n’ est pas fonctionnel .
J’ai donc commenté :
# self._create_devices_players(f)
#self._create_devices_precord(f)
# self._refresh_devices_players(f)
#self._refresh_devices_precord(f)


Il suffit donc de supprimer les commentaires pour retrouver les fonctionnalités pour ceux qui ne sont pas touchés par ces restrictions ..
De même , on peut commenter mes ajouts pour les réduire à ceux choisis .
Pièces jointes
Plugin modifié christiangen.zip
(15.88 Kio) Téléchargé 139 fois
chrisgen
Messages : 14
Inscription : 06 janv. 2023, 22:22

Re: Nouveau Plugin Freebox

Message par chrisgen »

Bonsoir
Pour poursuivre mon monologue , je me suis rendu compte que le reset de la liste d' appels n' intervient qu' après la durée d'un cycle déterminé au niveau du plugin soit 30s , 60s,90s etc.. en fonction du choix lors de l'installation du plugin , ce qui est parfois déroutant ici .
Il suffit de compléter la procédure def _switch_reset_phone dans plugin.py

Code : Tout sélectionner

    def _switch_reset_phone(self, f):
        try:
            f.reset_phone()
            self._refresh_devices_phone(f)
            self._refresh_devices_call_phone_missed(f)
            self._refresh_devices_call_phone_accepted(f)
        except:
            Domoticz.Log(f" Erreur dans la remise à zéro des appels ")
Le reset sera immédiat .
Si quelqu'un préfère les fichiers plugin.py et freebox.py , je peux les fournir .
Bonne lecture
Dernière modification par Keros le 09 mars 2023, 21:24, modifié 1 fois.
Raison : Ajout des balises code
manuloup
Messages : 680
Inscription : 18 févr. 2015, 13:05

Re: Nouveau Plugin Freebox

Message par manuloup »

Bonjour,

Après un passage chez Orange, me revoici chez Free avec une Freebox Delta.

Hélas pour moi, je crois que ce plugin ne fonctionne plus du tout. Voilà ce que j'obtiens au 1er démarrage :

Code : Tout sélectionner

2023-09-18 19:32:09.267  Freebox Delta: Worker thread started.
2023-09-18 19:32:09.267  Status: Freebox Delta: Started.
2023-09-18 19:32:09.267  Status: Freebox Delta: Entering work loop.
2023-09-18 19:32:09.414  Status: Freebox Delta: Initialized version 2.1.4, author 'supermat & ilionel'
2023-09-18 19:32:14.420  Freebox Delta: onStart called
2023-09-18 19:32:14.420  Error: Freebox Delta: OnStart error: could not convert string to float: 'null'
2023-09-18 19:32:14.421  Error: Freebox Delta: Traceback (most recent call last):
  File "/home/pi/domoticz/plugins/PluginDomoticzFreebox/plugin.py", line 630, in onStart
  File "/home/pi/domoticz/plugins/PluginDomoticzFreebox/plugin.py", line 294, in init
Synology DS920+ avec VM Debian, RFplayer, Aeon Labs Z-Stick Gen5, Everspring ST814 Temperature Sensor, Everspring SF812 Smoke Detector, 4x Fibaro Wallplug, Aeon Zwave Miniremote , Teleinfo USB
Répondre