Page 1 of 1

To read the values in particular format using RevPi as Modbus RTU.

Posted: 15 Jan 2020, 10:33
by Anil
Dear Kunbus team,

We are reading the value from energy meter using RevPi as Modbus RTU master and later we want to transfer the same to the cloud using the MQTT.
We are able to read the value on the terminal using the piTest - r 11,16,d/h/b.

But when we read the same values on the Modscan Simulator act as master(instead of RevPi ) we can read the same value in following format unsigned/integer/float(MSRF)/float(LSRF)/Double(LSRF)/Double(MSRF).

so 1. Can we read the same way (multiple above formats )on the terminal of the RevPi Modbus RTU master?
2. Can REVPIMODIO 2 is helpful for this, if so how?

Re: To read the values in particular format using RevPi as Modbus RTU.

Posted: 15 Jan 2020, 12:46
by nicolaiB
Hi Anil,

ihmo it's not possible to change the datatype with piTest, but RevPiModIO could be used to archive this. Have a look into the replace_io function which allows you to specify the datatype of your variable.

Nicolai

Re: To read the values in particular format using RevPi as Modbus RTU.

Posted: 15 Jan 2020, 13:07
by Anil
Thanks for your response nicolaiB,

Will you please provide an already established reference/example so we can understand and implement accordingly. As I don't have much experience of python coding to interact with an embedded device, so don't want the unwanted result that changes in Pictory configuration and Rasbain image.

Re: To read the values in particular format using RevPi as Modbus RTU.

Posted: 16 Jan 2020, 08:38
by nicolaiB
Hi Anil,

I published a small example with the replace_io function & mqtt: https://gist.github.com/nbuchwitz/08cc2 ... da3c65454e

Nicolai

Re: To read the values in particular format using RevPi as Modbus RTU.

Posted: 16 Jan 2020, 13:41
by Anil
Thanks, Nicolai for your Response.

In a similar manner I had coded the MQTT protocol in python already and by importing the revpimodio2 and can able to read theInput_Word_1 but yes not use the .replace_io().

Code: Select all

################################################################################
# This script send the data from pin of RevPi Connect +Modbus TCP master as virtual 
# expansion module to the CloudMQTT Cloud (https://Cloudmqtt.com)
#
# Author- Rahul Chandarayan/Anil Sarode
################################################################################


import os, random    # The OS module in python provides functions for interacting with the operating system.
import time                                # Time module for python.
import sys   # The sys module provides information about constants, functions and methods of the Python interpreter
import paho.mqtt.client as mqtt            # The phao mqtt python client library
import json                                # java script object notation
import revpimodio2                         # To read the pins of revPi

HOST = 'farmer.cloudmqtt.com'
port=18989
USER_NAME = 'obvrnnss'
password="nZWKj6c8qas2"
TOPIC='v1/devices/me/telemetry'
INTERVAL=2

revpi = revpimodio2.RevPiModIO(autorefresh=True) # Instance to access to the IOs of the RevPiimport revpimodio2
sensor_data = {'temperature': 0, 'humidity': 0}
next_reading = time.time()
client = mqtt.Client()
client.username_pw_set(USER_NAME,password)
client.connect(HOST, port, 60)
client.loop_start()
try:
    while True:
        sensor_data['temperature'] =float(revpi.io.Input_Word_1.value)
        sensor_data['humidity'] = float(revpi.io.Input_Word_2.value)
        print(json.dumps(sensor_data))
        client.publish( TOPIC, json.dumps(sensor_data), 1)
        next_reading += INTERVAL
        sleep_time = next_reading-time.time()
        if sleep_time > 0:
            print (time.ctime())
            time.sleep(sleep_time)
            print (time.ctime())

except KeyboardInterrupt:
    pass
client.loop_stop()
client.disconnect()
Then what about this link: https://revolution.kunbus.de/forum/view ... =41&t=1306. In this what all those scripts and where we have to write those scripts. In this path replace_ios = /etc/revpipyload/replace_ios.conf what is the use of this .conf file ?

Even this link :https://revolution.kunbus.de/forum/view ... odio#p4817.
I am confused please guide me

Re: To read the values in particular format using RevPi as Modbus RTU.

Posted: 17 Jan 2020, 12:02
by nicolaiB
Hi Anil,

you can define all your replaced IOs in a configuration file (ini style) and load it with revpimodio. So you don't have to hardcode everything in your program. For more details have a look into the documentation (https://revpimodio.org/en/doc2/) and Svens explanation in the linked threads.

Nicolai