0

I have a problem accessing client.close() in readholdingregisters() from closeconnection() in the code below:

class EnergyMeter:
    def __init__(self, model, gatewayipaddress, port ,deviceid):
        self.model = model
        self.gatewayipaddress = gatewayipaddress
        self.port = port
        self.deviceid = deviceid

    def readholdingregisters(self, startingregister, numberofregisters):
        from pymodbus3.client.sync import ModbusTcpClient as ModbusClient
        client = ModbusClient(self.gatewayipaddress, port=self.port)
        client.connect()
        if #some code here:
            #some other code here
            return concatResult
        else:
            return otherResult

Here I want to close the connection client.connect() from readholdingregisters():

    def closeconnection(self):
        EnergyMeter.readholdingregisters().client.close()??????????????????

Can you plase give me a good solution how to do it?

2 Answers2

0
from pymodbus3.client.sync import ModbusTcpClient as ModbusClient

class EnergyMeter:
    def __init__(self, model, gatewayipaddress, port ,deviceid):
        self.model = model
        self.gatewayipaddress = gatewayipaddress
        self.port = port
        self.deviceid = deviceid
        self.client = ModbusClient(self.gatewayipaddress, port=self.port)
        self.client.connect()

    def readholdingregisters(self, startingregister, numberofregisters):
        if #some code here:
            #some other code here
            return concatResult
        else:
            return otherResult

Then, to close, you call energy_meter.client.close() for whatever energy_meter you want to close.

TemporalWolf
  • 7,727
  • 1
  • 30
  • 50
  • @KaloyanGeorgiev If it solved your issue, don't forget to check the "Accept Answer" check mark. Also, up-vote answers which you found helpful (including your accepted answer) – TemporalWolf Feb 07 '17 at 21:45
0

Usual approach is , make client as datamember of class.

        self.client = ModbusClient(self.gatewayipaddress, port=self.port)
        self.client.connect()
        #some code here


    def closeconnection(self):
        self.readholdingregisters()
        self.client.close()

However if you want to access method through class EnergyMeter.readholdingregisters()

Then it should be declared as staticmethod or classmethod and this method should return client instance. Link

Community
  • 1
  • 1
Nikhil Rupanawar
  • 4,061
  • 10
  • 35
  • 51