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
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)
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
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")
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)
def test_invalid_ping_frame_address(self): self.reset() retval = meterbus.send_ping_frame(self.master, 600) self.assertEqual(retval, False)
#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"]),