-
Compteur de contenus
5 384 -
Inscription
-
Dernière visite
-
Jours gagnés
80
Tout ce qui a été posté par BenjyNet
-
Captainigloo Est Dans La Place
BenjyNet a répondu à un(e) sujet de CaptainIgloo dans Nouveau ? Présentez-vous
Non je pense pas, t'es pas professionnel... et puis c'est un projet intéressant, un kickstarter àla française Pour ma part j'espère que tu ne me considères pas comme un plagieur http://www.domotique-fibaro.fr/index.php/topic/678-passerelle-enocean-fhem/ Je voulais rajouter quelques trucs comme la config du clavier en FR et la modification eth0 pour une ip fixe. S'il y a un soucis dit le moi, je supprimerai le post. -
Captainigloo Est Dans La Place
BenjyNet a répondu à un(e) sujet de CaptainIgloo dans Nouveau ? Présentez-vous
Salut seb ! Ravis de te voir sur le forum. -
Topic unique Fibaro FGBS-321 Module Universel
BenjyNet a répondu à un(e) sujet de Moicphil dans Modules Fibaro
Elles sont numériques les sondes Jerry ! Elles ont chacune une adresse ! -
Bon, update du 1er thread. C'est long !
-
Hey les pollueurs de thread, vous voulez pas en ouvrir un pour discuter de vos travaux ?
-
Oui et moi j'ai aussi un soucis là dessus parce que j'ai un FGBS avec 4 sondes sauf que les sondes, je ne sais pas où les mettre L'avantage du capteur Enocean c'est que je peux le déplacer dans la pièce, le mettre à hauteur d'homme, etc.. Et si je change l'emplacement de mes meubles, je n'aurais pas un capteur qui risque de se retrouver derrière une armoire. En fait c'est bien les capteurs filaires mais je trouve ça difficile à poser pour un fonctionnement optimum.
-
Oui et ça n'a rien de compliqué, je l'ai déjàfait pour certains montages.
-
Si c'est possible Jerry mais tu te vois mettre des transfos partout dans la maison ? Au dessus de tes capteurs de portes, de fenêtre, dans chaque pièce où tu veux une température ? C'est un truc de fou !
-
Arf moi aussi ça vient de me planter l'ampli. Il faut que je regarde le code, j'ai un Socket connection time out.
-
Effectivement Krikroff, il n'y aura rien de stratégique, il sera làuniquement pour permettre des relevés de températures/humidités et consommation. Toute la partie scénario/action est réservée au HC2/Zwave. Le but est de virer toutes ces p****n de piles qui coûtent un bras !
-
Yep ! Bon FHEM est installé en suivant le tuto de Sebastien sur domotique-info. D'ailleurs pour ceux qui souhaite le suivre, il y a quelques trucs qu'il faudrait connaitre et qui ne sont pas expliqués. Bon, j'ai la sonde qui a été reconnue tout de suite mais maintenant je suis bloqué, je ne sais plus quoi faire Va falloir que je cherche sur le net... Je vous tiens au jus...
-
Ce thread est une "copie" de l'article de Sébastien Joly du blog domotique-info. Il y a quelques ajouts sur lesquels je me suis coincé les dents. 1. Première chose - le matériel un Raspberry Pi model B une carte SD de 8Go un module GPIO EnOcean Pi une alimentation micro USB un boitier pour le protéger Sur la photo on peut voir un connecteur SMA et une antenne 868MHz qui viennent en substitution de l'antenne présente sur le module GPIO pour augmenter la portée. J'ai également à ma disposition un capteur de température et d'humidité de chez Vitec. 2 - Préparer la carte SD avec l'OS (Raspbian Wheezy) Rien d'extraordinaire, il faut récupérer la dernière image officielle Raspbian Wheezy qui est stockée au format .zip, il faudra donc la décompresser pour obtenir un fichier .img qui est le format image de la distribution. Récupérer ensuite l'utilitaire Win32 Disk Imager pour pouvoir installer la distribution sur votre carte SD. Au lancement on obtient cette fenêtre : Il suffit alors de sélectionner l'image de la distribution (Image File), le lecteur où il y a la carte SD (Device) puis de cliquer sur Write. On attend et lorsque c'est fini, il n'y a plus qu'à insérer la carte SD dans le raspberry. 3 - Premier démarrage Tout d'abord, monter le tout. On emboîte le module EnOcean Pi sur la broche GPIO. On connecte un clavier USB, un écran HDMI, on vérifie que la carte SD est bien insérée, on met le tout dans une boite et on branche l'alimentation USB. Voilà ce que ça donne la boite ouverte. Etape suivante : on observe gentiment ce qui défile sur l'écran... tout un tas de ligne blanche sur fond noir incompréhensible pour le commun des mortels (c'est du linux, pour ceux qui connaissent ça leur parlera). On arrive maintenant à la partie configuration de base de l'OS. La fenêtre raspi-config apparaît et il faut maintenant faire dans l'ordre... 1 - Étendre le système de fichier à toute la carte SD en sélectionnant : 1 Expand Filesystem 2 - Changer les paramètres de langues pour adapter le système à notre langue, le français : 4 Internationalisation Options 2.1 - On change d'abord les Locales du système pour du français : I1 Change Locale Dans la liste on se met sur le en_GB qui est coché et on appuie sur espace pour le décocher. En utilisant la même méthode, on coche comme sur la capture. Pour se déplacer sur OK il suffit d'appuyer sur la touche Tabulation puis entrée pour valider Ok. On continue pour configurer les langues du système en sélectionnant fr_FR.UTF-8 puis Ok. 2.2 - On change ensuite le fuseau horaire pour le mettre sur Paris : I2 Change Timezone 2.3 - On passe ensuite le clavier en AZERTY (car au départ il est en QWERTY) : I3 Change Keybord Layout Je n'ai pas de capture d'écran alors dans l'ordre vous faites : Generic 1052-key (Int1) Pc puis Other, French, French, The default for the keybpard layout, No compose key et enfin No. 3 - Activer la possibilité de connexion par SSH :8 Advanced Options 4 - On termine la configuration en se plaçant sur Finish grâce à la touche Tabulation. A ce stade l'OS est configuré, il doit redémarrer (si ce n'est pas le cas taper : sudo reboot). Après le reboot, il faudra se loguer avec le login pi et le mot de passe raspberry s'il n'a pas été changé (dans le 2 Change User Password). Si vous voulez de nouveau avoir accès à raspi-config il suffit de taper, une fois loggé : sudo raspi-config 4 - Configuration du réseau Suite au reboot et à la connexion avec les identifiants ci-dessus, nous devons obtenir l'écran suivant La configuration du réseau sous Raspbian se passe dans le fichier /etc/network/interfaces. Il faudra le modifier pour avoir une ip fixe qui permettra par la suite d'accéder à distance en SSH à notre raspberry. On évite ainsi d'avoir un écran et un clavier de branché dessus 4.1 - Cas n°1 : connexion filaire Pour modifier le fichier il faut taper en ligne de commande : sudo nano /etc/network/interfaces Dans le fichier vous devez avoir : auto lo iface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp Quelques explications sur ces lignes : auto lo : va démarrer l'interface automatiquement lors de la séquence de boot iface lo inet loopback : définition de l'interface loopback 127.0.0.1 iface eth0 inet dhcp : l'interface eth0 (port réseau RJ45 du raspberry) sera configuré par DHCP, il obtiendra donc directement son adresse par le réseau (IP dynamique). Le reste est pour la configuration du wifi, nous verrons cela plus tard. Il s'agit maintenant de mettre une adresse ip fixe, rien de plus simple, il faut modifier le fichier comme suit : auto lo iface lo inet loopback iface eth0 inet static adress 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.254 allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp Les 2 seuls lignes qui sont intéressantes : adress : c'est l'ip que vous donnez à votre raspberry gateway : c'est l'ip de votre passerelle vers internet (ici l'adresse de ma freebox). Pour enregistrer et quitter le fichier il faut appuyer sur Ctrl+X et répondre oui à l'écrasement. Il ne reste plus qu'à redémarrer l'interface réseau avec les commandes ifdown eth0 puis ifup eth0. Votre raspberry est accessible à l'adresse que vous avez spécifiée. 4.2 - Cas n°2 : connexion wifi Il faut tout d'abord mettre un dongle wifi sur le port USB du raspberry. Le plus simple est de prendre du matériel que l'on sait déjà compatible comme par exemple cette clé TP-Link et pour être sur qu'elle sera reconnue par raspbian il suffit de rebooter son raspberry si on l'a installée Rpi allumé. Il ne reste plus qu'à modifier le fichier qui va bien en tapant : sudo nano /etc/network/interfaces Comme vu précédemment il nous appartient de changer quelques lignes et cette fois-ci nous allons le faire sur la partie wifi et non RJ comme suit : auto lo iface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0 iface wlan0 inet static adress 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.254 wpa-ssid "mon SSID" wpa-psk "mon mot de passe" iface default inet dhcp Les 4 seuls lignes qui sont intéressantes : adress : c'est l'ip que vous donnez à votre raspberry gateway : c'est l'ip de votre passerelle vers internet (ici l'adresse de ma freebox). wpa-ssid : c'est le SSID de votre réseau wifi donné par votre box (ou routeur) wpa-psk : c'est le mot de passe pour pouvoir se connecter à votre réseau wifi Pour enregistrer et quitter le fichier il faut appuyer sur Ctrl+X et répondre oui à l'écrasement. Il ne reste plus qu'à redémarrer l'interface réseau avec les commandes ifdown eth0 puis ifup eth0. Votre raspberry est accessible en wifi à l'adresse que vous avez spécifiée. A partir de maintenant il n'est plus nécessaire d'avoir un clavier + écran branché à notre raspberry. Vous pouvez les débrancher et utiliser votre ordinateur pour accéder à distance à notre passerelle. 5 - Accès à distance par SSH Le protocole SSH va nous permettre de nous connecter à notre raspberry à partir d'une autre machine. Ici je vais vous prendre le cas d'une machine sous windows qui va utiliser le logiciel d'accès à distance Putty. L'avantage de Putty c'est qu'il n'a pas besoin d'installation. C'est un simple exécutable que vous pouvez emmener partout, sur une clé USB par exemple. Pour le télécharger c'est par ici. Après avoir lancé l'exécutable il s'agira de le paramétrer en suivant les copies d'écran ci-dessous : Attention dans Host Name (or IP adress) il conviendra de rentrer l'IP que vous avec paramétrée juste avant dans le 4. de ce tuto. On ne touche pas au reste et on clique sur Open. On rentre en login pi et on appuie sur entrée puis en mot de passe raspberry et on appuie sur entrée. Si tout c'est bien passé vous devriez avoir la copie d'écran ci-dessous et être connecté sur votre raspberry. 6 - Mise à jour de la distribution et installation de FHEM Nous allons tout d'abord vérifier que notre distribution est à jour en tapant : sudo apt-get update Puis : sudo apt-get upgrade Si vous avez la version la plus récente de tous les paquets vous aurez : Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait 0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour. Sinon il vous posera une question : Do you want to continue [Y/n] ? Le Y étant en majuscule cela signifie que c'est l'option validée par défaut et qu'il nous suffira donc d'appuyer sur entrée. L'ensemble des paquets se met à jour il suffit d'attendre. Une fois que vous avez de nouveau la main, nous allons installer FHEM. Rien de plus simple, nous allons utiliser le script fournit par Sebastien de domotique-info : Taper : wget http://domotique-info.fr/wp-content/uploads/2014/04/domotique-info-fhem-setup.txt -O fhem-setup.sh Rendre le fichier exécutable : sudo chmod +x fhem-setup.sh Exécuter le script : sudo sh fhem-setup.sh Puis redémarrer la machine : sudo reboot A ce stade, FHEM est installé, vous serez déconnecté de Putty. Il faut attendre que le raspberry redémarre. 7 - Accéder à FHEM Pour accéder à FHEM, ouvrez un navigateur et taper dans la barre d'adresse http://<PI-de-la-passerelle>:8083 et vous tomberez sur la page de FHEM. Alors avant d'aller plus loin, j'ai en ma possession des capteurs de température et d'humidité O2line blanc de chez Trio2Sys, relativement petit (80x25x17 mm) et qui ressemble à ça : Nous allons tout d'abord cliquer sur Event monitor à gauche pour tomber sur une page où il y a rien à par écrit Events : Nous sortons ensuite le capteur de son emballage et nous le posons à la lumière pour qu'il reprenne des force et se charge un peu. Après quelques minutes avant même d'avoir touché quoi que ce soit vous devriez voir déjà remonter des informations qui ne sont pas forcément très explicite et pourtant notre capteur n'est toujours pas déclaré dans l'interface. Magique non ? Si vous ne voyer rien, taper dans la barre au dessus set TCM310_0 teach 300 (vous avez 5min pour réaliser ce qui suit ci-dessous). Pour que le capteur soit correctement reconnu il faut le passer en mode "apprentissage". Pour cela il faut déclipser la plaque arrière et appuyer sur LRN (abréviation de LEARN). On voit cette fois-ci que le capteur est correctement reconnu, qu'il utilise le protocole EEP A5-04-01 et qu'il est fabriqué par Trio 2 Sys. Après quelques instants, les informations devraient cette fois être correctement remontées. Dans mon cas ici, il fait 26 degrés sous ma lampe halogène de bureau et l'humidité de la pièce est de 50%. Pour être sur que tout s'enregistre correctement, cliquez sur Save config à gauche. 8 - Mise à jour de FHEM Régulièrement des mises à jour de FHEM sont effectuées pour que le logiciel puisse communiquer avec un maximum de capteurs/actionneurs sur différents protocoles. Il faudra donc le mettre à jour pour être sà»r d'avoir la dernière version. Il se peut que lors de l'achat d'un module Enocean, celui-ci ne soit pas reconnu mais une mise à jour de FHEM peut éventuellement régler ça. Je dis bien éventuellement car dans certain cas, tant que le module n'est pas inclus dans la base de FHEM, la configuration automatique ne pourra se faire et il faudra jouer alors avec les sub Type (mais c'est une autre histoire, je développerai en cas de besoin). Pour mettre à jour FHEM nous utiliserons encore Putty mais cette fois pour se connecter en Telnet, port d'écoute de FHEM sur notre Raspberry pi. Dans un premier temps il faut configurer Putty pour avoir les retours à la ligne automatique. Il suffit de se rendre dans Terminal puis cocher Implicit CR in every LF Après avoir cliqué sur Session, pour se connecter il faut rentrer l'IP de notre passerelle, cocher Telnet et fixer le port à 7072. On peut alors cliquer sur Open. La fenêtre noir de terminal apparaît, si vous n'avez pas le prompt fhem>, appuyez plusieurs fois sur entrée pour l'obtenir. Pour mettre à jour, tapez update et patientez. Une fois terminé, fermez la fenêtre Putty, FHEM est à jour. 9 - Push des valeurs des capteurs vers la HC2 Rien de bien compliqué, nous allons demander à FHEM d'envoyer les valeurs de nos variables par une requête cURL dans notre HC2. Tout d'abord, il faut créer 2 variables dans le HC2 pour notre capteur de température et d’hygrométrie. J'ai créé TempSalledeBain et HumSalledeBain pour que cela reste explicite (attention à ne pas mettre d'espace ou de caractères spéciaux, faites au plus simple, que des lettres, sinon ça peut poser des problèmes pour la suite). Pour faire remonter les valeurs il va falloir maintenant mettre les mains dans le cambouis et modifier le fichier de configuration de FHEM. Avant cela, il faut rendre le fichier de configuration modifiable en tapant dans la barre du haut : attr WEB editConfig 1 Ensuite, il faut cliquer sur Edit Files Puis sur fhem.cfg Comme nous avons déjà notre capteur de déclaré vous devriez trouver en bas dans le fichier ces quelques lignes (j'ai rajouter et organiser avec des commentaires pour bien séparer mes capteurs) : # Capteur Salle de bain T°/H # Définition du capteur define EnO_sensor_0180840F EnOcean 0180840F attr EnO_sensor_0180840F IODev TCM310_0 attr EnO_sensor_0180840F manufID 02C attr EnO_sensor_0180840F room EnOcean attr EnO_sensor_0180840F subType roomSensorControl.01 define FileLog_EnO_sensor_0180840F FileLog ./log/EnO_sensor_0180840F-%Y.log EnO_sensor_0180840F attr FileLog_EnO_sensor_0180840F logtype text attr FileLog_EnO_sensor_0180840F room EnOcean Et nous allons lui rajouter ces 3 lignes (dont une ligne commençant par # qui est un commentaire pour savoir ce que la suite fait) pour l'envoi des données : # Push des relevés vers la HC2 define TempSalledeBain notify EnO_sensor_0180840F.* { my $temp = ReadingsVal("EnO_sensor_0180840F","temperature", "");; system("curl --silent --output \'/dev/null\' --request PUT --data \'{\"value\": \"$temp\"}\' --user admin:MOT_DE_PASSE_ADMIN_HC2 http://IP_HC2/api/globalVariables/TempSalledeBain")} define HumSalledeBain notify EnO_sensor_0180840F.* { my $hum = ReadingsVal("EnO_sensor_0180840F","humidity", "");; system("curl --silent --output \'/dev/null\' --request PUT --data \'{\"value\": \"$hum\"}\' --user admin:MOT_DE_PASSE_ADMIN_HC2 http://IP_HC2/api/globalVariables/HumSalledeBain")} Pour finir, il suffit de créer un VirtualDevice pour visualiser nos données, je l'ai appelé Sonde Temp/Hum Ici j'ai 2 affichages, un avec un label (pour être visible sur mon smartphone par exemple) et un en log pour avoir un module simple et ne pas surcharger l'affichage du Home. Le petit code dans le VD qui va bien (dans le main loop) et en cadeau l'icone en pièce jointe. local vId = fibaro:getSelfId(); local temp = fibaro:getGlobalValue("TempSalledeBain"); local hum = fibaro:getGlobalValue("HumSalledeBain"); fibaro:call(vId, "setProperty", "ui.Label1.value", temp .. "° / " .. hum .. "%"); fibaro:log(temp .. "° / " .. hum .. "%"); Cerise sur la gâteau, dans FHEM il est possible de créer des courbes pour visualiser l'évolution de ses variables, rien de bien compliqué, ça s'appelle Create SVG plot dans les fileLog. On obtient ceci : Edit : Voir également le post de Lazer sur l'utilisation de l'API pour mettre à jour des devices typés température ou motion (cas d'un module Qubino par exemple, dont on n'utiliserait pas les entrées inters et la sonde de température) http://www.domotique-fibaro.fr/index.php/topic/678-passerelle-enocean-fhem/page-8#entry124196 Le gros avantage est que cette fois la température apparaît dans l'interface comme un vrai device et non comme une VG (visualisation du graphe dans le panneau de température).
-
Fait moi plusieurs relevés de machine pour confirmer cette courbe. Après je te bricolerai un truc pour checker tes cycles.
-
Après c'est tout con, tu récupères du json, je te laisse lire ces 2 articles : http://domotique-info.fr/2013/11/ipx800-v3-supporte-desormais-le-json/ http://domotique-info.fr/2013/06/suivi-energetique-eco-device-et-fibaro/ Il te faudra adapter mais si t'y arrives pas, je te filerai un coup de main.
-
Jerry, il te faut : - un eco device ou autre qui peut compter des impulsions http://www.domadoo.fr/produit,3614,1,GCE-Electronics--Module-IP-de-suivi-de-consommation-Eco-Devices.htm - un compteur d'eau à impulsion (tu fais gaffes eau chaude/froide) http://www.domadoo.fr/produit,2693,1,GIOANOLA--Compteur-d-eau-froide-avec-sortie-impulsion-(1-imp--1-litre).-raccord-3-4-.htm http://www.domadoo.fr/produit,2694,1,GIOANOLA--Compteur-d-eau-chaude-avec-sortie-impulsion-(1-imp--1-litre).-raccord-3-4-.htm
-
Great, welcome here but this is a french forum, please speak french. Thanks.
-
où donc ? je vais liker aussi
-
Moi ce que j'aimerai sur l'appli. c'est d'avoir la possibilité de créer des widgets pour un accès rapide sur le tel, àtelle ou telle scène, tel ou tel module.
-
Et bien tu as la réponse, les bubendorff ne sont pas compatibles àcause de leur fonctionnement à4 phases.
-
Ok, par contre attend un peu lorsque tu l'auras débranché genre 5 min quoi. Puis tu rebranches, tu le rallumes et tu attends que les infos remontent correctement au VD. S'il y a encore des soucis, je pense qu'il faudra augmenter le polling jusqu'àtrouver un comportement optimum.
-
Huhu, Shad il aime se faire des amis
-
@Domodial J'ai trouvé une boucle infinie dans le main loop qui plante l'ampli. Donc tu dois dans l'ordre : modifier le code du main loop avec celui-ci, éteindre l'alimentation complète de ton ampli (tu débranches) et tu rebranches. ------------------------------------------------------------- -- Plugin for Onkyo TX-NR626 receiver -- Use port 60128 -- Version 1.1.1 (04-16-2014) -- Author : Jean-christophe Vermandé modified by BenjyNet ------------------------------------------------------------- -- Change log 1.1.0 to 1.1.1 : -- Infinite loop in main loop rectified --------------------------------------------------------c[_]- fibaro:debug('Start process Main Loop v1.1.1'); local _deviceIp = fibaro:get(fibaro:getSelfId(), "IPAddress"); local _devicePort = fibaro:get(fibaro:getSelfId(), "TCPPort"); local _maxRetryProcess = 5; local _trace = false; -- Polling time (here = 1 min), you can change this local _polling = 1*60*1000; -- Name of your inputs, you can change this input = { [00] = "VIDEO1 - VCR/DVR", [01] = "VIDEO2 - CBL/SAT", [02] = "VIDEO3 - GAME/TV - GAME", [03] = "VIDEO4 - AUX", [04] = "VIDEO5 - AUX2", [05] = "VIDEO6 - PC", [16] = "BD/DVD", [34] = "PHONO", [35] = "TV/CD", [36] = "TUNER - FM", [37] = "TUNER - AM", [38] = "TUNER", [41] = "FRONT USB", [42] = "REAR USB", [43] = "NET", [46] = "BLUETOOTH" }; -- Name of your listenning modes, you can change this mode = { [00] = "STEREO", [01] = "DIRECT", [02] = "SURROUND", [03] = "GAME-RPG", [04] = "THX", [05] = "GAME-ACTION", [06] = "GAME-ROCK", [08] = "ORCHESTRA", [09] = "UNPLUGGED", [10] = "STUDIO-MIX", [11] = "TV LOGIC", [12] = "ALL CH STEREO", [13] = "THEATER-DIMENSIONAL", [14] = "GAME-SPORT", [15] = "MONO", [17] = "PURE AUDIO", [19] = "FULL MONO", [22] = "AUDISSEY DSX", [23] = "WHOLE HOUSE MODE", [35] = "STAGE", [37] = "ACTION", [38] = "MUSIC", [46] = "SPORTS", [64] = "STRAIGHT DECODE", [65] = "DOLBY EX", [66] = "THX CINEMA", [67] = "THX SURROUND EX", [68] = "THX MUSIC", [69] = "THX GAMES", [80] = "THX CINEMA 2, U2/S2/II/S CINEMA", [81] = "THX MUSIC MODE, THX U2/S2/II/S MUSIC", [82] = "THX GAMES MODE, THX U2/S2/II/S GAMES", [128] = "PLII/PLIIx MOVIE", [129] = "PLII/PLIIx MUSIC", [130] = "NEO:6 CINEMA/NEO:X CINEMA", [131] = "NEO:6 MUSIC/NEO:X MUSIC", [132] = "PLII/PLIIx THX CINEMA", [133] = "NEO:6/NEO:X THX CINEMA", [134] = "PLII/PLIIx GAME", [137] = "PLII/PLIIx THX GAMES", [140] = "NEO:6/NEO:X THX GAMES", [141] = "PLII/PLIIx THX MUSIC", [142] = "NEO:6/NEO:X THX MUSIC", [144] = "PLIIz HEIGHT", [148] = "PLIIz HEIGHT + THX CINEMA", [149] = "PLIIz HEIGHT + THX MUSIC", [150] = "PLIIz HEIGHT + THX GAMES", [151] = "PLIIz HEIGHT + THX U2/S2 CINEMA", [152] = "PLIIz HEIGHT + THX U2/S2 MUSIC", [153] = "PLIIz HEIGHT + THX U2/S2 GAMES", [154] = "NEO:X GAME", [160] = "PLIIx/PLII MOVIE + AUDISSEY DSX", [161] = "PLIIx/PLII MUSIC + AUDISSEY DSX", [162] = "PLIIx/PLII GAME + AUDISSEY DSX", [167] = "DOLBY EX + AUDISSEY DSX" }; -- Device parameters device = device or { id = fibaro:getSelfId(), power = 0, mute = 0, volume = 0, source = "unknown", lst_mode = "unknown" }; -- Functions' declarations ------------------------------------ function trace(value) if (_trace) then return fibaro:debug(tostring(value)); end end function split(pString, pPattern) local Table = {} local fpat = "(.-)" .. pPattern local last_end = 1 local s, e, cap = pString:find(fpat, 1) while s do if s ~= 1 or cap ~= "" then table.insert(Table,cap) end last_end = e+1 s, e, cap = pString:find(fpat, last_end) end if last_end <= #pString then cap = pString:sub(last_end) table.insert(Table, cap) end return Table end function getPowerState(retry) local retry = retry or 0; local cmd = nil; --notify user trace("Request Power STATUS, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1PWRQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then trace("Power STATUS command successufully transmited."); fibaro:sleep(50); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do local result = _tcpSocket:read(); -- check if result is equal than command to confirm success trace("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "PWR%d%d"); if (cmd ~= nil) then trace(cmd); local pwr_value = tonumber(cmd:sub(4,5)); trace("Result OK : PWR" .. pwr_value); return pwr_value; else trace("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return nil; else if retry < _maxRetryProcess then trace("Retry process, please wait..."); fibaro:sleep(2000); return getPowerState(retry + 1); end return nil; end end function getVolumeLevel(retry) local retry = retry or 0; local cmd = nil; --notify user trace("Request Volume LEVEL, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1MVLQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then trace("Request Volume LEVEL command successufully transmited."); fibaro:sleep(50); retry = 0; -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do local result = _tcpSocket:read(); -- check if result is equal than command to confirm success trace("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "MVL.."); if (cmd ~= nil) then local vol_value = tonumber(cmd:sub(4, 5), 16); trace("Result OK : MVL" .. vol_value .. cmd); return vol_value; else trace("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return getVolumeLevel(0); else if retry < _maxRetryProcess then trace("Retry process, please wait..."); fibaro:sleep(2000); return getVolumeLevel(retry + 1); end return nil; end end function getSource(retry) local retry = retry or 0; local cmd = nil; --notify user trace("Request SOURCE, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1SLIQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then trace("Request SOURCE command successufully transmited."); fibaro:sleep(50); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do local result = _tcpSocket:read(); -- check if result is equal than command to confirm success trace("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "SLI.."); if (cmd ~= nil) then local src_value = tonumber(cmd:sub(4, 5), 16); trace("Result OK : SLI" .. src_value .. cmd); return src_value; else trace("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return getSource(0); else if retry < _maxRetryProcess then trace("Retry process, please wait..."); fibaro:sleep(2000); return getSource(retry + 1); end return nil; end end function getMute(retry) local retry = retry or 0; local cmd = nil; --notify user trace("Request MUTE, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1AMTQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then trace("Request MUTE command successufully transmited."); fibaro:sleep(50); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do local result = _tcpSocket:read(); -- check if result is equal than command to confirm success trace("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "AMT.."); if (cmd ~= nil) then local mute_value = tonumber(cmd:sub(4,5)); trace("Result OK : AMT" .. mute_value .. cmd); return mute_value; else trace("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return getMute(0); else if retry < _maxRetryProcess then trace("Retry process, please wait..."); fibaro:sleep(2000); return getMute(retry + 1); end return nil; end end function getLstMode(retry) local retry = retry or 0; local cmd = nil; --notify user trace("Request LISTENING MODE, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1LMDQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then trace("Request LISTENING MODE command successufully transmited."); fibaro:sleep(50); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do local result = _tcpSocket:read(); -- check if result is equal than command to confirm success trace("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "LMD.."); if (cmd ~= nil and cmd ~= "LMDN/") then local mode_value = tonumber(cmd:sub(4,5), 16); trace("Result OK : LMD" .. mode_value .. cmd); return mode_value; else trace("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return getLstMode(0); else if retry < _maxRetryProcess then trace("Retry process, please wait..."); fibaro:sleep(2000); return getLstMode(retry + 1); end return nil; end end function getAudioOutMode(retry) local retry = retry or 0; local cmd = nil; --notify user trace("Request AUDIO OUT MODE, #" .. retry .. " please wait..."); --send packet bytes, errorCode = _tcpSocket:write("ISCP\0\0\0\16\0\0\0\12\1\0\0\0\!1IFAQSTN\0x1A\r\n"); -- check for error if errorCode == 0 then trace("Request AUDIO OUT MODE command successufully transmited."); fibaro:sleep(50); -- amplifier sould return the string sent if success while (cmd == nil and retry < _maxRetryProcess) do local result = _tcpSocket:read(); -- check if result is equal than command to confirm success trace("Result's lenght : " .. result:len() .. " " .. type(result)); cmd = string.match(result, "IFA(.+)\n"); if (cmd ~= nil and cmd:len() > 5) then trace(cmd .. cmd:len()); local audio_value = split(cmd,","); trace("Result OK : LMD" .. audio_value[5] .. cmd); return audio_value[5]; else trace("Result fail, retry process, #" .. retry .. " please wait..."); retry = retry + 1; end end return "STRAIGHT DECODE"; else if retry < _maxRetryProcess then trace("Retry process, please wait..."); fibaro:sleep(2000); return getAudioOutMode(retry + 1); end return nil; end end function refreshInterface() if (device.power == true) then local label = fibaro:getValue(device.id, "ui.lblPowerStatus.value"); if (label == "OFF") then fibaro:call(device.id, "setProperty", "ui.lblPowerStatus.value", "ON"); end -- update UI volume if (device.volume ~= nil) then fibaro:call(device.id, "setProperty", "ui.VolumeSlider.value", device.volume); end -- update UI input if (device.source ~= nil) then fibaro:call(device.id, "setProperty", "ui.lblInput.value", input[device.source]); end -- update UI mute if (device.mute ~= nil) then if (device.mute == 1 and label:match("Mutting") == nil) then local labelUpdated = label .. " - Mutting"; fibaro:call(device.id, "setProperty", "ui.lblPowerStatus.value", labelUpdated); elseif (device.mute == 0 and label:match("Mutting") == "Mutting") then local labelUpdated = label:gsub("%s[-]%sMutting", ""); fibaro:call(device.id, "setProperty", "ui.lblPowerStatus.value", labelUpdated); end end -- update UI mode if (device.lst_mode ~= nil) then fibaro:call(device.id, "setProperty", "ui.lblCurrentMode.value", device.lst_mode); end else fibaro:call(device.id, "setProperty", "ui.lblPowerStatus.value", "OFF"); fibaro:call(device.id, "setProperty", "ui.lblInput.value", "unknown"); fibaro:call(device.id, "setProperty", "ui.VolumeSlider.value", "0"); fibaro:call(device.id, "setProperty", "ui.lblCurrentMode.value", "unknown"); end return true; end function main() -- prepare a global counter if (_count == nil) then fibaro:debug("HC2 start script at " .. os.date()); _count = 0; end --notify begin of process fibaro:debug("Start process #".._count..", please wait..."); --open the socket if (_tcpSocket == nil) then _tcpSocket = Net.FTcpSocket(_deviceIp, _devicePort); --set the read timeout _tcpSocket:setReadTimeout(1000); end -- Query power status local power = getPowerState(); if (power == 1) then device.power = true; fibaro:debug("Power is ON "); fibaro:sleep(55); -- Query volume device.volume = getVolumeLevel(); fibaro:debug("Volume is "..device.volume); fibaro:sleep(55); -- Query source device.source = getSource(); fibaro:debug("Source selected is "..input[device.source]); fibaro:sleep(55); -- Query mute device.mute = getMute(); fibaro:debug("Mute is set to "..device.mute); fibaro:sleep(55); -- Query mode local temp = getLstMode(); fibaro:debug("Listenning Mode is set to "..mode[temp]); if (temp == 64) then fibaro:sleep(55); device.lst_mode = getAudioOutMode(); else device.lst_mode = mode[temp]; end elseif (power == 0) then device.power = false; fibaro:debug("Power is OFF "); else fibaro:debug("No Response... check later..."); end -- call refresh interface to repaint UI refreshInterface(); -- dispose socket if (_tcpSocket ~= nil) then -- close socket _tcpSocket:disconnect(); -- destroy object _tcpSocket = nil; end --notify end of process fibaro:debug("Process #".._count.." is finish!"); -- increment global counter _count = _count + 1; end -- Start main loop process main(); -- Sleep fibaro:sleep(_polling); -- EOF Main loop
-
Oui, je suis Shad sur le coup, les blocs ça devient indigeste dès que tu veux un truc un peu tordu
-
Te te prends ça http://www.prozic.com/www2/info_promo_E27FLASH-OM_STROBOSCOPES.html?gclid=CIGBqpHvlr0CFUsUwwodHbMA-w Tu colles un relais dessus que t'actives en cas d'alarme et t'inquiètes pas que tu le verras clignoter
-
Vous noterez tous le lag qu'il y a chez Domodial : temps de réaction = 10 jours Pour info tu regardes ma signature, j'ai fait un petit script rapide "tumble dryer"