Objectif
Interfacer Calaos avec des sondes et périphériques Mqtt
Scripts a faire en 30 minutes
Ce projet est (aujourd'hui) découpe en 2 morceaux :
un Script Mqtt vers Calaos
un Script Mqtt vers Calaos
A faire evoluer
Mettre _toutes_ les configurations dans un fichier tiers (le port 4456 aussi)
Utiliser un publisher mqtt propre au langage, de meme pour nc et expect
Mettre en œuvre un mot de passe sur le mqtt
Outils utilisées
nc et expect : pour communiquer avec le port 4456 de Calaos
perl
#!/usr/bin/perl
my $mqtts="MQTTSRV";
my $calaos="CALAOSSRV";
my $login="MOIMOI";
my $pwd="SECRET";
my $prefmqtt="calaos/";
my $prefcalaos='expect -c \'spawn -noecho nc '.$calaos.' 4456;send "login '.$login.' '.$pwd.'\n";expect -re {login '.$login.' ok\r\n};send "';
my $postcalaos='\n";\'';
$cmdlisten="/usr/bin/mosquitto_sub -h $mqtts -t '$prefmqtt#' -v";
open LISMQ,$cmdlisten." |";
sleep(5);
print "Mqtt 2 Calaos Listening $mqtts $prefmqtt#\n";
while(<LISMQ>) {
chomp();
s/^$prefmqtt//g;
($cmd,$id,$act,$params)=split(/[\/ ]/,$_,4);
$cmdcalaos=$prefcalaos.$cmd.' '.$id.' '.$act.' '.$params.$postcalaos;
open CALAOS,$cmdcalaos." |";
while(<CALAOS>) {}
close(CALAOS);
}
print "Mqtt 2 Calaos listener dead\n";
#!/usr/bin/perl
my $mqtts="MQTT";
my $calaos="CALAOSSRV";
my $login="MOIMOI";
my $pwd="SECRET";
my $prefmqtt="ha/calaos/";
my ($action,$obj,$status);
my ($clef,$val);
my $cmdcalaos='expect -c \'spawn -noecho nc '.$calaos.' 4456;send "login '.$login.' '.$pwd.'\n";expect -re {login '.$login.' ok\r\n};send "listen\n";interact\'';
my $i=0;
open CALAOS, $cmdcalaos." |" or die "Can't open < $cmdcalaos $!";
sleep(5);
print "Calaos 2 Mqtt Running\n";
while(<CALAOS>) {
chop();
if(/input_(1|2) /) {
#print "No more $_\n";
$i=0;
}
elsif(/^(input|output)/) {
($action,$obj,$status)=split(/ /,$_,3);
$status=~s/%([A-Fa-f\d]{2})/chr hex $1/eg;
if($status =~ /:/) {
($clef,$val)=split(/:/,$status,2);
}
else {
$clef="status";
$val=$status;
}
my $value=chop($val);
my $cmdmqtt="/usr/bin/mosquitto_pub -h $mqtts -r -t $prefmqtt$action/$obj/$clef -m '$val'";
open MQTT, $cmdmqtt.' |';
while(<MQTT>) {}
close(MQTT);
}
else {
#print "Unknown $_\n";
$i=0;
}
}

STATUT DOCUMENT
Titre du document : Mqtt2Calaos
Date de Création : 16-03-2022 01:03
Date de dernière édition : 16-03-2022 01:03
Statut du document : VALIDE
Validation par : Antoine Delaporte
le : 16-03-2022 06:03