Volets roulants Domotisé


#21

Voila ce a quoi je pensait

Tu a juste a changer les valeurs suivantes :

  • totalTime : par le temps total que met ton volet a descendre
  • divide : par ce que tu veux ici 2 pour que le volet s’arrête a moitier
  • device : par le device que tu souhaites descendre
  • action : par l’action que tu souhaites 1 ou 0 (monté ou descente)
var totalTime = 20
var divide = 2
var device = 14
var action = 0
var time = totalTime / divide
var query = `
    select id from devicetype where device = ?
  `
gladys.utils.sqlUnique(query, [ device ])
.then((row) => {
    gladys.deviceType.exec({
        devicetype: row.id,
        value: action
    })
    .then(() => 
        setTimeout(function(){ 
            gladys.deviceType.exec({
                devicetype: row.id,
                value: action
            })	
        }, time * 1000)
    )
})

Tien moi au courant @Alex44


#22

Si tu regardes la doc :
https://documentation.gladysproject.com/jsdoc/#gladysdevicetypegetbydevice

Je pense qu’on peut remplacer cette partie :

var device = 14
...
var query = `
    select id from devicetype where device = ?
  `
gladys.utils.sqlUnique(query, [ device ])
.then((row) => {
    gladys.deviceType.exec({
        devicetype: row.id,
        value: action
    })

par

var device = {
    id: 14
}
...
gladys.deviceType.getByDevice(device)
    .then(function(deviceType) {
        gladys.deviceType.exec({
            devicetype: deviceType.id,
            value: action
        })
    })

Sinon, question…
Pour que le volet s’arrête au 2/3, quelle valeur faut-il mettre dans la variable divide ?


#24

Effectivement :slight_smile:,
Merci pour getByDevice =D !

Sinon pour ta question :
il multiplie sont totalTime par 2 et pour divide il met 3. non ?
Sela ne reste que des maths selon moi.


#25

bonjour,

Soit scripte complet:

tvar totalTime = 20

var divide = 2
var device = {
id: 14
}
var action = 1
var time = totalTime / divide
gladys.deviceType.getByDevice(device)
.then(function(deviceType) {
gladys.deviceType.exec({
devicetype: deviceType.id,
value: action
})
})
.then(() =>
setTimeout(function(){
gladys.deviceType.exec({
devicetype: row.id,
value: action
})
}, time * 1000)
)


#26


#27

non avec la correction de @Pti_Nico cela donne ça :

var totalTime = 20
var divide = 2
var device = {
    id: 14
}
var action = 1
var time = totalTime / divide
gladys.deviceType.getByDevice(device)
.then(function(deviceType) {
    gladys.deviceType.exec({
        DeviceType: deviceType.id,
        value: action
    })
    .then(() =>
        setTimeout(function(){
            gladys.deviceType.exec({
                DeviceType: deviceType.id,
                value: action
            })	
        }, time * 1000)
    )
})

Cela fonctionne t’il @Alex44 ?


#29

il ne se passe rien avec le scénario ou en lançant le script direct.
Device bonne, durée bonne aussi.


#30

Mathématique, mais pas logique :roll_eyes:


#31

Tu n’as rien dans les logs (pm2 log) ?

Peut être que je me trompe ^^
Tu ferais comment ? :slight_smile:


#32


#33

@spenceur ça ne peux pas fonctionner XD

Et ton script me paraît super compliqué non ?

Pourquoi ne pas tout simplement faire ça =>

var device = {
       deviceType: 14, // id de ton deviceType
       value: 1
}

var time = 2000 // 2000 millisecondes correspondant à 20 secondes 

gladys.deviceType.exec(device)
          .then(() => {
                   setTimeout(function(){
                              gladys.deviceType.exec(device)
                   }, time)
          })

@Alex44 tu peux essayer ? Je suis pas sûr car j’ai écrit le script comme ça sur le forum par contre XD


#34

40


#35

J’ai corrigé dans mon message précédant @Alex44


#36

13


#37

J’ai recorrigé dans mon précédent message :sweat_smile:


#38

Perso mes volets se ferment si il fait trop chaud grace à un scénario lié au thermometre et lance le script suivant:
gladys.param.getValue(volet_is_half)
.then((net_code) => {
if(net_code==0){
gladys.deviceType.exec({
devicetype: 322,
value: 0
});
gladys.deviceType.exec({
devicetype: 321,
value: 1
});
setTimeout(function(){
gladys.deviceType.exec({
devicetype: 321,
value: 0
})
},7000);
gladys.param.setValue({
name:‘volet_is_half’,
value:1
})
}
})

j’ai créé un paramètre et je le réinitialise au couché du soleil.


#39

Plutôt que diviser, je multiplie par un coéff (1 pour 100%, 0.5 pour 50%, 0.25 pour 25%, …).

var totalTime = 20
var divide = 0.2
...
var time = totalTime * divide

Là on aurait une ouverture/fermeture à 20%


#40

Il est vrais que cela semble mieux.
Merci.
Je te laisse donc aidé @Alex44 avant que je dise autre chose d’idiot :smiley:


#42

Bonjour BenPi,

Je dois aussi choisir pour mes volets entre du Somfy et du M-soft 2. Qu’as tu choisi ? as tu trouvé comment les faire communiquer avec le Raspi ?


#43

Mes volets ne sont pas encore installés. Mais le devis est signé!
En revanche mon moteur est somfy et ma commande est Msoft 2. Le constructeur a du vouloir économiser la commande somfy :slight_smile: