Objectif

  1. Interfacer Calaos avec des sondes et périphériques Mqtt
  2. Scripts a faire en 30 minutes

Ce projet est (aujourd'hui) découpe en 2 morceaux :

  1. un Script Mqtt vers Calaos
  2. un Script Mqtt vers Calaos

A faire evoluer

  1. Mettre _toutes_ les configurations dans un fichier tiers (le port 4456 aussi)
  2. Utiliser un publisher mqtt propre au langage, de meme pour nc et expect
  3. Mettre en œuvre un mot de passe sur le mqtt

Outils utilisées

  1. nc et expect : pour communiquer avec le port 4456 de Calaos
  2. perl

Mqtt2Calaos

#!/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";

Calaos2Mqtt

#!/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;
            }
        }
docs/domotique/calaos2mqtt.txt · Dernière modification: 2022/03/16 18:03 (édition externe)
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki