- 在model.__init__.py中新增REQUIRED_SIMPLIFIED_FIELD_RULES和REQUIRED_TRANSMISSION_CHANNELS导出 - 移除app/mqtt_sender.py中的MQTT发送功能,禁用相关逻辑 - 在model/wits.py中添加WITS字段验证规则和传输通道映射配置 - 实现validate_required_wits_fields函数进行必填字段验证 - 在WitsData类中添加__post_init__方法执行字段验证 - 为wits_sender.py添加传输值验证和数据包验证功能 - 更新随机WITS数据生成逻辑,使用真实钻井参数范围 - 实现数据包解析和验证功能,确保必传字段完整性
102 lines
2.9 KiB
Python
102 lines
2.9 KiB
Python
import argparse
|
|
import logging
|
|
import random
|
|
|
|
from config import build_sender_dependencies
|
|
from model import DrillingRealtimeData
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def rand_int(a, b):
|
|
return random.randint(a, b)
|
|
|
|
|
|
def rand_float(a, b, digits=2):
|
|
return round(random.uniform(a, b), digits)
|
|
|
|
|
|
def build_random_payload(equipment_code):
|
|
entity = DrillingRealtimeData.empty(wellid=equipment_code)
|
|
entity = DrillingRealtimeData(
|
|
ts=entity.ts,
|
|
wellid=entity.wellid,
|
|
stknum=rand_int(0, 500),
|
|
recid=rand_int(0, 100000),
|
|
seqid=rand_int(0, 100000),
|
|
actual_date=entity.actual_date,
|
|
actual_time=entity.actual_time,
|
|
actcod=rand_int(0, 9),
|
|
deptbitm=rand_float(0, 5000),
|
|
deptbitv=rand_float(0, 5000),
|
|
deptmeas=rand_float(0, 5000),
|
|
deptvert=rand_float(0, 5000),
|
|
blkpos=rand_float(0, 100),
|
|
ropa=rand_float(0, 200),
|
|
hkla=rand_float(0, 500),
|
|
hklx=rand_float(0, 500),
|
|
woba=rand_float(0, 200),
|
|
wobx=rand_float(0, 200),
|
|
torqa=rand_float(0, 200),
|
|
torqx=rand_float(0, 200),
|
|
rpma=rand_int(0, 300),
|
|
sppa=rand_float(0, 5000),
|
|
chkp=rand_float(0, 5000),
|
|
spm1=rand_int(0, 200),
|
|
spm2=rand_int(0, 200),
|
|
spm3=rand_int(0, 200),
|
|
tvolact=rand_float(0, 20000),
|
|
tvolcact=rand_float(0, 20000),
|
|
mfop=rand_int(0, 1000),
|
|
mfoa=rand_float(0, 1000),
|
|
mfia=rand_float(0, 1000),
|
|
mdoa=rand_float(0, 1000),
|
|
mdia=rand_float(0, 1000),
|
|
mtoa=rand_float(0, 1000),
|
|
mtia=rand_float(0, 1000),
|
|
mcoa=rand_float(0, 1000),
|
|
mcia=rand_float(0, 1000),
|
|
stkc=rand_int(0, 200),
|
|
lagstks=rand_int(0, 200),
|
|
deptretm=rand_float(0, 5000),
|
|
gasa=rand_float(0, 100),
|
|
space1=rand_float(0, 10),
|
|
space2=rand_float(0, 10),
|
|
space3=rand_float(0, 10),
|
|
space4=rand_float(0, 10),
|
|
space5=rand_float(0, 10),
|
|
)
|
|
return entity.to_payload(equipment_code)
|
|
|
|
|
|
def run_sender(args, deps):
|
|
mqtt_config = deps.config.mqtt
|
|
logger.info(
|
|
"mqtt_sender is disabled by current requirements; skipping MQTT publish logic for topic=%s client_id=%s interval=%ss count=%s",
|
|
mqtt_config.pub_topic,
|
|
mqtt_config.sender_client_id,
|
|
args.interval,
|
|
args.count or "forever",
|
|
)
|
|
|
|
|
|
|
|
def add_arguments(parser):
|
|
parser.add_argument("--config", default="config.yaml", help="Path to config yaml")
|
|
parser.add_argument("--interval", type=float, default=3.0, help="Publish interval (seconds)")
|
|
parser.add_argument("--count", type=int, default=0, help="Publish count (0 = forever)")
|
|
|
|
|
|
|
|
def main(argv=None):
|
|
parser = argparse.ArgumentParser(description="MQTT random data sender")
|
|
add_arguments(parser)
|
|
args = parser.parse_args(argv)
|
|
deps = build_sender_dependencies(args.config)
|
|
run_sender(args, deps)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|