Sonnette connecté

Les applications du Raspberry Pi en contrôle d'accès, alarme et vidéosurveillance

Modérateur : Francois

Répondre
FullMetalKnet
Messages : 18
Enregistré le : dim. 19 juil. 2015 17:27
Localisation : Poitiers (86)

Sonnette connecté

Message par FullMetalKnet » ven. 16 mars 2018 21:44

Bonjour à tous,

je me permets de vous demander de l'aide car je ne connais pas trop (voir pas du tout) la programmation Java.
Etant autodidacte, j'aurais besoin d'un (ou deux) tuyaux pour réaliser mon projet.
J'ai pour projet de faire une "sonnette connectée" pour l'intégrer dans mon système domotique, j'ai trouver dans le google store un projet déjà tout prêt.

https://play.google.com/store/apps/deta ... ette&hl=fr

En présentation de l'appli, le créateur offre un tuto et source de l'appli gratuitement.

http://doorbellipcam.2minfo.fr/projet%20V3.pdf

Son projet, bien intéressant, a été créé pour un système Odroid C1. J'ai donc voulu l'installer sur un Raspberry Pi Zéro, l'installation et paramétrage s'est bien déroulé sauf la partie câblage.
Les bornes GPIO où seront câblés le bouton et les LED ne correspondent pas à l'odroid, j'ai donc scruté le programme, que des fichiers .class .
Parmi tous les fichiers, un seul mentionne des numéros de pin ou câbler le bouton et led.

Voici le programme:

Code : Tout sélectionner

package sonnette_server;
 
import OdroidGPIOControl.Pin;
 
//** Classe qui gère les commandes envoyées par le serveur vers le / les clients **
 
class Commandes implements Runnable{
 
	Serv _myServ; // pour utilisation des méthodes de la classe principale
	Thread _t; // contiendra le thread
	Mylog mylog = new Mylog(this.getClass().getName());
	boolean valide;//thread principal
	long lastpingTime;//permet de savoir de quand remonte le dernier ping.
	long maxpingtimesecondes=10;
 
	//gestion btt sonnette
	Pin LED,BTT;
	int _Blinkingtime=2000;//duree allumage LED
	int _WaitClient=1000;//on attend la connexion du client x _WaitClientCount
	int _WaitClientCount=5;//nombre de tentative d'envois tous les _WaitClient
	boolean triggerbutton;//trigger sur le bouton
 
	Commandes(Serv myServ){
 
		_myServ=myServ;
 
		Initialisation();
 
		//demarrage Thread
		_t = new Thread(this); // instanciation du thread
		_t.start(); // demarrage du thread, la fonction run() est ici lancée
 
	}
 
	/*************** Initialisation GPIO ***************/
 
	private void Initialisation(){
 
		mylog.mlog("info", "Initialisation GPIOThread");
 
		LED = new Pin(27);
		BTT= new Pin(26);
 
		LED.SetOUT();
		BTT.SetIN();
		LED.SetLOW();
 
		valide=true;
		triggerbutton=true;
		lastpingTime=System.nanoTime();
	}
 
 
	/**************** Thread principal ****************/
 
	//** Methode du serveur qui envoie les commandes aux clients **
 
	public void run(){
 
		mylog.mlog("info", "Demarrage Thread Commandes");
 
		//boucle infinie
		while (valide){
 
			//on attend le relachement du bouton
			if(!triggerbutton) {
				mylog.mlog("info", "On attend que le bouton soit relaché");
				while(!triggerbutton){
					if(BoutonReleased()) triggerbutton=true;
				}
			}
 
			//on a pressé le bouton un certain temps
			if (BoutonPressed()){
 
				triggerbutton=false;
 
				mylog.mlog("info", "Button pressed");
 
				//nouveau Thread d'allumage des leds
				blinking();
 
				//boucle de X secondes pour attendre un client
				int tmpcount=0;
				while(tmpcount<_WaitClientCount && _myServ.getNbClients()<=0){
					try{Thread.sleep(_WaitClient);}catch (Exception e) {mylog.mlog("info",e.getMessage());}
					tmpcount++;
					mylog.mlog("info", "boucle attente du client");
				}
 
				//Avertissement des clients
				if(_myServ.getNbClients()>0) AvertissementClients();
				else mylog.mlog("warning", "Il n'y a aucun client à avertir");
 
			}
 
			//on envoi un ping a tous les clients. permet de supprimer les connexions perdues.
			if(_myServ.getNbClients()>0) CheckClients();
 
 
			//Pause
			try{Thread.sleep(10);}catch (Exception e) {mylog.mlog("info",e.getMessage());}
		}
		mylog.mlog("info", "Fin Thread Commandes");
	}
 
 
	//methode pour prevenir les clients
	private void AvertissementClients() {
 
		mylog.mlog("info","avertissement ringing");
		_myServ.sendAll("RINGING");
 
	}
 
	//methode pour vérifier que le client est toujours connecté
	private void CheckClients() {
 
		//on recup le temps courant
		long endTime = System.nanoTime();
		long duration = (endTime - lastpingTime);
 
		//en secondes
		double seconds = (double) duration / 1000000000.0;
 
		if(seconds<maxpingtimesecondes) return;
		else{
			lastpingTime=endTime;
			//mylog.mlog("info","pinging client");
			_myServ.sendAll("PING OK");
		}
	}	
 
 
	/************ Gestion des GPIO ************/
 
	//on controle si le bouton a été pressé
	private boolean BoutonPressed() {
 
		//normalement le bouton = 1 et 0 si pressé
		if(BTT.GetValue()==0){
 
			//on teste la valeur plusieur fois pour éviter le rebond
			for(int i=0;i<5;i++){
 
				//quand ça repasse a 1 c'est pas bon
				if(BTT.GetValue()==1) {
					mylog.mlog("info", "bouton relaché trop tôt");
					return false;
				}
 
				try{
					Thread.sleep(1);
				}catch (Exception e) {
					System.out.println(e.getMessage());
				}
			}
			//si on arrive jusque là c'est que le btt =0 suffisament longtemps
			return true;
		}
 
		return false;
	}
 
	private boolean BoutonReleased(){
 
		//bouton relaché
		if(BTT.GetValue()==1) {
 
			//on teste la valeur plusieur fois pour éviter le rebond
			for(int i=0;i<5;i++){
 
				//quand ça repasse a 0 c'est pas bon
				if(BTT.GetValue()==0) {
					mylog.mlog("info", "bouton relaché");
					return false;
				}
 
				try{
					Thread.sleep(1);
				}catch (Exception e) {
					System.out.println(e.getMessage());
				}
			}
			//si on arrive jusque là c'est que le btt = 0 suffisament longtemps
			return true;
		}
 
		return false;
	}
 
	//Thread d'allumage de la led
	private void blinking() {
 
		Thread Tblinking = new Thread("Blinking") {
 
		    public void run() {
 
		    	mylog.mlog("info", "Demarrage Thread blinking");
 
				LED.SetHIGH();
				try{
					Thread.sleep(_Blinkingtime);
				}catch (Exception e) {
					System.out.println(e.getMessage());
				}
				LED.SetLOW();
 
				mylog.mlog("info", "Fin thread blinking");
		    }
 
		};
 
		Tblinking.start();
 
	}
 
 
}
Parmi ces lignes de prog, quelques-unes me devrait être modifiée pour un fonctionnement avec un raspberry

Code : Tout sélectionner

import OdroidGPIOControl.Pin;
et

Code : Tout sélectionner

LED = new Pin(27);
BTT= new Pin(26);
Après avoir modifié ces lignes, comment dois-je procéder pour compiler ?

Je sais que j'ai pas grand mérite à copier ce programme, mais j'aimerais quand même pouvoir l'utiliser.

Je sais pas si j'ai bien été clair et si j'ai posté au bon endroit.

Je tiens à remercier d'avance toutes personnes qui tenterons de m'aider.

Stoufiler

Re: Sonnette connecté

Message par Stoufiler » mer. 11 avr. 2018 20:57

Tu es obligé de le faire en JAVA ?
Car c'est gourmand en RAM

Pourquoi ne pas le faire avec du php par exemple ce qui te permettrai de le contrôler depuis tous les périfs

Répondre

Retourner vers « Accès, alarme et vidéosurveillance »