Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Need a simple tuto to execute a little python program #759

Closed
pzim-devdata opened this issue Feb 8, 2023 · 8 comments
Closed

Need a simple tuto to execute a little python program #759

pzim-devdata opened this issue Feb 8, 2023 · 8 comments

Comments

@pzim-devdata
Copy link

Hello,

Thank you very much for your program.

I would like to make a little Python script to simply open or close my Roller Shutter, for exemple, and I don't know how to use this API.

Could you, please, provide us a little tuto to explain how the API works ?

I've executed the script from the Readme file and I have this information :
Volet Cuisine (rts://1231-xxxx-2819/xxxxxxxx) - rts:RollerShutterRTSComponent UpDownRollerShutter - RollerShutter
But for the rest I don't know what to do...

Thanks !

@iMicknl
Copy link
Owner

iMicknl commented Feb 14, 2023

We should indeed improve the documentation a bit; #190. You can see a very advanced implementation in Home Assistant (see https://github.com/home-assistant/core/tree/dev/homeassistant/components/overkiz).

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


client = OverkizClient(USERNAME, PASSWORD, server=SUPPORTED_SERVERS["somfy_europe"])
device_url = "rts://1231-xxxx-2819/xxxxxxxx"

        exec_id = await client.execute_command(
            device_url,
            Command(OverkizCommand.OPEN, [0]) 
        )

@pzim-devdata
Copy link
Author

pzim-devdata commented Feb 14, 2023

THANK YOU SO MUCH !!!!!!!!!!!!!!!!!!!! It's working perfectly !!!
HERE IS A WORKING CONFIGURATION FOR ME :

#INSTALL or UPDATE python-overkiz-api : https://github.com/iMicknl/python-overkiz-api :
sudo python3 -m pip install pyoverkiz --upgrade
It works with the last today's version : pyoverkiz==1.7.4

#GIVE LOGIN INFORMATIONS :

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

USERNAME = "[email protected]"
PASSWORD = "somfyconnectpassword"

#THEN GET INFORMATIONS ABOUT SOMFY DEVICES :

async def getting_info() -> 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()
        for device in devices:
            print(f"{device.label} ({device.id}) - {device.controllable_name}")
            print(f"{device.widget} - {device.ui_class}")
        while True:
            events = await client.fetch_events()
            print(events)
            time.sleep(2)

asyncio.run(getting_info())

#FIND THE ROLLER SHUTTER URL (IT SHOULD BE LIKE THIS : rts://1234-1234-1234/12345678

#PASTE THE ROLLER SHUTTER URL :

roller_shutter_url='rts://1234-1234-1234/12345678'

async def open_roller_shutter() -> 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 = roller_shutter_url
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.OPEN, [0]) )   

#AND VOILA ! :
asyncio.run(open_roller_shutter())

@pzim-devdata
Copy link
Author

pzim-devdata commented Feb 14, 2023

HERE IS MY COMPLETE CONFIG FOR RTS SOMFY ROLLER SHUTTER AND IO SOMFY Atlantic Electrical Heater HEATING SYSTEM ( Interface de chauffage io. Référence 1822452 )

#!/usr/bin/python3
#sudo python3 -m pip install pyoverkiz
#https://github.com/iMicknl/python-overkiz-api/issues/759


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

USERNAME = "[email protected]"
PASSWORD = "somfyconnectpassword"

volets_cuisine_url='rts://1234-1234-1234/12345678'
chauffage_salon_url='io://1234-1234-1234/12345678'

#Scanner les appareils :
#############################################
async def scan() -> 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()
        for device in devices:
            print(f"{device.label} ({device.id}) - {device.controllable_name}")
            print(f"{device.widget} - {device.ui_class}")
        while True:
            events = await client.fetch_events()
            print(events)
            time.sleep(2)



asyncio.run(scan())

#Obtenir la liste des équipements :
##############################################
async def getting_info() -> 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()
        for device in devices:
            print(f"{device.label} ({device.id}) - {device.controllable_name}")
            print(f"{device.widget} - {device.ui_class}")
            


asyncio.run(getting_info())

#Ouvrir les volets de la cuisine : string value (OPEN, CLOSE, MY, STOP)
##############################################
volets_cuisine_url='rts://1234-1234-1234/12345678'

async def ouvrir_volets_cuisine() -> 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 = volets_cuisine_url
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.OPEN, [0]) )



asyncio.run(ouvrir_volets_cuisine())

#Fermer les volets de la cuisine :
##############################################
volets_cuisine_url='rts://1234-1234-1234/12345678'

async def fermer_volets_cuisine() -> 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 = volets_cuisine_url
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.CLOSE, [0]) )


asyncio.run(fermer_volets_cuisine())   

#Position "My" volets de la cuisine :
##############################################
volets_cuisine_url='rts://1234-1234-1234/12345678'

async def my_volets_cuisine() -> 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 = volets_cuisine_url
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.MY, [0]) )


asyncio.run(my_volets_cuisine())   

#Stop les volets de la cuisine :
##############################################
volets_cuisine_url='rts://1234-1234-1234/12345678'

async def stop_volets_cuisine() -> 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 = volets_cuisine_url
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.STOP, [0]) )


asyncio.run(stop_volets_cuisine())

#Mode éco chauffage salon : string value (boost, comfort, comfort-1, comfort-2, eco, frostprotection, off, secured)
##############################################
chauffage_salon_url='io://1234-1234-1234/12345678'

async def mode_eco_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']) )


asyncio.run(mode_eco_chauffage_salon()) 

#Mode confort (19°) chauffage salon :
##############################################
chauffage_salon_url='io://1234-1234-1234/12345678'

async def mode_confort_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,['comfort']) )


asyncio.run(mode_confort_chauffage_salon()) 

#Mode confort-1 (18°) chauffage salon :
##############################################
chauffage_salon_url='io://1234-1234-1234/12345678'

async def mode_confort1_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,['comfort-1']) )


asyncio.run(mode_confort1_chauffage_salon()) 

#Mode confort-2 (17°) chauffage salon :
##############################################
chauffage_salon_url='io://1234-1234-1234/12345678'

async def mode_confort2_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,['comfort-2']) )


asyncio.run(mode_confort2_chauffage_salon()) 

#Eteindre chauffage salon :
##############################################
chauffage_salon_url='io://1234-1234-1234/12345678'

async def off_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,['off']) )


asyncio.run(off_chauffage_salon()) 

#Hors-gel (7,5°) chauffage salon :
##############################################
chauffage_salon_url='io://1234-1234-1234/12345678'

async def hors_gel_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,['frostprotection']) )


asyncio.run(hors_gel_chauffage_salon())

@pzim-devdata
Copy link
Author

pzim-devdata commented Feb 14, 2023

HERE IS MY CONFIG FOR MyFoxAlarm TSKAlarmController Somfy Outdoor Camera Référence 2401560 AND THE SPOTLIGHT

#Activer alarme: string value (ARM, PARTIAL, DISARM, ARM_NIGHT, ARM_AWAY)
##############################################
alarme_url='myfox://SOMFY_PROTECT-45YGghggy567TTyGigigj768T8/site_alarm'

async def activer_alarme() -> 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 = alarme_url
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.ARM) )


asyncio.run(activer_alarme())

#Désactiver alarme:
##############################################
alarme_url='myfox://SOMFY_PROTECT-45YGghggy567TTyGigigj768T8/site_alarm'

async def desactiver_alarme() -> 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 = alarme_url
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.DISARM) )


asyncio.run(desactiver_alarme())

#Allumer spot alarme: string value (ON, OFF)
##############################################
spot_alarme_url='myfox://SOMFY_PROTECT-45YGghggy567TTyGigigj768T8#2'

async def allumer_spot_alarme() -> 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 = spot_alarme_url
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.ON) )


asyncio.run(allumer_spot_alarme())

#Eteindre spot alarme:
##############################################
spot_alarme_url='myfox://SOMFY_PROTECT-45YGghggy567TTyGigigj768T8#2'

async def eteindre_spot_alarme() -> 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 = spot_alarme_url
        exec_id = await client.execute_command( device_url, Command(OverkizCommand.OFF) )


asyncio.run(eteindre_spot_alarme())

@pzim-devdata
Copy link
Author

Thank you for your precious help. Almost everything works now.

However, I have a last problem for importing my scenarios. I don't know how to do :
I think I need a "scenario.oid" but I don't know how to obtain it.
I don't find any information about my scenarios when I scan the Tahoma and when I start the scenario.

Here is my code. I try to adapt this : https://github.com/home-assistant/core/blob/dev/homeassistant/components/overkiz/scene.py

If you could give me a quick help, it would be nice. However I'm already more than satisfied by all the help you provided to me, it was very helpful. Thanks ;-)

#Scénario "Je me couche" :
##############################################
from pyoverkiz.models import Scenario

async def scenario_je_me_couche() -> 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()
        exec_id = await client.execute_scenario(scenario.oid)

@iMicknl
Copy link
Owner

iMicknl commented Mar 28, 2023

@pzim-devdata sorry for the late reply, you need to call get_setup or get_scenarios to receive the scenario oid.

@pzim-devdata
Copy link
Author

@pzim-devdata sorry for the late reply, you need to call get_setup or get_scenarios to receive the scenario oid.

Thank you ! 😉

@pzim-devdata
Copy link
Author

pzim-devdata commented May 4, 2023

HERE IS MY CONFIG FOR SCENARIOS

from pyoverkiz.models import Scenario

#Obtenir les noms et l'oid des scénarios :
##############################################
async def getting_oid_scenarios() -> 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
        scenarios = await client.get_scenarios()
        for scenario in scenarios:
            print(f"{scenario.label} - {scenario.oid}")

asyncio.run(getting_oid_scenarios())

#Scénario "Je me couche" :
##############################################
scenario_je_me_couche_oid='8g45646y567-1234-1234-b234-1234a1a1ab12'

async def scenario_je_me_couche() -> 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
        scenario_oid=scenario_je_me_couche_oid
        exec_id = await client.execute_scenario(scenario_oid)

asyncio.run(scenario_je_me_couche())

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants