Page 1 of 1

Data logging in Revolution Pi

Posted: 20 Jan 2020, 12:21
by Anil
Hello Kunbus Team,

As the Revolution pi has eMMC flash memory and I want to store/log data in RevPi (Modbus/Ethernet IP or data taken by using any other protocol ) in SQL or Mongo DB or any other database program. Is it possible to do so?


Thanks & Regards,
Anil Sarode

Re: Data logging in Revolution Pi

Posted: 20 Jan 2020, 13:28
by dirk
Hi Anil, well this is a question that is asked frequently. Have a look at this post.

Re: Data logging in Revolution Pi

Posted: 30 Jan 2020, 08:36
by Anil
Thanks, Dirk for your response.

In Revolution Pi Connect I install the MySQL server.
Then created the database and in that database by creating the table I populate the values using python MySQL Connector.

Code: Select all


##################################################################################################
# This Example save the data of sensor values into RevPi using Mysql database.
# The sensor data is get/generated using the modsim  simulator.
# Author-Anil Ramesh Sarode TO@ULEPL
###################################################################################################


import time
import datetime
import mysql.connector
from mysql.connector import Error
from mysql.connector import errorcode
import revpimodio2                         # To read the pins of revPi

revpi = revpimodio2.RevPiModIO(autorefresh=True) # Instance to access to the IOs of the RevPiimport revpimodio2

connection = mysql.connector.connect(host='localhost',
                                     database='sensor',
                                     user='root',
                                     password='UL@123')

ti = time.gmtime()


def dateTime(): #get UNIX time
        secs = time.asctime(ti)
#        secs = secs*1000
        return secs

def tempRead(): #read temperature, return float with 3 decimal places
        degrees = float('{0:.3f}'.format(revpi.io.Input_Word_1.value))
        return degrees

def pressRead():#read pressure, return float with 3 decimal places
        pascals = float('{0:.3f}'.format(revpi.io.Input_Word_2.value/100))
        return pascals

def humidityRead(): #read humidity, return float with 3 decimal places
        humidity = float('{0:.3f}'.format(revpi.io.Input_Word_3.value))
        return humidity


secs = dateTime()
temperature = tempRead()
pressure = pressRead()
humidity = humidityRead()
#ID_number=1


try:
        mySql_insert_query= """INSERT INTO Sensor_Modbus_TCP_Data (datetime,temperature,pressure,humidity) VALUES (%s,%s,%s,%s)"""
        args =(secs, temperature, pressure, humidity)

        cursor = connection.cursor()
#       result = cursor.execute(mySql_Create_Table_Query)
#       print("Sensor_ModbusTCP_Data Table created successfully ")

        cursor.execute(mySql_insert_query,args)
        connection.commit()
        print(cursor.rowcount, "Record inserted successfully into Sensor_ModbusTCP_Data  table")
        cursor.close()

except mysql.connector.Error as error:
#    print("Failed to create table in MySQL: {}".format(error))
     print("Failed to insert record into Sensor_ModbusTCP_Data  table {}".format(error))

finally:
    if (connection.is_connected()):
        cursor.close()
        connection.close()
        print("MySQL connection is closed")

print (secs)
print (temperature)
print (pressure)
print (humidity)
Before executing this code, I configured the RevPi Connect as Modbus TCP master and enable the data logging to eMMC as per this guide https://revolution.kunbus.de/tutorials/ ... r-stretch/
So my question is very simple does this way to log the data is the correct method or way?
If this is the correct way how can we make it Real-Time?

Re: Data logging in Revolution Pi

Posted: 31 Jan 2020, 09:47
by dirk
Hi Anil, the eMMC has a limited life time so our aim was to provide you with a feature that prevents exhautive eMMC writes. But the trade-off is that you log to the RAM instead. So there is no right or not here as you have to examine what happens to your mysql database if you write your data to RAM and have to reboot.
So maybe you consider alternative ways i.e. sqlite or rsyslog.