Aller au contenu

ikillou

Membres confirmés
  • Compteur de contenus

    87
  • Inscription

  • Dernière visite

Réputation sur la communauté

13 Good

1 abonné

À propos de ikillou

  • Rang
    Membre interessé
  • Date de naissance 25/02/1969

Profile Information

  • Sexe :
    Homme
  • Ville :
    Marsens en Suisse
  • Intéret :
    Domotique / informatique
  • Box
    Home Center 2
  • Version
    4.510

Visiteurs récents du profil

182 visualisations du profil
  1. ikillou

    Utilisation du KLF-200

    Oui, mais il faut convertir le script Python en Lua, ce qui n'est pas évident... C'est pour cela que j'ai choisi la version simple pour l'instant... Avec les bons dévs qu'il y a ici, on devrait y arriver.
  2. ikillou

    Utilisation du KLF-200

    Bon, j'ai fait un nouveau script python que j'ai mis sur un raspberry. Cela fonctionne nickel. Donc, j'ai fait une scène (ou un VD) sur la HC2 qui lance le script du raspberry en passant les paramètres IPKLF200, password, SceneID. Cela fonctionne très bien, on peut voir le retour du script dans un debug. @Cardane Si tu veux faire des tests, j'ai partagé mon raspberry sur le net, donc tu pourrais lancer mon script depuis le net. Il faudrait juste ouvrir un port TCP dans ton routeur afin que mon script puisse accéder à ton KLF... Le script python se trouve en fichier joint. Sur le raspberry, j'ai installé Apache configuré pour accepter les scripts cgi (c'est pour cela que le script doit se trouver dans le répertoire "cgi-bin"). Il se lance comme ceci : http://192.168.xxx.xxx/cgi-bin/klf200.py?IP=192.168.xxx.xxx&PW=velux123&ID=1 L'URL de la version web de mon script n'est dispo que via MP, si désirée Depuis un VD, on peut faire un bouton par action comme ceci : local ip_module = fibaro:get(fibaro:getSelfId(), "IPAddress") KLF200 = Net.FHttp(ip_module) response = KLF200:GET("/cgi-bin/klf200.py?IP=192.168.xxx.xxx&PW=velux123&ID=1") fibaro:debug(response) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", "Véranda 1 monté..."); Je reste à dispo pour tout complément d'information... klf200.zip
  3. ikillou

    Utilisation du KLF-200

    Bon, je me suis remis dessus aujourd'hui. Cela fonctionne avec le script sur mon Mac serveur. Je lance le script python depuis un VD sur la HC2, ça fonctionne parfaitement. Sur le Synology, cela ne fonctionne toujours pas à cause du package SSL. Je suis en train d'installer un Raspberry Pi, on verra comment ça fonctionne... Je vous tiens au jus...
  4. ikillou

    HC2 & HCL - 4.512 - BETA - 06/11/2018

    mes 2 box sont updatées sans problème.
  5. ikillou

    Utilisation du KLF-200

    Fais attention à ne plus être connecté dans l’interface web en même temps, car il y a toujours qu’une seule connexion simultanée...
  6. ikillou

    Utilisation du KLF-200

    Je viens de tester sur un PC Win10 avec Python 3.71 64bits que je viens d'installer. ça fonctionne la même chose... L'update du firmware a bien fonctionné sur ton KLF200 ? N'hésite pas à faire un reboot du KLF avant de faire des tests, car j'ai eu des problèmes de connexion et en fait après un reboot, c'était bon... pfff
  7. ikillou

    Utilisation du KLF-200

    Quand j'execute le script sur IDLE sur mon Mac, j'ai ce retour dans le shell : Send valid password Received: 00:04:30:01:00:35 Activate Scene with ID = 1 Received: 00:06:04:13:00:12:34:37 Finished >>> Par contre, sur syno, il ne fonctionne pas à cause de SSL. Le problème est de lui dire quel environnement Python il doit prendre, il prend souvent la version par défaut qui est la 2.7 sans SSL... J'essaie de comprendre comment fonctionne Python que je ne connais pas... Sinon, tu es sur PC ou Mac ? Moi, j'ai installé la dernière version de Python depuis leur site, et SSL fonctionne directement sur Mac, mais je n'ai pas testé sur PC...
  8. ikillou

    Utilisation du KLF-200

    j'ai mis le mot de passe par défaut dans le script ici comme exemple, non, ce n'est pas le miens, t'inquiète... Démarrer le script depuis la HC2 n'est pas mon problème actuellement, ça viendra après , je cherche des idées pour héberger le script Python... Je me suis battu cet après-midi avec mon Syno qui ne veux pas accepter le module SSL... je vais continuer... pfff
  9. ikillou

    Utilisation du KLF-200

    Je précise que ce script fonctionne très bien sur mon Mac depuis IDLE. Je cherche des idées pour : quel est le meilleur endroit où poser le script afin de pouvoir le lancer depuis la HC2 avec le n° de la scène en paramètre. J'ai un raspberry dans un tiroir J'ai un mac mini qui pourrait faire serveur J'ai un Synology avec Python installé dessus Peut-être que @Steven, non sûr que Steven a une idée pour moi Merci d'avance pour vos idées.
  10. ikillou

    Utilisation du KLF-200

    @Cardane J'ai commencé à étudier les scripts de la nouvelle API. J'ai fait la mise à jour de mon KLF200 et j'ai commencé à tester. Mon idée est de mettre le script python sur un serveur local et de le lancer par la HC2. Cela me parait plus simple que de le convertir en LUA, surtout avec mon niveau... Donc j'ai refait le script exemple pour faire des tests. J'ai tout mis les modules python dans un seul et j'ai enlevé le code en trop. Pour les tests je mets le n° de la scène en dur, ensuite il faudra le traiter en paramètre. Le problème maintenant, c'est comment démarrer ce script... J'essaie sur mon Synology mais sans succès pour l'instant... je n'y connais rien en Python, et je ne progresse pas tant vite. Donc, si quelqu'un a des idées, je suis preneur Voici mon script python qui lance la scène n° 1 : ## ====================================================== ## Script pour demarrer une scene de la box Velux KLF-200 ## ------------------------------------------------------ ## Version 0.1.1 - Last update : 03.11.18 by Christian R. ## ====================================================== import ssl, socket, time, struct from time import sleep # =============================================================================== # Variables # =============================================================================== SCENE_ID = 1 KLF200_ADDRESS = "192.168.0.12" PASSWORD = "Velux123" PORT = 51200 LoopDelay = 1 # =============================================================================== # slip # =============================================================================== END = b"\xC0" # SLIP escape character as per RFC 1055 ESC = b"\xDB" # SLIP escape character as per RFC 1055 ESC_END = b"\xDC" # SLIP escape character as per RFC 1055 ESC_ESC = b"\xDD" # SLIP escape character as per RFC 1055 def slip_pack(inputFrame): data = inputFrame data = data.replace(ESC, ESC + ESC_ESC) data = data.replace(END, ESC + ESC_END) return END + data + END def slip_unpack(inputFrame): data = inputFrame if(data[0:1]==END and data[-1:]==END): data = data.replace(ESC + ESC_END, END) data = data.replace(ESC + ESC_ESC, ESC) return data[1:-1] else: print("Error: No SLIP frame!\n") return inputFrame # error -> return input # =============================================================================== # toolbox # =============================================================================== def getIndex(sourceDict, value): return (k for k, v in sourceDict.items() if v == value).__next__() def toHex(s): return ":".join("{:02x}".format(c) for c in s) # =============================================================================== # ActivateScene # =============================================================================== def process_connection(conn): conn.settimeout(10.0) # 10 sec print("Send valid password") conn.write(bytes(ST_GW_PASSWORD_ENTER_REQ(PASSWORD))) print("Received: ", toHex(slip_unpack(conn.recv())), "\n") time.sleep(LoopDelay) print("Activate Scene with ID = ", SCENE_ID) conn.write(bytes(ST_GW_ACTIVATE_SCENE_REQ(bSceneID=SCENE_ID))) print("Received: ", toHex(slip_unpack(conn.recv()))) def main(): sock = socket.socket(socket.AF_INET) sock.settimeout(10.0) context = ssl.SSLContext(ssl.PROTOCOL_TLS) context.check_hostname = False #accept self-signed certificate context.verify_mode = ssl.CERT_NONE conn = context.wrap_socket(sock, server_hostname=KLF200_ADDRESS) try: conn.connect((KLF200_ADDRESS, PORT)) process_connection(conn) except BaseException as e: raise(e) finally: conn.close() # =============================================================================== # klf200api # =============================================================================== GW_ACTIVATE_SCENE_REQ = 0x0412 GW_ACTIVATE_SCENE_CFM = 0x0413 GW_PASSWORD_ENTER_REQ = 0x3000 GW_PASSWORD_ENTER_CFM = 0x3001 dictPriorityLevel = { 0: 'Human Protection', 1: 'Environment Protection', 2: 'User Level 1', 3: 'User Level 2', 4: 'Comfort Level 1', 5: 'Comfort Level 2', 6: 'Comfort Level 3', 7: 'Comfort Level 4', } dictCommandOriginator = { 0x00: "LOCAL_USER", # // User pressing button locally on actuator 0x01: "USER", # // User Remote control causing action on actuator 0x02: "RAIN", # // Sensor 0x03: "TIMER", # // Sensor 0x04: "SECURITY", # // SCD controlling actuator 0x05: "UPS", # // UPS unit 0x06: "SFC", # // Smart Function Controller 0x07: "LSC", # // Lifestyle Scenario Controller 0x08: "SAAC", # // Stand Alone Automatic Controls 0x09: "WIND", # // Wind detection 0x10: "MYSELF", # // Used when an actuator decides to move by itself 0xFE: "AUTOMATIC_CYCLE", # // Used in context with automatic cycle; 0xFF: "EMERGENCY" # // Used in context with emergency or security commands, # // -this command originator should never be disabled } dictVelocity = { 0: 'DEFAULT', 1: 'SILENT', 2: 'FAST', 255: 'VELOCITY_NOT_AVAILABLE', #Only used in status reply } # =============================================================================== class ST_GW_FRAME: def __init__(self, Command): self.DataLength = 0 self.Command = Command self.binary_output = b""; def __bytes__(self): self.binary_output = struct.pack("BB", 0, self.DataLength + 3) self.binary_output += struct.pack(">H", self.Command) self.binary_output += self.pack_data() self.binary_output += struct.pack("B", self.calc_crc()) return slip_pack(self.binary_output) def calc_crc(self): crc = 0 for sym in self.binary_output: crc = crc ^ int(sym) return crc def pack_data(self): return b"" class ST_GW_ACTIVATE_SCENE_REQ (ST_GW_FRAME): def __init__(self, wSessionID = 0x1234, CommandOriginator = 'USER', PriorityLevel = 'User Level 2', bSceneID = 0, Velocity = 'DEFAULT'): ST_GW_FRAME.__init__(self, GW_ACTIVATE_SCENE_REQ) self.DataLength = 6 self.wSessionID = wSessionID self.bCommandOriginator = getIndex(dictCommandOriginator, CommandOriginator) self.bPriorityLevel = getIndex(dictPriorityLevel, PriorityLevel) self.bSceneID = bSceneID self.bVelocity = getIndex(dictVelocity, Velocity) def pack_data(self): ret = struct.pack(">H", self.wSessionID) ret += bytes([self.bCommandOriginator]) ret += bytes([self.bPriorityLevel]) ret += bytes([self.bSceneID]) ret += bytes([self.bVelocity]) return ret class ST_GW_PASSWORD_ENTER_REQ (ST_GW_FRAME): def __init__(self, Password): ST_GW_FRAME.__init__(self, GW_PASSWORD_ENTER_REQ) self.DataLength = 32 self.Password = Password def pack_data(self): binary_data = bytes(self.Password,encoding='ascii') binary_len = len(binary_data) ret = binary_data[:self.DataLength if binary_len > self.DataLength else binary_len] while binary_len < self.DataLength: ret += b'\x00' binary_len = binary_len + 1 return ret # =============================================================================== # Start script # =============================================================================== main() print("Finished")
  11. ikillou

    Utilisation du KLF-200

    ok, merci pour l'info.
  12. ikillou

    Utilisation du KLF-200

    sinon, j'aimerais tester les entrées filaires... mais je ne sais pas trop quels modules prendre... c'est quoi le mieux ?
  13. ikillou

    Commande IO-Homecontrol

    sans parler que la Tahoma gère aussi le z-wave via un dongle USB... qui pourrait suffire pour une installation "non geek" donc effectivement, des solutions, il y en a plein...
  14. ikillou

    Commande IO-Homecontrol

    Personnellement je viens de changer 8 stores avec moteur Somfy RTS par des IO. J'ai pris la box Tahoma et le KLF-200. Le mieux reste, pour moi, la box Tahoma pour piloter ces stores via le smartphone. On y peut aussi faire des scénarios qui sont pilotable via IFTTT. J'ai acheté des Google home mini et je peux piloter mes stores à la voix. Avec la HC2 et le KLF-200 je les utilise dans mes scènes, afin de monter ou descendre les stores selon la situation (météo par exemple). Sinon, le pilotage des stores via un VD de la HC2 est, pour moi, inutilisable car on ne peut pas lancer plusieurs actions en même temps... La Tahoma le fait bien mieux avec, en plus, le retour d'état. C'est sûr qu'avec les 3 box : HC2, Tahoma et KLF-200, je couvre tous mes besoins, mais ce n'est pas la solutions la plus simple et la moins chère... Sinon, j'ai aussi 2 télécommandes 2 voies : une Somfy Nina et la Velux KLR-200. La Velux est un peu plus simple à utiliser (la femme utilise que celle-là) et la Nina fonctionne très bien aussi...
  15. ikillou

    Utilisation du KLF-200

    Merci pour le Tuto que j'ai mis en place chez moi. Certains points n'étaient pas très clairs pour moi, donc je vais apporter mes petites expériences... Dans l'API, on doit travailler avec le numéro du programme (scène) et non son nom... Donc personnellement je les ai nommés de cette façon afin de tomber rapidement sur le numéro : 00_Descendre Veranda 1 01_Monter Veranda 1 02_Descendre Veranda 2 03_Monter Veranda 2 ... Il ne faut pas être connecté sur l'interface web du KLF-200 en même temps qu'on utilise l'API, on reçoit un "login failed". Je suppose que le KLF ne supporte qu'une connexion simultanée. On ne peut pas lancer 2 programmes en même temps. Si tout va bien, le 2ème se lancera une fois que le premier est fini, mais il m'est arrivé que le 2ème se plante... donc pas très stable sur ce coup-là. Voilà pour l'instant mes petites expériences. Je me réjouis de voir ce que ça donnera avec le nouveau firmware...
×