Edito
Voila voila, je refais mon infra…
Et j'ai donc envie de participer a une oeuvre commune :
Antoine.
Pub
Désolé de vous incommoder avec cela, c'est un mal aujourd'hui nécessaire. Je le souhaite juste utile, on verra.
Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
docs:domotique:calaos2mqtt [2022/03/16 13:40] adlp créée |
docs:domotique:calaos2mqtt [2022/03/16 18:03] (version actuelle) |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
- Scripts a faire en 30 minutes | - Scripts a faire en 30 minutes | ||
- | Ce projet est (aujourd'hui) decoupé en 2 morceaux : | + | Ce projet est (aujourd'hui) découpe en 2 morceaux : |
- un Script Mqtt vers Calaos | - un Script Mqtt vers Calaos | ||
- un Script Mqtt vers Calaos | - un Script Mqtt vers Calaos | ||
Ligne 10: | Ligne 10: | ||
- Mettre _toutes_ les configurations dans un fichier tiers (le port 4456 aussi) | - 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** | - 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 | Outils utilisées | ||
- nc et expect : pour communiquer avec le port 4456 de Calaos | - nc et expect : pour communiquer avec le port 4456 de Calaos | ||
- perl | - perl | ||
+ | |||
+ | ====== Mqtt2Calaos ====== | ||
<file perl> | <file perl> | ||
Ligne 45: | Ligne 48: | ||
print "Mqtt 2 Calaos listener dead\n"; | print "Mqtt 2 Calaos listener dead\n"; | ||
+ | </file> | ||
+ | |||
+ | ====== Calaos2Mqtt ====== | ||
+ | |||
+ | <file perl> | ||
+ | #!/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; | ||
+ | } | ||
+ | } | ||
+ | |||
</file> | </file> |