bacnet.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from __future__ import annotations
  2. from typing import Any
  3. from .base import ProtocolSpec
  4. BACNET_OBJECT_TYPE_ALIASES = {
  5. "analoginput": "AnalogInput",
  6. "analogoutput": "AnalogOutput",
  7. "analogvalue": "AnalogValue",
  8. "binaryinput": "BinaryInput",
  9. "binaryoutput": "BinaryOutput",
  10. "binaryvalue": "BinaryValue",
  11. "multistateinput": "MultiStateInput",
  12. "multistateoutput": "MultiStateOutput",
  13. "multistatevalue": "MultiStateValue",
  14. }
  15. def normalize_bacnet_object_type(value: Any) -> str:
  16. raw_value = str(value or "").strip()
  17. if not raw_value:
  18. raise ValueError("payload.object_type is required")
  19. lookup_key = "".join(char for char in raw_value if char.isalnum()).lower()
  20. return BACNET_OBJECT_TYPE_ALIASES.get(lookup_key, raw_value)
  21. BACNET_SPEC = ProtocolSpec(
  22. protocol="bacnet",
  23. create_device_path="/api/collector/device",
  24. create_point_path="/api/collector/bacnet/point/add_collect_point",
  25. point_test_path="/api/dc-gateway/bacnet/read_points",
  26. search_points_path="/api/dc-gateway/bacnet/search_points",
  27. bbmd_whois_path="/api/dc-gateway/bacnet/bbmd/whois",
  28. device_defaults={
  29. "type": "bacnet",
  30. "device_type": 1,
  31. "port": 47808,
  32. "bacnet_net": 0,
  33. "asp_ip": "",
  34. "timeout": 3,
  35. "is_persistent": False,
  36. "group_id": 0,
  37. "alarm_interval": 90,
  38. "collect_interval": 5,
  39. },
  40. point_defaults={
  41. "point_id": "",
  42. "priority": None,
  43. "object_name": "",
  44. "units": "",
  45. "value_type": 0,
  46. "group_id": 0,
  47. "scale_ratio": 1,
  48. "value_offset": 0,
  49. "describe": "",
  50. "invalid_values": "",
  51. "valid_range_start": None,
  52. "valid_range_end": None,
  53. },
  54. )