[Tuto] Programmation hebdomadaire pour chauffage ou interrupteurs

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par papoo »

DeviceTimersController.js

Code : Tout sélectionner

define(['app', 'timers/factories', 'timers/components'], function (app) {

    app.controller('DeviceTimersController', function ($scope, $routeParams, deviceApi, deviceLightApi, deviceRegularTimersApi, deviceSetpointTimersApi, deviceTimerOptions, deviceTimerConfigUtils, utils) {
        var vm = this;
        var deviceTimers;

        var deleteConfirmationMessage = $.t('Are you sure to delete this timers?\n\nThis action can not be undone...');
        var clearConfirmationMessage = $.t('Are you sure to delete ALL timers?\n\nThis action can not be undone!');

        vm.addTimer = addTimer;
        vm.updateTimer = updateTimer;
        vm.deleteTimer = utils.confirmDecorator(deleteTimer, deleteConfirmationMessage);
        vm.clearTimers = utils.confirmDecorator(clearTimers, clearConfirmationMessage);

        init();

        function init() {
            vm.deviceIdx = $routeParams.id;
            vm.selectedTimerIdx = null;

            deviceApi.getDeviceInfo(vm.deviceIdx).then(function (device) {
                vm.isLoaded = true;
                vm.itemName = device.Name;
                vm.colorSettingsType = device.SubType;
                vm.dimmerType = device.DimmerType;

                vm.isDimmer = device.isDimmer();
                vm.isSelector = device.isSelector();
                vm.isLED = device.isLED();
                vm.isCommandSelectionDisabled = vm.isSelector && device.LevelOffHidden;
                vm.isSetpointTimers = (device.Type === 'Thermostat' && device.SubType == 'SetPoint') || (device.Type === 'Radiator 1');

                vm.levelOptions = [];

                deviceTimers = vm.isSetpointTimers
                    ? deviceSetpointTimersApi
                    : deviceRegularTimersApi;

                if (vm.isSelector) {
                    vm.levelOptions = device.getSelectorLevelOptions();
                }

                if (vm.isLED) {
                    $scope.$watch(function () {
                        return vm.timerSettings.color + vm.timerSettings.level;
                    }, setDeviceColor);
                }

                if (vm.isDimmer) {
                    vm.levelOptions = device.getDimmerLevelOptions(1);
                }

                if (vm.levelOptions.length > 0) {
                    vm.timerSettings.level = vm.levelOptions[0].value;
                }

                refreshTimers();
            });

            vm.typeOptions = deviceTimerOptions.timerTypes;
            vm.timerSettings = deviceTimerConfigUtils.getTimerDefaultConfig();
        }

        function refreshTimers() {
            vm.selectedTimerIdx = null;

            deviceTimers.getTimers(vm.deviceIdx).then(function (items) {
                vm.timers = items;
            });
        }

        function setDeviceColor() {
            if (!vm.timerSettings.color || !vm.timerSettings.level) {
                return;
            }

            deviceLightApi.setColor(
                vm.deviceIdx,
                vm.timerSettings.color,
                vm.timerSettings.level
            );
        }

        function getTimerConfig() {
            var utils = deviceTimerConfigUtils;
            var config = Object.assign({}, vm.timerSettings);

            if (!utils.isDayScheduleApplicable(config.timertype)) {
                config.days = 0;
            }

            if ([6, 7, 10, 12].includes(config.timertype)) {
                config.days = 0x80;
            }

            if (utils.isOccurrenceApplicable(config.timertype)) {
                config.days = Math.pow(2, config.weekday);
            }

            config = Object.assign({}, config, {
                date: utils.isDateApplicable(config.timertype) ? config.date : undefined,
                mday: utils.isRDaysApplicable(config.timertype) ? config.mday : undefined,
                month: utils.isRMonthsApplicable(config.timertype) ? config.month : undefined,
                occurence: utils.isOccurrenceApplicable(config.timertype) ? config.occurence : undefined,
                weekday: undefined,
                color: vm.isLED ? config.color : undefined,
                tvalue: vm.isSetpointTimers ? config.tvalue : undefined,
                command: vm.isSetpointTimers ? undefined : config.command,
                randomness: vm.isSetpointTimers ? undefined : config.randomness
            });

            var error = deviceTimerConfigUtils.getTimerConfigErrors(config);

            if (error) {
                ShowNotify(error, 2500, true);
                return false;
            }

            var warning = deviceTimerConfigUtils.getTimerConfigWarnings(config);

            if (warning) {
                ShowNotify(error, 2500, true);
            }

            return config;
        }

        function addTimer() {
            const config = getTimerConfig();

            if (!config) {
                return false;
            }

            deviceTimers
                .addTimer(vm.deviceIdx, config)
                .then(refreshTimers)
                .catch(function () {
                    HideNotify();
                    ShowNotify($.t('Problem adding timer!'), 2500, true);
                });
        }

        function updateTimer(timerIdx) {
            const config = getTimerConfig();

            if (!config) {
                return false;
            }

            deviceTimers
                .updateTimer(timerIdx, config)
                .then(refreshTimers)
                .catch(function () {
                    HideNotify();
                    ShowNotify($.t('Problem updating timer!'), 2500, true);
                });
        }

        function deleteTimer(timerIdx) {
            return deviceTimers.deleteTimer(timerIdx)
                .then(refreshTimers)
                .catch(function () {
                    HideNotify();
                    ShowNotify($.t('Problem deleting timer!'), 2500, true);
                });
        }

        function clearTimers() {
            return deviceTimers
                .clearTimers(vm.deviceIdx)
                .then(refreshTimers)
                .catch(function () {
                    HideNotify();
                    ShowNotify($.t('Problem clearing timers!'), 2500, true);
                });
        }
    });
});
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
jackslayter
Messages : 1040
Inscription : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par jackslayter »

Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte
syrhus
Messages : 59
Inscription : 17 janv. 2018, 15:53

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par syrhus »

Une toute nouvelle mise à jour a été mise sur github:

- amélioration des performances
- facilité d'intégration (tant que ce n'est pas dans la branche principale de Dz) : moins de code à ajouter dans le fichier DeviceTimersController.js
ATTENTION, désormais le fichier planning.js se met sous www/app/timers et non plus sous le répertoire /js
- correction de certains bugs
Raspberry pi 3B+, Domoticz V4.7900 + beta, Z-WAVE stick Aeon Gen5, RFX 433Mhz
Steph38
Messages : 44
Inscription : 12 août 2015, 18:13

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par Steph38 »

Bonjour je doit etre un peu bete mais cela ne fonctionne pas chez moi malgres tous les conseils. Je suis sur un rpi cela peu influencer?

Merci
Steph38
Messages : 44
Inscription : 12 août 2015, 18:13

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par Steph38 »

Steph38 a écrit : 09 mars 2019, 19:50 Bonjour je doit etre un peu bete mais cela ne fonctionne pas chez moi malgres tous les conseils. Je suis sur un rpi cela peu influencer?

Merci
J'avais oublié de mettre à jours dans cette ligne
define(['app', 'timers/factories', 'timers/components','timers/planning']
barbedusud
Messages : 1
Inscription : 06 avr. 2019, 19:29

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par barbedusud »

bonjour,
J'ai installé Domoticz sur Windows 8 et cela fonctionne parfaitement.
J'ai essayé le script de programmation mais rien n'apparait, il n'y a aucun changement dans la page de planning.
J'ai parcouru toutes les pages mais je n'ai rien trouvé, aussi je m'interroge : l'ensemble de script fonctionne t-il sous windows ?
Merci d'avance
esspic
Messages : 24
Inscription : 20 déc. 2018, 12:46

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par esspic »

Bonjour,
je viens d'installer ce petit script.

Merci beaucoup, ça semble bien fonctionner.
Cependant, pas de nouvelles du concepteur depuis 2018 ? Est-ce que ce script est toujours maintenu ?
skarab22
Messages : 101
Inscription : 14 nov. 2019, 09:18

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par skarab22 »

Bonjour à tous,

Je viens d'arriver sur le forum grâce à ce super script. C'est vraiment un super développement. J'ai une petite question : quelle est la commande derrière "Tout désactiver".

J'aimerai à l'aide d'un script ou d'un interrupteur pouvoir le passer en mode manuel.
syrhus
Messages : 59
Inscription : 17 janv. 2018, 15:53

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par syrhus »

Bonjour à tous

j'ai mis à jour le code afin de contourner le bug qu'il y a sur le "clear" des timers.
Celui-ci efface tous les timers de TOUS les timerplans (gestion de profils)
Désormais, cela ne supprimer que les timers du profil (ou timerplan) actif.
Merci à skarab22 de m'avoir remonté ce problème.

Quant à la question du "Tout désactiver", cela conserver tous les timers mais les rend inactifs. C'est une sorte de "standby" qui évite d'avoir à supprimer le programme.
On peut voir sur la 1° colonne du tableau que les timers sont passés en inactif.

Si vous remarquez des bugs, n'hésitez pas à les remonter.

Ce code fonctionne sur tous les environnement, c'est du javascript cependant il y a toujours le problème du cache de l'application contre lequel je me bats avec le concepteur mais il ne veut rien savoir.

J'ai d'ailleurs modifié le fichier de cache pour ne plus avoir ces problèmes.

Mes codes sont disponible sous:
https://github.com/syrhus/domoticz-weekly-planning
Raspberry pi 3B+, Domoticz V4.7900 + beta, Z-WAVE stick Aeon Gen5, RFX 433Mhz
Dim33
Messages : 209
Inscription : 29 janv. 2017, 23:19

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Message par Dim33 »

bonjour Syrhus,

Compte tenu de tes compétences dans le domaine, as-tu un moyen d’éviter ce problème lié au planning de Domoticz ;

viewtopic.php?f=8&t=9127

Merci.
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 2020.2
Répondre