[***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

OpenKarotz est le logiciel alternatif pour votre Karotz. Grâce à lui, vous allez libérer le lapin et redécouvrir cet objet indispensable !

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede ADN182 » 09 AoĂ» 2013, 17:28

Bonjour,

J'ai implémenter une "interface web" sur le serveur HTTP de Testeur765 afin de pouvoir avoir un récapitulatif des commandes, j'y est ajouté des commandes pour la variation de la voix, temps de pause car pour certaines phrases mon lapin manger des mots :) et les temps de pause permettent de corriger cela.

Aperçu de "l'interface"
Image


Je n'ai pas implémenter tout les possibilités au niveaux TTS. Je les ai trouvé sur le site Karotz (Tonalité de la voix, Volume...) : http://dev.karotz.com/sdk/fr/jouer_avec_la_voix_du_lapin.htm

Je met le code complet comme ça il restera sur le forum :) Il suffit de copier le code et de la coller dans un fichier nommer HTTPserver.py ou de remplacer le contenu de votre HTTPserver.py

Code: Tout sélectionner
from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse
import os
import urllib
import urllib2
import cgi
import logging
import re
import md5

# coding=utf-8
UUID=os.system('cat /proc/sys/kernel/random/uuid')
PULSE_FAST=300
PULSE_NORMAL=700
PULSE_SLOW=1500

BLACK       ="000000";
BLUE        ="0000FF";
CYAN        ="00FF9F";
GREEN       ="00FF00";
ORANGE      ="FFA500";
PINK        ="FFCFAF";
PURPLE      ="9F00FF";
RED         ="FF0000";
YELLOW      ="75FF00";
WHITE       ="4FFF68";

class GetHandler(BaseHTTPRequestHandler):


        def do_GET(self):
                parsed_path = urlparse.urlparse(self.path)
                self.send_response(200)
                self.send_header('Content-type','text/html')
                self.end_headers()
                # Send the html message
                self.wfile.write('<table width=550><tr><td valign=center><h1>HTTP Server Karotz</h1></td><td><img src="http://store.karotz.com/uploads/screenshots/1512101332-s1-karotz.jpg" alt="" width="87" height="87" /></td></tr></table>')
                self.wfile.write('<p><span style="color: #0000ff;"><strong>Gestion du rond de lumi&egrave;re</strong></span></p>')
                self.wfile.write('<table width=550>')
                self.wfile.write('<tr>')
                self.wfile.write('<td width=200>')
                self.wfile.write('<table border=1>')
                self.wfile.write('<tbody>')
                self.wfile.write('<tr>')
                self.wfile.write('<td colspan=2>')
                self.wfile.write('<p><strong>Liste des codes couleur</strong> :&nbsp;</p>')
                self.wfile.write('</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>BLACK</td>')
                self.wfile.write('<td>000000</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>BLUE</td>')
                self.wfile.write('<td>0000FF</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>CYAN</td>')
                self.wfile.write('<td>00FF9F</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>GREEN</td>')
                self.wfile.write('<td>00FF00</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>ORANGE</td>')
                self.wfile.write('<td>FFA500</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>PINK</td>')
                self.wfile.write('<td>FFCFAF</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>PURPLE</td>')
                self.wfile.write('<td>9F00FF</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>RED</td>')
                self.wfile.write('<td>FF0000</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>YELLOW</td>')
                self.wfile.write('<td>75FF00</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>WHITE</td>')
                self.wfile.write('<td>4FFF68</td>')
                self.wfile.write('</tr>')
                self.wfile.write('</tbody>')
                self.wfile.write('</table>')
                self.wfile.write('</td>')
                self.wfile.write('<td width=350 valign=top>')
                self.wfile.write('<table border=1>')
                self.wfile.write('<tbody>')
                self.wfile.write('<tr>')
                self.wfile.write('<td><strong>Couleur fixe</strong>&nbsp;:</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>/color?00FF00</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td><strong>Couleur clignotante avec gestion de la vitesse :&nbsp;</strong></td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>/colorpulse?00FF00&amp;fast</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>/colorpulse?00FF00&amp;normal</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>/colorpulse?00FF00&amp;slow</td>')
                self.wfile.write('</tr>')
                self.wfile.write('</tbody>')
                self.wfile.write('</table>')
                self.wfile.write('</td>')
                self.wfile.write('</tr>')
                self.wfile.write('</table>')
                self.wfile.write('<p><span style="color: #0000ff;"><strong>Gestion de la synth&egrave;se vocale</strong></span></p>')
                self.wfile.write('<table style="height: 97px;" width="416" border=1>')
                self.wfile.write('<tbody>')
                self.wfile.write('<tr>')
                self.wfile.write('<td colspan=3>')
                self.wfile.write('<p><span style="color: #000000;"><strong>Liste des variantes sonore :</strong></span></p>')
                self.wfile.write('</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>Voix</td>')
                self.wfile.write('<td>Pause</td>')
                self.wfile.write('<td>Vitesse</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>*Happy*</td>')
                self.wfile.write('<td>,</td>')
                self.wfile.write('<td>*TresLent*</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>*Calme*</td>')
                self.wfile.write('<td>,,</td>')
                self.wfile.write('<td>*Lent*</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>*Triste*</td>')
                self.wfile.write('<td>,,,</td>')
                self.wfile.write('<td>*Rapide*</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>*Enerve*</td>')
                self.wfile.write('<td>,,,,</td>')
                self.wfile.write('<td>*TresRapide*</td>')
                self.wfile.write('</tr>')
                self.wfile.write('<tr>')
                self.wfile.write('<td>*EndVoice*</td>')
                self.wfile.write('<td>,,,,,</td>')
                self.wfile.write('<td>*EndSpeed*</td>')
                self.wfile.write('</tr>')
                self.wfile.write('</tbody>')
                self.wfile.write('</table border=1>')
                self.wfile.write('<p><span style="color: #000000;">/tts?L\'alarme%20est%20d&eacute;sactiv&eacute;e</span></br>')
                self.wfile.write('<span style="color: #000000;">/tts?*Happy*L\'alarme%20est*EndVoice**Triste*d&eacute;sactiv&eacute;e*EndVoice*</span></br>')
                self.wfile.write('<span style="color: #000000;">/tts?L\'alarme%20est,,,,d&eacute;sactiv&eacute;e</span></br>')
                self.wfile.write('<span style="color: #000000;">/tts?L\'alarme%20est*Lent*d&eacute;sactiv&eacute;e*EndSpeed*</span></br></p>')
                self.wfile.write('<p><span style="color: #0000ff;"><strong>Gestion des fichiers sons</strong></span></p>')
                self.wfile.write('<p><span style="color: #000000;">Les sons sont &agrave; stock&eacute;s dans /usr/sound</span></p>')
                self.wfile.write('<p><span style="color: #000000;">/sound?nomdufichierson</span></p>')

                if "/color" in str(parsed_path[2]):
                        print 'Color changed'
                        os.system("killall led")
                        COLOR = parsed_path[4]
                        if re.compile(r"[0-9a-fA-F]{6}").search(COLOR):
                                request = "dbus-send --system --dest=com.mindscape.karotz.Led /com/mindscape/karotz/Led com.mindscape.karotz.KarotzInterface.light string:"+str(UUID)+" string:"+str(COLOR)
                                os.system(request)

                if "/sound" in str(parsed_path[2]):
                        file = parsed_path[4]
                        print file
                        file = file.replace(";","")
                        file = file.replace("&","")
                        print file
                        os.system("/usr/bin/madplay -a 6 /usr/"+file)

                if "/colorpulse" in str(parsed_path[2]):
                        os.system("killall led")
                        print 'Color Pulse changed'
                        COLOR = parsed_path[4].split("&")[0]
                        SPEED = parsed_path[4].split("&")[1]
                        if (SPEED == "fast" or SPEED == "normal" or SPEED == "slow"):
                                if SPEED == "fast":
                                        SPEED = 300
                                elif SPEED == "normal":
                                        SPEED = 700
                                elif SPEED == "slow":
                                        SPEED = 1500
                        else:
                                SPEED = 700
                        if re.compile(r"[0-9a-fA-F]{6}").search(COLOR):
                                request = "/karotz/bin/led -l "+str(COLOR)+" -p 000000 -d "+str(SPEED)+"&"
                                os.system(request)

                elif "/tts" in str(parsed_path[2]):
                        tts = parsed_path[4]
                        print tts
                        tts = tts.replace("%20"," ")
                        tts = tts.replace("'","")
                        tts = tts.replace("%C3%A9","e")
                        tts = tts.replace("%3C","<")
                        tts = tts.replace("%3E",">")
                        tts = tts.replace("%3D","=")
                        tts = tts.replace("%2F","/")
                        tts = tts.replace("%27","'")
                        tts = tts.replace("%22",'"')
                        tts = tts.replace("*Happy*",'<voice emotion="happy">')
                        tts = tts.replace("*Calme*",'<voice emotion="calm">')
                        tts = tts.replace("*Triste*",'<voice emotion="sad">')
                        tts = tts.replace("*Enerve*",'<voice emotion="cross">')
                        tts = tts.replace("*EndVoice*",'</voice>')
                        tts = tts.replace(",,,,,",'<break strength="x-strong"/>')
                        tts = tts.replace(",,,,",'<break strength="strong"/>')
                        tts = tts.replace(",,,",'<break strength="medium"/>')
                        tts = tts.replace(",,",'<break strength="weak"/>')
                        tts = tts.replace(",",'<break strength="x-weak"/>')
                        tts = tts.replace("*TresLent*",'<prosody rate="x-slow">')
                        tts = tts.replace("*Lent*",'<prosody rate="slow">')
                        tts = tts.replace("*Rapide*",'<prosody rate="fast">')
                        tts = tts.replace("*TresRapide*",'<prosody rate="x-fast">')
                        tts = tts.replace("*EndSpeed*",'</prosody>')

                        #Decommenter ces deux lignes si vous souhaitez quitter l application en cours
                        #os.system("killall karotzVM")
                        #os.system("killall led")

                        os.system("killall madplay")
                        os.system("killall mplayer")

                        m = md5.new()
                        m.update(tts)
                        ttsmd5 = m.hexdigest()

                        tts_request = 1
                        path = "/usr/sounds/"
                        dirList=os.listdir(path)
                        for fname in dirList:
                                print fname
                                if ttsmd5 in fname:
                                        print "Audio file found, no TTS request"
                                        os.system("/usr/bin/madplay -a 3 /usr/sounds/"+ttsmd5)
                                        tts_request = 0
                                        break

                        if tts_request == 1:
                                request = "/usr/bin/curl -o /usr/sounds/"+ttsmd5+" 'http://188.165.228.65/tts/Suzanne' -d '"+tts+"'"
                                print request
                                os.system(request)
                                os.system("/usr/bin/madplay -a 3  /usr/sounds/"+ttsmd5)
                                #os.system("rm /usr/1.wav")

                #self.send_response(200)
                self.end_headers()
                return

if __name__ == '__main__':
        from BaseHTTPServer import HTTPServer
        server = HTTPServer(('0.0.0.0', 8080), GetHandler)
        print 'Starting server, use <Ctrl-C> to stop'
        server.serve_forever()
ADN182
Membre Actif
 
Messages: 22
Inscription: 08 Sep 2012, 12:49

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede Slyjohns » 13 AoĂ» 2013, 09:34

Slyjohns a écrit:J'ai appliqué le tuto acces root permanent v2, Avez vous des problème de fiabilité avec cette modif ?
Pour ma part assez fréquemment, le serveur web plante, voir l’accès ssh. Il suffit d'un reboot et tout rentre dans l'ordre jusqu'à la prochaine fois...


Personne n'a de soucis de stabilité avec son karotz :( ?
Slyjohns

Vera Lite 1.5.622
1 Everspring SM103, 2 Everspring HSM02, 1 Everspring ST812, 2 Fibaro FGS-221, 1 Fibaro FGK-101 avec sonde, 1 Fortrezz SSA1, 1 Everspring SF812, Karotz, Serveur WAMP, DLNA, Camera Edimax...
Slyjohns
Guru de domotique
 
Messages: 118
Inscription: 15 Juil 2012, 12:05
Localisation: Près de Troyes

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede milillicuti » 13 AoĂ» 2013, 18:05

Si... Le mien est rooté et le serveur plante régulièrement.
Communication et publicité. Mais aussi quelques articles sur la domotique !
Communication & publicité - Domotique : http://www.milillicuti.com
Avatar de l’utilisateur
milillicuti
Dieu de domotique
 
Messages: 1435
Inscription: 16 DĂ©c 2008, 13:40

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede ADN182 » 14 AoĂ» 2013, 07:23

Bonjour,

Pour ma part je ne rencontre pas ce problème.

Est-ce que tu as décommenter ces lignes dans ton serveur Web ?
#Decommenter ces deux lignes si vous souhaitez quitter l application en cours
#os.system("killall karotzVM")
#os.system("killall led")

Pour ma part je ne l'ai ai pas décommenter et je n'ai pas d'application Karotz Installé (j'ai tous supprimé même celle par défaut démo, radio...).
ADN182
Membre Actif
 
Messages: 22
Inscription: 08 Sep 2012, 12:49

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede Slyjohns » 14 AoĂ» 2013, 08:23

Bonjour,

Non je n'ai pas decommenté ces deux lignes et j'ai quelques appli d'installée sur le karotz comme "kron" ou l'appli vera, mais j'ai supprimé les apps par défaut.
Mais c'est souvent que ça plante pendant la nuit alors qu'aucunes des appli n'ont été utilisées.

A+
Slyjohns

Vera Lite 1.5.622
1 Everspring SM103, 2 Everspring HSM02, 1 Everspring ST812, 2 Fibaro FGS-221, 1 Fibaro FGK-101 avec sonde, 1 Fortrezz SSA1, 1 Everspring SF812, Karotz, Serveur WAMP, DLNA, Camera Edimax...
Slyjohns
Guru de domotique
 
Messages: 118
Inscription: 15 Juil 2012, 12:05
Localisation: Près de Troyes

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede ADN182 » 14 AoĂ» 2013, 09:57

OK,

Il bloque toujours la nuit ? c'est quelque chose de récurrent ? tu sais si cela ce fait à une heure particulière ?

Il répond au ping (même si il n'est pas accessible au Telnet) ? Pas de problème avec ton Wifi ?

@milillicuti as tu les mĂŞme applications (ou au moins une des deux) ? ce sont les mĂŞme symptĂ´mes ?
ADN182
Membre Actif
 
Messages: 22
Inscription: 08 Sep 2012, 12:49

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede Slyjohns » 14 AoĂ» 2013, 10:52

Non ce n'est pas que la nuit, c'est aléatoire.
Et oui effectivement plus de réponse au ping mais pas de pb de wifi puisque j’accède au karotz via l'appli android (webcam,...)
Bizarre...
Slyjohns

Vera Lite 1.5.622
1 Everspring SM103, 2 Everspring HSM02, 1 Everspring ST812, 2 Fibaro FGS-221, 1 Fibaro FGK-101 avec sonde, 1 Fortrezz SSA1, 1 Everspring SF812, Karotz, Serveur WAMP, DLNA, Camera Edimax...
Slyjohns
Guru de domotique
 
Messages: 118
Inscription: 15 Juil 2012, 12:05
Localisation: Près de Troyes

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede ADN182 » 14 AoĂ» 2013, 13:40

Tu est en DHCP ? Tu as un moyen de voir qu'elle adresse IP il a (Dans ton serveur DHCP) ?

On dirait plus que ton Lapin change d'adresse IP, si tu le ping plus mais que tu arrive à aller sur la WebCam c'est qu'il est bien dans ton réseaux et dispose d'une adresse ip.

Met une ip Fixe si tu peux (Chez moi c'est la cas).
ADN182
Membre Actif
 
Messages: 22
Inscription: 08 Sep 2012, 12:49

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede milillicuti » 14 AoĂ» 2013, 18:07

Aucune app chez moi.
Je ne sais plus avec quelle procédure je l'ai rooté.
Aujourd'hui je fais tourner le serveur web de Massalia.
Communication et publicité. Mais aussi quelques articles sur la domotique !
Communication & publicité - Domotique : http://www.milillicuti.com
Avatar de l’utilisateur
milillicuti
Dieu de domotique
 
Messages: 1435
Inscription: 16 DĂ©c 2008, 13:40

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede Massalia » 15 AoĂ» 2013, 13:31

Bonjour

J'ai fini une implémentation d'un "Web Service" avec une API REST sur le Karotz avec les fonctions suivantes
    Gestions des Leds
    Gestion des oreilles
    TTS utilisant un autre moteur, avec un bien meilleur rendu (Gestion de la ponctuation ...)
    Humeurs (Comme l'application du store)
    Enregistrement / Suppression des Tags
    Lancement d'une scéne VERA via un Tag
    Lancement d'une Macro EEDOMUS via un Tag
    Sommeil / RĂ©veil
    Lecture fichiers sons
    Interface Web pour tester l'API
    Utilisation de réponse JSON pour toutes les fonctions.

    Plugin Vera (en cours)


Je fini les derniers tests avec des membres du forum et je publie tout ça dés que j'ai une version stable.
VoilĂ  un Ă©cran pour vous faire patienter ;-)

Image
Massalia
Dieu de domotique
 
Messages: 313
Inscription: 21 Sep 2012, 09:04
Localisation: Essonne

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede Shaigan » 15 AoĂ» 2013, 15:13

OMG ! Need \o/
Aeon Labs : Multisensor (6), Compteur HEM3 | Everspring : DĂ©tecteur HSM02 (7), Prise AN157-6 (3), Prise AN180-6 (3), DĂ©tecteur HAC01, DĂ©tecteur SF812
Fibaro : FGD-211 (20->17), FGR-221 (7), FGS-211, FGS-221 (6), FGBS-001 (2), FGMS-001 | Fortrezz : SSA2 | Qees : MyKey | Violet : Karotz (2)
Micasaverde : Vera Plus (1.7.1786) | Android : Nexus 4, Galaxy Naos, Galaxys S, Galaxy Teos, Wiko Cink Slim, Archos Helium 50+, Asus Zenforce 2 Laser
Web : http://shaigan-reloaded.net
Shaigan
Dieu de domotique
 
Messages: 609
Inscription: 04 FĂ©v 2012, 22:35
Localisation: Hautes-Pyrénées (65)

Re: [***] Utiliser le KAROTZ comme retour d'Ă©tat fiable

Messagede milillicuti » 15 AoĂ» 2013, 22:39

Massalia a Ă©crit:Bonjour

J'ai fini une implémentation d'un "Web Service" avec une API REST sur le Karotz avec les fonctions suivantes
    Gestions des Leds
    Gestion des oreilles
    TTS utilisant un autre moteur, avec un bien meilleur rendu (Gestion de la ponctuation ...)
    Humeurs (Comme l'application du store)
    Enregistrement / Suppression des Tags
    Lancement d'une scéne VERA via un Tag
    Lancement d'une Macro EEDOMUS via un Tag
    Sommeil / RĂ©veil
    Lecture fichiers sons
    Interface Web pour tester l'API
    Utilisation de réponse JSON pour toutes les fonctions.

    Plugin Vera (en cours)


Je fini les derniers tests avec des membres du forum et je publie tout ça dés que j'ai une version stable.
VoilĂ  un Ă©cran pour vous faire patienter ;-)

Image


Comme c'est beau des lapins libres...
Communication et publicité. Mais aussi quelques articles sur la domotique !
Communication & publicité - Domotique : http://www.milillicuti.com
Avatar de l’utilisateur
milillicuti
Dieu de domotique
 
Messages: 1435
Inscription: 16 DĂ©c 2008, 13:40

PrécédenteSuivante

Retourner vers OpenKarotz

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique