Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'php'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Annonces et suggestions
  • La Home Center et ses périphériques
    • La Home Center pour les nuls
    • HC 2 & Lite
    • HC 3
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Quick App
    • Multimédia (audio, vidéo ...)
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets, piscines, ...)
    • Eclairage
    • Applications Smartphones et Tablettes
  • Autres solutions domotiques
    • Box / Logiciel
    • Modules Nice (433 & 866 MHz)
    • Modules Zigbee
    • GCE Electronics
    • Modules Bluetooth Low Energy
  • Objets connectés
    • Les Assistants Vocaux
    • Netatmo
    • Philips Hue
    • DIY (Do It Yoursel)
  • Sécurité
    • Alarmes
    • Caméras
    • Portiers
    • Serrures
  • Informatique / Réseau
    • Tutoriels
    • Matériels Réseaux
    • Matériels Informatique
    • NAS
    • Virtualisation
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

6 résultats trouvés

  1. Configuration Debian + PHP7.4 + MariaDB + PHPmyAdmin Nous allons voir comment installer un serveur web, MariaDB, PHP7.4, PHPmyAdmin afin de faire fonctionner domocharts et z-wave_network Pour ceux qui ont du matériel UNIFI vous pourrez ajouter UniFi-API-browser-master Pour cela vous devez avoir installer et configurer une distribution Debian voir ce tuto -> installation PHP 7.4 apt install ca-certificates apt-transport-https lsb-release gnupg curl nano unzip -y curl -fsSL https://packages.sury.org/php/apt.gpg -o /usr/share/keyrings/php-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/php-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list apt install php7.4 php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-intl php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-xml php7.4-xsl php7.4-zip php7.4-bz2 libapache2-mod-php7.4 -y Installation MariaDB apt install mariadb-server mariadb-client -y mysql_secure_installation Pour Debian 10 Entrez maintenant la commande mysql_secure_installation pour terminer la configuration de votre serveur MariaDB. À la première question concernant le mot de passe actuel, vous n'avez rien à taper, appuyez simplement sur Entrée. Confirmez également la question suivante concernant le changement du mot de passe root avec enter. Vous devez maintenant définir un mot de passe pour l'utilisateur root de MariaDB. Aucun caractère n'est affiché lors de la saisie, mais c'est normal. Confirmez toutes les autres questions (suppression de l'utilisateur anonyme, désactivation de la connexion racine externe pour des raisons de sécurité, suppression de la base de données de test et mise à jour des privilèges/autorisations) également avec entrée. Ensuite, le serveur MariaDB est complètement installé et configuré. Pour Debian 11 Entrez maintenant la commande mysql_secure_installation pour terminer la configuration de votre serveur MariaDB. À la première question concernant le mot de passe actuel, vous n'avez rien à taper, appuyez simplement sur Entrée. À la question suivante concernant le passage à l'authentification par socket Unix, tapez "n" et appuyez sur Entrée. Confirmez également la question suivante concernant le changement du mot de passe root avec enter. Vous devez maintenant définir un mot de passe pour l'utilisateur root de MariaDB. Aucun caractère n'est affiché lors de la saisie, mais c'est normal. Confirmez toutes les autres questions (suppression de l'utilisateur anonyme, désactivation de la connexion racine externe pour des raisons de sécurité, suppression de la base de données de test et mise à jour des privilèges/autorisations) également avec entrée. Ensuite, le serveur MariaDB est complètement installé et configuré. Installation hpMyAdmin cd /usr/share wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip unzip phpmyadmin.zip rm phpmyadmin.zip mv phpMyAdmin-*-all-languages phpmyadmin chmod -R 0755 phpmyadmin nano /etc/apache2/conf-available/phpmyadmin.conf Ajoutez le contenu suivant à ce fichier de configuration : # phpMyAdmin Apache configuration Alias /phpmyadmin /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options SymLinksIfOwnerMatch DirectoryIndex index.php </Directory> # Disallow web access to directories that don't need it <Directory /usr/share/phpmyadmin/templates> Require all denied </Directory> <Directory /usr/share/phpmyadmin/libraries> Require all denied </Directory> <Directory /usr/share/phpmyadmin/setup/lib> Require all denied </Directory> Sauvegarder et quitter a2enconf phpmyadmin systemctl reload apache2 mkdir /usr/share/phpmyadmin/tmp1/ chown -R www-data:www-data /usr/share/phpmyadmin/tmp/ Configuration Login MariaDB mysql -u root UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket'; FLUSH PRIVILEGES; exit Ajouter un utilisateur avec les droits d'accès distant ! (Optionnel) Accédez à la console MySQL: mysql -u root -p Une fois authentifié: CREATE USER '#le nom de l'utilisateur#'@'%' IDENTIFIED BY '#Le mot de passe de l'utilisateur#'; puis GRANT ALL PRIVILEGES ON *.* TO '#le nom de l'utilisateur#'@'%' WITH GRANT OPTION; puis FLUSH PRIVILEGES; puis exit; Nous allons maintenant faire un test pour voir si tout fonctionne Pour cela nous allons accédés a phpmyadmin http://xxx.xxx.xxx.xxx/phpmyadmin/ Notre machine est prête a accueillir domocharts
  2. Bonjour, Tant pis, au risque de passer pour un benêt je crée un post sur une fonctionnalité du forum que j'ai déjà utilisé et qui me résiste à présent : l'insertion de code dans mes posts. Voici ce que je fais : je me connecte à ma box j'affiche du code (ex : le LUA d'un VD) je sélectionne le code et fais un copier je vais sur mon post et je clique sur le symbole <> je sélectionne LUA je fais un coller Constats : pas de colorisation du code quand je clique sur OK je ne vois rien, hormis une ligne que je devine quand je demande la prévisualisation ça "mouline" Je précise que cela le fait quelque soit le navigateur et/ou l'OS. Pour info j'utilise principalement Safari sous macOS High Sierra et je redis que cela a déjà fonctionné pour moi. Strang isn't it Merci d'avance pour vos coups de pouces - Jean-Paul
  3. Bonjour, Le but de ce tuto sera de faire une passerelle pour les données de la netatmo vers emoncms. J'en ai profité pour améliorer le script php classique d'interface entre la netatmo et la HC2 les versions disponibles ot du mal à gérer les installations netatmo avec plusieurs modules. Ici j'ai cherché à améliorer les choses et ça fonctionne même lorsque l'on a plusieurs master device et plusieurs stations additionnelles. En effet, savoir l'ordre des modules renvoyé par netatmo dans ces conditions est un peur hard. J'ai ajouté plusieures pages de résultats au script PHP: une avec un json viewer intégré et un qui retourne le json complet. J'ai aussi optimisé pour minimiser le nombre de requêtes faites à netatmo, histoire de ne pas se faire "jeter" voici déjà la présentation de la plateforme emon CMS très puissante que j'utilise depuis plus d'un an: http://emoncms.org/site/home http://emoncms.org/site/docs/visualisations Personellement je l'utilise pour remonter mes graphiques de valeurs diverses de ma HC2 - températures - consommations eau, gaz, elec - paramètres de ma VMC (T° Vitesse, rendement etc.) J'ai partagé mon script avec un ami et comme il était enchanté, je fais l'effort de le mettre ici aussi ;-) En effet, il suffit de configurer les variables dans le VD, créer un répertoire /netatmo dans www ou web ou html, y mettre le PHP et le répertoire jsoneditor et c'est parti, les données seront remontées automatiquement à emonCMS ! Voici déjà le script côté HC2: Je l'ai mis derrière un bouton, car dans un main loop, une corruption json quelquepart et c'est tout qui plante. Ce bouton dont être cliqué via GEA ou autre scheduler toutes les 10 minutes. Voici le Virtual Device tout fait: Grosse mise à jour à ce post: http://www.domotique-fibaro.fr/index.php/topic/3929-yagda-yet-another-graphic-data-analyser-netatmo-vmc-emoncms-json-viewer/#entry63238 Netatmo_V2.vfib Attention, dans ce post ne figure que les scripts de la première version, voir plus loin dans le fil pour les versions suivantes ! ----------------------------------------------------------------------------------------- -- YAGDA - yet another graphic data analyser V2.01 -- Retreive Netatmo values for more than 2 modules, compute CO2 and push to EmonCMS -- Sebastien Jauquet -- Février 2015 -- Thanks to cedriclocqueneux, krikroff, i-magin and all contibutors to the netatmo code ----------------------------------------------------------------------------------------- -- Instructions: -- Create an free emoncms.org account -- Retrieve your Write API Key from it -- Create a Global variable (undefined) -> CO2_Max_Value to store the max value of CO2 of the house - if you dont need this, set CO2 to false (default: 0) -- Install my netatmo.php in your webserver and write his address in the ip Address of this module -- for each value you want to be pushed to emoncms, modify the section -- Push To EMONCMS -- below -- Create a block scene or use gea to click this button each 10 minutes (to avoid rejection from the api of Netatmo) local EmonCMS_Prefix = "NETATMO_" -- prefix of the id of the inpus to be created in emoncms (convenient for testing to not alter current feeds) local PushToEmonCMS = true -- true = push to emoncms - false = do not push local selfId = fibaro:getSelfId(); local thismodule=fibaro:getSelfId() local domaine = fibaro:get(selfId, 'IPAddress') local PushItem local CO2_Max_Value_Local = 0 -- if you dont need this, set CO2 to false (default: 0) local emoncms = Net.FHttp("emoncms.org",80) local emoncms_api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -- your EMONCMS WRITE api Key EmonCMS = {}; if (temperature_exterieure==nil) then temperature_exterieure = ""; end if (humidite_exterieure==nil) then humidite_exterieure = ""; end if (temperature_interieure==nil) then temperature_interieure = ""; end if (humidite_interieure==nil) then humidite_interieure = ""; end if (co2==nil) then co2 = ""; end if (pression==nil) then pression = ""; end if (bruit==nil) then bruit = ""; end if (temperature_int_mod2==nil) then temperature_int_mod2 = ""; end if (humidite_int_mod2==nil) then humidite_int_mod2 = ""; end if (co2_mod2==nil) then co2_mod2 = ""; end if (temperature_int_mod3==nil) then temperature_int_mod3 = ""; end if (humidite_int_mod3==nil) then humidite_int_mod3 = ""; end if (co2_mod3==nil) then co2_mod3 = ""; end if (temperature_int_mod4==nil) then temperature_int_mod4 = ""; end if (humidite_int_mod4==nil) then humidite_int_mod4 = ""; end if (co2_mod4==nil) then co2_mod4 = ""; end if(refreshUI==nil) then -- Loads in memory only the first occurence function refreshUI(ext, bruit, titre, tempmod, co2mod, humidmod, lastupdate, laststatus) fibaro:call(selfId,"setProperty","ui.ext.value",ext); fibaro:call(selfId,"setProperty","ui.bruit.value",bruit); fibaro:call(selfId,"setProperty","ui.titre.value",titre); fibaro:call(selfId,"setProperty","ui.tempmod.value",tempmod); fibaro:call(selfId,"setProperty","ui.co2mod.value",co2mod); fibaro:call(selfId,"setProperty","ui.humidmod.value",humidmod); fibaro:call(selfId,"setProperty","ui.lastupdate.value",lastupdate); fibaro:call(selfId,"setProperty","ui.laststatus.value",laststatus); end; end if(getExt==nil) then -- Loads in memory only the first occurence function getExt(retry) retry = retry or 0 -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo extérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=ext"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_exterieure = result.body[1].value[1][1] or "n.c"; humidite_exterieure =result.body[1].value[1][2] or "n.c"; -- variable globale pour info sms local msg = "Température extérieure : "..temperature_exterieure.."°C"; fibaro:setGlobal("tempext", msg); return true; else fibaro:debug("Netatmo EXT: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo EXT: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo EXT:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getInt(tonumber(retry+1)); else return false; end end; end if(getInt==nil) then -- Loads in memory only the first occurence function getInt(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=int"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_interieure = result.body[1].value[1][1] or "n.c"; humidite_interieure = result.body[1].value[1][3] or "n.c"; co2 = result.body[1].value[1][2] or "n.c"; pression = result.body[1].value[1][4] or "n.c"; bruit = result.body[1].value[1][5] or "n.c"; -- variable globale pour info sms fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end if(getMod2==nil) then -- Loads in memory only the first occurence function getMod2(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=mod2"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_int_mod2 = result.body[1].value[1][1] or "n.c"; humidite_int_mod2 = result.body[1].value[1][2] or "n.c"; co2_mod2 = result.body[1].value[1][3] or "n.c"; -- variable globale pour info sms -- fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT_mod2: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT_mod2: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT_mod2:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end if(getMod3==nil) then -- Loads in memory only the first occurence function getMod3(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=mod3"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_int_mod3 = result.body[1].value[1][1] or "n.c"; humidite_int_mod3 = result.body[1].value[1][2] or "n.c"; co2_mod3 = result.body[1].value[1][3] or "n.c"; -- variable globale pour info sms -- fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT_mod3: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT_mod3: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT_mod3:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end if(getMod4==nil) then -- Loads in memory only the first occurence function getMod4(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=mod4"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_int_mod4 = result.body[1].value[1][1] or "n.c"; humidite_int_mod4 = result.body[1].value[1][2] or "n.c"; co2_mod4 = result.body[1].value[1][3] or "n.c"; -- variable globale pour info sms -- fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT_mod4: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT_mod4: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT_mod4:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end function EmonCMS:Push(payloademon) payloademon = "/input/post.json?json={" .. EmonCMS_Prefix .. payloademon .. "}&apikey=" .. emoncms_api_key response, status, errorCode = emoncms:GET(payloademon); fibaro:debug("Payload: " .. payloademon) ; fibaro:debug("response: " .. response .. " Status: " .. status .. " errorcode: " .. errorCode) ; fibaro:sleep(500); end local function main() -- retrieve values from netatmo.php local resInt, resExt, resMod2, resMod3, resMod4 = false, false, false, false, false; local status, err = pcall(function () resInt = getInt(); end); fibaro:debug("Récupération des données intérieures: " .. tostring(resInt)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resExt = getExt(); end); fibaro:debug("Récupération des données extérieures : " .. tostring(resExt)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resMod2 = getMod2(); end); fibaro:debug("Récupération des données intérieures Mod2: " .. tostring(resMod2)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resMod3 = getMod3(); end); fibaro:debug("Récupération des données intérieures Mod3: " .. tostring(resMod3)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resMod4 = getMod4(); end); fibaro:debug("Récupération des données intérieures Mod4: " .. tostring(resMod4)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end refreshUI( "Ext: "..temperature_exterieure.." °C - "..humidite_exterieure.." % - "..pression.." mbar", "Bruit Rez: "..bruit.." dB", "Rez - Emilien - Thomas - Parents", temperature_interieure.." - "..temperature_int_mod2.." - "..temperature_int_mod3.." - "..temperature_int_mod4.." °C ", co2.." - "..co2_mod2.." - "..co2_mod3.." - "..co2_mod4.." ppm", humidite_interieure.." - "..humidite_int_mod2.." - "..humidite_int_mod3.." - "..humidite_int_mod4.." % ", os.date("%H:%M"), tostring(resInt).." "..tostring(resExt).." "..tostring(resMod2).." "..tostring(resMod3).." "..tostring(resMod4) ); -- Push To EMONCMS -- if PushToEmonCMS == true then payloademon = "temperature_exterieure:"..temperature_exterieure EmonCMS:Push(payloademon); payloademon = "humidite_exterieure:".. humidite_exterieure EmonCMS:Push(payloademon); payloademon = "pression:".. pression EmonCMS:Push(payloademon); payloademon = "bruit:".. bruit EmonCMS:Push(payloademon); payloademon = "temperature_interieure_Rez:".. temperature_interieure EmonCMS:Push(payloademon); payloademon = "temperature_int_mod2_Emilien:".. temperature_int_mod2 EmonCMS:Push(payloademon); payloademon = "temperature_int_mod3_Thomas:".. temperature_int_mod3 EmonCMS:Push(payloademon); payloademon = "temperature_int_mod4_Parents:".. temperature_int_mod4 EmonCMS:Push(payloademon); payloademon = "humidite_interieure_Rez:".. humidite_interieure EmonCMS:Push(payloademon); payloademon = "humidite_int_mod2_Emilien:".. humidite_int_mod2 EmonCMS:Push(payloademon); payloademon = "humidite_int_mod3_Thomas:".. humidite_int_mod3 EmonCMS:Push(payloademon); payloademon = "humidite_int_mod4_Parents:".. humidite_int_mod4 EmonCMS:Push(payloademon); payloademon = "co2_Rez:".. co2 EmonCMS:Push(payloademon); payloademon = "co2_mod2_Emilien:".. co2_mod2 EmonCMS:Push(payloademon); payloademon = "co2_mod3_Thomas:".. co2_mod3 EmonCMS:Push(payloademon); payloademon = "co2_mod4_Parents:".. co2_mod4 EmonCMS:Push(payloademon); end -- Compute Value MAX CO2 Maison (For VMC Speed VD) if CO2_Max_Value_Local == false then fibaro:debug("not calculating nor storing CO2 Max Value") else CO2_Max_Value_Local = co2 if CO2_Max_Value_Local < co2_mod2 then CO2_Max_Value_Local = co2_mod2 end if CO2_Max_Value_Local < co2_mod3 then CO2_Max_Value_Local = co2_mod3 end if CO2_Max_Value_Local < co2_mod4 then CO2_Max_Value_Local = co2_mod4 end fibaro:setGlobal("CO2_Max_Value", CO2_Max_Value_Local ) fibaro:debug("CO2_Max_Value: ".. CO2_Max_Value_Local ) end end main();
  4. pinou

    Zibasegateway Pour Hc2

    Après le calendrier Google, je me suis attaqué maintenant à ma Zibase. En effet, j'ai commencé la domotique il y a quelques temps de ça, avec une Zibase. Depuis elle ne m'a jamais quitté. Même si aujourd'hui j'ai migré (pratiquement) tous mes modules zwave sous la Home center, j'utilise toujours ma Zibase pour les devices Oregon et EnOcean essentiellement. J'ai vu passer différentes solutions permettant de récupérer les infos/valeurs de ces modules au sein de la HC2. Ceci dit, rien de satisfaisant pour moi, car les solutions sur lesquelles je suis tombé font essentiellement du pooling vers la Zibase, or j'ai besoin de temps réel. Pas pour les relevés des sondes Oregon mais pour les détecteur d'ouverture EnOcean. Je me suis donc amusé à trouver une autre solution répondant à mon besoin. Le principe Le principe est assez simple : plutôt que d'aller voir de façon périodique l'état des devices de la Zibase, je me suis dit qu'il suffit en fait "d'écouter" ce que broadcast la Zibase et de chopper dans ce flux ce qui m'interesse. Il suffit alors de passer par l'api de Fibaro pour mettre à jour les variables correspondantes dans ma HC2. Dans le détail... Il s'agit d'un script PHP que j'ai hébergé sur mon syno (mais un RPI ou toute autre machine pouvant faire tourner du PHP 24h/24 suffit). Pas besoin de configurer un serveur web puisque le script PHP tourne en mode CLI (lancé automatiquement au démarrage du syno dans mon cas). Lors du lancement du script, ce dernier va s'abonner aux messages de la Zibase. Il va donc recevoir un flux de ce type a chaque fois qu'un device remonte une info vers la Zibase : Received radio ID (<rf>433Mhz Oregon</rf> Noise=<noise>2420</noise> Level=<lev>3.4</lev>/5 <dev>Temp-Hygro</dev> Ch=<ch>2</ch> T=<tem>+18.4</tem>C (+65.1F) Humidity=<hum>45</hum>% Batt=<bat>Ok</bat>): <id>OS439218434</id> On décode alors ces données pour pouvoir mettre à jour la ou les variables associées au niveau de la HC2. Un des points délicats concerne la configuration du fichier permettant de mettre en place ce décodage. Le fichier de configuration des messages de la Zibase Ce fichier est donc un des éléments essentiels de cette solution. Il s'agit d'un fichier json (pour la facilité de lecture et construction). Il y a 2 parties dans ce fichier : Un premier élément de configuration permettant de définir les différents protocoles radio qui seront reconnus par le script. On vient dire ici, par protocol (Oregon, EnOcean, ...) et par type de device (Détecteurs, sondes température, etc.) quelles sont les données qu'il faut récupérer dans le flux correspondant. Un second élément permet de définir pour chaque device reconnu (par son ID Radio) quelles sont les variables qui seront mise a jour avec quelles données. On indiquera également si cette mise a jour doit se faire à chaque remontée d'info (exemple du détecteur), ou seulement si la donnée à été modifiée depuis la dernière mise à jour (afin de ne pas saturer la HC2 de requêtes inutiles). Autant vous prévenir tout de suite, cette configuration est chiante à souhait à mettre en place, mais bon j'ai pas trouvé plus simple et/ou plus automatisé. Ceci dit, une fois au point, on y touche plus ! Le script PHP Ce dernier vient avec un script contenant les variables de configuration dont les valeurs sont à modifier en fonction de votre installation. C'est assez explicite, je ne vais pas m'attarder dessus. Côté Home center Alors ici, il y a quelques petites choses à faire. Le plus gros problème est que je passe par l'api HTTP pour mettre à jour les variables. Or par ce biais, même si la mise à jour fonctionne, elle ne permet pas de déclencher les scènes et autres scripts qui seraient basés sur ces dernières (limitation de Fibaro ... va comprendre pourquoi ...). Du coup, j'ai implémenté la solution proposée par Jojo dans un autre post qui consiste à passer par l'intermédiaire d'un bouton de module virtuel qui vient mettre à jour la variable avec sa valeur. Bon ne pouvant pas m'amuser à créer un bouton pour chaque valeur discrète possible et imaginable, le script PHP va mettre à jour 2 variables permettant de stocker le nom de la variable finale à mettre à jour et sa valeur(1). On va ensuite déclencher le module virtuel (2) qui va récupérer ces données (3) et mettre à jour à son tour la variable désirée avec la bonne valeur (4). Et voilà , les scènes basées sur cette variable fonctionnent du coup (5) ! Je ne sais pas si vous me suivez toujours dans mon raisonnement (un peu tordu), j'essaye de vous faire un p'tit dessin pour illustrer la chose : script PHP ---------+----(1)--->zibaze_variable = "anemometre" <-. +----(1)--->zibaze_value = "3.2" <-----------+ | (3) `----(2)--->VModuleID = 99, PushButton n°1 --+ | (4) | v anemometre = "3.2" | (5) | v scene "FermetureStore" start Installation Du coup l'installation de tout ce bordel s'effectue en plusieurs étapes : A/ Pour la partie PHP il faut 1) Poser les différents fichiers dans un espace sur votre serveur et connectez vous dessus (ssh, telnet, ...) 2) Modifiez le fichier zibaseGateway_config.php et zibaseGateway.php afin d'initialiser les variables avec les bonnes valeurs (partout ou il y a des XXXX vous devez configurer en fonction de votre installation) 3) Assurez vous que la variable verbose soit positionnée à LogType::CONSOLE dans un premier temps (une fois que tout sera au point vous la changerez comme bon vous semble) 4) Lancez le script à la main php zibaseGateway.php 5) Si tout va bien, les messages reçus de la Zibase devraient s'afficher à l'écran. A vous de jouer maintenant pour mettre à jour le fichier zibaseMessages.json en conséquence. 6) Arrêtez les script (CTRL+c) et relancez le pour vérifier que la configuration est bien prise en compte correctement. B/ On passe maintenant au niveau de la Home Center 7) Déclarez les différentes variables que vous avez déclaré au point 5) 8) Déclarez les 2 variables Zibase_variable et Zibase_value (cf. fichier de configuration zibaseGateway_config.php) 9) Importez le module virtuel C/ Le test final 10) Relancez le script et vérifiez que les variables de votre HC soient bien mises à jour. Si ce n'est pas le cas, reprenez depuis le point 2) : soit vous n'avez pas initialisé vos variables correctement, soit le fichier json ne reflète pas la réalité... D/ Mode automatique Etant nouveau dans le monde des syno, j'avoue avoir un poil galéré pour que mon script php se lance automatiquement au démarrage du NAS. En gros il faut transformer ce script en deamon. 11) Tout d'abord j'ai modifié la config PHP au niveau de l'interface d'admin du NAS : Panneau de configuration > Services web > Paramètres PHP : cliquez sur personnaliser PHP openbase_dir et rajouter les chemins vers vos repertoires d'installation. Sans cette config vous risquez d'avoir des warnings/erreurs PHP lors de l'exécution. 12) J'ai créé un script SH qui permet de "deamonsier" le script PHP. Il suffit de faire un lien de ce script dans le bon répertoire : ln -s S99zibase.sh /usr/syno/etc/rc.d/S99zibase.sh Et voilà , le script sera lancé ou arrêté automatiquement au startup/shutdown de votre NAS. Bien entendu, ces différents points sont à adapter en fonction de votre config... Maintenant que tout fonctionne, il ne vous reste plus qu'a redémarrer votre NAS et vérifier que les variables HC2 soient bien mises à jour. A vous de créer des modules virtuels pour afficher l'état de vos variables dans vos interfaces... Remerciements Un gros merci à Cmoi20, auteur du projet ZiHome dont je me suis très très fortement inspiré pour mettre en place le script PHP jojo pour sa solution de mise à jour d'une variable via un module virtuel Bejamin Garel pour son sdk PHP pour la Zibase Téléchargements package PHP : zibaseGateway.zip Module virtuel : Zibase.vfib Image pour module virtuel :
  5. jjacques68

    aide script PHP

    Bonjour tout le monde... Voilà je me mets tout doucement à faire des scripts php. Là dans l'immédiat serait de faire que la HC2 se coupe lorsque mon synology s'éteint à cause d'une alerte de l'UPS. J'en suis au stade où j'arrive à l'éteindre automatiquement quand le syno s'éteint... (hyper simple mais c'est un début ) Mais je galère comme un fou pour développer ! Vous avez pas une idée d'outil pour programmer en php sur un poste de dev (Windows) avec un debug, possibilité de faire des pauses, ... ? un vrai outil quoi, mais simple !! actuellement j'ai le service "Web Station" actif dans le syno avec mon script placé dans le bon répertoire. J'édite le .php avec Notepad++, mais pour le tester je passe dans le syno via la planificateur de tâche où je lance manuellement le script ... c'est lourd !!! avec le retour d'erreur par mail - horrible !! en cherchant sur le net j'ai trouvé Wamp, EasyPHP (semble assez compliqué) ou des sites qui permettent de tester en ligne... (bof...) merci pour votre retour !
  6. blackargent

    "lien" Fibaro-Jeedom

    Alors bonjour à tous, Voici une petite contribution de ma part pour ceux qui souhaitent coupler une box jeedom à la box fibaro. Le tuto ci-dessous vous permettra de récupérer l'état de vos périphériques ZWAVE sous FIBARO via l'api et les mettra à jour sous Jeedom. Perso, mon but est d'utiliser le mode plan que je trouve intéressant. Attention, vous n'aurez pas le contrôle de vos éléments!! C'est pas bien compliqué à rajouter le contrôle si vous le désirez, mais c'est plus compliqué à mettre en place de manière automatique avec mon script ci-dessous. Vous excuserez gentiment les fôtes de francé svp! Merci d'avance. Ah, une dernière chose, chez moi ça fonctionne très bien mais il se peut que ça plante chez vous, j'ai pas testé sur d'autres installations^^ Si ça bugg, vous apprendrez à faire sans ces prochaines lignes! Toutes les manipulations se font sous Jeedom (mais pourquoi il nous met ça sur un forum FIBARO lui?! ... euh... ) Au préalable, il faut installer les plugins "Scripts" et "Virtuel" Sous Virtuel - ajouter: Il faut aller jusqu'à fibaro_XXX_10. Pensez aussi à noter le premierID. Puis dupliquez avec le bouton se trouvant en haut à droite ("dupliquer"...) 10 fois (permet 100 périphériques!) Attention, il faut s'assurer que tous les ID se suivent et qu'entre chaque périphériques il y a +3 de différence. Sinon, faut recommencer. Chez moi, ça donne ça: Plugins - scripts - ajouter Pour le script - cliquer sur "nouveau" - FibaroLink.php (l'extension est importante!!!) et coller le code ici (qui a visiblement mal apprécié le copier-coller pour sa mise en forme): Il faut remplacer inscrire l'adresse IP de votre fibaro, le mot de passe admin de votre fibaro, le premier id virtuel sous votre JEEDOM (voir plus haut), votre api sous JEEDOM et l'url de votre JEEDOM. <?php set_time_limit(120); //lance le script jusqu'à 120 secondes //info à compléter $url_fibaro ="192.168.XXX.XXX"; $admin_fibaro ="admin"; $password_admin_fibaro ="PASSWORD"; $premier_id_device_virtuel = "306"; //premier ID virtuel se trouvant dans JEEDOM $api_jeedom = "API JEEDOM"; $url_jeedom = "192.168.XXX.XXX"; //ne pas toucher ce qui suit $url_jeedom_device = "http://" . $admin_fibaro . ":" . $password_admin_fibaro . "@" . $url_fibaro . "/api/devices/"; $url_jeedom_room = "http://" . $admin_fibaro . ":" . $password_admin_fibaro . "@" . $url_fibaro . "/api/rooms"; $json_jeedom_device = file_get_contents($url_jeedom_device); $json_jeedom_room = file_get_contents($url_jeedom_room); $data_json_jeedom = json_decode($json_jeedom_device, true); $data_json_jeedom_room = json_decode($json_jeedom_room, true,300); $premier_id_device_virtuel_avec_incrementation = $premier_id_device_virtuel; $nombre_incrémentation = "0"; //compte le nombre d'élément dans le tableau $nbre_element_json_jeedom = count($data_json_jeedom); $nbre_element_json_jeedom_room = count($data_json_jeedom_room); //SCRIPT PRINCIPAL //le script commence ici for($i=5;$i<$nbre_element_json_jeedom;$i++){ //vérifie si une propriété zwavecompagny exise | qu'il y a une valeur dans les propriétés zwave | que c'est pas un plugin if(isset($data_json_jeedom[$i]['properties']['zwaveCompany']) && isset($data_json_jeedom[$i]['properties']['value']) && $data_json_jeedom[$i]['isPlugin']==false){ //change de device virtuel sous jeedom après 20 exports if ($nombre_incrémentation==1*30 || $nombre_incrémentation==2*30 || $nombre_incrémentation==3*30 || $nombre_incrémentation==4*30 || $nombre_incrémentation==5*30 || $nombre_incrémentation==6*30 || $nombre_incrémentation==7*30 || $nombre_incrémentation==8*30 || $nombre_incrémentation==9*30 || $nombre_incrémentation==10*30 || $nombre_incrémentation==11*30 || $nombre_incrémentation==12*30 || $nombre_incrémentation==13*30 || $nombre_incrémentation==14*30 || $nombre_incrémentation==15*30){ $premier_id_device_virtuel_avec_incrementation=$premier_id_device_virtuel_avec_incrementation+2; } //envoie le nom de la pièce for($j=0; $j<$nbre_element_json_jeedom_room;$j++){ if($data_json_jeedom[$i]['roomID']==$data_json_jeedom_room[$j]['id']){ file_get_contents('http://' . $url_jeedom . '/core/api/jeeApi.php?apikey=' . $api_jeedom . '&type=virtual&id=' . urlencode($premier_id_device_virtuel_avec_incrementation) . '&value=' . urlencode($data_json_jeedom_room[$j]['name'])); } } $premier_id_device_virtuel_avec_incrementation++; $nombre_incrémentation++; //envoie le nom du device à jeedom file_get_contents('http://' . $url_jeedom . '/core/api/jeeApi.php?apikey=' . $api_jeedom . '&type=virtual&id=' . urlencode($premier_id_device_virtuel_avec_incrementation) . '&value=' . urlencode($data_json_jeedom[$i]['name'])); $premier_id_device_virtuel_avec_incrementation++; $nombre_incrémentation++; //envoie la valeur à Jeedom file_get_contents('http://' . $url_jeedom . '/core/api/jeeApi.php?apikey=' . $api_jeedom . '&type=virtual&id=' . urlencode($premier_id_device_virtuel_avec_incrementation) . '&value=' . urlencode($data_json_jeedom[$i]['properties']['value'])); $premier_id_device_virtuel_avec_incrementation++; $nombre_incrémentation++; } } ?> Pour automatiser ce script, j'ai dà» utiliser le crontab en ssh sur mon pi qui héberge JEEDOM. (Les identifiants SSH sont jeedom/Mjeedom96 de base) sudo chmod +x /usr/share/nginx/www/jeedom/plugins/script/core/ressources/FibaroLink.php sudo crontab -e */3 * * * * php /usr/share/nginx/www/jeedom/plugins/script/core/ressources/FibaroLink.php EDIT (à tester): Si nouvelle version de JEEDOM, il se peut que nginx ne foncitonne plus et que jeedom tourne sur apache2. Donc les commandes ci-dessus sont à remplacer par: sudo chmod +x /var/www/html/plugins/script/core/ressources/FibaroLink.php sudo crontab -e */3 * * * * php /var/www/html/plugins/script/core/ressources/FibaroLink.php (execute toutes les 3mn - vous avez la possibilité de modifier le /3 par /1 pour executer toutes les minutes si jamais) Voilà , ca doit marcher! Pour la suite, voici un petit exemple de ce que j'ai fait: Plugins - virtuel - ajouter Voilà , j'espère que ça sera utile à quelqu'un. Si ça ne l'est pas, j'aurai juste perdu 15minutes de ma vie à vous faire ces screenshots et ce texte. Amusez-vous bien avec tout ça! Dernière chose, feel free de changer mon code comme bon vous semble et/ou d'y apporter des améliorations^^ EDIT: Pour info, vous pouvez également changer dans le script php "set_time_limit(120)" à "set_time_limit(115)" et le crontab -e à 2mn au lieu de 3mn. Je l'ai fait chez moi et ça ne semble pas utiliser trop de ressources systèmes sur ma box FIBARO ou mon PI (JEEDOM). Vous gagnerez 1 mn pour la remontée des données!
×