Page 6 sur 13

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 17 déc. 2018, 21:27
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);
                });
        }
    });
});

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 18 déc. 2018, 08:13
par jackslayter

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 21 déc. 2018, 14:56
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

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 09 mars 2019, 19:50
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

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 10 mars 2019, 12:34
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']

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 06 avr. 2019, 19:34
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

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 08 nov. 2019, 09:33
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 ?

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 14 nov. 2019, 09:28
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.

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 18 nov. 2019, 14:14
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

Re: Programmation hebdomadaire pour chauffage ou interrupteurs

Publié : 19 nov. 2019, 23:56
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.