Switch on off sous condition - LUA

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
vb35
Messages : 3
Inscription : 12 mai 2022, 16:32

Switch on off sous condition - LUA

Message par vb35 »

Bonjour,

Je rencontre un problème que je n'arrive pas à résoudre étant totalement novice en programmation.

Je cherche à faire un petit script qui allume ou éteint une prise connectée, en fonction d'une température.

Contexte :

Domoticz : 192.168.1.11:8080
SondeTemperatureChauffage : 192.168.1.24
Prise chauffage : 192.168.1.25

Action rechercher :

Si "SondeTemperatureChauffage" >=25
Alors "Prise chauffage" = ON durant 20 secondes puis OFF
Récurrence de la commande : toutes les 15minutes

Je ne sais pas si vous allez pouvoir m'aider à intégrer ça en LUA ( si j'ai bien compris ) pour domoticz mais j'avoue que pour le moment je n'y comprend pas grand chose.. Et le Blockly proposé sur domoticz ne me permets pas de faire tout ça.

Par avance merci !

VB
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Switch on off sous condition - LUA

Message par Keros »

Bonjour vb35 et bienvenu sur le forum :)

Je ne comprends pas pourquoi tu nous donnes les différentes IP. Normalement tu dois avoir tes différentes prise et capteur dans DomoticZ? C'est bien le cas ? Tu vois la valeur du capteur de température et tu peux actionner ta prise depuis Domoticz ?

Concernant la programmation, j'ai écrit des petits guides dans ma présentation (voir lien dans ma signature) dont un concernant les début en programmation.

Dans le principe, un script de type Time s’exécute toutes les minutes. Si tu souhaites faire une récurrence toutes les 15 minutes, il va falloir vérifier l'heure et n'exécuter ton script que quand les minutes sont égales à 00, 15, 30 ou 45.
Ou sinon, tu peux regarder le langage DzVents dans lequel on peut utiliser une fonction every 15 minutes.
Mais cela est pour un second temps, essaye déjà de faire des action sur ta prise en fonction de la température. tu pourras complexifier le programme dans un deuxième temps.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Jeff
Messages : 1007
Inscription : 17 nov. 2016, 20:54
Localisation : Rennes (35)

Re: Switch on off sous condition - LUA

Message par Jeff »

En récupérant un script avec un relevé de température, je suis tombé la dessus, merci Pipiche :D , il y a plein d'exemple

A adapter mais comme tu as la fonction time, tu peux comme le dis Keros, faire minutesnow = 0 ou min = 15 ...

Code : Tout sélectionner

commandArray = {}

tempChbr = otherdevices_svalues['Temperature Chambre Parents']

-- get current time
        timenow = os.date("*t")
        minutesnow = timenow.min + timenow.hour * 60
        minutes = timenow.min
        hoursnow = timenow.hour

	-- at 21:00 let's switch on Ac if not yet done.
	if ( otherdevices_svalues['Temperature Chambre Parents'] >= 25 ) and (minutesnow == 0 or minutesnow == 15 ) then 
		
                commandArray[#commandArray +1]={['Clim Chambre Power']='On'}
	 end
	 
return commandArray
	
Version: 2023.1 sur VM Synology, docker Zwave Js UI (Z-stick GEN5, Fibaro...), Zigbeefordomoticz. Nextion RGB Led Screen
vb35
Messages : 3
Inscription : 12 mai 2022, 16:32

Re: Switch on off sous condition - LUA

Message par vb35 »

Bonjour tous les deux :)

Merci pour vos réponses !

Pour répondre à Keros, j'avais mis les IP car.. je pensais que dans le code lua il fallait renseigner l'emplacement de chaque périphérique ciblé par le script.

J'ai en effet déjà mes prises et mon capteur. Et j'ai donc bien renseigné une action en fonction de la température et la durée de l'action.
En revanche ce que je n'arrive pas à mettre en place aujourd'hui c'est mêler la récurrence avec la variable température.
J'aimerais que si la température est supérieur à tel degré, la prise se déclenche et qu' elle s'arrête au bout de 20s ( ça c'est ok ) en revanche j'aimerais que la prise ne puisse pas s'allumer de nouveau durant les 15 minutes après que celle ci ce soit arrêtée. Et c'est là que ça coince, je n'arrive pas à mettre ça en place avec le blockly.


Merci pour Jeff je vais étudier tout ça demain :) voir si comprend et si je pourrais adapter à ma situation :)

A bientôt
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Switch on off sous condition - LUA

Message par Keros »

Ce n'est pas évident de faire une tempo, surtout en Blocky. Une solution consisterait à déclencher un widget virtuel qui aurait un auto Off à 15 minutes. A la fin de ton script, tu déclenches la tempo. Au début du script, tu vérifies l'état de la tempo : si elle est allumée, c'est que ton script l'a allumée il y a moins de 15 minutes. Si elle est éteinte, tu peux faire tes actions et réactiver la tempo.
Sinon, en code (LUA ou DzVents), il est possible de récupérer le lastupdate d'un widget. En comparant avec l'heure actuelle, tu peux savoir depuis combien de temps le widget n'a pas été mis à jour.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
vb35
Messages : 3
Inscription : 12 mai 2022, 16:32

Re: Switch on off sous condition - LUA

Message par vb35 »

Hello, bon je n'ai pas réussi à faire ce que je voulais alors je suis passé par ailleurs en mettant simplement un timer sur le déclenchement de la prise. Ce n'est pas optimal pour ce que je voulais faire mais.. ça ira très bien pour le moment :)

Merci à vous pour votre aide
hestia
Messages : 397
Inscription : 12 sept. 2018, 22:36

Re: Switch on off sous condition - LUA

Message par hestia »

Hello
une solution avec dzVents, même si je ne suis pas sûr de comprendre exactement les spec 8-)

Code : Tout sélectionner

--[[

Si "SondeTemperatureChauffage" >=25
Alors "Prise chauffage" = ON durant 20 secondes puis OFF
Récurrence de la commande : toutes les 1 5minutes

]]--

SONDE_ID = 2560 -- 'nom' ou idx
TEMP_MAX = 25 -- temp maxi

PRISE_ID = 204 -- 'nom' ou idx
PRISE_SEC = 20 -- durée de la prise On
PRISE_TEMPO = 15 -- 


return {

    logging = 
            { level    =   domoticz.LOG_DEBUG },
            
    on =
        {
            timer =
            {
                'every minute',
            },
        },
	
	execute = function(dz, triggeredItem)
    _G.logMarker =  dz.moduleLabel -- set logmarker to scriptname 

    local devPrise = dz.devices(PRISE_ID)
    local devSonde = dz.devices(SONDE_ID)
    local lastUpdate = devPrise.lastUpdate.minutesAgo
    
    if devPrise.active then
        
        dz.log(devPrise.name .. " déjà allumée")    

    elseif lastUpdate < PRISE_TEMPO then
        
        dz.log(devPrise.name .. " allumée depuis " .. lastUpdate .. " minutes, soit moins de " .. PRISE_TEMPO .. " minutes" )
        
    elseif devSonde.temperature > TEMP_MAX then
        
        dz.log(devSonde.temperature .. ' > ' .. TEMP_MAX)
        devPrise.switchOn().forSec(PRISE_SEC)
        dz.log(devPrise.name .. " s'allume")
        
    else
        
        dz.log(devSonde.temperature .. ' <= ' .. TEMP_MAX)
        
    end


end
}
Répondre