Script HTML
Re: Script HTML
Salut les gars,
Ce serait aussi intéressant d'utiliser un slider où l'on voit directement sa valeur en le déplaçant (en temps réel).
Il y a un sujet ici:
viewtopic.php?t=28883
Comme ça on ne règle pas la consigne à l'aveugle ...
Sébastien
Ce serait aussi intéressant d'utiliser un slider où l'on voit directement sa valeur en le déplaçant (en temps réel).
Il y a un sujet ici:
viewtopic.php?t=28883
Comme ça on ne règle pas la consigne à l'aveugle ...
Sébastien
Sébastien
Re: Script HTML
Salut,
On arrivait pas à récupérer l'info de statut du POWER de la PAC ... j'ai réussi!
Comme on y arrivait pas en php, je suis passé par du python, voici le code:
Sébastien
On arrivait pas à récupérer l'info de statut du POWER de la PAC ... j'ai réussi!
Comme on y arrivait pas en php, je suis passé par du python, voici le code:
Code : Tout sélectionner
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
f = open("/var/www/html/pompe.html", "r")
if '<input id="isPowerSwitch" type="checkbox" name="isPowerSwitch" checked="checked" />' in f.read():
print 'OFF'
else:
print 'ON'
Sébastien
Re: Script HTML
Pour ça ce n'est pas un souci par contre, pour mon arrosage j'utilise ce type de slider (slider_value) qui affiche bien la valeur avant que je ne le lâche.Sattaz a écrit : ↑22 févr. 2019, 09:17Salut les gars,
Ce serait aussi intéressant d'utiliser un slider où l'on voit directement sa valeur en le déplaçant (en temps réel).
Il y a un sujet ici:
viewtopic.php?t=28883
Comme ça on ne règle pas la consigne à l'aveugle ...
Sébastien
Ne fonctionne pas tel quel sur mobile par contre.
Et une fois la valeur sélectionnée, je lance un scénario avec la petite flèche en bas de la tuile. Le scénario utilise cette variable : #[Extérieur][Arrosage Z1-Z2-Z3][Duree_Zone_2]#
On devrait arriver à faire un scénario avec un bloc "code" qui récupère cette valeur et exécute les autres lignes liées à cUrl.
Le code du Widget.
Code : Tout sélectionner
<span class="cmd cmd-widget" data-type="action" data-subtype="slider" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#">
<div class="cmdName" style="font-weight: bold;font-size : 12px;#hideCmdName#">#name_display#</div>
#name_display# <div class="slider" style="margin : 5px 10px 8px 10px;width: 80px;" value="#state#"></div>
<script>
$(".cmd[data-cmd_uid=#uid#] .slider.slider-horizontal").css('z-index',1);
jeedom.cmd.update['#id#'] = function(_options){
$(".cmd[data-cmd_id=#id#] .slider").slider({
min: ('#minValue#' == '') ? 0 : parseInt('#minValue#'),
max: ('#maxValue#' == '') ? 100 : parseInt('#maxValue#'),
value: ('#state#' == '') ? 0 : parseInt(_options.display_value)
})
}
jeedom.cmd.update['#id#']({display_value:'#state#'});
$(".cmd[data-cmd_uid=#uid#] .slider").on('slidestop', function (event,ui) {
jeedom.cmd.execute({id: '#id#', value: {slider: ui.value}});
});
</script>
</span>
Re: Script HTML
Pour le mode, j'ai testé "div.kg span:eq(0)", ça me renvoie bien "Heating" (mais ça tu l'avais déjà).Sattaz a écrit : ↑22 févr. 2019, 09:35Salut,
On arrivait pas à récupérer l'info de statut du POWER de la PAC ... j'ai réussi!
Comme on y arrivait pas en php, je suis passé par du python, voici le code:SébastienCode : Tout sélectionner
#!/usr/bin/env python2 # -*- coding: utf-8 -*- f = open("/var/www/html/pompe.html", "r") if '<input id="isPowerSwitch" type="checkbox" name="isPowerSwitch" checked="checked" />' in f.read(): print 'OFF' else: print 'ON'
Pour le Power, on peut se baser sur ce que tu as fait, dans le fichier pompe.html, on remplace à la volée la ligne concernant l'état.
Code : Tout sélectionner
$content = str_replace('<input id="isPowerSwitch" type="checkbox" name="isPowerSwitch" />', '<span class="Power">Power OFF</span>', $content);
$content = str_replace('<input id="isPowerSwitch" type="checkbox" name="isPowerSwitch" checked="checked" />', '<span class="Power">Power ON</span>', $content);
Re: Script HTML
Oh bordel, ce n'est pas con romanais !! je teste toute suite.
Re: Script HTML
Si ça marche, on peut simplifier la commande de remplacement.
Code : Tout sélectionner
curl_close($ch); // on ferme la session curl
//valeurs à chercher
$avant = array('<input id="isPowerSwitch" type="checkbox" name="isPowerSwitch" />', '<input id="isPowerSwitch" type="checkbox" name="isPowerSwitch" checked="checked" />');
//valeurs de remplacement
$apres = array('<span class="Power">Power OFF</span>', '<span class="Power">Power ON</span>');
//on remplace
$content = str_replace($avant, $apres, $content);
//enregistre le contenu de la page dans un fichier html
file_put_contents($pompe_html, $content);
Re: Script HTML
Je te confirme que ça marche, il faut juste inverser la commande Off avec le On.
Merci tu assures
Merci tu assures
Re: Script HTML
Salut,
Oui super Romanais, c'est bien plus jolie d'intégrer ça dans le php.
J'ai implémenté et ça fonctionne très bien.
Encore le truc du slider pour la consigne et aussi le timer de la PAC et tout sera complet!
Sébastien
Oui super Romanais, c'est bien plus jolie d'intégrer ça dans le php.
J'ai implémenté et ça fonctionne très bien.
Encore le truc du slider pour la consigne et aussi le timer de la PAC et tout sera complet!
Sébastien
Sébastien
Re: Script HTML
Le timer de la PAC ? je peux toute suite de donner le code...
timer = Beurkkkkkkk !!!! lol On a Jeedom, pourquoi s'en occuper ? la gestion est pourrie en plus.
Si tu en as besoin, je regarde ça mais pour moi ça ne sert à rien.
timer = Beurkkkkkkk !!!! lol On a Jeedom, pourquoi s'en occuper ? la gestion est pourrie en plus.
Si tu en as besoin, je regarde ça mais pour moi ça ne sert à rien.
Re: Script HTML
Yostone, je préférerai envoyer les paramètres du timer à la PAC par Jeedom mais que la PAC reste indépendante de Jeedom.
On avait pensé au même principe lorsqu'on avait travaillé sur un projet de régulation ORP/PH de la piscine ... ces installations / appareils doivent être indépendant de Jeedom et seulement échanger des paramètres/informations.
Ceci dans le but d'avoir le plus de fiabilité possible et éliminer des problèmes éventuels du aux défaillances réseaux/software/etc...
Merci,
Sébastien
On avait pensé au même principe lorsqu'on avait travaillé sur un projet de régulation ORP/PH de la piscine ... ces installations / appareils doivent être indépendant de Jeedom et seulement échanger des paramètres/informations.
Ceci dans le but d'avoir le plus de fiabilité possible et éliminer des problèmes éventuels du aux défaillances réseaux/software/etc...
Merci,
Sébastien
Sébastien
Re: Script HTML
Oki, bha je te donnerai ça alors.
Re: Script HTML
Bon, je ne suis pas fier de moi pour le moment mais j'arrive a gérer le target avec un widget virtuel.
- je cré un widget virtuel, je lui attribut un slider et je récupère l'id du retour de valeur.
- dans mon script de set consigne, je récupère la valeur de ma consigne via le lien de ma widget
- Je cré un scénario, comme déclencheur mon slider qui lance mon script de set consigne.
Voici mon script a mettre au propre ;
- je cré un widget virtuel, je lui attribut un slider et je récupère l'id du retour de valeur.
- dans mon script de set consigne, je récupère la valeur de ma consigne via le lien de ma widget
- Je cré un scénario, comme déclencheur mon slider qui lance mon script de set consigne.
Voici mon script a mettre au propre ;
Code : Tout sélectionner
<?php
// ************* DEBUT DES VARIABLES
$username = 'LOGIN';
$password = 'PASS';
$login_url = 'http://smartemp.hayward.fr:9000/login'; //url de la page d'accueil (identification)
//$cookie = 'PLAY_LANG=en'; //contenu du cookie
$source= 'http://smartemp.hayward.fr:9000'; //page à récupérer
// ************* FIN DES VARIABLES
//initialisation curl
$ch = curl_init();
//en-têtes http
$header[0] = "Host: http://smartemp.hayward.fr:9000";
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
$header[] = "Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7";
$header[] = "Accept-Charset: utf-8";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Pragma: no-cache";
$header[] = "Cache-control: max-age=0";
$header[] = "Origin: http://smartemp.hayward.fr:9000";
$header[] = "Upgrade-Insecure-Requests: 1";
$header[] = "Content-Type: application/x-www-form-urlencoded";
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "Referer: http://smartemp.hayward.fr:9000/login";
$header[] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36";
//défini l'url de connexion/identification
curl_setopt($ch, CURLOPT_URL, $login_url);
//active HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);
//affecte les variables à envoyer et le clic sur le bouton de connexion
curl_setopt($ch, CURLOPT_POSTFIELDS, 'barCode='.$username.'&pwd='.$password.'&ImageButton1.x='.$x.'&ImageButton1.y='.$y);
//défini les en-têtes http
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
// Définition de la méthode d'authentification du serveur
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//gestion du cookie
curl_setopt($ch, CURLOPT_COOKIEJAR, "/var/www/html/tmp/cookie"); //Le fichier dans lequel les cookies seront enregistrés
//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//exécute la requête - login
$store = curl_exec($ch);
//lecture de la consigne
$curl2 = curl_init("http://MON_IP/core/api/jeeApi.php?apikey=wcMT1mnPBCn3XDhO5xjAs87s9VQIJ9mZ&type=cmd&id=MON_ID");
curl_setopt($curl2, CURLOPT_FRESH_CONNECT, true);
curl_setopt($curl2, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl2, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl2, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true);
$value = curl_exec($curl2);
curl_close($curl2); // on ferme la session curl
//Affectation consigne pompe
$target = $value;
$target=($target*1.8)+32; //Conversion en F°
curl_setopt($ch, CURLOPT_URL, 'http://smartemp.hayward.fr:9000/internal/settarget');
//affecte les variables à envoyer et le clic sur le bouton de connexion
curl_setopt($ch, CURLOPT_POSTFIELDS, 'target='.$target);
$store = curl_exec($ch);
curl_close($ch); // on ferme la session curl
?>
Re: Script HTML
Je suis en train de regarder pour le timer mais je n'ai pas fini car le serveur est out...
Il me reste qu'a mettre le code pour activer les timers, mais pour mettre le temps voici :
Edit :
C'est bon j'ai fini la config du timer :
Et pour activer l'autorisation d'intervention d'un technicien :
Il me reste qu'a mettre le code pour activer les timers, mais pour mettre le temps voici :
Code : Tout sélectionner
//Timer pompe
curl_setopt($ch, CURLOPT_URL, 'http://smartemp.hayward.fr:9000/internal/timer');
//affecte les variables à envoyer et le clic sur le bouton de connexion
curl_setopt($ch, CURLOPT_POSTFIELDS, 'timerOneOnMin=01'.'&timerOneOnHour=11'.'&timerOneOffMin=02'.'&timerOneOffHour=12'.'&timerTwoOnMin=12'.'&timerTwoOnHour=03'.'&timerTwoOffMin=13'.'&timerTwoOffHour=04');
$store = curl_exec($ch);
curl_close($ch); // on ferme la session curl
C'est bon j'ai fini la config du timer :
Code : Tout sélectionner
//Timer pompe
curl_setopt($ch, CURLOPT_URL, 'http://smartemp.hayward.fr:9000/internal/timer');
//affecte les variables à envoyer et le clic sur le bouton de connexion
//Envoi de toutes les valeurs seulement
//curl_setopt($ch, CURLOPT_POSTFIELDS, 'timerOneOnMin=01'.'&timerOneOnHour=11'.'&timerOneOffMin=02'.'&timerOneOffHour=09'.'&timerTwoOnMin=12'.'&timerTwoOnHour=03'.'&timerTwoOffMin=13'.'&timerTwoOffHour=04'.'&TimerOneOn=1'.'&TimerOneOff=1'.'&TimerTwoOn=1'.'&TimerTwoOff=1');
//Envoi du timer 1 pour l'activer ou pas
//curl_setopt($ch, CURLOPT_POSTFIELDS, 'timerOneOnMin=01'.'&timerOneOnHour=11'.'&timerOneOn=1'.'&timerOneOffMin=02'.'&timerOneOffHour=09'.'&timerOneOff=1'.'&timerTwoOnMin=12'.'&timerTwoOnHour=03'.'&timerTwoOffMin=13'.'&timerTwoOffHour=04');
//Envoi du timer 2 pour l'activer ou pas
//curl_setopt($ch, CURLOPT_POSTFIELDS, 'timerOneOnMin=01'.'&timerOneOnHour=11'.'&timerOneOffMin=02'.'&timerOneOffHour=09'.'&timerTwoOnMin=12'.'&timerTwoOnHour=03'.'&timerTwoOn=1'.'&timerTwoOffMin=13'.'&timerTwoOffHour=04'.'&timerTwoOff=1');
//Envoi de toute la config du timer
curl_setopt($ch, CURLOPT_POSTFIELDS, 'timerOneOnMin=01'.'&timerOneOnHour=11'.'&timerOneOn=1'.'&timerOneOffMin=02'.'&timerOneOffHour=09'.'&timerOneOff=1'.'&timerTwoOnMin=12'.'&timerTwoOnHour=03'.'&timerTwoOn=1'.'&timerTwoOffMin=13'.'&timerTwoOffHour=04'.'&timerTwoOff=1');
$store = curl_exec($ch);
curl_close($ch); // on ferme la session curl
Code : Tout sélectionner
//Autorisation
curl_setopt($ch, CURLOPT_URL, 'http://smartemp.hayward.fr:9000/control');
//affecte les variables à envoyer et le clic sur le bouton de connexion
curl_setopt($ch, CURLOPT_POSTFIELDS, 'control=true');
$store = curl_exec($ch);
Re: Script HTML
Salut,
C'est bon, j'ai le réglage de la consigne avec curseur en php!!!!
Le truc pour récupérer le paramètre depuis le php:
$target=$argv[1];
Et aussi ne pas oublier de passer #slider# comme paramètre dans la requête:
/var/www/html/core/php/../../plugins/script/core/ressources/PAC_Consigne.php #slider#
Youpi!
Sébastien
C'est bon, j'ai le réglage de la consigne avec curseur en php!!!!
Code : Tout sélectionner
<?php
// ************* DEBUT DES VARIABLES
$username = 'ABCD1234';
$password = 'ABCD1234';
$login_url = 'http://smartemp.hayward.fr:9000/login'; //url de la page d'accueil (identification)
$source= 'http://smartemp.hayward.fr:9000'; //page à récupérer
// ************* FIN DES VARIABLES
//initialisation curl
$ch = curl_init();
//en-têtes http
$header[0] = "Host: http://smartemp.hayward.fr:9000";
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
$header[] = "Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7";
$header[] = "Accept-Charset: utf-8";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Pragma: no-cache";
$header[] = "Cache-control: max-age=0";
$header[] = "Origin: http://smartemp.hayward.fr:9000";
$header[] = "Upgrade-Insecure-Requests: 1";
$header[] = "Content-Type: application/x-www-form-urlencoded";
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "Referer: http://smartemp.hayward.fr:9000/login";
$header[] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36";
//défini l'url de connexion/identification
curl_setopt($ch, CURLOPT_URL, $login_url);
//active HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);
//affecte les variables à envoyer et le clic sur le bouton de connexion
curl_setopt($ch, CURLOPT_POSTFIELDS, 'barCode='.$username.'&pwd='.$password);
//défini les en-têtes http
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
// Définition de la méthode d'authentification du serveur
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//gestion du cookie
curl_setopt($ch, CURLOPT_COOKIEJAR, "/var/www/html/tmp/cookie"); //Le fichier dans lequel les cookies seront enregistrés
//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//exécute la requête - login
$store = curl_exec($ch);
//Assignation de la consigne température
$target=$argv[1];
$target=($target*1.8)+32; //Conversion en F°
curl_setopt($ch, CURLOPT_URL, 'http://smartemp.hayward.fr:9000/internal/settarget');
//affecte les variables à envoyer et le clic sur le bouton de connexion
curl_setopt($ch, CURLOPT_POSTFIELDS, 'target='.$target);
$store = curl_exec($ch);
curl_close($ch); // on ferme la session curl
?>
$target=$argv[1];
Et aussi ne pas oublier de passer #slider# comme paramètre dans la requête:
/var/www/html/core/php/../../plugins/script/core/ressources/PAC_Consigne.php #slider#
Youpi!
Sébastien
Sébastien
Re: Script HTML
Deja testé mais ca marche pas chez moi, tu as plusieurs script dans ton module ?
Re: Script HTML
Ah oui c'est bon.
Par contre, je vais rester avec mon ancienne config. Car plus facile a régler la température via le slider et le retour du slider
puis avec la touche appliquer pour changer la consigne.
Mais bien joué lol en plus j'avais pas vue mais c'est indiqué en haut en vert ^^
Par contre, je vais rester avec mon ancienne config. Car plus facile a régler la température via le slider et le retour du slider
puis avec la touche appliquer pour changer la consigne.
Mais bien joué lol en plus j'avais pas vue mais c'est indiqué en haut en vert ^^
Re: Script HTML
Oui c'est clair, on s'amuse là!
Merci pour tout ce qui a été réalisé ici, ça m'a permis d'apprendre les requêtes curl et de découvrir wireshark et tout ce qu'on peut bidouiller avec.
Sébastien
Merci pour tout ce qui a été réalisé ici, ça m'a permis d'apprendre les requêtes curl et de découvrir wireshark et tout ce qu'on peut bidouiller avec.
Sébastien
Sébastien
Re: Script HTML
Ouai c'est clair, merci a vous deux
Re: Script HTML
Je viens de réussir à récupérer la page en FR.
Voici le code utilisé, si vous voulez modifier un peu le vôtre, je n'aurai pas le temps de m'y replonger ces jours-ci.
Ça permettrait notamment de virer les str_replace qui rallonge la durée d'exécution du code, et ça éviterait la conversion des F° vers C°.
En fait il y a une redirection http 303 (vue avec l'inspecteur Chrome). L'option cUrl magique est donc :
Et nous sommes sur du GET.
Donc j'ai commencé par désactiver le POST
En appelant la bonne url, et avec le code ci-dessous, je récupère bien la page en FR.
Voici le code utilisé, si vous voulez modifier un peu le vôtre, je n'aurai pas le temps de m'y replonger ces jours-ci.
Ça permettrait notamment de virer les str_replace qui rallonge la durée d'exécution du code, et ça éviterait la conversion des F° vers C°.
En fait il y a une redirection http 303 (vue avec l'inspecteur Chrome). L'option cUrl magique est donc :
Code : Tout sélectionner
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
Donc j'ai commencé par désactiver le POST
Code : Tout sélectionner
curl_setopt($ch, CURLOPT_POST, 0);
Code : Tout sélectionner
<?php
// ************* DEBUT DES VARIABLES
$login_url = 'http://smartemp.hayward.fr:9000/lang?c=fr'; //url fr
$source= 'http://smartemp.hayward.fr:9000/lang?c=fr'; //page à récupérer
$pompe_html = '/var/www/html/pompe.html'; //page créée
// ************* FIN DES VARIABLES
//initialisation curl
$ch = curl_init();
//en-têtes http
$header[0] = "Host: http://smartemp.hayward.fr:9000";
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
$header[] = "Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7";
$header[] = "Accept-Charset: utf-8";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Pragma: no-cache";
$header[] = "Cache-control: max-age=0";
$header[] = "Origin: http://smartemp.hayward.fr:9000";
$header[] = "Upgrade-Insecure-Requests: 1";
$header[] = "Content-Type: application/x-www-form-urlencoded";
$header[] = "Accept-Encoding: gzip, deflate";
$header[] = "Referer: http://smartemp.hayward.fr:9000/login";
$header[] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36";
//défini l'url de connexion/identification
curl_setopt($ch, CURLOPT_URL, $login_url);
//désactive HTTP POST
curl_setopt($ch, CURLOPT_POST, 0);
//défini les en-têtes http
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
// Définition de la méthode d'authentification du serveur
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//Le fichier dans lequel les cookies seront enregistrés
curl_setopt($ch, CURLOPT_COOKIEJAR, "/var/www/html/tmp/cookie");
//Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
//not to print out the results of its query.
//Instead, it will return the results as a string return value
//from curl_exec() instead of the usual true/false.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, "/var/www/html/tmp/cookie"); //Le fichier cookie à utiliser
curl_setopt($ch, CURLOPT_URL, $source);//la page à récupérer
//execute la requête
$content = curl_exec($ch);
curl_close($ch); // on ferme la session curl
//enregistre le contenu de la page dans un fichier html
file_put_contents($pompe_html, $content);
//change les droits sur le fichier - écriture
chmod($pompe_html,0777);
?>
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité