pzim-devdata / tahoma

[UP TO DATE] Command Line Interface to Control ALL Somfy's Devices. 100% functional with ChatGPT
MIT License
5 stars 34 forks source link

Cozytouch #8

Closed Flavien06 closed 6 months ago

Flavien06 commented 6 months ago

Bonjour Comment utiliser l'application avec un Cozytouch ?

Dans les serveur il n'y est pas?

Paste which server you want to use : somfy_europe , somfy_america or somfy_oceania :
cozytouch
The server you provided in incorrect ! 'somfy_europe' will be used instead

Ou j'ai louper quelque choses ? Merci

pzim-devdata commented 6 months ago

Bonjour, Comme je n'ai pas de Cozytouch, je ne pouvais pas tester lors de l'écriture du programme Je vais essayer de publier une modification avec Cozytouch comme serveur ce we

Flavien06 commented 6 months ago

OK, merci, si besoin je suis dispo pour faire des test.

pzim-devdata commented 6 months ago

En attendant vous pouvez modifier dans le dossier temp du dossier tahoma le fichier texte qui contient le nom du serveur (*/tahoma/temp/server_choosen.txt) et y mettre atlantic_cozytouch au lieu de somfy_europe :

  1. Exécutez jusqu'au bout la configuration tahoma -c et indiquez comme serveur somfy_europe
  2. Puis modifier le fichier texte qui contient le nom du serveur server_choosen.txt pour remplacer somfy_europe par atlantic_cozytouch
  3. Enfin executer tahoma -g pour récupérer la configuration du domicile

Si ça fonctionne je pourrai y ajouter cozytouch lors de la prochaine mise à jour. Merci

pzim-devdata commented 6 months ago

ATLANTIC_COZYTOUCH = "atlantic_cozytouch" BRANDT = "brandt" FLEXOM = "flexom" HEXAOM_HEXACONNECT = "hexaom_hexaconnect" HI_KUMO_ASIA = "hi_kumo_asia" HI_KUMO_EUROPE = "hi_kumo_europe" HI_KUMO_OCEANIA = "hi_kumo_oceania" NEXITY = "nexity" REXEL = "rexel" SIMU_LIVEIN2 = "simu_livein2" SOMFY_DEVELOPER_MODE = "somfy_developer_mode" SOMFY_EUROPE = "somfy_europe" SOMFY_AMERICA = "somfy_america" SOMFY_OCEANIA = "somfy_oceania" UBIWIZZ = "ubiwizz"

Flavien06 commented 6 months ago

Ça ne me donne rien:

~/.local/pipx/venvs/tahoma/lib/python3.9/site-packages/tahoma/temp $ tahoma -g
'thermor_cozytouch\n'

il y a moment de voir un log si la connexion à bien marcher?

pzim-devdata commented 6 months ago

Pour voir si la connection s'est bien passée vous pouvez essayer avec un faux identifiant : tahoma -g --username fauxidentifiant Et voir si le message est different. Pour le reste, vu que je n'ai pas de hub Cozytouch, je ne sais pas quoi faire. La réponse aurait du etre du genre: Device 'thermor_cozytouch' NOT controlled by tahoma yet Le code est inspiré de https://github.com/iMicknl/python-overkiz-api Il existe un plugin home assistant si ca peut aider. Vous pouvez demander de l'aide concerant le hub thermor cozytouch : https://github.com/iMicknl/python-overkiz-api/issues?q=cozytouch+ Regardez le tuto pour faire votre propre programme python : https://github.com/iMicknl/python-overkiz-api/issues/759 Désolé

Flavien06 commented 6 months ago

J'ai fait le test avec le script d'exemple "API cloud" sur python-overkiz-api je me suis rendu compte qu'il faut utiliser le serveur "atlantic_cozytouch"

tahoma -g

Box,internal://0806-0062-6844/pod/0,Pod,Pod,internal:PodMiniComponent
Box,internal://0806-0062-6844/pod/0,Pod,Pod,internal:PodMiniComponent
Device 'Box' NOT controlled by tahoma yet

IO (10770623),io://0806-0062-6844/10770623,IOStack,ProtocolGateway,io:StackComponent
IO (10770623),io://0806-0062-6844/10770623,IOStack,ProtocolGateway,io:StackComponent
Device 'IO (10770623)' NOT controlled by tahoma yet

Radiateur,io://0806-0062-6844/13690302#1,AtlanticElectricalHeaterWithAdjustableTemperatureSetpoint,HeatingSystem,io:AtlanticElectricalHeaterWithAdjustableTemperatureSetpointIOComponent
Radiateur,io://0806-0062-6844/13690302#1,AtlanticElectricalHeaterWithAdjustableTemperatureSetpoint,HeatingSystem,io:AtlanticElectricalHeaterWithAdjustableTemperatureSetpointIOComponent
Device Radiateur controled by tahoma. Added to : /home/pi/.local/pipx/venvs/tahoma/lib/python3.9/site-packages/tahoma/temp/heaters.txt
.....
pzim-devdata commented 6 months ago

Parfait. Du coup je vais pouvoir ajouter Cazytouch au programme. Je ferai ça ce we. Maintenant vous pouvez executer les commandes tahoma eco heater radiateur Ou tahoma confort chauffage radiateur Ou tahoma off chauffage radiateur Etc... Est-ce que tout fonctionne maintenant ? Merci

Flavien06 commented 6 months ago

J'ai 2 appareil Radiateur (Salon) et PASS_Actuator (Salle de bain) avec PASS_Actuator les commande confort, confort-1,confort-2, eco ,horsgel et eteindre fonctionne bien. pour Radiateur confort, confort-1,confort-2, eco passe à 19° et horsgel ou off passe à 0°

Leur fonctionnement est différent dans l’application : Screenshot_20240118-184948 Screenshot_20240118-185008

Avec overkiz j'ai exporter des donner des 2 radiateur et capteur que voici :

{ "label": "Radiateur", "id": "io://0806-0062-6844/13690302#1", "widget": "AtlanticElectricalHeaterWithAdjustableTemperatureSetpoint", "states": [ {"name": "core:NameState", "value": "Radiateur"}, {"name": "core:OnOffState", "value": "on"}, {"name": "io:TargetHeatingLevelState", "value": "comfort"}, {"name": "core:StatusState", "value": "available"}, {"name": "core:ComfortRoomTemperatureState", "value": 19}, {"name": "core:EcoRoomTemperatureState", "value": 3},
{"name": "core:OperatingModeState", "value": "internal"}, #value: auto/standby/basic/internal {"name": "core:OccupancyActivationState", "value": "active"}, Détection precense {"name": "core:TargetTemperatureState", "value": 19.0}, {"name": "io:SetpointLoweringTemperatureInProgModeState", "value": 3.0}, {"name": "core:OpenWindowDetectionActivationState", "value": "active"}, # Détection fenetre ouverte {"name": "io:InternalExternalSchedulingTypeState", "value": "internal"}, {"name": "io:EffectiveTemperatureSetpointState", "value": 19.0}, {"name": "core:PreviousTargetTemperatureState", "value": 19.0}, ] }, { "label": "IO (13690302#2)", "id": "io://0806-0062-6844/13690302#2", "widget": "TemperatureSensor", "states": [ {"name": "core:StatusState", "value": "available"}, {"name": "core:TemperatureState", "value": 18.5} ] }, { "label": "IO (13690302#3)", "id": "io://0806-0062-6844/13690302#3", "widget": "ContactSensor", "states": [ {"name": "core:StatusState", "value": "available"}, {"name": "core:ContactState", "value": "closed"} ] }, { "label": "IO (13690302#4)", "id": "io://0806-0062-6844/13690302#4", "widget": "OccupancySensor", "states": [ {"name": "core:StatusState", "value": "available"}, {"name": "core:OccupancyState", "value": "noPersonInside"} ] }, { "label": "IO (13690302#5)", "id": "io://0806-0062-6844/13690302#5", "widget": "CumulativeElectricPowerConsumptionSensor", "states": [ {"name": "core:StatusState", "value": "available"}, {"name": "core:ElectricEnergyConsumptionState", "value": 2071000}, {"name": "core:ConsumptionTariff0State", "value": 2071000} ] }, { "label": "PASS_Actuator", "id": "io://0806-0062-6844/4383745", "widget": "AtlanticElectricalHeater", "states": [ {"name": "core:NameState", "value": "PASS_Actuator"}, {"name": "core:OnOffState", "value": "on"}, {"name": "io:TargetHeatingLevelState", "value": "eco"}, #value: comfort/comfort-1/comfort-2/eco/frostprotection/off {"name": "core:TargetHeatingLevelState", "value": "eco"}, #value: comfort/comfort-1/comfort-2/eco/frostprotection/off {"name": "core:StatusState", "value": "available"}, {"name": "core:DiscreteRSSILevelState", "value": "good"}, ] }

Peut êtres que tout n'est pas gérer?

Par exemple j'ai fait des test en change le mode de radiateur et voila les ligne qui change :

        "name": "core:OperatingModeState",
            "value": "auto"         # Mode AUTO
            # "value": "standby"    # Mode ARRET
            # "value": "basic"      # Mode BASIC
            # "value": "internal"   # Mode PROG

On peut forcer la récupération de la valeur ou le changement de "core:ComfortRoomTemperatureState" par exmple ?

pzim-devdata commented 6 months ago

Si le radiateur "Radiateur" ne prend pas en charge les ordres eco confort hors-gel ou off correctement, je ne peux pas faire grand chose. Il n'existe pas de commande qui permette de choisir la temperature désirée pour l'instant avec l'API Overkiz. C'est parce que le fil-pilote des radiateur ne prévoit pas cela. Il faudra se contenter entre la valeur 19° ou 0°. C'est étrange que la commande eco ne soit pas comprise comme 16°. Normalement les commandes: comfort --> 19°, eco --> 16°, frostprotection --> 7.5° et off --> Eteindre.

Est ce que hormis l’absence du mode eco sur le radiateur du salon, le programme fonctionne-t-il comme espéré ? Afin que j'ajoute le serveur atlantic_cozytouch au programme ?

Flavien06 commented 6 months ago

Le radiateur SdB est piloter via le fil pilote, donc il gère bien tous les état confort, Eco, off,... L'autre radiateur est un Thermor directement compatible cozytouch, il n'utilise pas le fil pilote, et depuis l'application on ne peut régler que la valeur de la température. Le plugin tahoma sur homebridge (quand il n'a pas des erreur de connection) arrivait bien à régler la température.

Sinon oui tu peut ajouter le serveur les radiateur fil pilote marche bien, les autre auront juste 2 état, confort et hors gel.

pzim-devdata commented 6 months ago

Voici un petit script python qui pourrait permettre de définir une température. Cependant votre configuration est trop spécifique pour que je puisse l'intégrer à tahoma: Il faut modifier les mots de passe et entrer l'url du radiateur dans les variables:

import asyncio
import time

import pyoverkiz
from pyoverkiz.const import SUPPORTED_SERVERS
from pyoverkiz.client import OverkizClient
from pyoverkiz.enums import OverkizCommand
from pyoverkiz.models import Command, Device, StateDefinition

#Entrer les MDP:
USERNAME = "mail@mail.com"
PASSWORD = "cozytouchpassword"

async def getting_info() -> None:
    async with OverkizClient(USERNAME, PASSWORD, server=SUPPORTED_SERVERS["atlantic_cozytouch"]) as client:
        try:
            await client.login()
        except Exception as exception:  # pylint: disable=broad-except
            print(exception)
            return
        devices = await client.get_devices()
        for device in devices:
            print(f"{device.label} ({device.id}) - {device.controllable_name}")
            print(f"{device.widget} - {device.ui_class}")
        events = await client.fetch_events()
        print(events)

asyncio.run(getting_info())

#Récuperer l'url du chauffage salon et modifier:
chauffage_salon_url='io://0806-0062-6844/13690302#1'

#Définir 18°:
async def def_temp_chauffage_salon() -> None:
    async with OverkizClient(USERNAME, PASSWORD, server=SUPPORTED_SERVERS["somfy_europe"]) as client:
        try:
            await client.login()
        except Exception as exception:  # pylint: disable=broad-except
            print(exception)
            return
        devices = await client.get_devices()
        device_url = chauffage_salon_url
#        exec_id = await client.execute_command( device_url, Command(OverkizCommand.SET_HEATING_LEVEL,['eco']) )
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.SET_HEATING_TARGET_TEMPERATURE,['18']) )

asyncio.run(def_temp_chauffage_salon()) 

Je ne sais pas si cela fonctionnera. Il faut installer pyoverkiz

Pour modifier la valeur de "core:ComfortRoomTemperatureState" il faudra remplacer la ligne : exec_id = await client.execute_command( device_url, Command(OverkizCommand.SET_HEATING_TARGET_TEMPERATURE,['18']) ) Par: exec_id = await client.execute_command( device_url, Command(OverkizCommand.SET_COMFORT_HEATING_TARGET_TEMPERATURE,['18']) ) Essayer de définir la temperature avec ou sans guillemets : SET_COMFORT_HEATING_TARGET_TEMPERATURE,[18] Je ne sais pas si cela fonctionnera c'est du retro engineering.

Voici les differentes commandes : https://github.com/iMicknl/python-overkiz-api/blob/main/pyoverkiz/enums/command.py

Sinon il existe une API Python pour Cosytouch : https://github.com/Sku4l/cozypy

Je vais publier une nouvelle version de tahoma avec juste l'ajout du server atlantic_cozytouch ce we

pzim-devdata commented 6 months ago

EDIT:

Cependant votre configuration est trop spécifique pour que je puisse l'intégrer à tahoma:

Si exec_id = await client.execute_command( device_url, Command(OverkizCommand.SET_HEATING_TARGET_TEMPERATURE,['18']) ) fonctionne je pourrai intégrer la fonctionnalité dans tahoma

Flavien06 commented 6 months ago

Le code me donnais toujours des erreur type : exec_id = await client.execu

te_command( device_url, Command(OverkizCommand.SET_COMFORT_HEATING_TARGET_TEMPERATURE,['18']) ) raise InvalidCommandException(message) pyoverkiz.exceptions.InvalidCommandException: No such command : setComfortHeatingTargetTemperature on device io://0806-0062-6844/13690302#1 (io:AtlanticElectricalHeaterWithAdjustableTemperatureSetpointIOComponent)

Avec l'aide ChatGPT, en lui envoyant les command, j'ai trouver la commande qui marche : exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_TARGET_TEMPERATURE, [float('18.0')]))

J'ai juste eu un bug à un moment. En envoyant 18 via le script, mon application à afficher une consigne de 15°C mais le radiateur était bien sur 18°C

Si besoin voici une autre commande qui fonctionne ;

# Définir le mode ("standby", "basic", "internal", "auto") #Sur l'appli: internal=prog et standby=arrêt
desired_mode = "basic"
exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_OPERATING_MODE, [desired_mode]))
Flavien06 commented 6 months ago

Cette commande marche aussi :

consigne_temp = 18.0
exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_TARGET_TEMPERATURE, [consigne_temp]))
pzim-devdata commented 6 months ago

Merci. Est-ce que ces commandes:

Flavien06 commented 6 months ago

Merci. Est-ce que ces commandes:

* `exec_id = await client.execute_command( device_url, Command(OverkizCommand.SET_HEATING_TARGET_TEMPERATURE,[float('18')]) )`

pyoverkiz.exceptions.InvalidCommandException: No such command : setHeatingTargetTemperature on device io://0806-0062-6844/13690302#1 (io:AtlanticElectricalHeaterWithAdjustableTemperatureSetpointIOComponent)

  • exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_TARGET_TEMPERATURE, ['18']) ) pyoverkiz.exceptions.OverkizException: {'errorCode': 'INCOMPATIBLE_VALUE', 'error': 'setTargetTemperature() : Invalid value for command parameter p1 : expected multi-type value, one of [float value between 0.0 and 100.0 or string value (previous)] but got 18 (String)'}
  • exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_TARGET_TEMPERATURE, [int('18')]) ) Celle ci fonctionne

J'ai aussi essayer de trouver comment changer les valeur des consigne par défaut de confort et eco. Avec SET_COMFORT_HEATING_TARGET_TEMPERATURE ou SET_COMFORT_TARGET_DHW_TEMPERATURE j'avais des erreur Avec SET_COMFORT_TEMPERATURE et SET_ECO_TEMPERATURE je n'ai pas d'erreur, mais je ne sais pas ce qu'elle modifie.

edit :

exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_TARGET_TEMPERATURE, [18]) )

fonctionne aussi

edit2: mon radiateur est en mode "eco" via la programmation horaire , les commande ne change pas température en cours, mais il change la consigne confort. Je suppose qu'il passera à 18° lorsqu'il sortira du mode eco.

pzim-devdata commented 6 months ago

Je vais utiliser : exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_TARGET_TEMPERATURE, [int(str(18))]) ) car j'ai besoin d'un nombre entier pour pouvoir l'intégrer dans le programme. tahoma 18 heater radiateur devrait mettre le radiateur à 18° dans la prochaine mise à jour sur les radiateurs compatibles. Est ce que la commande: tahoma get sensor io retourne les bonnes valeurs ? Est-ce que cette commande est importante:

# Définir le mode ("standby", "basic", "internal", "auto") #Sur l'appli: internal=prog et standby=arrêt
desired_mode = "basic"
exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_OPERATING_MODE, [desired_mode]))

Merci

pzim-devdata commented 6 months ago

Oui SET_COMFORT_TEMPERATURE et SET_ECO_TEMPERATURE permettent de definir les temperatures pour le mode comfort et le mode eco normalement. SET_TARGET_TEMPERATURE devrait modifier la temperature de consigne en temps réel normalement

Flavien06 commented 6 months ago

Ok c'est parfait

tahoma get sensor io
IO (13690302#2):16.25 => température actuel
IO (13690302#3):closed
IO (13690302#5):2095000

Pour le mode c'est comme tu veux. Si il n'y a pas je me ferait un script python custom pour cette commande.
Perso elle va me permettre de passer en Basic occasionnellement pour ne pas utiliser la programmation horaire. Et le mode standby va me permettre de faire un arrêt complet du radiateur contrairement à tahoma off chauffage "Radiateur" qui me le passe juste hors-gel

pzim-devdata commented 6 months ago

ok je vais essayer d’intégrer:

# Définir le mode ("standby", "basic", "internal", "auto") #Sur l'appli: internal=prog et standby=arrêt
desired_mode = "basic"
exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_OPERATING_MODE, [desired_mode]))

et

consigne_temp = 18
exec_id = await client.execute_command(device_url, Command(OverkizCommand.SET_TARGET_TEMPERATURE, [int(str(consigne_temp))]))

Il manque le capteur de presence: Est ce que tahoma get sensor 13690302#4 retourne la présence ?

pzim-devdata commented 6 months ago

Serait-il possible de tester ceci avant que je ne publie la mise à jour: Dézipper ce fichier dans ~/.local/pipx/venvs/tahoma/lib/python3.9/site-packages/tahoma/

tahoma.py.zip

Les commandes suivantes devraient fonctionner: standby ou veille manual ou manuel auto prog un nombre Par exemple tahoma standby chauffage radiateur --serveur atlantic_cozytouch --remote ou tahoma manuel chauffage radiateur attendre pendant 2 17 chauffage radiateur --server atlantic_cozytouch --remote tahoma standby chauffage PASS_Actuator ne devrait pas fonctionner avec un message d'erreur disant que l'action: standby n'est pas compatible.

Flavien06 commented 6 months ago

Il manque le capteur de presence: Est ce que tahoma get sensor 13690302#4 retourne la présence ?

Il ne le trouve pas, je n'ai Sensor2 (TemperatureSensor) Sensor3 (ContactSensor= Detection de fnetre ouverte je pense) et Sensor5 (CumulativeElectricPowerConsumptionSensor) Pourtant le Sensor4 existe bien :

    "label": "IO (13690302#4)",
    "id": "io://0806-0062-6844/13690302#4",
    "widget": "OccupancySensor",
    "states": [
      {"name": "core:StatusState", "value": "available"},
      {"name": "core:OccupancyState", "value": "noPersonInside"}  ]#value : noPersonInside/personInside

Les nouvelle commande marche bien 👍

$tahoma manuel chauffage radiateur attendre pendant 2 17 chauffage radiateur --server atlantic_cozytouch --remote
Will use tahoma with the 'remote' config
The server: atlantic_cozytouch has been taken into account
Output action : manuel chauffage Radiateur
Waiting for 2 second(s).
Output action : 17 chauffage Radiateur
$tahoma standby chauffage PASS_Actuator
This ACTION: 'standby' is not compatible with your device.
Please provide one of this argument as ACTION : [comfort comfort-1 comfort-2 eco off]
pzim-devdata commented 6 months ago

Merci. Je vais publier une nouvelle version. C'est étrange et je ne comprends pas pourquoi ce capteur n'est pas listé. Peut-être faut il relancer tahoma -g ? Bonne soirée et n'hésitez pas à me solliciter si vous avez d'autres suggestions d'mélioration.