Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Débutant coincé par un matches non fonctionnel sur HTML

Réservé à la création de scénarios dans JEEDOM
phyllox
Timide
Messages : 113
Inscription : 22 janv. 2019, 17:47

Débutant coincé par un matches non fonctionnel sur HTML

Message par phyllox » 27 févr. 2019, 18:53

Bonjour à tous

Comme le sujet l'indique, je suis encore débutant avec Jeedom, et là, je coince depuis plusieurs jours sur un scénario basé sur le plugin maillistener pour interfacer Jeedom et mon système d'alarme.

A chaque événement, mon système m'envoie un mail que je voudrais interpréter pour déterminer si mon alarme a été allumée ou éteinte et pour quelles zones. Comme je ne peux pas configurer le mail envoyé, je dois me débrouiller avec ce que je reçois, et c'est seulement en HTML. Il n'y a rien dans la zone texte.

L'HTML contient un texte de ce genre :
Votre système d'alarme sur le site «ALaMaison», vous signale : une mise en marche en local par télécommande
ou
Votre système d'alarme sur le site «ALaMaison», vous signale : une mise à l'arrêt en local par télécommande

Si je fais un matches sur "alarme" ou "site", le matches aboutit, mais quand je veux tester marche ou arrêt, ça ne fonctionne plus. Je pense que la faute en revient au « et au », qui sait même au deux points.

J'ai trouvé dans ce forum un peu la même question, et comment faire un str_replace, mais je ne vois pas comment dans la même expression je pourrais en faire 2 sur 2 caractères différents.
J'ai essayé de passer par une variable, mais Jeedom y copie du texte HTML et je me retrouve d'une part avec toutes les informations de mise en forme dans la variable, et d'autre part avec le remplacement des caractères spéciaux par des caractères d'échappement UTF8.

J'ai essayé de modifier la variable avec des str_replace. Mais impossible de trouver avec matches les mots dont j'ai besoin : "marche" et "arrêt", soit écrit ainsi, soit en remplaçant les caractères spéciaux par les caractères d'échappement Il ne les trouve pas, ni avant exécution des str_replace, ni après. Le testeur d'expression trouve le «, trouve aussi le » et le :, mais ni le marche, ni le arrêt.
Même quand il y a ceci dans la variable (extrait du log du scénario) :
blabla... une mise à l'arrêt en local par ... blabla...
Le matches ne trouve pas arrêt (contenu dans une autre variable)
fin du log : ... </html>" matches "arr&ecirc;t"] = Faux

J'ai essayé de créer une règle de transfert du mail Gmail vers une autre boite Gmail, directement depuis la boite et aussi puis par le plugin email, mais dans les 2 cas, le transfert est aussi uniquement en HTML.

La solution ultime serait de copier la zone HTML dans une zone de texte, mais j'ai essayé dans la commande sans y parvenir. Mes lacunes en Jeedom sont plus que criantes et n'ont d'équivalences que mon impatience à parvenir enfin à un résultat.

Y a-t-il un moyen de copier une variable HTML dans une variable texte en enlevant la mise en forme et en changeant l'encodage ? Je n'ai pas vu de notion de type de variable dans Jeedom...
ou bien
Y a-t-il un moyen de tester avec succès la présence des mots "marche" ou "arrêt" dans la zone HTML ?
ou bien
Y a-t-il un moyen de découper la zone HTML avec un substring de la variable pour garder seulement la partie que le matches saurait interpréter ?

En fait, n'importe quelle solution serait la bienvenue.
Merci infiniment pour toute aide que vous pourrez m'apporter.
Bonne soirée

Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 3927
Inscription : 23 mai 2015, 08:14

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Antoinekl1 » 28 févr. 2019, 13:23

as tu essayé : #commande# matches "/arr/" pour l'arrêt ?
JEEDOM Smart Ultimate + 40 modules zwave
A vendre ; pack POWER jeedom - Jeedom Mini+ - Console Clazio sous Android 6

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Mips2648 » 28 févr. 2019, 13:54

Bonne idée d'Antoine, ça contourne l'accent.

Je voulais tout de même préciser que quand tu fais un matches "qlqch" le qlqch doit etre entre "/" donc matches "/blabla/" et pas matches "blabla"
tu le savais peut-être déjà mais dans ton post tu as écris sans le "/"
fin du log : ... </html>" matches "arr&ecirc;t"] = Faux
Peut-être que ton problème vient de là?
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

phyllox
Timide
Messages : 113
Inscription : 22 janv. 2019, 17:47

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par phyllox » 28 févr. 2019, 14:04

Bonjour
Merci pour la réponse.
Je n'avais pas testé sur "/arr/" car ça me semble un peu léger comme test, sur une zone html qui pourrait contenir des arr qui ne correspondraient pas à des arrêts (array par exemple ?)

Quand je teste directement sur la commande, ça ne plaît pas au générateur d'expression (j'ai supprimé les lignes d'espacements):

#[Divers][Diag][HTML]# matches "/arr/"

Attention : il doit y avoir un souci, car le résultat est le même que l'expression
Je vais évaluer : "
bandeau-mail-(3)
Votre système d'alarme sur le site «ALaMaison», vous signale : une mise à l'arrêt en local par télécommande.
Ce message vous a été envoyé automatiquement, merci de ne pas y répondre.
" matches "/arr/"
Résultat : "
bandeau-mail- (3)
Votre système d'alarme sur le site «ALaMaison», vous signale : une mise à l'arrêt en local par télécommande.
Ce message vous a été envoyé automatiquement, merci de ne pas y répondre.
" matches "/arr/"

Quand je teste sur la variable, arr semble fonctionner... :
variable(TxtAlarme) matches "/arr/"
" matches "/arr/"
Résultat : 1

A priori pas d'autre arr dans l'html pour l'instant, alors je vais essayer avec ça. Merci encore pour l'idée.

Néanmoins je préférerais pouvoir tester le mot complet, au cas où... Pas moyen de copier une zone html dans une zone de texte brut ?
Ou de faire un substring (ou quel que soit le nom qu'on donne à l'extraction de chaîne sous linux, que je ne connais hélas pas du tout).
Je n'ai trouvé aucune doc de manipulation de chaîne de caractères avec Jeedom...

Merci d'avance
Bonne journée

phyllox
Timide
Messages : 113
Inscription : 22 janv. 2019, 17:47

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par phyllox » 28 févr. 2019, 14:18

Je voulais tout de même préciser que quand tu fais un matches "qlqch" le qlqch doit etre entre "/" donc matches "/blabla/" et pas matches "blabla"
tu le savais peut-être déjà mais dans ton post tu as écris sans le "/"
@Mips
Merci pour l'idée.
La comparaison était faite sur une autre variable à laquelle j'avais donné comme valeur : arr&ecirc;t (sans les /)
Quand je saisis arr&ecirc;t dans une variable, la valeur est remplacée automatiquement par arrêt.
Dans le log sans les slash, j'ai obtenu ce que j'ai écrit initialement (donc arr&ecirc;t sans slashs).
Si je mets /arr&ecirc;t/ dans la variable, ça ne fonctionne pas mieux car si j'ai les slash, la valeur renvoyée par le log est "/arrêt"/.
Et le résultat 0.

Merci
D'autres idées?

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Mips2648 » 28 févr. 2019, 16:42

Je n'ai pas bien compris ce que t'as voulu dire probablement...
les / ne doivent pas être mis dans la variable mais dans la condition du matches

j'ai donc testé de mon côté avec le texte en dur, avec une variable (contenant "arrêts", et avec une commande (j'ai créé un virtuel avec une commande qui renvoit "arrêt" et tout semble fonctionner comme attendu:
- le premier test retourne faux -> normal les / ne sont pas présents
- les autres retourne 1 -> (donc vrai) correct et attendu
matches.png
matches.png (25.59 Kio) Consulté 1677 fois
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

phyllox
Timide
Messages : 113
Inscription : 22 janv. 2019, 17:47

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par phyllox » 28 févr. 2019, 17:34

Hello
Merci pour les tests.
Je n'avais pas de souci non plus tant que je pouvais récupérer un mail en mode texte brut, pendant que je faisais des tests.
Lorsque je m'envoyais manuellement un mail contenant le texte attendu, je l'avais en texte et le matches aboutissait à tous coups.

Le problème est survenu dès lors que j'ai été obligé de récupérer le mail en HTML.
Dès lors - comme je l'ai écrit - la variable contient des balises html, toute la mise en forme du texte et de l'image, et les caractères spéciaux échappés en UTF8.

As tu pu faire ton test en chargeant de l'HTML dans ta variable ?
Merci.

Avatar de l’utilisateur
Claude69
Actif
Messages : 2089
Inscription : 04 avr. 2015, 07:57
Localisation : Nord de Lyon

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Claude69 » 28 févr. 2019, 18:26

Hello
Ce que l’on essaye de te dire c’est de tester avec les /
Blabla html matches ‘’/arrêt/’´
Gestion d'ouverture / fermeture Portail et garage
Gestion filtration piscine
Divers éclairages
Et tout plein d'autres choses ...
JEEDOM NUC 3.3.33 ULTIMATE

Mon matériel ici

phyllox
Timide
Messages : 113
Inscription : 22 janv. 2019, 17:47

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par phyllox » 28 févr. 2019, 19:19

Hello
Bien sûr que j'ai mis les /.../
Ca fonctionne avec "/arr/" parce que j'ai mis les slashs...
J'ai plusieurs autres conditions matches et aussi not(...matches...) par ailleurs qui fonctionnent également sur des zones texte.

Mais si je mets "/arrêt/" à la place de "/arr/", ça ne fonctionne plus.

Quand je suis sur du texte au lieu d'HTML, ça fonctionne avec "/arrêt/" et "/arr/"...
Merci

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Mips2648 » 28 févr. 2019, 19:28

phyllox a écrit :
28 févr. 2019, 19:19
Quand je suis sur du texte au lieu d'HTML, ça fonctionne avec "/arrêt/" et "/arr/"...
ah ok, je vais tester ca et voir ce que je peux trouver de mon coté.



ps: pour info et pour être précis,

Code : Tout sélectionner

&ecirc;
c'est pas de l'UTF8 mais l'encodage html mais j'avais compris
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

Avatar de l’utilisateur
Antoinekl1
Actif
Messages : 3927
Inscription : 23 mai 2015, 08:14

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Antoinekl1 » 28 févr. 2019, 20:28

Il faudrait passer par un bloc code, il y aurait plus de fonctions possible

Voir peut être en passant la commande en majuscule afin de faire disparaitre les accents
JEEDOM Smart Ultimate + 40 modules zwave
A vendre ; pack POWER jeedom - Jeedom Mini+ - Console Clazio sous Android 6

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Mips2648 » 28 févr. 2019, 21:06

Ce que j'ai déjà fait et qui fonctionne par contre : si tu sauves le scénario avec "&ecirc;"
matches_html.PNG
matches_html.PNG (11.66 Kio) Consulté 1627 fois
après la sauvegarde "arrêts" apparait (sans l'encodage), logique c'est le browser qui le transforme mais le scénario est bien sauvé

pour preuve à l'éxécution (le premier test est avec la commande "texte", le 2eme avec la commande "html" et les 2 sont vrais:

Code : Tout sélectionner

[2019-02-28 19:33:09][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-02-28 19:33:09][SCENARIO] Evaluation de la condition : ["arrêts" matches "/arrêts/"] = 1
[2019-02-28 19:33:09][SCENARIO] Exécution du sous-élément de type [action] : then
[2019-02-28 19:33:09][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-02-28 19:33:09][SCENARIO] Evaluation de la condition : ["arr&ecirc;ts" matches "/arr&ecirc;ts/"] = 1
[2019-02-28 19:33:09][SCENARIO] Exécution du sous-élément de type [action] : then
[2019-02-28 19:33:09][SCENARIO] Fin correcte du scénario
mais dès que tu vas re-sauver le scénario, le caractères "ê" sera de nouveau sauvé et le test ne fonctionnera plus (sauf si avant de sauver tu rechange "ê" en "&ecirc;"

un bloc code pour, soit encoder la chaine de test soit décoder la chaine de la commande sera une solution. Je me demande juste s'il n'y en a pas une autre plus simple.
je regarde demain, plus le courage ce soir.
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Mips2648 » 28 févr. 2019, 21:21

En fait, en envoyant mon dernier message j'ai eu une idée qui fonctionne, sans bloc code... ca m'est venu avec la façon dont je reproduisait le problème chez moi:
tu créés un virtuel avec une commande info qui doit contenir le mot (avec encodage html) que tu veux tester entouré des "/":
condition_html.PNG
condition_html.PNG (3.98 Kio) Consulté 1622 fois

et tu utilises cette commande dans ton test (2eme test ci-dessous)
scenario_html.PNG
scenario_html.PNG (11.58 Kio) Consulté 1622 fois
Bien entendu tu doit remplacer "#[Aucun][testmatches][html]#" dans mon exemple par ta commande de maillistener (#[Divers][Diag][HTML]# ?)
la commande "conditionhtml" étant celle du virtuel que tu auras créés

log de l'éxécution:

Code : Tout sélectionner

[2019-02-28 21:18:01][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-02-28 21:18:01][SCENARIO] Evaluation de la condition : ["un texte contenant le mot arr&ecirc;ts alarme" matches "/arrêts/"] = 0
[2019-02-28 21:18:01][SCENARIO] Exécution du sous-élément de type [action] : else
[2019-02-28 21:18:01][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-02-28 21:18:01][SCENARIO] Evaluation de la condition : ["un texte contenant le mot arr&ecirc;ts alarme" matches "/arr&ecirc;ts/"] = 1
[2019-02-28 21:18:01][SCENARIO] Exécution du sous-élément de type [action] : then
[2019-02-28 21:18:01][SCENARIO] Fin correcte du scénario
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

phyllox
Timide
Messages : 113
Inscription : 22 janv. 2019, 17:47

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par phyllox » 28 févr. 2019, 23:32

Hello
Merci pour ces idées.
Je vais essayer demain, comme écrit au départ, je suis débutant avec Jeedom, et pas encore familier avec les virtuels - et encore moins avec les blocs code (je ne sais même pas quel langage utilise Jeedom). Alors ça n'est pas la nuit que je vais y arriver...

Merci encore.

Avatar de l’utilisateur
Nebz
Modérateur
Messages : 6514
Inscription : 23 avr. 2017, 01:37
Localisation : Belgique

Débutant coincé par un matches non fonctionnel sur HTML

Message par Nebz » 01 mars 2019, 03:08

Code : Tout sélectionner

 str_replace("&"."ecirc;","ê",#commandeInfo#) matches "/arrêt/"
Ça devrait faire le taf

& et ecirc; étant ton code pour ê url_encodé (je ne sais pas le tapper dans le forum sur mobile sans qu'il soit remplacé) séparé dans deux chaînes concatenees


Envoyé de mon iPhone en utilisant Tapatalk
Dev plugin Homebridge

- Fournissez les logs, la capture de vos commandes et vos types génériques svp
- Constructif et bonne humeur, on est pas là pour se lancer des périfs z-wave à la figure :-)

Un petit don ça fait toujours plaisir :)

phyllox
Timide
Messages : 113
Inscription : 22 janv. 2019, 17:47

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par phyllox » 01 mars 2019, 12:06

Hello Nebz, Mips (et bonjour tout le monde)

@Nebz
J'ai essayé ce que tu suggères :
dans le sécnario sur le si :
str_replace("&"."ecirc;","ê",#[Divers][Diag][HTML]#) matches "/arrêt/"

Pas de résultat. Dans le log :
mise &agrave; l&#39;arr&ecirc;t en local par t&eacute;l&eacute;commande
... blabla...
... matches "/arrêt/"
Pas de correspondance.

Le remplacement ne s'est pas effectué.
J'ai essayé de remplacer le . de concaténation par &, ou par + ou par rien, mais même chose.

@Mips
Ca ne fonctionne pas non plus, mais peut être ou sans doute parce que je n'ai pas fini de configurer le virtuel...
J'ai créé une commande, Nom : HTMTest, sous type : info, valeur : /arr&circ;t/, avec autre dans la case en dessous de info.
Rien fait d'autre dans le virtuel. Si je le teste la commande donne 0.
De fait, quand je mets dans le scénario :
#[Divers][Diag][HTML]#) matches #[Divers][VarAlarme][HTMLTest]#
Le log me fait un matches avec 0, et bien sûr ne trouve pas de correspondance.

Je pense qu'il faut faire quelque chose en plus dans le virtuel, quelque chose qui doit être évident... pour un non débutant !
J'ai oublié quoi ??

Merci d'avance
Bonne journée

phyllox
Timide
Messages : 113
Inscription : 22 janv. 2019, 17:47

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par phyllox » 01 mars 2019, 12:14

@Mips
dans mon message précédent, j'ai écrit arr&circ;, mais c'est bien arr&ecirc; que j'ai mis dans le virtuel... Erreur de recopie.
Merci

Avatar de l’utilisateur
Nebz
Modérateur
Messages : 6514
Inscription : 23 avr. 2017, 01:37
Localisation : Belgique

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Nebz » 01 mars 2019, 12:15

Sinon mon code dans un bloc code


Envoyé de mon iPhone en utilisant Tapatalk
Dev plugin Homebridge

- Fournissez les logs, la capture de vos commandes et vos types génériques svp
- Constructif et bonne humeur, on est pas là pour se lancer des périfs z-wave à la figure :-)

Un petit don ça fait toujours plaisir :)

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Mips2648 » 01 mars 2019, 13:17

phyllox a écrit :
01 mars 2019, 12:06
Je pense qu'il faut faire quelque chose en plus dans le virtuel, quelque chose qui doit être évident... pour un non débutant !
J'ai oublié quoi ??
tu peux faire une capture de ton virtuel et de ton scénario pour être sur qu'on suive bien où tu en es?
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

Mips2648
Actif
Messages : 932
Inscription : 08 sept. 2018, 17:09

Re: Débutant coincé par un matches non fonctionnel sur HTML

Message par Mips2648 » 01 mars 2019, 13:43

Sinon la solution que Nebz propose est celle que je voulais t'éviter mais en fait à toi de choisir ce que tu préfères (et c'est peut-être plus simple), tu fais un bloc code:
matches_code.PNG
matches_code.PNG (16.92 Kio) Consulté 1563 fois
le code est celui-ci (la fonction html_entity_decode va remplacer tous les encodages html, pas seulement le "ê":

Code : Tout sélectionner

$cmd = cmd::byString("#[Aucun][testmatches][html]#");
$valueHTML = $cmd->execCmd();
$valueText = html_entity_decode($valueHTML);
$scenario->setData("textBrut", $valueText);
tu remplaces #[Aucun][testmatches][html]# par ta commande maillistener;

et après tu peux tester la variable, résultat:

Code : Tout sélectionner

[2019-03-01 13:36:08][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-03-01 13:36:08][SCENARIO] Exécution d'un bloc code
[2019-03-01 13:36:08][SCENARIO] Exécution du sous-élément de type [condition] : if
[2019-03-01 13:36:08][SCENARIO] Evaluation de la condition : ["un texte contenant le mot arrêt alarme" matches "/arrêt/"] = 1
[2019-03-01 13:36:08][SCENARIO] Exécution du sous-élément de type [action] : then
Développeur et auteur des plugins suivants, (entre autre Arlo, Solaredge, Design Image, Gotify...) et aidant sur plein d'autres!

Si vous voulez contribuer, un don fait toujours plaisir : https://paypal.me/mips2648

Répondre

Revenir vers « Scénarios »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités