Bonjour,

Introduction de mon problème

Alors voilà, je me suis fait un petit projet domotique, dans mon appartement, j'ai plusieurs arduino qui prennent la température. Mon salon, salle de bain, etc (pour le fun) ;)
Je leur ai à tous attribué une adresse unique, ce qui me permet de les différencier et dans ma base de donnée de leur changer de nom, de piece etc.
Je me suis aussi fait un petit script qui me permet de créer des consignes dans ma base de données, ce qui me permet de m'envoyer un mail (via la super librairie phpmailer) si la mesure atteint un seuil que j'ai défini préalablement dans mes consignes.
Sauf que voilà, à vouloir améliorer sans cesse mon petit système, je suis face à un problème que j'ai du mal à résoudre. J'ai créé un autre script qui me permet de faire une moyenne de la température et de l'archiver dans une table. Les mesures simples de mes capteurs arduino et la température moyenée sont dans 2 tables différentes.

Voilà, alors j'ai 1 table consignes : qui contient un champ (numeros_capteurs, seuil, active).

Ce que j'ai fais

Jusqu'à présent, pour déclencher l'envoie d'un email, dès que mon capteur arduino m'envoyait une trame, je faisais un filtre via LIKE %%, sur le numéro du capteur (pourquoi? car je me reservais la possibilite d'indiquer plusieurs capteurs, dans une seule consigne).
Mais maintenant, avec cette moyenne, ça ne fonctionne pas correctement. Pour éviter de faire de la duplication de code, j'ai envie d'utiliser le même script avec des modifications à l'intérieur, donc pour identifier qu'il s'agisse d'une moyenne et plus d'un capteur arduino, j'enregistre dans le champ numeros_capteurs sous une syntaxe particulière, soit : $MOY$(id_de_ma_moyenne).
En fait, il peut y avoir une ou plusieurs moyennes depuis un même capteur arduino.
Là, je fais une requête qui me permet de récupérer tous les id de mes moyennes en lien direct avec mon capteur arduino, je stock le resultat dans une variable qui me permet ensuite de faire une seconde requête. Sauf, que ça ne fonctionne pas :)
$check_mgroup = $link->prepare("SELECT id FROM moyennes WHERE modules LIKE :eui"); $check_mgroup->execute(array(':eui' => '%'. $idcapt . '%')); $z = $check_mgroup->fetchAll(PDO::FETCH_OBJ); foreach ($z as $item): $elements .= ' OR eui = $MOY$'.$item->id; endforeach; $query = $link->prepare("SELECT * FROM cons WHERE numerocapt LIKE :eui $elements AND active = :act ORDER BY id ASC"); $query->execute(array(':deveui' => '%'. $idcapt . '%',':act'=>1)); while($result = $query->fetch()){

Ce que je veux

Donc, en fait il faut que je fasse 1 première requête qui récupère toutes les moyennes depuis le capteur arduino ;
puis, suivant le résultat, qui peut aussi être null, il faut que je fasse une seconde requête, qui regarde dans le champ numeros_capteurs s'il existe toujours des enregistrements via le numéro du capteur ET/OU de l'id des moyennes récupérées sur la première requête effectuée.

Ce que j'obtiens

Rien...

alors , svp, auriez-vous une idée de ce que je peut faire pour que mon script fonctionne à nouveau et puisse avoir mes alertes par email aussi bien depuis mes simples capteurs arduino que sur mes moyennes ?

Merci d'avance,
LM

2 réponses


Bonjour,
Activation des erreurs PDO
Et :eul est différent de :deveui ....

lz699
Auteur

Bonjour, effectivement j'ai fais cette erreur . Cependant sur le pb de fond, j'ai résolu mon pb en indiquant simplement les eui directement dans le champ adéquat. Je voulais me compliquer la vie alors que c'était simple. Merci d'avoir pris le temps de me répondre.