Paramétrage pompe à chaleur Caliente

Sous forum dédié au plugin MQTTMAPPER de FlyingDomotic
Merci de poster vous questions concernant ce plugin ici et non pas dans le forum MQTT directement
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Plugin MQTT de FlyingDomotic

Message par knasson »

Pour l'inter marche Arret de la pompe
j'ai écrit ca:

Code : Tout sélectionner

 "PompeMarcheArret": {"topic": "/home/alsavo/config/4",
        "type":"244","subtype":"62","switchtype":"8",
        "mapping":{"item":"value","default":"1","values":{"Off":0}},
        "set": {"command":"plugins/MqttMapper/alsavoSetMA.sh 4 # "}
        }
avec alsavoSetMA.sh

Code : Tout sélectionner

  
#!/bin/bash
#value=$(echo "scale=0; $2 / 1" | bc)
value=$($2 -o 32) (bit 5 à 1)
/home/kan/AlsavoCtrl/build/AlsavoCtrl -s 824500039214 -l 8608 -a 192.168.1.66 -p 1194 $1 $value  | python3 mqpublish.py
est ce l'idée? (sauf que ca ne marche pas :roll: .....) en fait je ne sais pas trés bien ce que recupere le "#" du script."Les dispositifs caches" , je ne vois pas tres bien de quoi il s'agit...
si tu peux aider j'accepte volontier....
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

Re: Plugin MQTT de FlyingDomotic

Message par Flying Domotic »

L'idée est bonne, mais il ne sera pas possible de l'implémenter de cette façon, puisqu'il faut concaténer l'ensemble des (autres) bits qui sont à zéro dans ton exemple.

On doit donc faire cette opération à un endroit où on dispose de l'ensemble des inters/sélecteurs utiles à un index. Le plus simple, c'est de le faire dans Domoticz, avec un script en dzVents.

Pour commencer, on va créer des dispositifs cachés pour récupérer les 2 index qui nous intéressent :

Code : Tout sélectionner

{
    "Clim config 4": {"topic": "/home/alsavo/config/4",
        "type": "243", "subtype": "31", "switchtype": "0",
        "options": {"Custom":"1;Bitmap"},
        "visible": false,
        "mapping":{"item":"value"},
        "set": {"command":"plugins/MqttMapper/alsavoSet.sh 4 #"}
    },
    "Clim config 16": {"topic": "/home/alsavo/config/16",
        "type": "243", "subtype": "31", "switchtype": "0",
        "options": {"Custom":"1;Bitmap"},
        "visible": false,
        "mapping":{"item":"value"},
        "set": {"command":"plugins/MqttMapper/alsavoSet.sh 16 #"}
    }
}
Concernant la commande a exécuter, ce doit être la même que pour les dispositifs précédents, on va faire la concaténation dans Domoticz.

Note : un truc que je n'ai pas compris, c'est le contenu des topics MQTT. Est-ce qu'ils contiennent du JSON (genre "value": 12345), ou simplement la valeur (genre 12345) ? Dans le premier cas, il faut utiliser la syntaxe "Item":"value", dans le second "item":"".

On peut aller dans l'onglet "Configuration" > "Dispositifs" pour vérifier que les 2 nouveaux dispositifs sont bien nommés "Clim config 4" et "Clim config 16". Si ce n'est pas le cas, cliquer sur le crayon à papier en bout de ligne pour corriger (selon les cas, Domoticz ajoute (ou non) le nom du plugin devant le nom du dispositif).

Ensuite, on va créer les 2 inters et les 3 sélecteurs virtuels ("ventilo auto" ne sert à rien, il n'a qu'une valeur possible ;-)

Pour ça, vérifier qu'on a bine un hardware ("Configuration" > "Matériel") de type "Dummy (Does nothing, use for virtual switches only)". Si ce n'est pas le cas, le créer.

Cliquer ensuite sur le bouton "Créer un capteur virtuel", saisir "Pompe clim" et choisir le type "Interrupteur". Valider. Recommencer avec "Horloge clim" et toujours "Interrupteur".

Créer ensuite 3 sélecteurs nommés "Mode clim", "Ventilateur chaud", "Ventilateur froid" de type "Interrupteur sélecteur".

Aller dans l'onglet "Interrupteurs" et cliquer sur "Modifier" du widget "Mode clim".

Sélectionner "Menu de sélection".

Cocher "Cacher le niveau Off".

Dans la partie "Niveaux du sélecteur", localiser la ligne "10 - Niveau 1" et cliquer sur le crayon en fin de ligne. Saisir "Chauffage" et cliquer "Renommer". Faire de même sur la ligne 20 qui devient "Auto" et 30 "Rafraîchissement".

Cliquer sur "Sauvegarder".

On peut vérifier que "Mode clim" montre bien une liste déroulante avec "Chauffage/Auto/Rafraîchissement".

Faire pareil avec "Ventilateur froid" et "Ventilateur chaud" et les item 10 "Silencieux", 20 "Faible" et 30 "Fort".

Avec ça, on a déjà récupéré les 2 configurations MQTT, et crée les interrupteurs et sélecteurs virtuels.

Reste à écrire la lecture des configuration et leur écriture. Je tente ça ce soir ...

Comme j'ai un doute sur la façon de coder l'index 16, je veux bien récupérer quelques valeurs lues par MqttMapper et la signification externe des modes de ventilation. Pour ça, on peut aller dans l'onglet "Configuration" > "Dispositifs", repérer la ligne "Clim config 16" et relever la valeur de la colonne "Données" après avoir défini différentes vitesses de ventilateur de façon externe.
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Plugin MQTT de FlyingDomotic

Message par knasson »

Note : un truc que je n'ai pas compris, c'est le contenu des topics MQTT. Est-ce qu'ils contiennent du JSON (genre "value": 12345), ou simplement la valeur (genre 12345) ? Dans le premier cas, il faut utiliser la syntaxe "Item":"value", dans le second "item":"".
il contienne du json genre "value":XXX donc a priori on doit ultiser la syntaxe "value"

les differentes valeurs recues sur index 16
sont 0, 1, 2
0 :Mode Silencieux
1 :Mode smart
2: Mode Powerful
MqttMapper.png
MqttMapper.png (21.84 Kio) Consulté 2003 fois
voila c'est prêt!
MqttMapper2.png
MqttMapper2.png (72.05 Kio) Consulté 2000 fois
MqttMapper.png
MqttMapper.png (21.84 Kio) Consulté 2003 fois
Pièces jointes
MqttMapper3.png
MqttMapper3.png (273.26 Kio) Consulté 1999 fois
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

Re: Plugin MQTT de FlyingDomotic

Message par Flying Domotic »

Ok, j'ai été jeter un oeil sur AlsavoCtrl, et ai pigé que la formulation sous forme de table n'était pas une concaténation, mais juste une valeur unique.

Du coup, les sélecteurs "PAC chauffage" et "PAC froid" peuvent être détruits, il ne seront pas utilisés, on peut faire cette partie directement dans MqttMapper.

De même, il faut détruire le dispositif "Clim config 16" puis remplacer sa définition dans le fichier de config MqttMapper par :

Code : Tout sélectionner

{
    "Clim config 4": {"topic": "/home/alsavo/config/4",
        "type": "243", "subtype": "31", "switchtype": "0",
        "options": {"Custom":"1;Bitmap"},
        "visible": false,
        "mapping":{"item":"value"},
        "set": {"command":"plugins/MqttMapper/alsavoSetNum.sh 4 #"}
    },
    "PAC ventilateur": {"topic": "/home/alsavo/config/16",
        "type": "244", "subtype": "62", "switchtype": "18",
        "options": {"SelectorStyle":"1", "LevelOffHidden": "false", "LevelNames":"Silencieux|Smart|Powerful"},
        "mapping": {"item": "value", "default": "0", "values": {"0": "0", "1": "10", "2": "20"}},
        "set": {"command":"plugins/MqttMapper/alsavoSetNum.sh 16 #"}
    }
}
Le fichier de commande est légèrement différent, vu qu'on n'est plus en flottant mais en entier. Créer un fichier alsavoSetNum.sh qui contient :

Code : Tout sélectionner

#!/bin/bash
[chemin où est installé AlsavoCtrl]/AlsavoCtrl -s 824500039214 -l 8608 -a 192.168.1.66 -p 1194 $1 $2  | python3 mqpublish.py
Ne pas oublier le
chmod +x alsavoSetNum.sh
Ne reste que le script de décoding/coding de config/4. Je m'y attelle !
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Plugin MQTT de FlyingDomotic

Message par knasson »

Formidable!
le PAC "regime de marche" qui correspondant a ce que tu as appelé "PAC ventilateur" dans le fichier MqttMapper.json fonctionne déjà
MqttMapper4.png
MqttMapper4.png (265.12 Kio) Consulté 1978 fois
tu dois etre enseignant non? car tes explications sont toujours claires.
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

Re: Plugin MQTT de FlyingDomotic

Message par Flying Domotic »

Perdu, je ne suis pas du tout enseignant ;-)

Bon, voici un script dzVents qui devrait permettre de faire la correspondance entre les 2 switchs pompe et horloge et le sélecteur de mode.

Code : Tout sélectionner

-- Gestion de l'élément config 4 de la PAC
local config4Device = "Clim config 4"
local pompeDevice = "Pompe PAC"
local horlogeDevice = "Horloge PAC"
local modeDevice = "PAC modes"

return {
	on = {devices = {config4Device, pompeDevice, horlogeDevice, modeDevice}},
	execute = function(domoticz, device)

        -- Fonction de changement d'un switch depuis config4
        function changeSwitch(setDevice, newState)
            if setDevice.active ~= newState then                                      -- Doit on changer le switch ?
                print(config4Device..": Mets "..setDevice.name.." à "..tostring(newState))
                if newState then
                    setDevice.switchOn()
                else
                    setDevice.switchOff()
                end
            end
        end

        -- Fonction de changement d'un sélecteur depuis config4
        function changeSelector(setDevice, newLevel)
            if setDevice.levelVal ~= newLevel then                              -- Doit on changer la valeur ?
                print(config4Device..": Mets "..setDevice.name.." à "..tostring(newLevel))
                setDevice.setLevel(newLevel)
            end
        end

        -- Fonction de changement de config4 depuis un switch
        function changeConfigSwitch(changedDevice, oldState)
            if changedDevice.active ~= oldState then                             -- Doit on changer le switch
                print(config4Device..": Config4 modifié par "..changedDevice.name.." à "..tostring(changedDevice.active))
            end
            return changedDevice.active
        end

        -- Fonction de changement de config4 depuis un sélecteur
        function changeConfigSelector(changedDevice, oldLevel)
            if changedDevice.levelVal ~= oldLevel then                          -- Doit on changer la valeur ?
                print(config4Device..": Config4 modifié par "..changedDevice.name.." à "..tostring(changedDevice.levelVal))
            end
            return changedDevice.levelVal
        end

        -- Fonction de chargement de config4
        function setConfig4(pompe, horloge, mode)
            local setValue = (mode / 10) + 23                                   -- Mode 10 = 24, 20 = 25, 30 = 26
            if (pompe ~= 0) then
                setValue = setValue + 32                                        -- Pompe + 32
            end
            if (horloge ~= 0) then                              
                setValue = setValue + 132                                       -- Horloge + 132
            end
            if domoticz.devices(config4Device).levelVal ~= setValue then        -- Doit on changer config4?
                print(config4Device..": Défini config4="..tostring(setValue))   -- Oui
                domoticz.devices(config4Device).updateCustomSensor(setValue)
            end
        end

	    -- Décoder config4. Si le contenu n'est pas comme attendu, ne rien faire
	    local config4 = domoticz.devices(config4Device).sensorValue             -- Lit la valeur de config4
		local horloge = false   
		if config4 >= 132 then                                                  -- Horloge = 132
            horloge = true
            config4 = config4 - 132
		end
		local pompe = false
		if config4 >= 32 then                                                   -- Pompe = 32
		    pompe = true
		    config4 = config4 - 32
		end
		if config4 < 24 or  config4 > 26 then                                   -- Mode = 24 (Froid), 25 (Chaud) ou 26 (Auto)
		    print(config4Device..": ?? Ne sait pas décoder config4="..tostring(domoticz.devices(config4Device).sensorValue))
		else
		    mode = (config4 - 23) * 10                                          -- Mode 24 = froid (10), 25 = chaud (20), 26 = auto (30)
            -- Ici, config4 semble correct, voir ce qui a changé et agir en conséquence
            if device == domoticz.devices(config4Device) then
                -- C'est config4 qui a été modifié
                print(config4Device..": Reçu "..tostring(domoticz.devices(config4Device).sensorValue)..", pompe="..tostring(pompe)..", horloge="..tostring(horloge)..", mode="..tostring(mode)) 
                changeSwitch(domoticz.devices(pompeDevice), pompe)              -- Aligner les valeurs
                changeSwitch(domoticz.devices(horlogeDevice), horloge)
                changeSelector(domoticz.devices(modeDevice), mode)
            elseif device == domoticz.devices(pompeDevice) then
                -- C'est la pompe qui a changé
                changeConfigSwitch(domoticz.devices(pompeDevice), pompe)         -- Aligner les valeurs
            elseif device == domoticz.devices(horlogeDevice) then
                -- C'est l'horloge qui a changé
                changeConfigSwitch(domoticz.devices(horlogeDevice), horloge)
            elseif device == domoticz.devices(modeDevice) then
                -- C'est le mode qui a changé
                changeConfigSelector(domoticz.devices(modeDevice), mode)
            else
                -- On a été activé par un device inconnu. Bug de Domoticz?
                print(config4Device..": ?? Je ne comprends pas le changement de "..device.name..", idx="..device.id)       
            end
        end
end
}
Pour le charger dans Domoticz, il faut utiliser "Configuration" > "Plus d'options" > "Evènements", puis cliquer le sur "+" et choisir "dzVents" > "device". Virer le texte "standard" qui est affiché et coller le code ci-dessus. Donner un nom au script (genre "PAC config 4") dans le cadre en haut, à gauche, à côté de "On" et "Off", cliquer sur "On", puis sur "Sauvegarder" en haut à droite.

Vérifier qu'un changement des paramètres d la clim sur la clim change bien les widget de Domoticz. Vérifier que le changement des switchs et du sélecteur provoque bien un changement d'état de la clim.

Le log de Domoticz ("Configuration" > "Log") trace ce qui se passe. Il est habile de copier son contenu (sur les parties relatives à la clim) ici en cas d'erreur, l'explication est souvent dans le log.

Noter qu'il faut changer l'ordre du sélecteur "PAC modes" à 10 = Froid, 20 = Chaud et 30 = Auto, vu la façon dont le script les utilise.

Si les noms de dispositifs ont changé, les mettre à jour dans les 4 premières variables du script.
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Plugin MQTT de FlyingDomotic

Message par knasson »

Merci pour le script
le dzvent n'est pas ma tasse de thé, je connais davantage le LUA. Donc j'aurai un peu plus de mal a débugger.

j'ai bien modifié l'ordre des niveaux du selecteurs froid->chaud->auto

Ce que j'observe c'est lorsque j'actionne les switchs "pompe PAC" ou "Horloge PAC" ils reviennent à "Off" au bout de quelques secondes et la pompe ne demarre pas.
Rmq: Pour moi ce sont des données d'entrées et ne peuvent pas être modifiées par le script.
du même le choix du niveau du selecteur dans "PAC modes" (sauf lorsque l'horloge est à "On" dans ce cas le mode est obligatoirement "auto" et le régime à "smart").
--->dans les log domoticz je ne vois pas grand chose, pas d'erreur en tous cas.
ce que je comprends c'est que le script passe les datas à la pompe par "Clim config 4" peux tu confirmer?
voila les premiers retours.
A noter que si j'envoie les datas directement avec le script "alsavoSetNum.sh" x x en mettant une ligne de commande dans le niveau du selecteur.
comme ceci:
MqttMapper5.png
MqttMapper5.png (217.7 Kio) Consulté 1971 fois
-si j'envoie le code 57 la pompe demarre bien en "chauffage"
-il suffit que j'envoie n'importe quel code 24 ou 25 ou 26 ou 157 ou 158 ou 156 pour que la pompe s'arrete.
je vais essayer de comprendre ton script dzvent pour voir comment tu passes par "Clim config4" pour envoyer les datas àla pompe.
la je sens qu'on est pas loin ...quelques petits ajustements et ca devrait le faire.
encore merci de ton aide précieuse et de ta disponibilité.
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

Re: Plugin MQTT de FlyingDomotic

Message par Flying Domotic »

Je dois pouvoir réécrire le script en LUA si besoin ... Après, dzVents n'est pas très compliqué.

Le principe :
  • le script écoute les changements du topic config/4. Quand il y a un changement, on découpe les infos en switch pompe et horloge ainsi que dans le sélecteur modes.
  • le script écoute également les changements des switchs et du sélecteur. Quand il y a un changement, on reconstitue le topic config/4, puis le charge
  • lorsqu'il y a une modif dans config/4, MqttMapper intercepte la modif et lance le script alsavoSetNum.sh pour modifier la PAC.
  • Le script de lecture de la PAC charge la nouvelle version de config/4, qui est intercepté par le script d'écoute des changements, ce qui met à jour Domoticz.
Il faut bien vérifier que le nom chargé dans configDevice est bien exactement celui indiqué dans le widget et dans "Configuration" > "Dispositifs" (il arrive que Domoticz ajoute le nom du plugin devant le nom indiqué dans le fichier de config).

Si ça ne fonctionne toujours pas, faire une modif sur la pompe depuis Domoticz et m'envoyer la partie du log qui tourne autour de la modif.
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Plugin MQTT de FlyingDomotic

Message par knasson »

Si ça ne fonctionne toujours pas, faire une modif sur la pompe depuis Domoticz et m'envoyer la partie du log qui tourne autour de la modif.
bon j'ai essayé mais ca ne fonctionne pas.
les logs la j'ai activé le niveau
voici ce que je peux relever dans l'onglet erreur:

Code : Tout sélectionner

2024-06-04 09:57:07.383 Error: dzVents: Error: (3.1.8) ...oticz/scripts/dzVents/generated_scripts/PAC config 4.lua:81: attempt to call a nil value (global 'changeSwitch')
2024-06-04 09:57:21.826 Error: dzVents: Error: (3.1.8) An error occurred when calling event handler PAC config 4
2024-06-04 09:57:21.826 Error: dzVents: Error: (3.1.8) ...oticz/scripts/dzVents/generated_scripts/PAC config 4.lua:81: attempt to call a nil value (global 'changeSwitch')
2024-06-04 09:58:04.391 Error: dzVents: Error: (3.1.8) An error occurred when calling event handler PAC config 4
2024-06-04 09:58:04.391 Error: dzVents: Error: (3.1.8) ...oticz/scripts/dzVents/generated_scripts/PAC config 4.lua:81: attempt to call a nil value (global 'changeSwitch')
2024-06-04 09:58:17.132 Error: dzVents: Error: (3.1.8) An error occurred when calling event handler PAC config 4
2024-06-04 09:58:17.132 Error: dzVents: Error: (3.1.8) ...oticz/scripts/dzVents/generated_scripts/PAC config 4.lua:81: attempt to call a nil value (global 'changeSwitch')
2024-06-04 09:58:33.607 Error: dzVents: Error: (3.1.8) An error occurred when calling event handler PAC config 4
2024-06-04 09:58:33.607 Error: dzVents: Error: (3.1.8) ...oticz/scripts/dzVents/generated_scripts/PAC config 4.lua:81: attempt to call a nil value (global 'changeSwitch')
2024-06-04 09:58:45.241 Error: dzVents: Error: (3.1.8) An error occurred when calling event handler PAC config 4
2024-06-04 09:58:45.241 Error: dzVents: Error: (3.1.8) ...oticz/scripts/dzVents/generated_scripts/PAC config 4.lua:81: attempt to call a nil value (global 'changeSwitch')
2024-06-04 09:59:01.435 Error: dzVents: Error: (3.1.8) An error occurred when calling event handler PAC config 4
2024-06-04 09:59:01.435 Error: dzVents: Error: (3.1.8) ...oticz/scripts/dzVents/generated_scripts/PAC config 4.lua:81: attempt to call a nil value (global 'changeSwitch')
2024-06-04 13:39:36.612 Error: dzVents: Error: (3.1.8) An error occurred when calling event handler PAC config 4
2024-06-04 13:39:36.612 Error: dzVents: Error: (3.1.8) ...oticz/scripts/dzVents/generated_scripts/PAC config 4.lua:64: attempt to compare number with string
la j'ai activé l'onglet "auto" du "PAC modes" mais ca revient sur "chauffage"
sinon je vois ça

Code : Tout sélectionner

2024-06-04 16:31:40.358 Status: dzVents: Debug: Processing device-adapter for Clim config 4: Custom sensor device adapter
2024-06-04 16:31:40.360 Status: dzVents: Debug: - Device: Clim config 4
2024-06-04 16:31:40.371 Status: dzVents: Info: Handling events for: "Clim config 4", value: "25"
2024-06-04 16:31:40.371 Status: dzVents: Info: ------ Start internal script: PAC config 4: Device: "Clim config 4 (PAC Calient)", Index: 1228
2024-06-04 16:31:40.372 Status: dzVents: Clim config 4: Reçu 25, pompe=false, horloge=false, mode=20
2024-06-04 16:31:40.374 Status: dzVents: Info: ------ Finished PAC config 4
dis moi si ca te parle...
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Plugin MQTT de FlyingDomotic

Message par knasson »

bonjour,

voila ma representation du fonctionnement de la PAC tel que je souhaiterai que ca fonctionne.
Pièces jointes
logiPAC.png
logiPAC.png (428.85 Kio) Consulté 1930 fois
Répondre