Powerlink 3 : Alarme Visonic

Bonjour à tous,

Je ré-ouvre le sujet relatif aux alarmes Visonic les plus récentes (Powermaster) et le module Powerlink 3.

Ce module ne fonctionne pas comme le Powerlink 2. Il existe d’ailleurs un fil de messages relatifs au Powerlink 2 et les modèles Visonic Powermax.

Le sujet relatif au Visonic Powerlink 3 avait été notamment abordé par BLRPERES et froggy, qui je l’espère pourront nous donner des nouvelles de leurs développements.

Pour rappel:

-BLRPERES a développé un script qui lui permet de lire l’état des capteurs de l’alarme avec une mise à jour toutes les minutes, en simulant une connexion via internet comme s’il se connectait avec l’application powerlink Go. Sans doute quelque chose qui se rapproche de ce développement ?

-froggy a trouvé le moyen d’accéder aux status de sa centrale via powerlink 3, depuis son réseau local, en utilisant l’adresse IP de sa centrale et le port 8181 (qui faut activer via le mode installateur dans les menus : 03: Centrale → 80: DOM. TIER. PART → activer ).
Il a publié ceci sur Github: les infos sur l’API et le code d’un scénario permettant de connaitre différents états de l’alarme.

1 « J'aime »

Salut
Message reçu
Je vais essayer de retrouver mes petits et je déballerai tout ici

Merci, ce serait parfait si tu pouvais aussi nous rappeler ce que tu arrives à faire: uniquement recevoir les status de l’alarme (marche, arrêt …) ou également à recevoir les informations des capteurs de présence.
Autre question: est-ce que ton script fonctionne un peu comme ceci ?

salut

pour ma part j’étais parti de ça (il me semble qu’il y a fait une ou deux erreurs dans le code mais bon)
py for powerlink3

ensuite il suffit de faire un script dans jeedom comme ceci

script pour récupérer le statut de l’alarme

# Conectar ao servico
import alarm

def state():
    hostname  = 'visonic.tycomonitor.com'
    user_code = '1234'
    user_id   = '2d978962-daa6-4e18-a5e5-b4a99100bd3b'
    panel_id  = '123456'
    partition = 'P1'
    api       = alarm.API(hostname, user_code, user_id, panel_id, partition)

    # Chegar se esta logado
    api.login()

    if api.is_logged_in():
        #print('Logged in')
        message = api.get_status()

        state = message['partitions'][0]['state']
        print(state)
        return state
    else:
        print('Not_logged_in')

if __name__ == '__main__':
    state()

pour Armer l’alarme

# Conectar ao servico
import alarm

def arm():
    hostname  = 'visonic.tycomonitor.com'
    user_code = '1234'
    user_id   = '2d978962-daa6-4e18-a5e5-b4a99100bd3b'
    panel_id  = '123456'
    partition = 'P1'
    api       = alarm.API(hostname, user_code, user_id, panel_id, partition)

    # Chegar se esta logado
    api.login()

    if api.is_logged_in():
        #print('Logged in')
        api.arm_away('ALL')
    else:
        print('Not_logged_in')

if __name__ == '__main__':
    arm()


et en bonus on peut meme aller chercher les états des ouvrants

#conectar ao servico
import alarm

def state():
    hostname  = 'visonic.tycomonitor.com'
    user_code = '1234'
    user_id   = '2d978962-daa6-4e18-a5e5-b4a99100bd3b'
    panel_id  = '123456'
    partition = 'P1'
    api       = alarm.API(hostname, user_code, user_id, panel_id, partition)

    # Chegar se esta logado
    api.login()

    if api.is_logged_in():
        #print('Logged in')
        message = api.get_all_devices()

        yard = message[0]['troubles']
        print(yard)
        return yard
    else:
        print('Not_logged_in')

if __name__ == '__main__':
    state()


ou encore un autre capteur

# Conectar ao servico
import alarm

def state():
    hostname  = 'visonic.tycomonitor.com'
    user_code = '1234'
    user_id   = '2d978962-daa6-4e18-a5e5-b4a99100bd3b'
    panel_id  = '123456'
    partition = 'P1'
    api       = alarm.API(hostname, user_code, user_id, panel_id, partition)

    # Chegar se esta logado
    api.login()

    if api.is_logged_in():
        #print('Logged in')
        message = api.get_all_devices()

        frontdoor = message[1]['troubles']
        print(frontdoor)
        return frontdoor
    else:
        print('Not_logged_in')

if __name__ == '__main__':
    state()

bien penser à faire le scénario qui va bien pour rafraichir toutes ces valeurs (et c’est un peu le probleme de trouver le bon compromis entre rafraichissement rapide sans avoir d’erreur de connexion trop nombreuses)

Bonjour et merci pour ta réponse.
Je vais essayer de recréer le script et de le faire fonctionner.
Merci!

Salut,

De mon côté, j’ai eu très peu de temps pour retoucher ce que j’avais fait.

Je suis arrivé en parallèle au même résultat que BLRPERES via un scénario en full php. Je me suis concentré sur la lecture pour le moment. Je sais récupérer l’état des couvrants et l’état général de l’alarme (prête, armée, …).
En requêtant directement via postman, j’arrive à faire à peu prêt tout, même récupérer les images des caméras, … Rien de magique, je suis reparti de l’appli mobile officielle.

Mon idée était de mixer les deux apis : celle « interne » et celle « internet ». L’interne a l’avantage de pourvoir être sollicitable à volonté même si j’ai des erreurs régulières. L’api internet permet de faire beaucoup plus de choses, notamment avoir l’état de chaque capteur et donc les ouvrants.

L’idée que je vais essayer de mettre en oeuvre donc :

  • se baser sur des virtuels représentant chaque capteur et la centrale
  • appeler l’api interne chaque minute pour connaitre l’état de l’alarme : prête, alarme, défauts, …
  • si état == non pret, appeler l’api internet pour avoir l’état des ouvrants.
  • en complément on peut appeler l’api internet chaque heure pour récupérer les évènements
    On peut même imaginer historiser les évènements, se plugger au plugin images, … mais il faut se pencher sur le développement des plugins

Donc, y a plus qu’à…

Merci pour ton retour !

De mon côté, étant novice sur le sujet, je n’ai pas encore réussi à faire fonctionner les scripts de BLRPERES, même si j’ai essayé d’intégrer ça via le plugin « script » de Jeedom. Je vais essayer de nouveau ce week-end de confinement…

Salut BLRPERES,
J’ai essayé d’intégrer tes scripts, en modifiant avec mes paramètres alarme (user code, panel id, une nouvelle GUID Free Online GUID Generator), via le plugin script, mais je n’y arrive pas. En sauvegardant, j’obtiens une erreur de type


et en testant la requête, je n’obtiens rien …
Je n’ai sûrement pas une bonne utilisation de ce plugin. :thinking: A moins qu’il faille procéder différemment ?

Pourrais-tu me donner un exemple de la marche à suivre pour créer un de tes scripts dans Jeedom ?

Ce serait top !

Bonjour
Visonic a été acheté par DSC, il me semble. Est-ce qu’on pourrait voir une compatibilité prochaine avec la centrale Powerlink de DSC anciennement Visionic ?

Salut,

J’y connais rien en php mais vu l’erreur, tu as un ( qui traine quelque part dans alarme_test ou alors un problème d’import de ton fichier alarm_test. Je ne sais pas si l’un est la cause de l’autre.

Commence par vérifier le chemin de ton alarm_test vis à vis du chemin dans l’erreur.

Bonjour
Le script que j’utilisais ne marche plus suite à un changement de l’api Visonic.

Je continue d’investiguer

Bonjour,

je possède également une alarme Visonic équipée d’un Powerlink 3. J’ai pu suivre vos avancements sur la préparation d’un plugin fonctionnel nous permettant d’interagir avec nos systèmes Jeedom. Je n’ai pas suffisamment de connaissances pour participer à la modification du plugin mais j’ai pu contacter l’entreprise derrière l’application Connect Alarm. Je vous copie donc l’extrait de la réponse par mail que j’ai pu avoir :

SP Intrusion Support Global Email Routing intrusion-support@tycoint.com

Dear Customer,

we are happy to provide to JEEDOM any information to integrate their system with our products.

Kind Regards,

Gianluca Ritrovati
Global Technical Support Team
Technical Support / Security Products
Johnson Controls

Le support technique semble donc ouvert à aider au paramétrage de l’api. Si l’un d’entre vous se sens prêt à reprendre les démarches… Je peux aussi me faire le lien avec le support technique.

Peut-être pourrions nous envoyer les fichiers en notre possession, en précisant pour chacun les étapes où nous avons une erreur ?

Dans l’attente de vos retours !

1 « J'aime »

Salut,

J’ai développé une première version d’un plugin jeedom se basant sur l’API JSON RPC exposée par le powerlink 3.
Pour le moment, j’arrive à consulter l’état de l’alarme (armée / désarmée / mémoire d’alarme / prête / niveau de la batterie / …) et à contrôler l’armement.
Il reste pas mal de boulot pour rendre le tout plus robuste (gestion des erreurs), plus user friendly (un widget, des remontés d’infos plus exploitables, …) et plus sécurisé (sécuriser l’armement / désarment, …) mais en l’état cela semble fonctionner.

La prochaine étape est de publier sur GIT et sur le market en béta. Si vous êtes intéressés, faites signe. J’essayerai de vous aider sur les problèmes rencontrés mais il faudra être tolérant car je fais ça à mes heures perdues et j’en ai finalement assez peu.

Je vais essayer de contacter visonic pour avoir de la doc.

2 « J'aime »

Salut.

Je serai intéressé par ta version du plugin.
Dès que tu auras mis sur Git tiens nous au courant.

Merci

J’ai poussé le code ici : https://github.com/Froggy-AA/visonicpowerlink3.
Logiquement la doc est incluse au bon endroit dans le plugin. Au cas où elle est là : https://github.com/Froggy-AA/visonicpowerlink3/blob/main/docs/fr_FR/index.md Lisez là, il y a pas mal d’infos importantes notamment sur la sécurité.

Cool merci. Je testerai dès que je peux.

Je suis super intéressé
Je vais tester
Merci

bonjour, j’ai installé puis paramètre
mais je n’ai pas l’impression que ca communique
de plus, il y a un élément auquel je n’ai pas accès, même en installateur, c’est le paramètre 80 du paramètre 03 centrale

[2021-10-27 18:35:57][ERROR] : getPanelStatuses - Error curl : Failed to connect to 192.168.1.200 port 8181: Connection refused
[2021-10-27 18:35:57][DEBUG] : getBatteryLevel - Begin
[2021-10-27 18:35:57][ERROR] : getBatteryLevel - Error curl : Failed to connect to 192.168.1.200 port 8181: Connection refused
[2021-10-27 18:35:57][DEBUG] : getBatteryLevel - End