Aller au contenu

Sonnette Qui Vous Informe


Messages recommandés

Posté(e)

Bonjour àtous,

J aimerais que quand une personne vient chez moi et qu il sonne àla sonnette, je reçoive une notification push ou SMS qui me dit : qq. un sonne àta porte et peut être cablè avec une cam qui quand on appuie sur la sonnette ´, la photo via la cam soit prise en temps réel ou une rafale de photo,

Merci pour vos futures idées

  • Upvote 1
Posté(e)
 

Bonjour,

 

J'ai ce genre de fonctionnement (push + mail avec photos) mais en plus de la HC2 j'utilise un NAS pour envoyer les photos par mail.

 

Si tu veux je peux te donner les php qui permettent d'envoyer x photos par mail. Ca me sert pour la boite aux lettres, la sonnette et l'ouverture du portail.

Posté(e)

Merci beaucoup, j ai également un nas, as-tu développé un module virtuel pour cette action ?

Par contre il me faut un module aussi non ?

Merci encore JossAlf

Posté(e)
 

Bon alors en fait j'utilise une sonnette chacon sur ma Zibase qui lance un script php sur le NAS par une requête HTTP :

http://192.168.0.46/zibase/script/ScriptsPhoto/photosonnette.php

Il te faudra detecter donc trouver un détecteur pour lancer ce script. Une sonnet Zwave ou un module universel greffé sur ta sonnette actuelle.

Tu as quoi pour le moment ?

Posté(e)

Pour l'instant je n'ai rien mais j'envisage de greffer un micro module

Il me faut un détecteur je suppose ?

Posté(e)

Voici le php qui vient de Domotics du site touteladomotique.com que j'ai légèrement modifié :

<?php
// -------------------------------------------------------------------------------------
// Domotics
// DHAS-send-snapshots-bymail v1
// 03 Mar 2012
// -------------------------------------------------------------------------------------
// Changes 
// v1.0 - get snapshot from cam and save to dis 
// -------------------------------------------------------------------------------------

require("attach_mailer_class.php");

// Function
// Alternative Image Saving Using cURL seeing as allow_url_fopen is disabled - bummer
function save_image($img,$fullpath){
 $ch = curl_init ($img);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
 $rawdata=curl_exec($ch);
 curl_close ($ch);
 if(file_exists($fullpath)) {
 chmod($fullpath, 755);
 unlink($fullpath);
 }
 $fp = fopen($fullpath,'x');
 fwrite($fp, $rawdata);
 fclose($fp);
}

// Main program

// Initialisation des Paramètres 
echo "Parametres : En cours ...<br/>";
$cam         = "http://Utilisateur:MotDePass@adresseIPCaméra:port/snapshot.cgi";
$tmp_folder = '/volume1/web/zibase/photosonnettes/';
echo "Parametres : OK<br/><br/><br/><br/>";

$today = date("d-m-y H:i:s");   

// Capture des images
echo "Capture des snaphots : En cours ...<br/>";
save_image($cam,$tmp_folder.'img1.jpg');
sleep(1); 
save_image($cam,$tmp_folder.'img2.jpg');
sleep(1); 
save_image($cam,$tmp_folder.'img3.jpg');
sleep(1); 
save_image($cam,$tmp_folder.'img4.jpg');
sleep(1); 
save_image($cam,$tmp_folder.'img5.jpg');
echo "Capture des snaphots : OK<br/><br/><br/><br/>";

// Envoi du mail

echo "Envoi du mail : En cours …</br>";
$test = new attach_mailer($name = "Zibase", $from = "Adressebidon@free.fr", $to = "tonadressemail@free.fr", $cc = "", $bcc = "", $subject = "On vient de sonner (les photos)");
$test->text_body = "Photos de la personne qui vient de sonner (".$today.")";
$test->add_attach_file("/volume1/web/zibase/photosonnettes/img1.jpg");
$test->add_attach_file("/volume1/web/zibase/photosonnettes/img2.jpg"); 
$test->add_attach_file("/volume1/web/zibase/photosonnettes/img3.jpg"); 
$test->add_attach_file("/volume1/web/zibase/photosonnettes/img4.jpg"); 
$test->add_attach_file("/volume1/web/zibase/photosonnettes/img5.jpg"); 
$test->process_mail();
echo "Envoi du mail : OK"; 

?>

Attention il te faut dans le même répertoire le fichier "attach_mailer_class.php" qui permet l'envoi des mails :

<?php
/*
Attachment Mailer class - version 1.20
PHP class handles multiple attachment e-mails using the mime mail standard

Copyright (c) 2006, Olaf Lederer
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    * Neither the name of the finalwebsites.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

_________________________________________________________________________
available at http://www.finalwebsites.com/snippets.php?id=41
Comments & suggestions: http://www.finalwebsites.com/forums/forum/php-classes-support-forum

*************************************************************************

Updates / bugfixes

Ver. 1.01  The new example demonstrates how to use this class together with some php upload functionality. This example form / script needs an object of the Easy Upload class available on finalwebsites.com.

ver 1.02 - The process_mail() method returns a boolean now to give more information to a possible next step inside an application. There was a small bug inside the upload_and_mail_example.php file. The delete file object must be changed to act with file upload class.

ver 1.03 - I noticed there is sometimes a problem with the mail function and the return path. Some mail servers need a valid notation if the mail can't be deliverd. I added the "-f" option to the process_mail method.

ver. 1.20 - Since this version the class is changed into a full featured html mailer class incl. html mail + (inline) attachments, alternative text format, inline attachments mixed with external attachments and much more. Most methods are changed and the structure how an objects is defined is updated, too. You need to update formerly mail scripts, check the updated documentation.
*/

define("LIBR", "\n"); // use a "\r\n" if you have problems
define("PRIORITY", 3); // 3 = normal, 2 = high, 4 = low
define("TRANS_ENC",	"7bit");
define("ENCODING", "iso-8859-1");


class attach_mailer {
	
	var $from_name;
	var $from_mail;
	var $mail_to;
	var $mail_cc;
	var $mail_bcc;
	var $webmaster_email = "webmaster@yourdomain.com";
	
	var $mail_headers;
	var $mail_subject;
	var $text_body = "";
	var $html_body = "";
	
	var $valid_mail_adresses; // boolean is true if all mail(to) adresses are valid
	
	var $uid; // the unique value for the mail boundry
	var $alternative_uid; // the unique value for the mail boundry
	var $related_uid; // the unique value for the mail boundry
	
	var $html_images = array();
	var $att_files = array();
	
	var $msg = array();
	
	// functions inside this constructor
	// - validation of e-mail adresses
	// - setting mail variables
	// - setting boolean $valid_mail_adresses
	function attach_mailer($name = "", $from, $to, $cc = "", $bcc = "", $subject = "") {
		$this->valid_mail_adresses = true;
		if (!$this->check_mail_address($to)) {
			$this->msg[] = "Error, the \"mailto\" address is empty or not valid.";
			$this->valid_mail_adresses = false;
		} 
		if (!$this->check_mail_address($from)) {
			$this->msg[] = "Error, the \"from\" address is empty or not valid.";
			$this->valid_mail_adresses = false;
		} 
		if ($cc != "") {
			if (!$this->check_mail_address($cc)) {
				$this->msg[] = "Error, the \"Cc\" address is not valid.";
				$this->valid_mail_adresses = false;
			} 
		}
		if ($bcc != "") {
			if (!$this->check_mail_address($bcc)) {
				$this->msg[] = "Error, the \"Bcc\" address is not valid.";
				$this->valid_mail_adresses = false;
			} 
		}
		if ($this->valid_mail_adresses) {
			$this->from_name = $this->strip_line_breaks($name);
			$this->from_mail = $this->strip_line_breaks($from);
			$this->mail_to = $this->strip_line_breaks($to);
			$this->mail_cc = $this->strip_line_breaks($cc);
			$this->mail_bcc = $this->strip_line_breaks($bcc);
			$this->mail_subject = $this->strip_line_breaks($subject);
		} else {
			return;
		}		
	}
	function get_msg_str() {
		$messages = "";
		foreach($this->msg as $val) {
			$messages .= $val."<br />\n";
		}
		return $messages;			
	}
	// use this to prent formmail spamming
	function strip_line_breaks($val) {
		$val = preg_replace("/([\r\n])/", "", $val);
		return $val;
	}
	function check_mail_address($mail_address) {
		$pattern = "/^[\w-]+(\.[\w-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4})$/i";
		if (preg_match($pattern, $mail_address)) {
			if (function_exists("checkdnsrr")) {
				$parts = explode("@", $mail_address);
				if (checkdnsrr($parts[1], "MX")){
					return true;
				} else {
					return false;
				}
			} else {
				// on windows hosts is only a limited e-mail address validation possible
				return true;
			}
		} else {
			return false;
		}
	}
	function get_file_data($filepath) {
		if (file_exists($filepath)) {
			if (!$str = file_get_contents($filepath)) {
				$this->msg[] = "Error while opening attachment \"".basename($filepath)."\"";
			} else {
				return $str;
			}
		} else {
			$this->msg[] = "Error, the file \"".basename($filepath)."\" does not exist.";
			return;
		}
	}
	// use for $dispo "attachment" or "inline" (f.e. example images inside a html mail
	function add_attach_file($file, $encoding = "base64", $dispo = "attachment", $type = "application/octet-stream") {
		$file_str = $this->get_file_data($file);
		if ($file_str == "") {
			return;
		} else {
			if ($encoding == "base64") $file_str = base64_encode($file_str);
			$this->att_files[] = array(
				"data"=>chunk_split($file_str),
				"name"=>basename($file), 
				"cont_type"=>$type, 
				"trans_enc"=>$encoding,
				"disposition"=>$dispo);
			
		}
	}
	
	function add_html_image($img_name) {
		$file_str = $this->get_file_data($img_name);
		$img_dim = getimagesize($img_name);
		if ($file_str == "") {
			return;
		} else {
			$this->html_images[] = array(
				"data"=>chunk_split(base64_encode($file_str)),
				"name"=>basename($img_name), 
				"cont_type"=>$img_dim['mime'],
				"cid"=>md5(uniqid(time()))."@".$_SERVER['SERVER_NAME']);
		}
	}

	function create_stand_headers() {
		if ($this->from_name != "") {
			$headers = "From: ".$this->from_name." <".$this->from_mail.">".LIBR;
			$headers .= "Reply-To: ".$this->from_name." <".$this->from_mail.">".LIBR;
		} else {
			$headers = "From: ".$this->from_mail.LIBR;
			$headers .= "Reply-To: ".$this->from_mail.LIBR;
		}
		if ($this->mail_cc != "") $headers .= "Cc: ".$this->mail_cc.LIBR;
		if ($this->mail_bcc != "") $headers .= "Bcc: ".$this->mail_bcc.LIBR;
		$headers .= sprintf("Message-ID: <%s@%s>%s", md5(uniqid(time())), $_SERVER['SERVER_NAME'], LIBR);
		$headers .= "X-Priority: ".PRIORITY.LIBR;
		$headers .= "X-Mailer: Attachment Mailer [version 1.2]".LIBR;
		$headers .= "MIME-Version: 1.0".LIBR;
		return $headers;
	}
	
	function create_html_image($img_array) {
		$img = "Content-Type: ".$img_array['cont_type'].";".LIBR.chr(9)." name=\"".$img_array['name']."\"".LIBR;
		$img .= "Content-Transfer-Encoding: base64".LIBR;
		$img .= "Content-ID: <image".$img_array['cid'].">".LIBR;
		$img .= "Content-Disposition: inline;".LIBR.chr(9)." filename=\"".$img_array['name']."\"".LIBR.LIBR;
		$img .= $img_array['data'];
		return $img;		
	}
	
	function create_attachment($data_array) {
		$att = "Content-Type: ".$data_array['cont_type'].";".LIBR.chr(9)." name=\"".$data_array['name']."\"".LIBR;
		$att .= "Content-Transfer-Encoding: ".$data_array['trans_enc'].LIBR;
		$att .= "Content-Disposition: ".$data_array['disposition'].";".LIBR.chr(9)." filename=\"".$data_array['name']."\"".LIBR.LIBR;
		$att .= $data_array['data'];
		return $att;		
	}
	
	function create_html_body() {
		$html = "Content-Type: text/html; charset=".ENCODING.LIBR;
		$html .= "Content-Transfer-Encoding: ".TRANS_ENC.LIBR.LIBR;
		foreach ($this->html_images as $img) {
			$this->html_body = str_replace($img['name'], "cid:image".$img['cid'], $this->html_body);
		}
		$html .= $this->html_body;
		return $html.LIBR.LIBR;
	}
	
	function build_message() {
		$this->headers = $this->create_stand_headers();
		$msg = "";
		$is_html = ($this->html_body != "") ? true : false;
		$is_attachment = (count($this->att_files) > 0) ? true : false;
		$is_images = (count($this->html_images) > 0) ? true : false;
		if ($is_attachment) {
			$this->uid = md5(uniqid(time()));
			$this->headers .= "Content-Type: multipart/mixed;".LIBR.chr(9)." boundary=\"".$this->uid."\"".LIBR.LIBR;
			$this->headers .= "This is a multi-part message in MIME format.".LIBR;
			if (!$is_html) {
				$msg .= "--".$this->uid.LIBR;
			} else {
				$this->headers .= "--".$this->uid.LIBR;
			}
		} 
		if ($is_html) {
			$this->alternative_uid = md5(uniqid(time()));
			$this->headers .= "Content-Type: multipart/alternative;".LIBR.chr(9)." boundary=\"".$this->alternative_uid."\"".LIBR.LIBR;
			if (!$is_attachment) {
				$this->headers .= "This is a multi-part message in MIME format.".LIBR;
			}
			$msg .= LIBR."--".$this->alternative_uid.LIBR;
		}
		$body_head = "Content-Type: text/plain; charset=".ENCODING."; format=flowed".LIBR;
		$body_head .= "Content-Transfer-Encoding: ".TRANS_ENC.LIBR.LIBR;
		if (!$is_attachment && !$is_html) {
			$this->headers .= $body_head;
		} else {
			$msg .= $body_head;
		}
		$msg .= trim($this->text_body).LIBR.LIBR;
		if ($is_html) {
			$msg .= "--".$this->alternative_uid.LIBR;
			if ($is_images) {
				$this->related_uid = md5(uniqid(time()));
				$msg .= "Content-Type: multipart/related;".LIBR.chr(9)." boundary=\"".$this->related_uid."\"".LIBR.LIBR.LIBR;
				$msg .= "--".$this->related_uid.LIBR;
				$msg .= $this->create_html_body();
				foreach ($this->html_images as $img) {
					$msg .= "--".$this->related_uid.LIBR;
					$msg .= $this->create_html_image($img);
				}
				$msg .= LIBR."--".$this->related_uid."--";
			} else {
				$msg .= $this->create_html_body();
			}
			$msg .= LIBR.LIBR."--".$this->alternative_uid."--".LIBR.LIBR;
		}
		if ($is_attachment) {
			foreach ($this->att_files as $att) {
				$msg .= "--".$this->uid.LIBR;
				$msg .= $this->create_attachment($att);
			}
			$msg .= "--".$this->uid."--";
		}
		return $msg;		
	}
	
	function process_mail() {
		if (!$this->valid_mail_adresses) return;
		if (mail($this->mail_to, $this->mail_subject, $this->build_message(), $this->headers, "-f".$this->webmaster_email)) {
			$this->msg[] = "Your mail is succesfully submitted.";
			return true;
		} else {
			$this->msg[] = "Error while sending you mail.";
			return false;
		}
	}
}
	
?>
Posté(e)

j ai également une zibase donc je vais pouvoir y coller ton script et t en remercie

Pour le decteur je n ai pas d idée tu préconises quoi ?

Pour les cams j ai aussi

Posté(e)

En suite tu crées un modules virtuel avec un bouton qui contient : (mon NAS à  l'adresse 192.168.0.46 et mon php se trouve là  /zibase/script/ScriptsPhoto/photosonette.php)

HC2 = Net.FHttp("192.168.0.46");
response = HC2:GET("/zibase/script/ScriptsPhoto/photosonette.php");
Posté(e)

euh, sinon il y a la fonction video gate du HC2, qui correspond exactement à  ça, tu greffes un module universel sur ta sonnette, tu link ça à  ta caméra déclarée sur HC2 ( si foscam ou heden pas de soucis), et tu peux meme lier un module correpondant à  l'ouverture d'une gache electrique ou d'un portail.

 

En cas de sonnerie, tu reçois un push, et si tu cliques dessus, c'est censé t'ouvrir l'appli sur le videogate ou tu vois l'image et la possibilité d'ouvrir.

 

I y a qques limitations qui dervaient être revues dans les updates, le message de push est en anglais, et l'appli ne s'ouvre pas forcément bien selon le niveau de droits du user concerné, mais globalement ça fait le job, nativement.

 

Je l'ai mis en place il y a qques jours, ça fonctionne, en revanche ça n'enregistre pas, car j'ai deja un enregistremnt continue avec zoneminder ( mais tu peux aussi déclencher une scene au moment de la sonnette qui fait prendre une photo à  la cam si tu penses ne pas pouvoir controller via l'appli en direct)

Posté(e)

J'ai une solution un peu différente...qui ne répondra peut-être pas à  100% à  ta demande mais qui est pas mal. (c'est la mienne  ;) )

 

Je prends l'hypothèse que tu as une caméra et une sonnette tout deux connectés à  ta box HC2. Dans ce cas, ce n'est pas dur de t'envoyer un PUSH ou un SMS.

 

Pour le PUSH : j'utilise LiveNotifer (gratuit) qui se commande par requête HTTP (donc très simple)

​Pour le SMS : j'utilise SMS Gateway (appli Android) qui avec un abonnement FREE (2€) te permet d'envoyer des SMS aussi par requête HTTP =>  http://www.abavala.com/2012/07/09/sms-gateway-une-passerelle-sms-a-la-maison/

 

Pour le MMS : Je n'ai pas testé mais il y a des applis "passerelles"

Pour la caméra : Recevoir par mail, les photos se fait par configuration ou par commande dans un scène avec SendPhotoToUser() et/ou SendPhotolToMail()

Posté(e)

C'est possible ! tu as raison!

 

Je n'ai pas encore exploré toutes les fonctionnalités de ma box et comme j'avais mis en place avec d'autres moyens...

 

En fait, je ne sais pas si c'est facile d'envoyer des PUSH différents aux différents utilisateurs (ma famille) et de les personnaliser (logos, photos, messages, etc ...) et ce en illimité avec la box...donc une commande HTTP et hop ! ;)  

Posté(e)

oui en lua tu peux envoyer des push custom au niveau du message, du moins vers iphone mais je pense que c est pareil vers android.

il faut que l'appli soit installee sur l'appareil, et il apparait alors dans le panel gestion d'acces.

a partir de la tu peux soit lui envoyer des messages preetablis, avec les scenes en mode bloc, ou des messages custom via lua.

pour la sonnette il n'y a pas franchement besoin de customisation cependant...

de meme si ta cam est installee sur le hc2 tu peux declencher l'envoi par mail d'une photo depuis une scene bloc ou lua.

si tu veux des exemples de commandes lua n'hesite pas àdemander

Posté(e)

J'ai testé la solution du vidéo gate mais pour que çela fonctionne il ne faut QUE du zwave... Il s'avère que j'ai une sonnette chacon (bientôt un skybelle avec un fibaro universel) et que je commande mon portail avec une télécommande somfy hackée sur laquelle je ai soudé un creasol. Donc vidéo gate out pour moi pour le moment.

Cela dit, ma solution sur le NAS permet 2/3 choses que tu n'auras pas avec la solution full HC2 ou vidéo gate HC2 :

1/ le push ne permet pas d'avoir de photo. C'est pour du live uniquement.

2/ Avec ma solution j'ai un push et 5 photos (j'ai choisi 5 pour la sonnette car la configuration de ma porte et de ma caméra fait que les "sonneurs" sont parfois cachés par le montant de la porte). Le NAS ne souffre pas trop de la surcharge de travail avec le petit php àexécuter. ;)

2bis / tu gardes une archive des ""sonneurs" puisque tu as un mail avec x photos.

3/ j'utilise ce php pour surveiller aussi mon portail et ma boîte aux lettres qui sont dans la visée de la caméra. Sinon on peut utiliser une caméra mobile et la dirigée vers le module qui a déclenché (mais les prospecteurs sont tellement rapide qu'il n'y aura personne sur la photo ;) ).

D'ailleurs en passant, c'est dingue comme les prospecteurs passent 24/24H. J'en ai un qui glisse (ou pas d'ailleurs) des trucs dans ma boîte vers 3h ou 4h du matin. Je soupçonne certains de faire du repérage car ils passent 2 ou 3 fois dans la même journée/nuit alors que je n'ai qu'un prospectus ...

La surveillance du portail était surtout làpour le enfants. Je voulais être prévenu par push et dès que le portail s'ouvre (si le petit denier était tombé sur la télécommande ...). Maintenant àchaque ouverture du portail ou si quelqu'un force dessus pour essayé de l'ouvrir, j'ai 5 photos du testeur ;)

Posté(e)

Effectivement il faut une remontée via un capteur zwave pour utiliser le video gate, c'est je trouve la grosse limitation des modules liés fibaro.

Je me demande à  quel point ils ne limitent pas volontairement (idem pour le panel chauffage) pour vendre des modules, c 'est quand même leur fond de commerce...

 

Pour l'envoi de photos par mail, tu peux aussi le faire avec le HC2 des lors que la cam y est déclarée, soit en direct, soit en faisant un appel aux fonctions de la caméra en requette http au travers d'un module virtuel.

Perso je lance un trigger vers mon serveur zoneminder, ce qui permet d'avoir une notification, et un évenement d'enregistrement autonome, mais c 'est une autre affaire...

Posté(e)

Merci pour vos réponses je vais tester mais d'abord mon premier job va être d'intégrer la caméra dans le H c 2 de qui n'est pas IP mais par BNC et que je n'arrive pas encore intégré (Steven avait fait des recherches ce sujet sans réussite malheureusement, il s'était bien cassé la tête)

Par la suite je compte greffé àmicro module universel àma sonnette existante et àchaque fois qu'on appuiera sur la sonnette j'espère déclencher une notification push.

Encore merci pour votre aide àtous !

Posté(e)

oulah oui la cam bnc, àconvertir en ip, premier challenge, tu as un interêt particulier pour cette caméra ? ( genre c 'est un super modèle ?)

tu as pu trouver un "convertisseur" àun tarif interessant ?

Posté(e)

Biboun je suppose que c'est une étape indispensable de convertir la came ben c'est en VIP pour pouvoir intégrer dans la box ?

Posté(e)

ah oui, c'est indispensable si tu veux la visualiser et l'exploiter au travers de la box, ou alors les entrées BNC sont très bien cachées sur le HC2 , je les ai jamais trouvées :)

Posté(e)

En fait je voulais interfacer Stoker numérique via la box car le constructeur avait mis àdisposition dans son code lua mais inexploitable selon Steven et il y a passé beaucoup de temps.

×
×
  • Créer...