コード例 #1
0
def ping_address(ser, address, retries=5):
    for i in range(0, retries + 1):
        meterbus.send_ping_frame(ser, address)
        try:
            frame = meterbus.load(meterbus.recv_frame(ser, 1))
            if isinstance(frame, meterbus.TelegramACK):
                return True
        except meterbus.MBusFrameDecodeError:
            pass

    return False
コード例 #2
0
def ping_address(ser, address, retries=5):
    for i in range(0, retries + 1):
        meterbus.send_ping_frame(ser, address)
        try:
            frame = meterbus.load(meterbus.recv_frame(ser, 1))
            if isinstance(frame, meterbus.TelegramACK):
                return True
        except meterbus.MBusFrameDecodeError:
            pass

    return False
コード例 #3
0
ファイル: test_serial.py プロジェクト: xaelsouth/pyMeterBus
    def test_ping_frame(self):
        self.reset()
        meterbus.send_ping_frame(self.master, 0)
        self.assertEqual(self.slave.read(5), b"\x10\x40\x00\x40\x16")

        # Slave sends ACK reply
        self.slave.write(b'\xE5')

        frame_data = meterbus.recv_frame(self.master, 1)
        frame = meterbus.load(frame_data)

        self.assertIsInstance(frame, meterbus.TelegramACK)
コード例 #4
0
ファイル: test_serial.py プロジェクト: ganehag/pyMeterBus
    def test_ping_frame(self):
        self.reset()
        meterbus.send_ping_frame(self.master, 0)
        self.assertEqual(self.slave.read(5),
                         b"\x10\x40\x00\x40\x16")

        # Slave sends ACK reply
        self.slave.write(b'\xE5')

        frame_data = meterbus.recv_frame(self.master, 1)
        frame = meterbus.load(frame_data)

        self.assertIsInstance(frame, meterbus.TelegramACK)
コード例 #5
0
def ping_address(ser, address, retries=5, read_echo=False):
    for i in range(0, retries + 1):
        meterbus.send_ping_frame(ser, address, read_echo)
        try:
            frame = meterbus.load(meterbus.recv_frame(ser, 1))
            if isinstance(frame, meterbus.TelegramACK):
                return True
        except meterbus.MBusFrameDecodeError as e:
            pass

        time.sleep(0.5)

    return False
コード例 #6
0
def mbus_query():
  ser = serial.Serial(serial_dev, baud_rate, 8, 'E', 1, 0.5)
  try:
    meterbus.send_ping_frame(ser, slave_address)
    frame = meterbus.load(meterbus.recv_frame(ser, 1))
    assert isinstance(frame, meterbus.TelegramACK)
    meterbus.send_request_frame(ser, slave_address)
    frame = meterbus.load(meterbus.recv_frame(ser, meterbus.FRAME_DATA_LENGTH))
    assert isinstance(frame, meterbus.TelegramLong)
    mbus_json = json.loads(frame.to_JSON())
    manufacturer = mbus_json["body"]["header"]["manufacturer"]
    client.publish(post_topic, "manufacturer " + manufacturer)
  except:
    log('Failed to read data from slave at address %d' % slave_address)
    client.publish(post_topic, "failed")
コード例 #7
0
ファイル: test_serial.py プロジェクト: xaelsouth/pyMeterBus
    def test_empty_reply(self):
        self.reset()
        meterbus.send_ping_frame(self.master, 0)

        self.assertEqual(self.slave.read(5), b"\x10\x40\x00\x40\x16")

        # Slave does not send anything

        frame_data = meterbus.recv_frame(self.master, 1)
        try:
            frame = meterbus.load(frame_data)
        except MBusFrameDecodeError as e:
            frame = e.value

        self.assertEqual(frame, None)
コード例 #8
0
ファイル: test_serial.py プロジェクト: ganehag/pyMeterBus
    def test_empty_reply(self):
        self.reset()
        meterbus.send_ping_frame(self.master,
                                 0)

        self.assertEqual(self.slave.read(5),
                         b"\x10\x40\x00\x40\x16")

        # Slave does not send anything

        frame_data = meterbus.recv_frame(self.master, 1)
        try:
            frame = meterbus.load(frame_data)
        except MBusFrameDecodeError as e:
            frame = e.value

        self.assertEqual(frame, None)
コード例 #9
0
ファイル: test_serial.py プロジェクト: ganehag/pyMeterBus
 def test_invalid_ping_frame_address(self):
     self.reset()
     retval = meterbus.send_ping_frame(self.master, 600)
     self.assertEqual(retval, False)
コード例 #10
0
ファイル: test_serial.py プロジェクト: xaelsouth/pyMeterBus
 def test_invalid_ping_frame_address(self):
     self.reset()
     retval = meterbus.send_ping_frame(self.master, 600)
     self.assertEqual(retval, False)
コード例 #11
0
ファイル: monitor.py プロジェクト: AvansETI/SENDLAB
#sendlab.username_pw_set("server", password="******")
sendlab.username_pw_set("node", password="******")
sendlab.connect("sendlab.nl", 11884, 60)

print("Sending Init message")
sendlab.publish("node/init", json.dumps(sensorInit))

timestamp = datetime.now()
while(1):
    sendlab.loop()

    timediff = datetime.now() - timestamp
    if (timediff.seconds > 10):
      try:
          meterbus.send_ping_frame(ser, slave_address)
          frame = meterbus.load(meterbus.recv_frame(ser, 1))
          assert isinstance(frame, meterbus.TelegramACK)
          meterbus.send_request_frame(ser, slave_address)
          frame = meterbus.load(meterbus.recv_frame(ser, meterbus.FRAME_DATA_LENGTH))
          assert isinstance(frame, meterbus.TelegramLong)
          obj = json.loads(frame.to_JSON())
          records = obj["body"]["records"]
          data = {
            "id": sensorId,
            "timestamp": get_time_stamp(records),
            "measurements": [{
                "timestamp": get_time_stamp(records),
                "heat_energy":          float(records[0]["value"]),
                "cool_energy":          float(records[1]["value"]),
                "energy_E8":            float(records[2]["value"]),