Plus de texte énoncé

J’ai fait la meme chose, en espérant qu’il soit toujours sur Jeedom

Bonsoir @Loic,

Peux tu me pointer vers la communication et les informations détaillant ce qu’il faut faire ?
ça a peut être été dis et redis quelque part mais je ne suis pas au courant.

Cordialement,
guirem

2 « J'aime »

C’est dispo sur le changelog https://doc.jeedom.com/fr_FR/core/4.2/changelog#4.2%20%3A%20Sécurité

https://doc.jeedom.com/fr_FR/dev/plugin_template

3 « J'aime »

Merci.
Ca ne m’aide pas vraiment à part de savoir qu’il y a eu un « Changement de la politique d’accès aux fichiers » donc je suppose que c’est par là…
@Loic je suis preneur de plus d’info si tu as ça.

Cdt

Tu a l’arborescence avec quel type de fichier va où, ça a été mis à jour par rapport aux modifications du core. Je vois pas quoi indiquer de plus.

Je suppose qu’il s’agit de ce paragraphe :

4.2 : Sécurité

  • Afin d’augmenter significativement la sécurité de la solution Jeedom, le système d’accès aux fichiers a changé. Avant certains fichiers étaient interdits depuis certains emplacements. A partir de la v4.2, les fichiers sont explicitement autorisés par type et par emplacement.
  • Changement au niveau de l’api, auparavant “tolérante” si vous arriviez avec la clef du Core en indiquant plugin XXXXX. Ce n’est plus le cas, vous devez arriver avec la clef correspondante au plugin.
  • En api http vous pouviez indiquer un nom de plugin en type, ce n’est plus possible. Le type correspondant au type de la demande (scenario, eqLogic, cmd, etc.) doit correspondre au plugin. Par exemple pour le plugin virtuel vous aviez type=virtual dans l’url il faut maintenant remplacer par plugin=virtual&type=event.
  • Renforcement des sessions : Passage en sha256 avec 64 caractères en mode strict.
  • Le cookie de “rester connecté” (3 mois max) est maintenant “one shot”, renouvelé à chaque utilisation.

et pour l’arborescence

Création plugin partie 1 : l’arborescence

Voici sa structure: tout d’abord un dossier du nom de votre plugin (son identifiant unique plus exactement) qui doit contenir les sous-dossiers suivants :

  • 3rdparty : Dossier contenant les librairies externes utilisées dans le plugin (exemple pour le plugin SMS une librairie pour la communication série en php).
  • core : Dossier contenant tous les fichiers de fonctionnement interne.
    • class : Dossier contenant la classe du plugin.
    • php : Dossier pouvant contenir des fonctions ne devant pas forcément appartenir à une classe (souvent utilisé pour permettre l’inclusion de multiples classes ou fichiers de configuration en une fois).
    • config : Fichier de configuration du plugin.
    • ajax : Dossier contenant les fichiers cibles d’appels AJAX.
    • i18n : Dossier contenant les fichiers .json de traduction du plugin.
  • desktop : Dossier contenant la vue “bureau” du plugin (en opposition avec la vue “mobile”).
    • js : Dossier contenant tous les fichiers de type javascript pour l’interface du plugin.
    • php : Dossier contenant tous les fichiers de type php pour l’interface du plugin.
    • css : Si besoin, tous les fichiers css du plugin, y compris éventuellement des fonts.
    • modal : Dossier contenant le code des modals du plugin.
    • img : Dossier pour les images (png, jpg etc) nécessaires au plugin.
    • template : Dossier contenant les templates html pour des tuiles sépcifiques aux équipements du plugin, dans les sous-dossier dashboard et mobile.
  • plugin_info : Contient les fichiers permettant à Jeedom de qualifier le plugin, de faire son installation et sa configuration.
    • info.json : Fichier contenant les informations de base du plugin .Il est obligatoire sinon Jeedom ne verra pas le plugin. Il contient entre autre l’identifiant du module, la description, les instructions d’installation…​
    • install.php : Fichier contenant (si besoin) les méthodes d’installation et de désinstallation du plugin.
    • configuration.php : Fichier contenant les paramètres à configurer du plugin indépendants des équipements de celui-ci (exemple pour le module Zwave l’ip du Raspberry Pi ayant la carte Razberry)
  • docs : Doit contenir la doc du plugin au format markdown, la racine et le fichier index.md. Toutes les images sont dans docs/images. La doc elle-même est dans un dossier en fonction de la langue (ex en francais : docs/fr\_FR)
  • ressources : Dossier pour d’éventuels démon et dépendances.
  • data : Dossier utilisé pour des fichiers générés par le plugin propre au Jeedom de l’utilisateur.

Pour ce qui est de la convention de nommage des fichiers voici les impératifs :

  • les fichiers de class php doivent obligatoirement se finir par .class.php
  • si ce n’est pas géré par un fichier d’inclusion, le nom du fichier doit être nom\_class.class.php
  • les fichiers servant uniquement de point d’entrée pour inclure de multiples fichiers doivent se finir par .inc.php
  • les fichiers de configuration doivent se finir par .config.php

Voici les recommandations :

  • les fichiers de type AJAX doivent se finir par .ajax.php
  • le nom de la première page de vue d’un plugin doit être le même que l’ID du plugin
  • le nom du fichier JS (s’il y en a un) de la première page de vue du plugin doit être l’ID du plugin

Bonjour,

J’espère que la dernière beta 2.19 règle le problème.
Il me manque des testeurs pour confirmer.

guirem

Hello
J’avais pas vu la bêta. Je teste dès demain et je te dis.
Merci

Hello
Petit retour.
Suite à la mise à jour de samedi, toujours pas de texte et plus le son Google.
J’ai fait la nouvelle mise à jour de ce matin, le son Google est revenu, mais toujours par de texte.
Dis moi si tu as besoin de log (Ils sont en débug)

Petite erreur.
C’est corrigé avec la dernière beta qui vient d’être publiée.

2 « J'aime »

Super.
Plus de soucis avec la dernière mise à jour.
Merci

Hello,

Cool, je viens voir le poste et j’ai de suite fait la maj.
Je confirme, ça refonctionne en 4.2.5 avec le plugin en bêta.

Merci beaucoup :wink:

Bonjour,

Idem ci dessus depuis la 4.2.6, la fonction « parle! » envoi des bip mais n’énonce rien
Je suis sur la dernière version de googlecast

Log debug d’une action parle :

0000|[2021-12-22 13:11:07]DEBUG : SOCKETHANDLER------Client connected to [127.0.0.1:60242]
0001|[2021-12-22 13:11:07]DEBUG : SOCKETHANDLER------Message read from socket: {"apikey": "XXXXXXXXXXXXX", "cmd": "action", "device": {"uuid": "2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c", "source": "googlecast"}, "command": [{"cmd": "tts", "value": "test de voix", "vol": "#volume#"}]}
0002|[2021-12-22 13:11:07]DEBUG : SOCKETHANDLER------Client disconnected from [127.0.0.1:60242]
0003|[2021-12-22 13:11:07]DEBUG : SOCKET-READ------Message received in socket JEEDOM_SOCKET_MESSAGE
0004|[2021-12-22 13:11:07]DEBUG : SOCKET-READ------Received command from jeedom : action
0005|[2021-12-22 13:11:07]DEBUG : SOCKET-READ------Attempt an action on a device
0006|[2021-12-22 13:11:07]DEBUG : SOCKET-READ------Action Thread Launched
0007|[2021-12-22 13:11:07]DEBUG : ACTION------ action - tts - 2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c - test de voix - none
0008|[2021-12-22 13:11:07]DEBUG : ACTION------TTS action
0009|[2021-12-22 13:11:07]DEBUG : CMD-TTS------TTS Filename hexdigest : 40854de8adcc2cb9a9f1b3390f46cb34  (test de voixjeedomttsfr-FR300)
0010|[2021-12-22 13:11:07]DEBUG : CMD-TTS------Using from cache
0011|[2021-12-22 13:11:07]DEBUG : CMD-TTS------Sentence: 'test de voix' (jeedomtts,fr-FR)
0012|[2021-12-22 13:11:07]DEBUG : TTS------Generated tts file url to be played is http://192.168.2.196/plugins/googlecast/data/cache/40854de8adcc2cb9a9f1b3390f46cb34.mp3
0013|[2021-12-22 13:11:07]DEBUG : TTS------Estimated duration of tts media is 2.6159166666666667 secondes
0014|[2021-12-22 13:11:07]DEBUG : JEEDOMCHROMECAST------ Manage previous status : Removing previous playercmd!
0015|[2021-12-22 13:11:07]DEBUG : JEEDOMCHROMECAST------ Detected changes in status of SmartHome
0016|[2021-12-22 13:11:07]DEBUG : SENDER------Send to jeedom :  {'uuid': '2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c', 'nowplaying': {'uuid': '2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c', 'online': True, 'friendly_name': 'SmartHome', 'is_active_input': False, 'is_stand_by': False, 'volume_level': 50, 'volume_muted': False, 'app_id': 'CC1AD845', 'icon_url': '', 'display_name': 'Default Media Receiver', 'status_text': 'Diffusion: TTS', 'is_busy': True, 'title': 'TTS', 'album_artist': None, 'metadata_type': 0, 'album_name': None, 'current_time': '0', 'artist': None, 'series_title': None, 'season': None, 'episode': None, 'image': 'http://192.168.2.196/plugins/googlecast/desktop/images/tts.png', 'stream_type': 'BUFFERED', 'track': None, 'player_state': 'IDLE', 'supported_media_commands': 12303, 'supports_pause': True, 'duration': None, 'content_type': 'audio/mp3', 'idle_reason': 'ERROR'}}
0017|[2021-12-22 13:11:08]DEBUG : JEEDOMCHROMECAST------ Detected changes in status of SmartHome
0018|[2021-12-22 13:11:08]DEBUG : SENDER------Send to jeedom :  {'uuid': '2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c', 'nowplaying': {'uuid': '2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c', 'online': True, 'friendly_name': 'SmartHome', 'is_active_input': False, 'is_stand_by': False, 'volume_level': 50, 'volume_muted': False, 'app_id': 'CC1AD845', 'icon_url': '', 'display_name': 'Default Media Receiver', 'status_text': 'Default Media Receiver', 'is_busy': True, 'title': 'TTS', 'album_artist': None, 'metadata_type': 0, 'album_name': None, 'current_time': '0', 'artist': None, 'series_title': None, 'season': None, 'episode': None, 'image': 'http://192.168.2.196/plugins/googlecast/desktop/images/tts.png', 'stream_type': 'BUFFERED', 'track': None, 'player_state': 'IDLE', 'supported_media_commands': 12303, 'supports_pause': True, 'duration': None, 'content_type': 'audio/mp3', 'idle_reason': 'ERROR'}}
0019|[2021-12-22 13:11:08]DEBUG : SENDER------Send to jeedom : {'devices': {'2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c': {'uuid': '2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c', 'status': {'uuid': '2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c', 'uri': '192.168.2.118:8009', 'friendly_name': 'SmartHome', 'is_active_input': False, 'is_stand_by': False, 'volume_level': 50, 'volume_muted': False, 'app_id': 'CC1AD845', 'icon_url': '', 'display_name': 'Default Media Receiver', 'status_text': 'Default Media Receiver', 'is_busy': True, 'title': 'TTS', 'artist': '', 'series_title': '', 'stream_type': 'BUFFERED', 'player_state': 'IDLE'}, 'typemsg': 'info', 'lastOnline': 1640174989, 'online': True, 'lastSent': 1640175068, 'lastOfflineSent': 1640174971, 'options': {'ignore_CEC': '0'}, 'lastScan': 1640175051}}}
0020|[2021-12-22 13:11:10]DEBUG : JEEDOMCHROMECAST------ getPreviousPlayerCmd {}
0021|[2021-12-22 13:11:10]DEBUG : TTS------Resume is not possible!
0022|[2021-12-22 13:11:10]DEBUG : JEEDOMCHROMECAST------ Detected changes in status of SmartHome
0023|[2021-12-22 13:11:10]DEBUG : SENDER------Send to jeedom : {'devices': {'2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c': {'uuid': '2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c', 'status': {'uuid': '2af2bc34-84bb-43a9-e0bf-bc8dfe03a24c', 'uri': '192.168.2.118:8009', 'friendly_name': 'SmartHome', 'is_active_input': False, 'is_stand_by': False, 'volume_level': 50, 'volume_muted': False, 'app_id': 'CC1AD845', 'icon_url': '', 'display_name': 'Default Media Receiver', 'status_text': 'Default Media Receiver', 'is_busy': True, 'title': 'TTS', 'artist': '', 'series_title': '', 'stream_type': 'BUFFERED', 'player_state': 'IDLE'}, 'typemsg': 'info', 'lastOnline': 1640174989, 'online': True, 'lastSent': 1640175070, 'lastOfflineSent': 1640174971, 'options': {'ignore_CEC': '0'}, 'lastScan': 1640175051}}}

Idem chez moi sur une 4.2.6 et Google Cast en dernière Beta.

Hello @guirem
Il me semble que cela fonctionne une fois puis plus de texte.
Je réinstalle les dépendances, et cela refonctionne une fois.
Je vérifie au plus vite et reviens donner plus d’infos

Le problème vient du fait que le dossier /plugins/googlecast/data/cache/ n’est pas accessible du fait des nouvelles règles de sécu du .htaccess

Si je mets un mp3 dans le dossier /plugins/googlecast/data/ je suis autorisé à y accéder.

C’est pareil pour le dossier /plugins/googlecast/data/media/, il n’est plus non plus accessible.

le .htaccess a besoin d’être adapté pour autoriser les sous-dossiers du dossier /data/ du plugin je suppose …

@guirem

J’ai du modifier le .htaccess comme suit :

RedirectMatch 403 (?i)^.*\/data\/.*\/((?!\.m3u8|\.ts|\.jpg|\.jpeg|\.gif|\.webp|\.png|\.mp3\.mp4|\.aac|\.svg|\.obj|\.mtl).)*$

remplacé par :

RedirectMatch 403 (?i)^.*\/data\/.*\/((?!\.m3u8|\.ts|\.jpg|\.jpeg|\.gif|\.webp|\.png|\.mp3\.mp4|\.aac|\.svg|\.obj|\.mtl|\.mp3).)*$

Ce n’est pas idéal car ce n’est pas une modification « Plugin specific » mais ça fonctionne.

Je ne suis pas expert des redirections .htaccess donc je ne comprend trop pas pourquoi le mp3 est accessible dans le répertoire /data/ et pas dans /data/cache/ sans cette modification car logiquement sans modifier cette règle le .mp3 devrait aussi être bloqué dans le dossier /data/ mais si il est là il passe sans modification.

Edit 1:
Cette modif rend évidement également accessible les mp3 du dossier /data/media/ du coup

Edit 2:
En plus j’ai fais n’importe quoi, le .mp3 était déjà présent dans cette directive et je ne l’avais pas vu, je ne sais pas pourquoi mais en l’aillant mis une deuxième fois ça marche.
Je vais creuser pour essayer de comprendre ces règles …

Si un coutumier de ces redirections passe par ici je suis preneur d’explications si j’ai pas compris moi-même d’ici là …

Edit 3:
il me semble qu’en fait le .mp3 déjà présent présente une erreur …

|\.mp3\.mp4

devrait être :

|\.mp3|\.mp4

Je pense qu’il manque un pipe entre mp3 et mp4, c’est pour ça qu’en aillant ajouté un .mp3 de plus ça passe … je teste

Je confirme, si j’ajoute le pipe manquant ça fonctionne sans le .mp3 que j’avais ajouté …

@loic ne serait-ce pas vraiment un bug dans le .htaccess cette fois ci ?

2 « J'aime »

Si effectivement erreur de ma part j’ai corrigé en alpha ça le sera dans la prochaine beta donc.

Merci pour le retour

2 « J'aime »

Hello
Petit retour comme promis.
J’ai mis à jour Jeedom avec la bêta hier (2021-12-30 07:59:18), redémarré le démon, et aucun soucis.
Le texte est énoncé à chaque fois.

Oui Beta du 26 decembre 4.2.6 a bien la modification donc ca fonctionne merci @Loic.

Et un grand grand merci @guirem qui a modifé son plugin alors qu’il n’est plus sur Jeedom. Merci et bonne année si tu passes par là.