Aller au contenu

Recommended Posts

Bonjour à  tous cher amis domoticien :)

 

Voilà , faute de temps j'avais complétement délaisser ma HC2 et depuis 1 semaine, je reprends.

 

Après avoir jouer avec tous mes modules et quelques scènes en mode graphique dont je m'aperçois vite des limites, j'arrive au LUA et là , c'est le drame.

 

Je ne suis absolument pas programmeur et j'avoue avoir passé pas mal d'heure à  essayer de scripter un petit truc mais sans succès.

 

Si ça vous dit d'enrichir le forum et surtout de m'aider à  mettre en place ce script, n'hésitez pas :)

 

Donc voici le contexte :

- La Machine à  Laver est reliée à  un WallPlug.

- Quand le WallPlug est allumé et que la machine est également allumé mais ne fonctionne pas, elle consomme 4,6 w mini.

- A plein régime, elle monte à  plus de 2000w mais ensuite, une fois que l'eau est chaude, elle tourne plus vers les 120 - 140 w voire moins.

- Une fois le cycle de lavage complètement terminé, la machine reviens à  4,6w.

 

L'idée du script :

 

Je souhaiterais que la HC2 vérifier constamment si une machine est en cours ou pas.

Si une machine est en cours et qu'elle se termine, alors la HC2 envoie une notification push sur mon téléphone.

 

J'ai trouvé ceci mais pas pour HC2 :

https://www.kzenjoy.net/2015/domoticz-notification-de-votre-machine-a-laver/

 

J'ose même pas vous poster les tests que j'ai fait en LUA :)

 

A suivre donc...

 

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

ou bien tu utilises GEA. Il te sera très utile pour plein d'autres automatismes également.

Pour celui-ci : 1 ligne pour t'informer du début de la machine, et 1 ligne pour t'informer quand elle est finie

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci de vos réponses rapide !
 

Moicphil, j'avais bien vu ça mais je suis incapable de décoder le script et mon objectif est double, j'aimerai tant qu'a faire apprendre en plus de faire fonctionner ce script ;)
Je vais y regarder en détail et je vous tiens au courant.

 

Jojo, merci également mais alors là  GEA, je pige rien ! ^_^

Partager ce message


Lien à poster
Partager sur d’autres sites

Si on se base sur la consommation électrique, c'est assez simple.

 

Il te faut d'abord créer une variable global (exemple : "LAVELINGE") qui sera utilisée pour savoir si le lave linge est en cours de lavage ou non.

 

Puis utiliser le script suivant ... NON TESTE

 

Il faut remplace le 100 par l'ID de ton wallplug (dans l'entête ET id_wallplug = XXX)

Et l'ID de ton portable (id_portable = XXX)

 

Cela devrait fonctionner

--[[
%% properties
100 value
--]]

local id_wallplug = 100
local id_portable = 2

local consoArret = 4.6   -- en dessous de cette valeur on considère le lave-linge comme arrêté
local globalVariable = "LAVELINGE"

local conso = fibaro:getValue(id_wallplug, "value")
local status = fibaro:getGlobalValue(globalVariable)

-- la 1ère fois, la variable est vide donc on l'initialise à  OFF
if (status == "") then fibaro:setGlobal(globalVariable, "OFF")

if (conso <= consoArret) then
	-- arret de la machine
	if (status ~= "OFF") then
		-- si le status n'est pas encore à  OFF, on averti l'utilisateur de la fin
		fibaro:call(id_portable, "sendPush", "Fin du cycle de lavage")
	end
	fibaro:setGlobal(globalVariable, "OFF")
else
	if (status ~= "RUNNING") then
		-- si le status n'est pas encore à  RUNNING, on averti l'utilisateur du démarrage
		fibaro:call(id_portable, "sendPush", "Démarrage du lavage")
	end	
	fibaro:setGlobal(globalVariable, "RUNNING")
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Waouh, Merci beaucoup Steven,

 

Je viens de mettre en place cette scène en l'adaptant très facilement avec mes ID.

 

Reste plus qu'a attendre la prochaine machine :P

 

Je vous tiens au courant.

 

Encore merci !

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, j'étais confiant mais ça ne marche pas du premier coup.

 

Le code suivant :

--[[
%% properties
137 value
%% events
%% globals
--]]
 
local id_wallplug = 137
local id_portable = 96
 
local consoArret = 5   -- en dessous de cette valeur on considère le lave-linge comme arrêté
local globalVariable = "LAVELINGE"
 
local conso = fibaro:getValue(id_wallplug, "value")
local status = fibaro:getGlobalValue(globalVariable)
 
-- la 1ère fois, la variable est vide donc on l'initialise à  OFF
if (status == "") then fibaro:setGlobal(globalVariable, "OFF")

if (conso <= consoArret) then
	-- arret de la machine
	if (status ~= "OFF") then
		-- si le status n'est pas encore à  OFF, on averti l'utilisateur de la fin
		fibaro:call(id_portable, "sendPush", "Fin du cycle de lavage")
	end
	fibaro:setGlobal(globalVariable, "OFF")
else
	if (status ~= "RUNNING") then
		-- si le status n'est pas encore à  RUNNING, on averti l'utilisateur du démarrage
		fibaro:call(id_portable, "sendPush", "Démarrage du lavage")
	end	
	fibaro:setGlobal(globalVariable, "RUNNING")
end

Me retourne l'erreur : suivante :

 [DEBUG] 10:42:37: line 33: 'end' expected (to close 'if' at line 18) near 

J'ai donc ajouté un END à  la ligne 19 comme ceci :

--[[
%% properties
137 value
%% events
%% globals
--]]
 
local id_wallplug = 137
local id_portable = 96
 
local consoArret = 5   -- en dessous de cette valeur on considère le lave-linge comme arrêté
local globalVariable = "LAVELINGE"
 
local conso = fibaro:getValue(id_wallplug, "value")
local status = fibaro:getGlobalValue(globalVariable)
 
-- la 1ère fois, la variable est vide donc on l'initialise à  OFF
if (status == "") then fibaro:setGlobal(globalVariable, "OFF")
end
if (conso <= consoArret) then
	-- arret de la machine
	if (status ~= "OFF") then
		-- si le status n'est pas encore à  OFF, on averti l'utilisateur de la fin
		fibaro:call(id_portable, "sendPush", "Fin du cycle de lavage")
	end
	fibaro:setGlobal(globalVariable, "OFF")
else
	if (status ~= "RUNNING") then
		-- si le status n'est pas encore à  RUNNING, on averti l'utilisateur du démarrage
		fibaro:call(id_portable, "sendPush", "Démarrage du lavage")
	end	
	fibaro:setGlobal(globalVariable, "RUNNING")
end

Et maintenant j'ai cette erreur :

 [DEBUG] 10:44:52: line 20: attempt to compare string with number

Une idée ?

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Oups, en effet, désolé pour le END

 

Remplace la ligne

local conso = fibaro:getValue(id_wallplug, "value")

par

local conso = tonumber(fibaro:getValue(id_wallplug, "value"))

Partager ce message


Lien à poster
Partager sur d’autres sites

Un grand merci Steven, en effet, plus de problème DEBUG.

 

Toutefois, je viens de tester de mettre en service la machine et aucune notification de démarrage reçue.

 

J'attends la fin du cycle et vous tiens au courant si la notification de fin fonctionne.

Partager ce message


Lien à poster
Partager sur d’autres sites

es-tu sûr de l'id de ton device ?

tu peux la vérifier ainsi

http://<IP Box>/api/devices?type=iOS_device

vérifie également que ton device soit sélectionné dans "Configuration -> Access control" pour recevoir des notifs

Partager ce message


Lien à poster
Partager sur d’autres sites

En effet, un problème d'ID qui ne correspondait pas !

 

A la mise en service du script, je reçois de suite la notif fin de cycle.

 

Reste plus qu'a tester en mode de fonctionnement normal :)

 

Je vous tiens au courant.

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est curieux en fait, au démarrage de la machine, je reçois une notification qui indique "Fin de cycle de lavage" et puis plus rien.

 

Voici l'état de la conso pendant le cycle.

 

Capture

 

Ne faudrait-il pas que la mesure de conso soit inférieur à  4,6w pendant 2 min par exemple ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Juste pour situé, voici où j'en suis au niveau du code :

--[[
%% properties
137 value
%% events
%% globals
--]]
 
local id_wallplug = 137 --ID du Wallplug de la machine
local id_portable = 95 --ID du téléphone qui reçoit les notifications
local consoArret = 5   -- en dessous de cette valeur on considère le lave-linge comme arrêté
local globalVariable = "LAVELINGE" --Variable LAVELINGE
local conso = tonumber(fibaro:getValue(id_wallplug, "value")) --Variable = àla consomation actuelle du WallPlug
local status = fibaro:getGlobalValue(globalVariable) --Variable qui mémorise l'état du Lavelinge
 
-- la 1ère fois, la variable est vide donc on l'initialise àOFF
if (status == "") then fibaro:setGlobal(globalVariable, "OFF")
end

-- Si la conso est inférieure ou égale àla valeur mini définit dans consoArrêt
if (conso <= consoArret) then

	-- Arret de la machine
	if (status ~= "OFF") then
		-- si le status n'est pas encore àOFF, on averti l'utilisateur de la fin
        -- Envoie d'une notification sur le portable en mode Push
		fibaro:call(id_portable, "sendPush", "Machine terminée")
	end

	fibaro:setGlobal(globalVariable, "OFF")
    -- Et Passage de la variable statut àOFF

else
	if (status ~= "RUNNING") then
		-- si le status n'est pas encore àRUNNING, on averti l'utilisateur du démarrage
        -- Envoie d'une notification sur le portable en mode Push
		fibaro:call(id_portable, "sendPush", "Démarrage de la machine àlaver")
	end	

	fibaro:setGlobal(globalVariable, "RUNNING")
    -- Et Passage de la variable statut àRUNNING
end

Partager ce message


Lien à poster
Partager sur d’autres sites

moi, j'aurais mis power et pas value

Egalement, je ne modifie la variable que si nécessaire, jamais pour rien

Voici le code que je te propose d'essayer

--[[
%% properties
137 power
%% events
%% globals
--]]
 
local id_wallplug = 137 --ID du Wallplug de la machine
local id_portable = 95 --ID du téléphone qui reçoit les notifications
local consoArret = 5   -- en dessous de cette valeur on considère le lave-linge comme arrêté
local globalVariable = "LAVELINGE" --Variable LAVELINGE
local conso = tonumber(fibaro:getValue(id_wallplug, "power")) --Variable = àla consomation actuelle du WallPlug
local status = fibaro:getGlobalValue(globalVariable) --Variable qui mémorise l'état du Lavelinge
 
-- la 1ère fois, la variable est vide donc on l'initialise àOFF
if (status == "") then fibaro:setGlobal(globalVariable, "OFF")
end
 
-- Si la conso est inférieure ou égale àla valeur mini définit dans consoArrêt
if (conso <= consoArret) then
 
	-- Arret de la machine
	if (status ~= "OFF") then
		-- si le status n'est pas encore àOFF, on averti l'utilisateur de la fin
        -- Envoie d'une notification sur le portable en mode Push
		fibaro:call(id_portable, "sendPush", "Machine terminée")
	    -- Et Passage de la variable statut àOFF
		fibaro:setGlobal(globalVariable, "OFF")
	end
  
else
	if (status ~= "RUNNING") then
		-- si le status n'est pas encore àRUNNING, on averti l'utilisateur du démarrage
        -- Envoie d'une notification sur le portable en mode Push
		fibaro:call(id_portable, "sendPush", "Démarrage de la machine àlaver")
	    -- Et Passage de la variable statut àRUNNING
		fibaro:setGlobal(globalVariable, "RUNNING")
	end	
 
end

en fait regarde dans le json du device

http://<IP Box>/api/devices/<# id>

Partager ce message


Lien à poster
Partager sur d’autres sites

100% d'accord avec @jojo et désolé de t'avoir induit en erreur avec le "value"

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok, je viens de modifier le script et je vous tiens au courant.

 

Merci de votre aide et aucun souci Steven, j'essaye de comprendre et vous m'aidez beaucoup tout les deux ;)

 

Petite remarque : A chaque modification du script, je dois le démarrer avec le bouton démarrer et là , j'ai directement la notification "Fin de cycle".

Partager ce message


Lien à poster
Partager sur d’autres sites

Normalement, ce script doit s'exécuter automatiquement à  chaque changement de consommation de ta prise.

 

N'oublie pas de créer la variable globale : LAVELINGE

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon ça y est, les notifications arrivent.... sans arrêt à  chaque modification de la valeur du WallPlug j'ai l'impression.

 

Au démarrage de la machine 2-3 minutes où rien ne se passe et depuis, notification toute les 10 secondes ! :)

 

Je vais annuler le script en attendant la modif :P

Partager ce message


Lien à poster
Partager sur d’autres sites

pour aider àdébuguer, quelle notif reçois-tu

"Machine terminée" ou "Démarrage de la machine àlaver" ?

Partager ce message


Lien à poster
Partager sur d’autres sites

es-tu sûr et certain que la variable prédéfinie LAVELINGE est correctement crée, avec les 2 valeurs possibles "OFF" et "RUNNING"

EN RESPECTANT la casse ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Tout à  fait.

 

Je pense que le souci vient du fait que la machine ne cesse de passer de 0 à  xxx Watt sans arrêt et à  chaque fois que ça passe sous et au dessus des 5w, ça notif.

Partager ce message


Lien à poster
Partager sur d’autres sites

×