Gestion des NaN par le plugin Modbus

Lorsqu’un slave renvoie un NaN ([32704, 0]), l’envoi échoue au moment de sérialiser le résultat en JSON parce que NaN n’est pas valide en JSON.

De toute façon, si on renvoyait un NaN, je suppose que la suite de la chaîne ne saurait pas quoi en faire donc l’idéal est de ne rien renvoyer du tout.

Pour cela, dans modbus.py, j’ai modifié decoderAdd comme ceci:

    if formatIO == 'floatformat':
            if int(nbregister) == 2:
                decoded = {'float': decoder.decode_32bit_float()}
            elif int(nbregister) == 4:
                decoded = {'float': decoder.decode_64bit_float()}
            else :
                _LOGGER.debug('NOMBRE REGISTRE INVALIDE POUR FLOAT : 2 ou 4 registres')
                return
            # Ignore NaN values
            if math.isnan(decoded["float"]):
                return
            for name, value in iter(decoded.items()):
                arrayBits = {'StartRegister': int(startregister), 'CmdId' : cmdId, 'value' : value}
                results['data'][device][cmdName].append(arrayBits)

et pareil avec 'longformat'.

Je sais pas si c’est le meilleur endroit pour faire ça mais ça fera le boulot en attendant finalisation de la refonte du plugin.

Ce changement permet que les autres valeurs du payload ne soient pas perdues avec le crash.

Bonjour,

simple information : le plugin MyModbus version bêta gère les NaN

A+
Michel