bacnet.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. device_defaults={
  28. "type": "bacnet",
  29. "device_type": 1,
  30. "port": 47808,
  31. "bacnet_net": 0,
  32. "asp_ip": "",
  33. "timeout": 3,
  34. "is_persistent": False,
  35. "group_id": 0,
  36. "alarm_interval": 90,
  37. "collect_interval": 5,
  38. },
  39. point_defaults={
  40. "point_id": "",
  41. "priority": None,
  42. "object_name": "",
  43. "units": "",
  44. "value_type": 0,
  45. "group_id": 0,
  46. "scale_ratio": 1,
  47. "value_offset": 0,
  48. "describe": "",
  49. "invalid_values": "",
  50. "valid_range_start": None,
  51. "valid_range_end": None,
  52. },
  53. )