[TUTO] Ring avec Ring-mqtt et jmqtt

Bonjour, installation standard, et j’imagine la dernière version qui s’est installée seule avec le git-clone?

Oui j’ai vérifié, j’utilise bien l’url indiquée dans info/sate/stream_source dans MQTT Explorer (j’ai juste mis 1234 dans ce forum pour masquer la vrai chaine de caractère).
Vraiment bizare cette histoire de rtsp …
Pour les snapshot, idem que @537719 je vois bien que l’image est présente en hexa dans snapshot/image mais je suis incapable de trouver une solution pour l’afficher…

1 « J'aime »

Pour ce qui est de récupérer l’image, /usr/bin/mosquitto_sub -C 1 -t ring/..../camera/.../snapshot/image > snapshot.jfif crée le fichier image.
Avec imagemagick j’ajoute la date et l’heure dans un coin.
Reste à créer un virtuel avec un widget qui affiche l’image et la met à jour…
À moins que cela ne soit faisable avec le plugin camera ?

Pour le reste (rtsp…) est-ce qu’un abonnement ring est nécessaire ou pas ?

ça je peux te répondre qu’il n’y a pas besoin d’abo…

1 « J'aime »

En effet. Pas besoin d’abonnement. Car l’info est en ´temps reel’, c’est gratuit chez ring.

Ce qui nécessite l’abo c’est l’enregistrement et la consultation sur 30 jours des vidéos.

1 « J'aime »

Un script (ring-snapshot.sh) qui interroge mosquitto afin d’obtenir l’image du snapshot :

topic=ring/0.../camera/.../snapshot/image
cam=Nom de la caméra

while true
do
# echo /usr/bin/mosquitto_sub -C 1 -t $topic \> ~/snapshot.jfif
/usr/bin/mosquitto_sub -C 1 -t $topic > snapshots/snapshot_.jfif
dt=`date +"%Y%m%d%H%M%S"`
# echo $dt
convert -gravity NorthEast -pointsize 16 -fill yellow -annotate +5+5  "`date`" -annotate +5+24 "$cam" snapshots/snapshot_.jfif  snapshots/snapshot_$dt.jpg
cp -f snapshots/snapshot_$dt.jpg /var/www/html/data/img/snapshot.jpg
done

C’est pas forcément très propre mais simple et ça fonctionne.

Remplacer les … par les valeurs affichées dans mqtt-explorer et qui correspondent à votre équipement.
L’image est traitée par imagemagick pour rajouter l’horodatage et l’identification de la caméra, cela peut être amélioré facilement en ajoutant au texte un fond translucide qui améliore la lecture si besoin…

L’image est renommée au moment de cette transformation en y ajoutant la date et l’heure puis copiée sous le nom générique snapshot.jpg dans /var/www/html/data/img (le changement de format me sert juste à être certain que le navigateur peut afficher l’image (même si JFIF signifie JPEG file interchange format et que donc, on reste sur du jpeg qui devrait être affichable sans problème).

Pour installer imagemagick (sur raspberry/linux) :
sudo apt-get install imagemagick

Pour l’instant, je lance le script avec sudo dans un terminal :
sudo ./ring-snapshot.sh
À transformer en service ou autre afin qu’il soit lancé au démarrage et plus arrêté dès qu’on ferme le terminal qui l’a lancé.

Coté Jeedom un HtmlDisplay qui met à jour l’image toutes les secondes (changer le 1000 en autre chose pour espacer les mises à jour) :

<body>
  <center>
	<img src="data/img/snapshot.jpg"  width="640" height="360" id="ring-snapshot"/>
  </center>
  <script type="text/javascript">  

    function reloadImg()
    {
        var img = document.getElementById('ring-snapshot');
        var dt = new Date();
        img.src = "data/img/snapshot.jpg" + "?" + dt.getTime();
	myTimeOut=setTimeout(reloadImg,1000);
    }
    reloadImg();
      </script>
</body>

Ça fonctionne avec ma sonnette filaire, aucune idée de ce que ça peut donner avec d’autres appareils.

La fréquence des messages est assez irrégulière de 30 s à plus de 45 mn ! Pour voir les dates enlever le croisillon devant echo $dt dans le script.

20220430135931
20220430135959
20220430140029
20220430140059
20220430140129
20220430140159
20220430142321
20220430142621
20220430143521
20220430144122
20220430145921
20220430151721
20220430152921
20220430161721
20220430162321
20220430163821
20220430164421
20220430165622
20220430165922
20220430170221
20220430170521
20220430172621
20220430173521
20220430174121
20220430175321
20220430175621
20220430175921
20220430180821
20220430181721
20220430182621
20220430183221
20220430183821
20220430184125
20220430185021
20220430185621

Prochaine étape, regrouper toutes les images sous forme d’une vidéo avec ffmpeg

N’hésitez pas à tester et faire le retour de ce qui fonctionne ou pas chez vous.

Bonjour,

Je reviens sur le flux video, en activant le mode DEBUG sur ring-rtsp j’ai les messages suivant :

 ring-rtsp ------------------------------------------------------------------------- +0ms
  ring-rtsp Starting rtsp-simple-server process... +3ms
  ring-rtsp INF rtsp-simple-server v0.17.17 +52ms
  ring-rtsp INF [RTSP] listener opened on 127.0.0.1:8554 (TCP) +1ms
  ring-rtsp INF [API] listener opened on 127.0.0.1:8880 +1ms
  ring-rtsp Creating RTSP paths for all cameras... +970ms
  ring-rtsp INF [API] [conn 127.0.0.1:60006] POST /v1/config/paths/add/5.........f_live +22ms
  ring-rtsp Response code 400 (Bad Request) +12ms
  ring-rtsp INF [API] [conn 127.0.0.1:60008] POST /v1/config/paths/add/5.........f_event +18ms
  ring-rtsp Response code 400 (Bad Request) +5ms
  ring-rtsp ------------------------------------------------------------------------- +101ms

Manifestement rtsp-simple-server n’arrive pas à créer les points d’accès aux flux.

Une idée ?

Merci d’avance

Salut je ne suis pas du tout expert mais d’après ce que j’ai lu ici ou là, la bad request 400 c’est un pb de path dans la config rtsp

Pour info, dans la dernière beta, qui passera stable demain après quelques correctifs, jMQTT supporte les payload binaires.
Ils sont remontés en base64 dans Jeedom.

 

EDIT : Le widget « code dashboard cmd info string » permet d’afficher une image envoyée en MQTT :

<div style="padding:10px; min-width:40px; min-height:80px;" class="cmd cmd-widget container-fluid #history#" data-type="info" data-subtype="numeric" data-template="MqttImage" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
    <div class="title #hide_name#"><div  class="cmdName">#name_display#</div></div>
    <div class='DisplayInfo#uid#'><img style="width:calc(100%);" class="ValueInfo#uid#" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" alt="image from mqtt" /></div>
  <style>
  </style>
<script>
		jeedom.cmd.update['#id#'] = function(_options){
          	var InfoValue = _options.display_value;
			$('.cmd[data-cmd_id=#id#]').attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate);
          	if (InfoValue == '') {
              $('.cmd[data-cmd_uid=#uid#] .ValueInfo#uid#').attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=');
	        } else {
      	      $('.cmd[data-cmd_uid=#uid#] .ValueInfo#uid#').attr('src', 'data:image/png;base64,'+InfoValue);
            }
		}
		jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
</script>   
</div>

Même si l’image est en « png;base64 » dans la source, j’ai essayé avec un gif, jpg, png et bmp, Chrome affiche bien l’image :slight_smile:

Mise en place :


image

Test :
mosquitto_pub -h 127.0.0.1 -t test/decoder -f cat.png

Resultat :
image

Enjoy

3 « J'aime »

Bonjour, j’ai eu exactement le même problème. La solution :

  • Les start-stream.sh et update2branch.sh qui se trouvent dans le sous-dossier « scripts » doivent être mis sur runable avec chmod +x.
  • la version de mosquitto DOIT être 2.0.14
  • Nodejs comme décrit dans la documentation 16.x
    En faisant beaucoup d’essais, je peux dire avec certitude que les points mentionnés ci-dessus corrigent la cause de l’erreur

Désolé pour le retard, mais le temps de trouver le temps de faire des tests…

Ça fonctionne parfaitement ! Bravo et merci.

J’ai modifié légèrement le widget pour afficher dans un coin la date et l’heure ainsi qu’un texte de son choix (par défaut le nom de la commande, je n’ai pas trouver comment récupérer le nom de l’équipement et de sa pièce), on peut modifier le texte en cliquant sur l’engrenage à droite de la commande, onglet affichage, paramètres optionnels widget :

<div style="padding:10px; min-width:40px; min-height:80px;" class="cmd cmd-widget container-fluid #history#" data-type="info" data-subtype="numeric" data-template="MqttImage" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" data-eqLogic_id="#eqLogic_id#">
    <div class="title #hide_name#"><div  class="cmdName">#name_display#</div></div>


    <div class='DisplayInfo#uid#' width="100%" style="position:relative">
      <img class="ValueInfo#uid#" width="100%" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=" alt="image from mqtt" />
<div id="gcValueDate" class="gcValueDate">01/01/1970 00:00:00<br/>#name_display#</div>
  </div>
  <style>
    .gcValueDate {
      display:block;
      position:absolute;
      right:0;
      bottom:0;
      margin-right:0px;
      margin-top:0px;
      padding:3px;
      z-index:2;
      background:brown;
      opacity:.5;
      color:yellow;
      text-align:right; 
    }
   </style>
   <template>
    <div>gcEqName : le nom de l'équipement ou tout autre texte qui sera jugé pertinent pour identifier la source ou le copyright de l'image ({{Par défaut retourne le nom de la commande}}).</div>
  </template>

<script>
  		var gcEqName = ('#gcEqName#' !='#'+'gcEqName#') ? "#gcEqName#":"#name_display#";
		jeedom.cmd.update['#id#'] = function(_options){
          	var InfoValue = _options.display_value;
			$('.cmd[data-cmd_id=#id#]').attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate);
          	if (InfoValue == '') {
              $('.cmd[data-cmd_uid=#uid#] .ValueInfo#uid#').attr('src', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=');
	        } else {
      	      $('.cmd[data-cmd_uid=#uid#] .ValueInfo#uid#').attr('src', 'data:image/png;base64,'+InfoValue);
            }
          document.getElementById('gcValueDate').innerHTML=_options.valueDate+'<br/>'+gcEqName;
		}
		jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
</script>   
</div>

Encore merci pour tous ceux qui travaillent et nous aident.

2 « J'aime »

Bonjour,

J’ai enfin réussi à obtenir le flux rtsp sur ma doorbell wired !
Merci à tous ceux qui ont donné des pistes permettant d’aboutir.

Pour ma part je suis en 2.0.12 de Mosquitto, la 2.0.14 ne semble pas exister en package tout fait pour debian et la compilation ne se faisait que sans l’option cjson (pas certain que cela ait une incidence…). J’ai installé la dernière version de rtsp-simple-server (0.19), donné les droits d’écriture à tout le monde (chmod ugo+w) sur l’ensemble de fichiers et dossiers de ring-mqtt.
Là où j’e me suis créé moi-même un piège c’est que ring-mqtt est installé dans un dossier utilisateur mais que le fichier .service mentionnait workingDirectory = /usr/bin tout fonctionnait correctement sauf le flux rtsp.

J’avais également mis mon nom de compte ring et le mot de passe correspondant dans config.json. Cela pose visiblement problème pour rtsp-simple-server (voir la page github de ring-mqtt).

Une fois tout cela corrigé, le flux rtsp est bien accessible et peut être utilisé avec le plugin camera (au moins en réseau local, pas encore testé à distance).

Pour ceux que cela intéresse, afin d’avoir un aspect similaire à mes caméras IMOÜ, en cherchant j’ai trouvé dans cette page des commandes à passer à ffmpeg pour superposer la date à l’image de la caméra (les valeurs X, Y et les couleurs sont bien évidement à adapter à vos besoins).

-filter_complex "drawtext=fontsize=50: fontcolor=white: boxcolor=black@0.75: text='%{localtime \:%d-%m-%Y %T}': x=1350 : y=50 : box=0"

image

Encore merci à tous ceux qui œuvrent pour que tout fonctionne bien !

1 « J'aime »

Bonjour
Depuis quelques jours impossible de faire fonctionner l api, et j ai décidé de basculer sur ce module.
J ai décidé de me lancer mais si je me base sur vos messages précédents je n ai pas la même résolutions des attributs ? Y aurait il eu un mise à jour côté ring ?

Durant mes tests j ai décidé de lancer l application en ligne de commande:
DEBUG=ring-mqtt,ring-attr ring-mqtt.js /opt/ring-mqtt/ring-mqtt.js

image

est ce normal ou est raté un option de configuration ?

merci par avance

bonne soirée / vacances

Bonjour,
Vous utilisiez quoi avant?
Que donne la commande :

Ce que vous montrez c’est je penses via MQTTexplorer.

Quelle version de ring-mqtt? Il y a eu du pas mal de mouvement du côté de ring-mqtt donc c’est difficile de vous répondre sans plus d’info

Peut-être aussi ouvrir votre propre post/question quitte à faire un lien avec celui-ci. Ce sera plus clair pour tout le monde et vous trouverez plus d’aide.

Bonjour

Désolé pour ce manque de précisions.

A l heure actuelle j utilise les versions suivantes :
Jeedom 4.2.20 installé sur une vm sous Debian 11.
Cote broker je suis parti sur le module client jeedom jMQQTT ( 3.3.39 )

Je me suis basé sur votre tutoriel, j ai cloné la dernière version ring-mqtt 5.0.2 et j ai basculé sur la branche de dev.

Serait possible de savoir si sur la sortie de MQTT Explorer vous avez la même arborescence ?
Si je me base sur les exemples cités, il me manque le noeud alarm et ses propriétés dans l arborescence.

Du coup dans le jeedom les commandes ne semblent pas bindées.

Merci par avance.

Ma première install sur une vm de ring-mqtt fo’ctionne bien.
Losque j’avais voulu l’installer sur le jeedom pour supprimer la vm j’avais eu exactement le même problème.
Donc à l’époque j’ai lâché l’affaire et conservé la vm.

Tout ça en installation standard (sans docker).

Dans ce problème on voit bien tout les topics mais au lieu d’être regroupés par appareil il le sont, j’ai l’impression, par type d’info. Donc oui c’est difficilement exploitable.

Vous ne m’avez pas répondu sur la question du retour de la commande DEBUG

Dans jMQTT, tu peux très bien créer un équipement qui souscrit à ring/+/004db68.../# pour regrouper tout ce qui est en rapport avec cet ID dans un eq :wink:

1 « J'aime »

@Nicoca-ine Merci Super tuto et @Domochip super plugin.

J’ai installé les mosquitto et ring_mqtt sur 2 dockers sur le NAS Syno.
ring_mqtt en suivant le wiki. Assez simple.
mosquitto fut assez galère. J’ai réussi en suivant ce tuto : Eclipse MQTT 2.x in Docker + user credentials on Synology - YouTube

Pas encore essayé d’envoyer le flux video. Pas l’impression de le voir passer sous MQTT_explorer.

Une question sur les dates remontées par les équipement Ring : Il y a 2h de décalage du je pense au GMT+2. Existe t’il une commande pour afficher l’heure « réelle » ?
Merci

1 « J'aime »

Merci :blush:

Pour l’heure je n’ai pas vu d’autre topic. C’est en effet l’heure Zulu (pour les pilotes :airplane: :wink:) donc l’heure GMT. Qu’il faut donc convertir en heure locale selon l’heure été/hiver.

2 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.