Aller au contenu

sebcbien

Membres confirmés
  • Compteur de contenus

    4 188
  • Inscription

  • Dernière visite

Tout ce qui a été posté par sebcbien

  1. Le projet crowdfunding d'une box pour Home assistant avec chip ZigBee et rien pour le zwave. On peut l'ajouter avec un d'ongle bien sûr mais ça en dis long sur le marché. L'histoire se répète, ce n'est pas le meilleur qui gagne mais le plus abordable. Triste... https://www.theverge.com/2021/9/16/22678088/home-assistant-amber-smart-home-hub-specs-release-date-price avec traduction Française: https://translate.google.com/translate?sl=auto&tl=fr&u=https://www.theverge.com/2021/9/16/22678088/home-assistant-amber-smart-home-hub-specs-release-date-price
  2. sebcbien

    Zwave n'a décidément plus fort la cote et c'est bien dommage

    Bien sûr, je ne connais pas la HC3, mais j'imagine que c'est dans le même style que la HC2, en mieux fini, plus joli, avec plus d'assistants, un peu plus compliqué que l'app Philips hue mais pas trop. Ceci dit, HA propose aussi du plug & play: Home Assistant Green - Home Assistant (home-assistant.io) Il va détecter automagiquement tout ce qui est à sa portée et va permettre de l'intégrer de base très facilement, je n'imagine pas trop de différences avec la HC3, le plus difficile étant souvent les manipulations a faire sur les modules en eux même pour le pairage (et là le Zigbee est souvent bien plus facile). Il y a des dashboards automatiques qui se créent et libre a l'utilisateur de créer des zones, des dashboards, des cartes spécifiques, des automations, mais ce sont des cerises sur le gâteau.
  3. sebcbien

    Zwave n'a décidément plus fort la cote et c'est bien dommage

    Précision: A la pointe pour moi ça veut dire une solution qui me permet d'intégrer facilement tout ce que je voudrais - Machine à laver/séchoir AEG - BMW I3 - Mercedes Sprinter - Installation électrique Victron - Chargeur de VE - Netatmo sans s'arracher les cheveux/acheter autre chose. - Interfacer la HC2 et l'alarme Integra comme passerelle ZWAVE - Quasiment tous les devices Zigbee du marché sans devoir me limiter à ceux supportés - Intégration de WAZE qui me calcule et me préviens si je risque d'être en retard - TTS de qualité, en francais, et facile vers mes sonos - Commande Kodi, Ampli Maranz et Nvidia shield - Video hub Dahua - Onduleur solaire Enphase - Volets Somfy - Unify Dream Router - Xiaomi humidificateur et chauffages - VMC - Robot tondeuse Worx - etc etc etc. Faites votre choix: https://www.home-assistant.io/integrations/#all Si vous trouvez un truc supporté par Fibaro et pas par HA, dites toujours. ET surtout une réactivité excellente pour mettre à jour les plugins quand un fabriquant change ses api, ou qu'un nouveau modèle arrive. C'est d'ailleurs le problème d'api Netatmo qui a déclenché ma migration, sur home assistant tout tournait, ici on a passé des heures/jours/semaines à tourner en rond et Jeedom à sorti un nouveau plugin a moitié torché qui ne supportait pas les thermostats.. Solution sous Fibaro (si je ne me trompe pas) acheter autre chose... heuuu oui, non, merci, j'ai 10 devices Netatmo et la régulation des thermostats est la meilleure que j'ai trouvée. p.s. Il y a qq semaines, AEG s'est imaginé qu'il pouvait "interdir" l'utilisation de son API, à "attaqué" le dev d'un plugin HA qui a jeté l'éponge directement. Guess what: 1 semaines après un nouveau plugin, forké, proposé par un "anonyme", patché et fonctionnel était disponible... OpenSource Powaaaa !
  4. sebcbien

    Zwave n'a décidément plus fort la cote et c'est bien dommage

    Voici l'état du marché en 2016: Monde: France:
  5. sebcbien

    Zwave n'a décidément plus fort la cote et c'est bien dommage

    Je prends la mouche , ah bon ? c'est ton interprétation, je ne prends pas la mouche, j'apporte de l'eau au moulin... Peut être que les graphiques que j'ai postés font que TU prends la mouche ? Bref, Comme tu ramène Jeedom, je vais me répéter pour la Xième fois: Jeedom, ça fait plus de 7 ans qu'il tourne chez moi, il est très bien, pour moi il m'a permis d'étendre les fonctionnalités de ma domotique là ou la HC2 était hummm ... "limitée" en plugins. Home assistant en était a ses début, il est maintenant mature et me rends plus de services que Jeedom car il y a des plugins pour absolument TOUT. Maintenant Jeedom est en perte de vitesse, ça se voit depuis quelques temps, moins de mises à jour, certains plugins délaissées, plus de temps de réaction dans les mises à jour etc. ... Au point que je parierais bien que Loïc, le dev principal de Jeedom à un Home assistant chez lui J'ai toujours voulu être a la pointe, la HC2 l'était a ses débuts, ensuite (pour moi) Jeedom est passé devant question plugins (mais pas interface) et maintenant HA est loin devant question plugins et très satisfaisant question interface. Je n'ai pas peur de bouger, d'essayer, tester, adopter, je ne me marie pas avec une solution, une marque, ça ne me dérange absolument pas de critiquer les solutions que j'ai et quand je trouve mieux je bouge (et je le dis en espérant aider d'autres plus frileux). Je gardais encore Jeedom pour quelques fonctions sympas, mais surtout pour ses capacités de statistiques à long terme, cela à été implémenté dans HA il y a quelques mois, donc ses jours sont comptés ... Il faut être flexible, rester "loyal" a une marque ne fait que des perdants. Bonne journée
  6. sebcbien

    Zwave n'a décidément plus fort la cote et c'est bien dommage

    "Truc de Barbu", "si c'est toujours à la mode", ... Je re-pose ça là, on sais jamais que ça parle à certaines personnes... https://trends.google.com/trends/explore?date=today 5-y&q=jeedom,fibaro,"home assistant",lifedomus,domoticz Heureusement qu'il y a encore les modules Fibaro sinon je ne sais pas si il y aurait 2 hits ... voilà voilà. Quant au sujet de ce fil, Zigbee, je l'ai implémenté avec le plugin home Assistant Zigbee2MQTT (en plus du pont Hue) et je dois dire que c'est impressionnant de compatibilité, stabilité, vitesse, facilité, choix de modules, autonomie des batteries, prix ... J'ai maintenant plus de devices Zigbee que de Zwaves et tous les deux sont aussi stables l'un que l'autre. https://www.zigbee2mqtt.io/supported-devices/
  7. sebcbien

    Mon Test Home Assistant (Hass.io)

    Bonjour, Voilà, c'est fait, comme promis je teste Home assistant. Raison principale: pouvoir utiliser BMW ConnectDrive (seule solution domotique à le proposer) et essayer de voir si le plugin Satel pourrait remplacer ma dépendance à la HC2 edit: solution plus simple ci-dessous sur Syno. Sur VirtualBox: J'ai installé ça dans une VM Virtualbox, les seuls points pour que ça fonctionne bien: utiliser boot UEFI dans system et configurer le réseau en mode bridge/pont Les images sont ici: https://www.home-assistant.io/hassio/installation/ Voici le tuto dont je me suis inspiré, (pour Vmware mais donne les infos qu'il faut pour virtualbox) https://www.ivobeerens.nl/2019/01/15/install-home-assistant-hass-io-in-vmware-workstation/ Une fois la VM bootée, il suffit de taper "root" et enter Ensuite taper "login" et enter Ensuite "ip a" et enter et sous l'interface enpxxx on trouvera l'ip Dans le browser, ensuite, taper l'ip http://192.168.xx.xx:8123/ et vous arriver à l'interface de création de compte. Bon, belle impression, c'est propre, c'est réactif. Une fois votre compte créé, il vous propose d'ajouter vos premiers "modules" J'ai ajouté mon pont hue et clic click click c'est tout créé partout c'est beau, les pièces avec :-) Jusqu'ici, niveau de barbe requis: 1mm Temps complet à chercher pour tout ça: 1h Ce sujet étant dédié à une installation de HASS et bmw connected drive discussion sur les solution de mobilité vertes Voici un résumé: 1) installer le package HASS sur son syno 2) se connecter à l'ip du syno:8123 3) créer son login 4) installer le plugin file-editor, et node-red 5) ajouter ça dans configuration.yaml via le plugin file-editor # BMW bmw_connected_drive: mycar: username: xxxxxxxxxxx@xxxxxxx.com password: xxxxxxxxxxxxx region: "rest_of_world" 6) Redémarrer HASS (oui il faut souvent redémarrer complètement... pas encore très 99.9% availability 7) Faire ses graphiques Node-Red 8) Virtuel Fibaro: BMW_i3.vfib ETTTTTTTTTTTT VOILAAAAA !
  8. sebcbien

    Mon Test Home Assistant (Hass.io)

    Moi pour le moment: - j'ai quasiment tout migré de Jeedom vers Home Assistant, bye bye Jeedom, ça n'évolue plus du tout et a mon avis le créateur de Jeedom a un home assistant qui tourne chez lui et il a compris qu'on ne pouvais pas gagner face à HA... - Sur HC2, mes GEA sont vides maintenant, et j'ai quasiment remplacé tous les VD et autres scènes. Les progrès anti barbus sur HA ces derniers temps sont impressionnants ! Je suis aussi impressionné par Zigbee, le choix, le prix et la qualité des devices font que Zwave n'a plus aucune chance de survivre à mon avis.
  9. Et encore un petit tuto, Un ! :-) Cette fois-ci ce sera sur une télécommande pour un Ampli Marantz SR6008. Voici à quoi ça ressemble: Il y a donc moyen de sélectionner 3 sources et d'ajuster leur volume Les boutons Favori 1 à 3 sont les mêmes que ceux de la télécomande physique, donc accès aux stations radio numériques. Un appui sur ce bouton va allumer l'ampli et mettre la sélection Night mode active la compression sonore à fond (chez moi cela s'active dès que la maison est en mode "dodo enfants" c'est TRES pratique ! Les boutons Amplis activent et désactivent la sortie trigger de l'ampli ce qui permet d'allumer et d'éteindre les autres appareils (TV, ampli additionnel, caisson de basse, lecteur CD etc.) Pour avoir tout cela, rien de plus simple: installer le virtual device: Connectez votre Marantz au réseau Configurer l'adresse IP et le port: Et ça devrait marcher. Enjoy ! p.s; les versions 6007 etc devraient fonctionner aussi. Marantz_Remote.vfib
  10. sebcbien

    Mon Test Home Assistant (Hass.io)

    Code de la scène réduit au minimum pour plus de vitesse: Je ne pense pas qu'il y aie moyen de se passer du getGlobalValue (je n'ai pas trouvé le contenu de la VG dans le GetSourceTrigger) --[[ %% properties %% events %% globals PresentState Porte_Garage Porte_Gar_Action Alarme_Status Ambiance_Rez --]] -- Scene to update virtual device label with the content of multiple global variables local virtualDeviceId = 2301 -- ID of your virtual device -- Table to translate global variable names to label names (no _ is allowed in VD labels ... local globalVarToLabel = { PresentState = 'PresentState', Porte_Garage = 'PorteGarage', Porte_Gar_Action = 'PorteGarAction', Alarme_Status = 'AlarmeStatus', Ambiance_Rez = 'AmbianceRez', } -- Get the source trigger local trigger = fibaro:getSourceTrigger() -- Send the global variable Value to the VD Label local variableName = trigger['name'] local labelName = globalVarToLabel[variableName] local globalVariableValue = fibaro:getGlobalValue(variableName) fibaro:call(virtualDeviceId, 'setProperty', 'ui.'..labelName..'.value', globalVariableValue) fibaro:debug('VD ' .. virtualDeviceId .. ' updated ' .. labelName .. ' with ' .. globalVariableValue)
  11. sebcbien

    Mon Test Home Assistant (Hass.io)

    Bonjour a tous, un petit post pour partager du code qui permet de migrer facilement de HC2 a HA. J'ai encore pas mal sur HC2 qui reste ma passerelle zwave et y'a encore pas mal de GEA qui traine :-) j'ai donc fait une scène qui met a jour des labels d'un VD avec le contenu des VG. Pourquoi ? car le plugin fibaro de HA est bien fichu et très rapide mais ne récupère pas les Variables globales. Ensuite j'ai un Node-Red qui parse les last param et mets ajour des entités sur mon HA. Donc voici dans l'ordre: - la scène - le VD - le flow NodeRed --[[ %% properties %% events %% globals PresentState Porte_Garage Porte_Gar_Action Alarme_Status Ambiance_Rez --]] -- Scene to update virtual device label with the content of multiple global variables local virtualDeviceId = 2301 -- ID of your virtual device -- List of global variables you want to monitor local globalVariables = { 'PresentState', 'Porte_Garage', 'Porte_Gar_Action', 'Alarme_Status', 'Ambiance_Rez', -- Add more global variables as needed } -- Table to translate global variable names to label names (no _ is allowed in VD labels ... local globalVarToLabel = { PresentState = 'PresentState', Porte_Garage = 'PorteGarage', Porte_Gar_Action = 'PorteGarAction', Alarme_Status = 'AlarmeStatus', Ambiance_Rez = 'AmbianceRez', } -- Function to update the virtual device label with the global variable value function updateVirtualDeviceLabel(globalVariableName, virtualDeviceId) local globalVariableValue = fibaro:getGlobalValue(globalVariableName) if globalVariableValue then local labelName = globalVarToLabel[globalVariableName] if labelName then fibaro:call(virtualDeviceId, 'setProperty', 'ui.'..labelName..'.value', globalVariableValue) fibaro:debug('VD ' .. virtualDeviceId .. ' updated ' .. labelName .. 'with ' .. globalVariableValue) else fibaro:debug('No label found for GV ' .. globalVariableName) end else fibaro:debug('GV value not found for ' .. globalVariableName) end end -- Get the source trigger local trigger = fibaro:getSourceTrigger() -- Check if the trigger was a global variable if trigger['type'] == 'global' then local variableName = trigger['name'] -- Check if the triggered global variable is in the list for _, varName in ipairs(globalVariables) do if varName == variableName then updateVirtualDeviceLabel(variableName, virtualDeviceId) break end end else fibaro:debug('Nothing Done.') end Créez un VD et ajoutez des labels: leur id doit matcher les variables globales: PresentState, AlarmeStatus etc. attention, pas de "_" dans les labels, raison pour laquelle j'ai du faire une table de conversion dans la scène - Main loop of the VD local selfId = fibaro:getSelfId() local PresentState = fibaro:getGlobal("PresentState") local PorteGarage = fibaro:getGlobal("Porte_Garage") local PorteGarAction = fibaro:getGlobal("Porte_Gar_Action") local AlarmeStatus = fibaro:getGlobalValue("Alarme_Status") local AmbianceRez = fibaro:getGlobalValue("Ambiance_Rez"); fibaro:call(selfId, "setProperty", "ui.PresentState.value", PresentState ) fibaro:call(selfId, "setProperty", "ui.AlarmeStatus.value", AlarmeStatus) fibaro:call(selfId, "setProperty", "ui.PorteGarage.value", PorteGarage) fibaro:call(selfId, "setProperty", "ui.PorteGarAction.value", PorteGarAction) fibaro:call(selfId, "setProperty", "ui.AmbianceRez.value", AmbianceRez) fibaro:sleep(1000); Utiliser la palette node-red-contrib-fibaro-devices [{"id":"388d728cade11c19","type":"tab","label":"HC2 VG TO HA","disabled":false,"info":"","env":[]},{"id":"a9f467dae93c6336","type":"home-center","z":"388d728cade11c19","name":"HomeCenter 2","disable":false,"debug":false,"timeout":"","device":"5983525b4fbdf944","x":420,"y":80,"wires":[["a6fe209697ae5206","cd67ab58e7acc11c","b8d0e9ed3ef10f0f","e13774277ae169b1"],["9e55742321ac4d05"]]},{"id":"a6fe209697ae5206","type":"debug","z":"388d728cade11c19","name":"hc.event","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":640,"y":60,"wires":[]},{"id":"9e55742321ac4d05","type":"debug","z":"388d728cade11c19","name":"hc.error","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":640,"y":100,"wires":[]},{"id":"cd67ab58e7acc11c","type":"function","z":"388d728cade11c19","name":"filter VD id 2301 (VG Exporter to HA)","func":"// Variables\nvar input = { payload: msg.payload }; // Output 1 (msg.payload)\nvar propert; // Output 2 (HC2_Bewonersstatus)\nvar all ; // Output 3 (HC2_Beweging)\n//var WOL; // output 4 (WOL)\n//var add2Log; // Output 5 (add2Log)\n// --> Output 1 (msg.payload)\n// Content of payload:\n// Name: msg.payload.name\n// Value: msg.payload.value\n// Type: msg.payload.type\n// Log: msg.payload.log\n// --> Output 2 (HC2_Bewonersstatus)\nif (msg.id == \"2301\") {\n propert = { payload: msg.payload };\n all = { payload: msg };\n //payl = { payload: msg.payload.payload };\n}\n// Set to proper outputs\n// return [input, bewonersStat, bewegingsMeld, WOL, add2Log];\n// return propert; only contenu variable\n//return msg;\nreturn all;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":230,"y":400,"wires":[["c7f08a7e869b9c2a","9d7d2e82bb662da1","090ad2109b41194f"]]},{"id":"34df9d4af258897a","type":"debug","z":"388d728cade11c19","name":"Content of Action","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1210,"y":420,"wires":[]},{"id":"b8d0e9ed3ef10f0f","type":"switch","z":"388d728cade11c19","d":true,"name":"VG PresentState","property":"id","propertyType":"msg","rules":[{"t":"eq","v":"2301","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":670,"y":140,"wires":[["ba68b2003b0665d5"]]},{"id":"9272bb059d07cea9","type":"api-call-service","z":"388d728cade11c19","name":"Porte_Garage_Action","server":"8855687a.7772d8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.porte_gar_action"],"data":"{\"value\":\"{{payload}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":800,"y":440,"wires":[["34df9d4af258897a"]]},{"id":"ba68b2003b0665d5","type":"switch","z":"388d728cade11c19","d":true,"name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":830,"y":140,"wires":[[]]},{"id":"c7f08a7e869b9c2a","type":"function","z":"388d728cade11c19","d":true,"name":"Filter VG PresentState","func":"// Extract \"id\" and \"topic\" fields from the parsed JSON\nconst PresentState = msg.payload.payload;\n\n// Create separate messages for \"id\" and \"topic\"\nconst idPresentState = { payload: PresentState };\n\n// Send the separate messages to the output\nreturn [idPresentState];\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":320,"wires":[[]]},{"id":"c5c8f5caa449713b","type":"api-call-service","z":"388d728cade11c19","name":"Porte_Garage","server":"8855687a.7772d8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.porte_garage"],"data":"{\"value\":\"{{payload}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":780,"y":380,"wires":[["34df9d4af258897a"]]},{"id":"9d7d2e82bb662da1","type":"function","z":"388d728cade11c19","name":"Filter ALL VG's","func":"if (msg.payload.property == \"ui.PresentState.value\") {\n // Extract \"id\" and \"topic\" fields from the parsed JSON\n const PresentState = msg.payload.payload;\n // Create separate messages for \"id\" and \"topic\"\n var idPresentState = { payload: PresentState };\n}\nif (msg.payload.property == \"ui.PorteGarage.value\") {\n // Extract \"id\" and \"topic\" fields from the parsed JSON\n const Porte_Garage = msg.payload.payload;\n // Create separate messages for \"id\" and \"topic\"\n var idPorte_Garage = { payload: Porte_Garage };\n}\nif (msg.payload.property == \"ui.PorteGarAction.value\") {\n // Extract \"id\" and \"topic\" fields from the parsed JSON\n const Porte_Garage_Action = msg.payload.payload;\n // Create separate messages for \"id\" and \"topic\"\n var idPorte_Garage_Action = { payload: Porte_Garage_Action };\n}\nif (msg.payload.property == \"ui.AmbianceRez.value\") {\n // Extract \"id\" and \"topic\" fields from the parsed JSON\n const Ambiance_Rez = msg.payload.payload;\n // Create separate messages for \"id\" and \"topic\"\n var idAmbiance_Rez = { payload: Ambiance_Rez };\n}\nif (msg.payload.property == \"ui.ModeRez.value\") {\n // Extract \"id\" and \"topic\" fields from the parsed JSON\n const ModeRez = msg.payload.payload;\n // Create separate messages for \"id\" and \"topic\"\n var idModeRez = { payload: ModeRez };\n}\n// Send the separate messages to the output\nreturn [idPresentState, idPorte_Garage, idPorte_Garage_Action, idAmbiance_Rez, idModeRez];\n\n","outputs":5,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":440,"wires":[["8c5755a42fe68555","c0243bdc39d0da09"],["c5c8f5caa449713b"],["9272bb059d07cea9"],["fb9f682b502c7256"],["d313b001f97640a4"]]},{"id":"1af8341d6bef3869","type":"inject","z":"388d728cade11c19","d":true,"name":"kitchen/lights/lamp : OFF","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"kitchen/lights/lamp","payload":"false","payloadType":"bool","x":170,"y":100,"wires":[["a9f467dae93c6336"]]},{"id":"844377f896f633bf","type":"inject","z":"388d728cade11c19","d":true,"name":"kitchen/lights/lamp : ON","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"kitchen/lights/lamp","payload":"true","payloadType":"bool","x":160,"y":60,"wires":[["a9f467dae93c6336"]]},{"id":"090ad2109b41194f","type":"debug","z":"388d728cade11c19","name":"Selected Payloads of VG's","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":580,"y":640,"wires":[]},{"id":"c0243bdc39d0da09","type":"debug","z":"388d728cade11c19","name":"Content of VG","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":780,"y":260,"wires":[]},{"id":"8c5755a42fe68555","type":"api-call-service","z":"388d728cade11c19","name":"PresentState","server":"8855687a.7772d8","version":5,"debugenabled":false,"domain":"input_select","service":"select_option","areaId":[],"deviceId":[],"entityId":["input_select.presentstate"],"data":"{\"option\":\"{{payload}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":770,"y":320,"wires":[["34df9d4af258897a"]]},{"id":"fb9f682b502c7256","type":"api-call-service","z":"388d728cade11c19","name":"Ambiance_Rez","server":"8855687a.7772d8","version":5,"debugenabled":false,"domain":"input_select","service":"select_option","areaId":[],"deviceId":[],"entityId":["input_select.ambiance_rez"],"data":"{\"option\":\"{{payload}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":780,"y":500,"wires":[["34df9d4af258897a"]]},{"id":"d313b001f97640a4","type":"api-call-service","z":"388d728cade11c19","name":"ModeRez","server":"8855687a.7772d8","version":5,"debugenabled":false,"domain":"input_text","service":"set_value","areaId":[],"deviceId":[],"entityId":["input_text.moderez"],"data":"{\"value\":\"{{payload}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":760,"y":560,"wires":[["34df9d4af258897a"]]},{"id":"e13774277ae169b1","type":"function","z":"388d728cade11c19","name":"filter VD id 2139 (Modes Auto/Manuel)","func":"// Variables\nvar input = { payload: msg.payload }; // Output 1 (msg.payload)\nvar propert; // Output 2 (HC2_Bewonersstatus)\nvar all ; // Output 3 (HC2_Beweging)\n//var WOL; // output 4 (WOL)\n//var add2Log; // Output 5 (add2Log)\n// --> Output 1 (msg.payload)\n// Content of payload:\n// Name: msg.payload.name\n// Value: msg.payload.value\n// Type: msg.payload.type\n// Log: msg.payload.log\n// --> Output 2 (HC2_Bewonersstatus)\nif (msg.id == \"2139\") {\n propert = { payload: msg.payload };\n all = { payload: msg };\n //payl = { payload: msg.payload.payload };\n}\n// Set to proper outputs\n// return [input, bewonersStat, bewegingsMeld, WOL, add2Log];\n// return propert; only contenu variable\n//return msg;\nreturn all;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":230,"y":480,"wires":[["090ad2109b41194f","9d7d2e82bb662da1"]]},{"id":"5983525b4fbdf944","type":"home-center-config","name":"HC2","host":"192.168.xx.xx","port":"80"},{"id":"8855687a.7772d8","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]
  12. sebcbien

    Mon Test Home Assistant (Hass.io)

    Merci ! Ca me conforte de garder ma HC2 com passerelle ZWAVE :-) J'en ai une 2e en backup, ça devrait tenir encore quelques années, le temps que qqun arrive enfin a faire une stack zwave vraiment performante. Maintenant, je remarque que quand un module zwave dimmer "crame" je le remplace par ... HUE ... je l'aurais pas cru y'a qq années
  13. sebcbien

    Mon Test Home Assistant (Hass.io)

    Plus aucun soucis avec le réseau zwave ?
  14. sebcbien

    Mon Test Home Assistant (Hass.io)

    Toujours aussi satisfait de mon HA avec node Red, même si je l'utilise que pour faire ce que ma HC2 ou Jeedom ne savent pas faire. Je devrais tout migrer sur HA mais j'ai la flemme. Et vu la vitesse de développement, parfois il y a des mises à jour qui "cassent" pour le moment ça n'a jamais cassé que ce que je n'utilisais pas L'accès via l'extérieur est pas easy peasy non plus si on a pas envie de faire un trou dans son routeur/firewall et exposer la "box" (proxmox) directement.
  15. sebcbien

    Showroom Configs Gea

    Bonjour, Comme discuté dans le fil du support GEA, je trouve que apprendre par l'exemple est la meilleure solution. Malheureusement, dans le fil du support, la majorité du code qui s'y trouve ne fonctionne pas ... C'est un peu normal... Je vous propose donc de poster ici votre configuration GEA, POSTEZ UNIQUEMENT LES FONCTIONS TESTÉE ET VÉRIFIÉE. POUR PLUS DE LISIBILITÉ, NE POSEZ PAS DE QUESTIONS DANS CE FIL !!! SI VOUS VOULEZ REMERCIER UN POST, CLIQUEZ SUR LE BOUTON J'AIME Si vous avez une question, allez dans le fil GEA support et faites référence à un post ou copiez la config pour laquelle vous voulez poser une question. Merci et en espérant que ce fil soit utile
  16. sebcbien

    Showroom Configs Gea

    Salut @Domodial Franchement je ne me souviens plus le pourquoi du comment, mais oui, j'ai 3 boutons, ouvrir fermer et actionner une seule variable globale et gestion du double click pour la commande ouvrir et actionner. -- Double click by sebcbien -- local msg = "Ré-appuyer pour confirmer" -- Confirm message local action_msg = "!! ACTION: OUVRIR !!" -- message when double click activated local labelId = "Message" -- ID of the label hosting the messages local secondes = 2 -- maximum time between two clicks for the action to be validated -- do not modify below and place your action in line 25 local current = fibaro:getValue(fibaro:getSelfId(), "ui."..labelId..".value") local action if (current == "") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", msg.." ("..string.sub(os.time(),-4)..")") fibaro:debug("First Click") action = false elseif tonumber(string.sub(os.time(),-4)) - tonumber(string.sub(current,-5,-2)) <= secondes then fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", action_msg) fibaro:debug("Double click Validated !") fibaro:sleep(2*1000) fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", "") action = true elseif tonumber(string.sub(os.time(),-4)) - tonumber(string.sub(current,-5,-2)) > secondes then fibaro:call(fibaro:getSelfId(), "setProperty", "ui."..labelId..".value", "") fibaro:debug("Cleaning") action = false end if action then -- PLACE YOUR CODE HERE -- local previous_mode = fibaro:getGlobalValue("Porte_Gar_Action"); fibaro:setGlobal("Porte_Gar_Action", "Demande_Ouverture") local current_mode = fibaro:getGlobalValue("Porte_Gar_Action"); fibaro:debug(os.date("%a %d/%m", os.time()).." Previous mode was: " .. previous_mode .. ". Has been changed to: " .. current_mode); end
  17. sebcbien

    YAJTOH (Yet Another Jeedom To HC2)

    Bonjour, Pour ne pas polluer le topic de @ADN182 et comme les solutions divergent, voici le post avec une solution pour pousser les valeurs de Jeedom vers un HC2 en utilisant l' API PUT Les deux soluitions font la même chose La solution de ADN182 effectue la plupart du traitement sur la HC2 alors que ici c'est via ce script sur Jeedom. La solution de ADN182 convertit les noms des pièces/devices automatiquement en ID, on peut donc utiliser la même url de push dans tous les modules Z-Wave Ce script ne le fait pas (encore) la recherche automatique d'id sera peut être ajouté par la suite, éventuellement par ADN182 La solution de ADN182 ne peut être utilisé que avec la commande push et non dans des scénarios ou ailleurs. Ce script peut être utilisé pour modifier des valeurs de fake/dead devices sur une HC2 exemple de format de l'url http: arguments: id: id du device Fibaro value: valeur numérique value_bin: valeur binaire, 0 et 1 seront transformés en false et true properties: si non sspécifié, le script utilisera value. exemple: appel via script "message" : http://127.0.0.1/plugins/script/core/ressources/put2hc2V2.php?id=#title#&value=#message# appels via url: http://127.0.0.1/plugins/script/core/ressources/put2hc2V2.php?value_bin=0&id=1245 appel via push url d'un device: http://127.0.0.1/plugins/script/core/ressources/put2hc2V2.php?value_bin=#value#&id=1245 http://127.0.0.1/plugins/script/core/ressources/put2hc2V2.php?value=150&id=1245&properties=power Installation: Installer un script php dans jeedom via le plugin script: Affichage sur le dashboard, pratique pour tester: Utilisation dans un scénario (ou ailleurs, plugins, alarme, modes etc...) dans Jeedom: Dans la zone push d'un device: Contenu du script put2hc2.php: Version2: <?php // ce script peut être utilisé pour modifier des valeurs de fake/dead devices sur une HC2 // exemple de format de l'url http: // arguments: // id: id du device Fibaro // value: valeur numérique // value_bin: valeur binaire, 0 et 1 seront transformés en false et true // properties: si non sspécifié, le script utilisera value. // exemple: // appel via script "message" // http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?id=#title#&value=#message# // appels via url // http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value_bin=0&id=1245 // appel via push url d'un device // http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value_bin=#value#&id=1245 // http://127.0.0.1/plugins/script/core/ressources/put2hc2.php?value=150&id=1245&properties=power // V2.0 22/12/2016 $userName = "XXXXXXXXX"; $password = "XXXXXXXXXXXXXXXXXXX"; $ipHc2 = "192.168.XXX.XXX"; $tcpPort = "80"; $default_properties="value"; // si pas de properties spécifiée utiliser celle-ci (convient à quasiment tout les cas) //si value vide, tester value_bin et transformer if (isset($_GET['value'])) { $value=$_GET['value']; }else{ $value_bin=$_GET['value_bin']; // transformer 0 et 1 en true/false if ($value_bin=="1") { $value="true"; } if ($value_bin=="0") { $value="false"; } } // récupérer l'id $id=$_GET['id']; //si properties vide, mettre properties=value if (isset($_GET['properties'])) { $properties=$_GET['properties']; }else{ $properties=$default_properties; } //pour debug //if !isset($id) then $id="2153" end; //$properties=value; //$value= true; $request = "/api/devices/".$id; $data_string = '{"properties":{"'.$properties.'": '.$value.'}}'; $url = 'http://'.$userName.':'.$password.'@'.$ipHc2.':'.$tcpPort .$request; $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); // retours possibles pour debug //echo $result; //echo $data_string; //echo $properties.$value; ?> Plus de détails et d'explications déjà données sur le fil de ADN182: https://www.domotique-fibaro.fr/topic/9659-jeedom-to-hc2/?do=findComment&comment=148369 https://www.domotique-fibaro.fr/topic/9659-jeedom-to-hc2/?do=findComment&comment=148353 améliorations futures: https://www.domotique-fibaro.fr/topic/9659-jeedom-to-hc2/?do=findComment&comment=148355
  18. sebcbien

    Station météo Netatmo

    Bonjour, juste pour info et en espérant ne pas me faire rembarrer. Le plugin officiel sur Jeedom est en Oauth2. J'utilise Jeedom pour mes appareils netatmo, thermostat et météo, et j'utilise mon "pont" Jeedom/HC2 pour le commander/afficher le status dans la HC2 (voir ma signature) Pour ceux qui ont un synology, jeedom peut tourner dessus, donc pas besoin d'appareil supplémentaire style raspberry.
  19. sebcbien

    Installation Satel Integra

    Salut, Tu dois aller sur ton clavier et mettre la centrale en mode "maintenance/installateur" pendant X heures. Je pense aussi que si l'alarme n'est pas activée la sirène ne sonnera pas, tu aura juste un message d'erreur sur le clavier
  20. Petit script permettant de se réveiller en douceur. J'avais fait ce script il y a déjà pas mal de temps, il me permettait de déclencher l'allumage en douceur dans ma chambre et dans celle des enfant dès que le réveil sonnait. Avec le script ALARM de Steven et son GEA, j'en ai profité pour l'améliorer. Maintenant le script se lance soit via mon révei, soit via le Virtual Device ALARM de Steven et GEA Ce script permet de: - choisir la durée de l'allumage des lampes (en minutes) - détecte ces conditions individuellement pour chaque chambre: - Si une lampe est déjà allumée, elle est exclue de l'allumage (évite de passer de 100% à 5% lorsque le script démarre et que l'on est déjà levé) - Si on modifie une lampe elle est exclue (extinction ou allumage à 100% par exemple) - Si toutes les lampes ont été modifiées, fin du script - allumer mon routeur Wifi de l'étage (qui est coupé s'il n'y a pas de mouvement détecté pendant 30 minutes) Depuis ce script, je gagne 15 minutes au lit le matin, plus besoin de réveil qui gueule et les enfants sont réveillés en douceur et de bonne humeur (et moi aussi ) Le voici: Pour ajouter ou supprimer des lampes, je pense que le script parle de lui mème, il suffit de supprimer/modifier/ajouter les lignes Question copyright, je pense l'avoir fait complètement seul (il y a longtemps que je l'ai, et franchement je ne me souvient plus de sa genèse) --[[ %% properties 1277 value %% globals --]] -------------------------------------------------- -- Sweet Wakeup -- Gradually dim up lights, excluding already on lights or modified during the wakeup -- Sebastien Jauquet -- Mars 2015 -------------------------------------------------- local id = { LAMPE_CH_THOMAS = 41, LAMPE_DRESSING = 42, LAMPE_CH_PARENTS = 47, LAMPE_CH_EMILIEN = 58, REVEIL_1_SEB = 1277, PRISE_ROUTEUR_1ER = 22 } local cycle = 30 --duration (in minutes) of the complete cycle of wakeup local dim = 5 -- dimming starting value (5=5%) local startSource = fibaro:getSourceTrigger(); -- launch script if started trough device in the header or "manually"/trough an other script if (( tonumber(fibaro:getValue(id["REVEIL_1_SEB"], "value")) > 0 ) or startSource["type"] == "other") then -- Always execute actions on this/those device(s): fibaro:call(id["PRISE_ROUTEUR_1ER"], "turnOn"); -- If one light is not turned off, disable it from the wakeup loop if(tonumber(fibaro:getValue(id["LAMPE_CH_THOMAS"], "value")) ~= 0 ) then id["LAMPE_CH_THOMAS"] = 0; fibaro:debug("LAMPE_CH_THOMAS Desactivated"); end if(tonumber(fibaro:getValue(id["LAMPE_DRESSING"], "value")) ~= 0 ) then id["LAMPE_DRESSING"] = 0; fibaro:debug("LAMPE_DRESSING Desactivated"); end if(tonumber(fibaro:getValue(id["LAMPE_CH_PARENTS"], "value")) ~= 0 ) then id["LAMPE_CH_PARENTS"] = 0; fibaro:debug("LAMPE_CH_PARENTS Desactivated"); end if(tonumber(fibaro:getValue(id["LAMPE_CH_EMILIEN"], "value")) ~= 0 ) then id["LAMPE_CH_EMILIEN"] = 0; fibaro:debug("LAMPE_CH_EMILIEN Desactivated"); end -- Main wakeup loop while dim < 91 do -- set dim value to all dimmers (excluding disabled: Id["xxx"] not equal to 0) if (id["LAMPE_CH_THOMAS"] ~= 0) then fibaro:call(id["LAMPE_CH_THOMAS"], "setValue", dim) end if (id["LAMPE_DRESSING"] ~= 0) then fibaro:call(id["LAMPE_DRESSING"], "setValue", dim) end if (id["LAMPE_CH_PARENTS"] ~= 0) then fibaro:call(id["LAMPE_CH_PARENTS"], "setValue", dim) end if (id["LAMPE_CH_EMILIEN"] ~= 0) then fibaro:call(id["LAMPE_CH_EMILIEN"], "setValue", dim) end fibaro:debug("Set Dimmers Value at: " .. dim) fibaro:sleep(cycle*3000); -- Check if dimmer value modified, then disable it from the wakeup loop if ((id["LAMPE_CH_THOMAS"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_CH_THOMAS"], "value")) - dim) ~= 0 ) then id["LAMPE_CH_THOMAS"] = 0; fibaro:debug("LAMPE_CH_THOMAS Desactivated"); end; end; if ((id["LAMPE_DRESSING"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_DRESSING"], "value")) - dim) ~= 0 ) then id["LAMPE_DRESSING"] = 0; fibaro:debug("LAMPE_DRESSING Desactivated"); end; end; if ((id["LAMPE_CH_PARENTS"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_CH_PARENTS"], "value")) - dim) ~= 0 ) then id["LAMPE_CH_PARENTS"] = 0; fibaro:debug("LAMPE_CH_PARENTS Desactivated"); end; end; if ((id["LAMPE_CH_EMILIEN"]) ~= 0) then if((tonumber(fibaro:getValue(id["LAMPE_CH_EMILIEN"], "value")) - dim) ~= 0 ) then id["LAMPE_CH_EMILIEN"] = 0; fibaro:debug("LAMPE_CH_EMILIEN Desactivated"); end; end; if id["LAMPE_CH_THOMAS"] == 0 and id["LAMPE_DRESSING"] == 0 and id["LAMPE_CH_PARENTS"] == 0 and id["LAMPE_CH_EMILIEN"] == 0 then fibaro:debug("All Dimmer Values Modified, stopping script"); fibaro:abort(); end dim = dim +5 end -- end of wakeup, set dimmers to max value fibaro:call(id["LAMPE_CH_THOMAS"], "setValue", 99); fibaro:call(id["LAMPE_DRESSING"], "setValue", 99); fibaro:call(id["LAMPE_CH_PARENTS"], "setValue", 99); fibaro:call(id["LAMPE_CH_EMILIEN"], "setValue", 99); end
  21. YAPS - Présence Simulator, Un De Plus ... ? Voici un petit script qui améliore (enfin pour moi en tout cas) les scripts de simulation de présence existants. Je me suis basé sur celui-ci: http://forum.fibaro.com/viewtopic.php?p=52734#52734 que j'ai amélioré depuis quelques temps mais sur le forum officiel. Ce script enclenche la simulation au coucher du soleil et la termine à heure fixe définie dans les variables: local stop_hour = "01" local stop_minute = "10"; Pas besoin d'utiliser le VirtualDevice pour activer et désactiver, définir la Variable Globale "Simu_presence" (via GEA par exemple) enclenche ou déclenche la scène Le Virtual device surveille aussi l'état de la VG et se modifie en fonction pour afficher la bonne icône et le status en toutes lettres. Pour cela, j'ai modifié le script pour qu'il tourne dans une scène (appuyer sur les boutons des VD via script me gave, les boutons changent d'id, en cas de reset complet de la box il faut retrouver les id etc... J'ai ajouté un mode "marche forcée" J'ai ajouter l'exit immédiat en cas de changement de Variables Globales J'ai ajouté la possibilité d'allumer une lampe en fin de script J'ai corrigé pas mal de bugs du script d'origine, je pense qu'il n'y en a plus actuellement Soit, rien de tel que les VG et les scènes, très faciles pour utiliser avec GEA, scènes en mode block etc. Je garde les Virtual Devices pour l'apparence et les commandes (via modification de VG) Avantages: Portabilité, interaction avec d'autres scripts possibles, migration aisée. Première étape: Créer une Variable Globale prédéfinie "Simu_presence" avec les valeurs 0 et 1 Créer une Variable Globale prédéfinie "overideSimuSunset" avec les valeurs 0 et 1 Deuxième étape: Créer le Virtual Device: Pour cela, importer le fichier: Presence_Simulator.vfib (ajouter nouveau virtual device) Pour avoir une idée: Voici le bouton ON: fibaro:setGlobal("Simu_presence", "1") fibaro:setGlobal("overideSimuSunset", "0") OFF: fibaro:setGlobal("Simu_presence", "0") fibaro:setGlobal("overideSimuSunset", "0") Override: fibaro:setGlobal("Simu_presence", "1") fibaro:setGlobal("overideSimuSunset", "1") et le main loop: -------------------------------- -- YAPS Presence Simulator V2.0 -- SebcBien -- Janvier 2015 -------------------------------- local thismodule = fibaro:getSelfId(); local presence = fibaro:getGlobal("Simu_presence") local overide = fibaro:getGlobal("overideSimuSunset") --fibaro:debug(presence) --fibaro:debug(overide) if presence == "1" then presencemsg = "ON" else presencemsg = "OFF" end if overide == "1" then overidemsg = "ON" else overidemsg = "OFF" end fibaro:log(presencemsg .. " (Overide " .. overidemsg .. ")") fibaro:call(thismodule, "setProperty", "ui.status.value", "Presence: " .. presencemsg .. " (Overide " .. overidemsg .. ")"); --fibaro:debug(thismodule); if presence == "1" then fibaro:call(thismodule, "setProperty", "currentIcon", 1026) end if presence == "0" then fibaro:call(thismodule, "setProperty", "currentIcon", 1027) end fibaro:sleep(5000); Troisième étape: Créer une nouvelle scène lua et y mettre ce code: Attention, ce n'est plus la dernière version, voir les pages suivantes pour les mises à jour. LA DERNIERE VERSION SERA TOUJOURS SUR GITHUB !!!: https://github.com/sjauquet Ensuite Allez sur YAPS.scene.lua et télécharger avec le bouton RAW si vous ne voulez pas installer un client GIT (SmartGit est top ;-) ) --[[ %% autostart %% properties %% globals Simu_presence --]] -------------------------------- -- YAPS Presence Simulator V2.0 -- SebcBien -- Janvier 2015 -------------------------------- if (fibaro:countScenes() > 1) then fibaro:debug("More than one scene active, exiting!"); fibaro:abort(); end --------------------- USER SETTINGS -------------------------------- local id = { LAMPE_SDB = 16, LAMPE_CH_AMIS = 24, LAMPE_SALON = 45, LAMPE_BUREAU = 49, LAMPE_HALL = 52, LAMPE_CELLIER = 56, LAMPE_CH_EMILIEN = 58 } local stop_hour = "01"; -- Hour when you want simulation to stop local stop_minute = "10"; -- Minute of the hour you want simulation to stop -- note 1: the script will not exit while waiting the random time of the last light turned on. So end time can be longer than specified end time -- note 2: if the global variable changes during the same wait time as above, it will exit immediately (when back home while simulation runs) local rndmaxtime = 30 -- random time of light change in minutes --> here each device is on maximum 30min local ID_devices_lights = {id["LAMPE_SDB"],id["LAMPE_HALL"],id["LAMPE_BUREAU"],id["LAMPE_CELLIER"],id["LAMPE_CH_AMIS"]} -- IDs of lights to use in simulation --local ID_devices_lights = {id["LAMPE_HALL"],id["LAMPE_BUREAU"],id["LAMPE_CELLIER"]} -- IDs of lights to use in simulation local activatePush = true; -- activate push when simulation starts and stops local ID_Smartphone = 53; -- ID of your smartphone local ID_On_After_Simu = id["LAMPE_HALL"] -- Only One ID of a lamp to turn on after simulation ends (set 0 to disable) --------------------- USER SETTINGS END ---------------------------- ----------------------ADVANCED SETTINGS----------------------------- local showStandardDebugInfo = true; -- Debug shown in white local showExtraDebugInfo = true; -- Debug shown in orange local numbers_lights = #ID_devices_lights -- numbers of light devices listed above local manualOveride = fibaro:getGlobal("overideSimuSunset"); -- if = 1 then the simulation is forced -------------------------------------------------------------------- ----------------------------------- ----- Do not change code below ---- ----------------------------------- local simu = fibaro:getGlobal("Simu_presence"); --value of the global value: simulation is on or off local start_simu = fibaro:getValue(1, "sunsetHour"); --Start simulation when sunset --local start_simu = "22:28" local endtime version = "1.1.0" SimulatorPresenceEngine = {}; -- debug function Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")); end ExtraDebug = function (debugMessage) if ( showExtraDebugInfo ) then Debug( "orange", debugMessage); end end StandardDebug = function (debugMessage) if ( showStandardDebugInfo ) then Debug( "white", debugMessage); end end -- function push message to mobile pushMessage = function (sendPush) if (activatePush) then ExtraDebug("Push info sent to mobile") fibaro:call(ID_Smartphone, 'sendPush', sendPush); end end -- function to switch off devices in the list function SimulatorPresenceEngine:TurnOff(group) Debug("red","TurnOff All lights!") local name, id2; local ID_devices_group = group; for i=1, #ID_devices_group do id2 = tonumber(ID_devices_group[i]); fibaro:call(id2, "turnOff"); name = fibaro:getName(id2); if (name == nil or name == string.char(0)) then name = "Unknown" end StandardDebug("Device:" .. name .. " Off "); end if ID_On_After_Simu ~= 0 then fibaro:call(ID_On_After_Simu, "turnOn"); end end -- function to calculate endtime function SimulatorPresenceEngine:EndTimeCalc() local start = os.date("%H:%M") local time = os.time() local date = os.date("*t", time) local year = date.year local month = date.month local day = date.day endtime = os.time{year=year, month=month, day=day, hour=stop_hour, min=stop_minute, sec=sec} --ExtraDebug ("CurrentTime" ..os.time()) --ExtraDebug ("Original EndTime " ..endtime) if endtime < os.time() then endtime = endtime + 24*60*60 -- ExtraDebug ("Modified Endtime " ..endtime) end end -- function to simulate a presence function SimulatorPresenceEngine:Launch() ExtraDebug( "Simulation will stop: "..stop_hour..":"..stop_minute ); if (os.time() >= endtime) or (simu == "0") or (manualOveride == "0") then ExtraDebug("Simulation stopped") SimulatorPresenceEngine:TurnOff(ID_devices_lights) end pushMessage("Lights simulation started") while ((os.time() <= endtime) and (simu == "1")) or ((manualOveride == "1")) do -- original code: while ((os.time() <= endtime) and (simu == "1")) or ((os.time() <= endtime) and (simu == "1") and (manualOveride == "1")) do if time == endtime then StandardDebug("time and endtime same value -> end") end local random_light = tonumber(ID_devices_lights[math.random(numbers_lights)]) --choose a random light in the list local lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light in the list -- turn on the light if off or turn off if on if tonumber(lightstatus) == 0 then fibaro:call(random_light, 'turnOn') else fibaro:call(random_light, 'turnOff') end fibaro:sleep(1000) ; --necessary to get back the new status, because HC2 is too fast :-) lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light after his update StandardDebug('light ID:'..random_light..' status:'..lightstatus) local sleeptime = math.random(rndmaxtime*60000) --random sleep fibaro:debug("entering loop of " .. sleeptime/60000 .. "minutes") -- This modification allows to exit the scene if the Simu_presence global var changes to 0 during the random sleep local counterexitsimu = 200 while (counterexitsimu > 0) do counterexitsimu = counterexitsimu - 1; test_presence_state = fibaro:getGlobal("Simu_presence") simu = tonumber(test_presence_state); --verify the global value, if the virtual device is deactivated, the scene stops. --fibaro:debug("simu var state : " .. simu) if simu == 0 then counterexitsimu = 0 end fibaro:sleep(sleeptime/200) end fibaro:debug("exiting loop of " .. sleeptime/60000 .. "minutes") local sleeptimemin = math.abs(sleeptime/60000) StandardDebug('sleeptime:'..sleeptimemin) simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops. manualOveride = fibaro:getGlobalValue("overideSimuSunset") end end -- Main Script beginning SimulatorPresenceEngine:EndTimeCalc(); if (simu == "1") then Debug("green", "Simulate Presence at Home | v" .. version ); Debug( "green", "--------------------------------------------------"); ExtraDebug("Today's sunset: "..fibaro:getValue(1, "sunsetHour")) end if (simu == "1") then Debug("grey", "Simulate Presence will start at "..start_simu) pushMessage("Simulate Presence will start at "..start_simu) end -- Main Loop while (simu=="1") do -- Condition to start simulation simu = fibaro:getGlobal("Simu_presence"); manualOveride = fibaro:getGlobal("overideSimuSunset"); if (os.date("%H:%M") >= start_simu) then sunset = 1 else sunset = 0 end if ((simu == "1") and os.time() <= endtime and sunset == 1 ) or ((simu == "1") and manualOveride == "1" ) then SimulatorPresenceEngine:Launch(); --launch the simulation. if manualOveride == "1" and sunset == 0 then Debug("grey", "Manual override activated") elseif sunset == 1 then Debug("grey", "It's sunset time, starting simulation") end if sunset == 0 and manualOveride == "0" then Debug("grey", "Not manual override so Presence Simulation will not be activated"); elseif os.time() >= endtime then Debug("grey", "Time is now after:"..stop_hour..":"..stop_minute.."deactivating"); SimulatorPresenceEngine:TurnOff(ID_devices_lights); Debug("red","Simulation is deactivated") pushMessage("Lights simulation stopped") end end end -- Condition to end simulation if (simu == "0") then SimulatorPresenceEngine:TurnOff(ID_devices_lights); Debug("red","Simulation is deactivated") pushMessage("Lights simulation stopped") end Debug("red","Exit from scene") Dans user settings vous pouvez y mettre votre liste d'id "format GEA" (ça facilite quand il faut tout réinstaller hein ) Pour définir la variable rndmaxtime, pensez que ce script n'allume pas une lampe après en avoir éteint une autre, mais il y en aura tantôt 3 d'allumées, puis 1 s'éteint etc. c'est donc plutôt une variable qui définit le "mouvement" dans la maison, il n'y a pas d'effet sapin de noà«l qui clignotte S'il y a une demande je pourrais considérer de traduire le code en français, mais je pense que avec des rudiments d'anglais ça se lit facilement ;-) Les icônes viennent du post 6 de ce fil: http://www.domotique-fibaro.fr/index.php/topic/198-simulation-de-pr%C3%A9sence/ pour les id des icônes pour remplacer dans le mainloop du virtual device, if presence == "1" then fibaro:call(thismodule, "setProperty", "currentIcon", 1026) end if presence == "0" then fibaro:call(thismodule, "setProperty", "currentIcon", 1027) end je l'ai fait à l'arrache mais apparemment il y a une méthode plus scientifique en utilisant le toolkit de Krikroff... si une bonne âme la connait, feel free to post Enjoy ! icônes pour VD et Scène:
  22. sebcbien

    Xpenology Installer/Migrer DSM 5.x à 6.x

    Ça me gave aussi ces vidéos tutos [emoji849]
  23. sebcbien

    black friday 2021

    Salut, Bonne idée ça @mprinfo Quelqu'un a un bon plan caméra POE PTZ extérieure non cloud ? J'ai un AP wifi extérieur maintenant mais je préférerais passer par ethernet. Pas besoin de Zoom X100, X2 ou X4 c'est plus qu'assez Avant j'avais une Dahua DH-SD22204T-GN mais elle est morte y'a pas longtemps après 4 ans.
  24. sebcbien

    Showroom Configs Gea

    Génial ! Merci, quel code, c'est énorme ! Je te suggère de passer tout le code dans une fenêtre "code" pour plus de lisibilité Exemple: Utilise le type de code "LUA" @Lazer, peux-tu effacer ce message une fois que ce sera fait ? histoire de ne pas polluer le fil :-) local heatingConf = { T2 = { LABEL = "ALPHONSE", TID = devicesEx.THERMOSTAT_T2, T = devicesEx.TEMP_LIVING_T2, TMAX = shortcuts.TEMP_MAX_T2, TMIN = shortcuts.TEMP_MIN_T2, C = shortcuts.CONSIGNE_T2, VDS = {devicesEx.VD_HEATER_KITCHEN_T2, devicesEx.VD_HEATER_LIVING_T2, devicesEx.VD_HEATER_BEDROOM_T2}, PRECOND = function () return tonumber(fibaro:getGlobalValue(shortcuts.ALPHONSE_BUSY)) == 1 and tonumber(fibaro:getGlobalValue(shortcuts.T2_DOOR)) == 0 and tonumber(fibaro:getGlobalValue(shortcuts.T2_WINDOW)) == 0 end, POSTFUNC = function (consigne) fibaro:setGlobal(shortcuts.TEMP_MIN_T2, consigne-2) end, }, CAB = { LABEL = "CABINET", TID = devicesEx.THERMOSTAT_CAB, T = devicesEx.TEMP_CAB, TMAX = shortcuts.TEMP_MAX_CAB, TMIN = shortcuts.TEMP_MIN_CAB, C = shortcuts.CONSIGNE_CAB, VDS = {devicesEx.VD_HEATER_CAB}, }, KITCHEN = { LABEL = "CUISINE", TID = nil, T = devicesEx.TEMP_KITCHEN, TMAX = shortcuts.TEMP_MAX_KITCHEN, TMIN = shortcuts.TEMP_MIN_KITCHEN, C = shortcuts.CONSIGNE_KITCHEN, VDS = {devicesEx.VD_HEATER_KITCHEN}, }, DRESS = { LABEL = "DRESSING", TID = devicesEx.THERMOSTAT_DRESS, T = devicesEx.TEMP_DRESS, TMAX = shortcuts.TEMP_MAX_DRESS, TMIN = shortcuts.TEMP_MIN_DRESS, C = shortcuts.CONSIGNE_DRESS, VDS = {devicesEx.VD_HEATER_DRESSING,devicesEx.VD_HEATER_SDB}, }, BROOM = { LABEL = "CHAMBRE", TID = nil, T = devicesEx.TEMP_BROOM, TMAX = shortcuts.TEMP_MAX_BROOM, TMIN = shortcuts.TEMP_MIN_BROOM, C = shortcuts.CONSIGNE_BROOM, VDS = {devicesEx.VD_HEATER_BROOM}, }, LIVING = { LABEL = "SALON", TID = devicesEx.THERMOSTAT_LIVING, T = devicesEx.TEMP_LIVING, TMAX = shortcuts.TEMP_MAX_LIVING, TMIN = shortcuts.TEMP_MIN_LIVING, C = shortcuts.CONSIGNE_LIVING, VDS = {devicesEx.VD_HEATER_TV,devicesEx.VD_HEATER_BABY}, } } local metricAlert=function( model ) -- fibaro:debug("metricAlert !!!!!") -- local messages = {"alerte:quelqu'un est dans l'escalier !"} -- local message = messages[math.random(#messages)] -- local alarms = {"alarm10","alarm12","alarm13"} -- local alarm = alarm[math.random(#alarms)] net.HTTPClient():request("http://" .. '192.168.1.23' .. ":8080/api/v2/device/notifications", {options = { method = 'POST', headers = { ['Content-Type'] = 'application/json', ['Authorization'] = 'Basic ' .. 'xxxxxxxxxxxxxxxx=', }, data = json.encode( { --icon_type = "alert", priority = "critical", model = model, cycles = 30 / 4.5 }) }, }) end local fns fns = { updateHeaters = function (conf) local consigne = tonumber(fibaro:getGlobalValue(conf.C)) if conf.PRECOND == nil then conf.PRECOND = function () return true end end if conf.PRECOND() then local T = tonumber(fibaro:getValue(conf.T, "value")) local value = vd_heater_values.CONF local text = " " .. conf.LABEL if T > consigne then value = vd_heater_values.HG end for _,v in ipairs(conf.VDS) do fibaro:call(v, "pressButton",value) end end end, updateConsigne = function (conf) local max = tonumber(fibaro:getGlobalValue(conf.TMAX)) local min = tonumber(fibaro:getGlobalValue(conf.TMIN)) local consigne if conf.TID == nil then consigne = tonumber(fibaro:getGlobalValue(conf.C)) if consigne > max then consigne = max end if consigne < min then consigne = min end else consigne = tonumber(fibaro:getValue(conf.TID, "value")) if consigne > max then consigne = max end if consigne < min then consigne = min end consigne = consigne -0.5 end fibaro:setGlobal(conf.C, consigne) if conf.POSTFUNC then conf.POSTFUNC (consigne) end fns.updateHeaters (conf) local T = tonumber(fibaro:getValue(conf.T, "value")) local text = "··· THERMOSTAT " .. conf.LABEL if T > consigne then text = text .. " : HG ··· consigne : " .. consigne .. " °C ··· temperature : " .. T .. " °C ··· HG" else text = text .. " : ON ··· consigne : " .. consigne .. " °C ··· temperature : " .. T .. " °C ··· ON" end metricAlert({ frames = { -- { icon = 7431, text = text }, { text = text }, }, }) end, resetRequests = function () fibaro:setGlobal ("GLOBAL_REQUEST", "0") -- fibaro:setGlobal ("ACTION_PENDING", "0") end, idFromNumber = function (number) local result = "UNKNOWN" for k,v in pairs(devices) do if v == number then result = k end end return result end, allOff = function () for k,v in pairs(devices) do fibaro:call(v, "turnOff") fibaro:sleep(100) end end, auto = function (operation, params) local seconds = 30 local deviceCond = params.id local deviceAction = {operation, params.id} if params.hue == true then deviceCond = {"Hue", params.id, "on", 1} if operation == "turnOff" then deviceCond = {"Hue", params.id, "on", 0} else deviceCond = {"Hue", params.id, "on", 1} end end if params.minutes then seconds = params.minutes *60 end return GEA.add(params.condition or deviceCond, seconds, "", deviceAction) end, autoOff = function (params) return fns.auto ("turnOff", params) end, autoOn = function (params) return fns.auto ("turnOn", params) end, onMotion = function (params) local c = { params.sensor } if params.condition then for _, v in pairs(params.condition) do table.insert (c, v) end end fns.autoOff({id=params.id,minutes=params.minutes,hue=params.hue}) GEA.add(params.sensor, -1, "", { "RestartTask", fns.autoOff({id=params.id,minutes=params.minutes,hue=params.hue}) } ) fns.autoOn({id=params.id,condition=c,minutes=-1/60,hue=params.hue}) end, }
  25. sebcbien

    JPI - Controlleur android

    Tu m'as toujours épaté @dJuL trop fort ! Merci infiniment !
×