-
Compteur de contenus
115 -
Inscription
-
Dernière visite
-
Jours gagnés
2
Tout ce qui a été posté par ikillou
-
Bon, je viens de constater que IFTTT ne voit plus non plus les scènes et devices de la HC2... Donc c'est un problème Fibaro... :-(
-
Jusqu'à hier, tout fonctionnait très bien pour les actionneurs, avec accent ou pas, pas de soucis. Mais je n'utilise pas les routines... Par contre, depuis aujourd'hui plus rien ne fonctionne... j'ai réessayé de réassocier mon compte, mais j'ai une erreur... Je ne sais pas si c'est lié à la màj 4.530 de hier... Je réessayerai plus tard.
-
Cool que ça fonctionne enfin ! Chez moi, le changement de mot de passe a fonctionné pour la connexion LAN et pas Wi-fi, pfff vraiment bizarre ce comportement de ce KLF... Sinon, j‘avais tenté d‘écrire une nouvelle classe python pour la commande : GW_COMMAND_SEND_REQ qui devrait permettre d’envoyer des commandes plutôt que de que démarrer des scénarios. Malheureusement je n’ai pas réussi, c’est pas trop mon domaine, et je galère un peu... même beaucoup ça serait vraiment mieux de pouvoir envoyer des commande : Up / Down ou Stop, car la gestion de scènes ou programmes est vraiment pas top...
-
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.
-
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
-
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...
-
mes 2 box sont updatées sans problème.
-
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...
-
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
-
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...
-
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
-
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.
-
@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")
-
ok, merci pour l'info.
-
sinon, j'aimerais tester les entrées filaires... mais je ne sais pas trop quels modules prendre... c'est quoi le mieux ?
-
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...
-
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...
-
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...
-
Bon, mes stores ont enfin été posés hier... Ils n'avaient pas ma télécommande Somfy, donc j'ai utilisé la Velux. Elle fonctionne super bien ! vraiment étonné en bien. Elle reconnait le type de store et met la bonne icône même que mes stores ne sont pas des Velux. Par contre, les premiers essais avec la scène de @Cardane avec le KLF-200 me donne toujours un : [DEBUG] 10:52:00: Login Failed : Status =1 Je vais continuer à chercher, le password est bon pourtant...
-
oui, pour les manipulations manuelles, la télécommande reste le meilleur choix.
-
ça doit être certainement ça... mais la télécommande a l'air vraiment sympa, donc c'est pas perdu
-
Bon, j'ai reçu le matos Velux aujourd'hui. Malheureusement mes stores ont plus d'un mois de retard donc je ne peux pas encore tester en vraie, mais à voir, on doit pouvoir configurer les appareils sans les copier d'une télécommande :
-
Bon, j'ai commandé, directement chez Velux, le KLF 200 et la télécommande KLR 200. On verra comment ça marchera... En Suisse, chez Velux, le KLF est à CHF 200.- = €175.-, donc il n'est pas si cher...
-
ah OK... tu penses qu'avec la NINA IO de Somfy, ça ne fonctionnera pas ? ou je devrais commander aussi une télécommande Velux qui serait compatible Somfy ?
-
non, j'ai rien de Velux... j'ai juste commandé des stores toiles avec moteur Somfy IO... (j'ai commandé la box Tahoma et la télécommande NINA IO)