From 2b3c31cdb0104c5e2d50d7445028ca84790e0271 Mon Sep 17 00:00:00 2001 From: philipperequile Date: Fri, 22 Feb 2019 23:52:46 +0100 Subject: [PATCH] Add more ads plc types (#19801) * Update __init__.py Support for 2 new 4-byte PLC datatypes DINT and UDINT * Update __init__.py * Fix lint issue * Update __init__.py * Update __init__.py * Update __init__.py * Support for 2 new PLC types Sensor supports DINT and UDINT PLC types * Update __init__.py I removed unused TYPES = [ADSTYPE_INT, ADSTYPE_UINT, ADSTYPE_BYTE, ADSTYPE_DINT, ADSTYPE_UDINT] --- homeassistant/components/ads/__init__.py | 37 ++++++++++++++++-------- homeassistant/components/ads/sensor.py | 3 +- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/ads/__init__.py b/homeassistant/components/ads/__init__.py index cfd0f37caa0..060e9b2b987 100644 --- a/homeassistant/components/ads/__init__.py +++ b/homeassistant/components/ads/__init__.py @@ -4,9 +4,11 @@ import struct import logging import ctypes from collections import namedtuple + import voluptuous as vol -from homeassistant.const import CONF_DEVICE, CONF_PORT, CONF_IP_ADDRESS, \ - EVENT_HOMEASSISTANT_STOP + +from homeassistant.const import ( + CONF_DEVICE, CONF_IP_ADDRESS, CONF_PORT, EVENT_HOMEASSISTANT_STOP) import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['pyads==3.0.7'] @@ -16,18 +18,20 @@ _LOGGER = logging.getLogger(__name__) DATA_ADS = 'data_ads' # Supported Types -ADSTYPE_INT = 'int' -ADSTYPE_UINT = 'uint' -ADSTYPE_BYTE = 'byte' ADSTYPE_BOOL = 'bool' +ADSTYPE_BYTE = 'byte' +ADSTYPE_DINT = 'dint' +ADSTYPE_INT = 'int' +ADSTYPE_UDINT = 'udint' +ADSTYPE_UINT = 'uint' -DOMAIN = 'ads' - +CONF_ADS_FACTOR = 'factor' +CONF_ADS_TYPE = 'adstype' +CONF_ADS_VALUE = 'value' CONF_ADS_VAR = 'adsvar' CONF_ADS_VAR_BRIGHTNESS = 'adsvar_brightness' -CONF_ADS_TYPE = 'adstype' -CONF_ADS_FACTOR = 'factor' -CONF_ADS_VALUE = 'value' + +DOMAIN = 'ads' SERVICE_WRITE_DATA_BY_NAME = 'write_data_by_name' @@ -41,7 +45,8 @@ CONFIG_SCHEMA = vol.Schema({ SCHEMA_SERVICE_WRITE_DATA_BY_NAME = vol.Schema({ vol.Required(CONF_ADS_TYPE): - vol.In([ADSTYPE_INT, ADSTYPE_UINT, ADSTYPE_BYTE, ADSTYPE_BOOL]), + vol.In([ADSTYPE_INT, ADSTYPE_UINT, ADSTYPE_BYTE, ADSTYPE_BOOL, + ADSTYPE_DINT, ADSTYPE_UDINT]), vol.Required(CONF_ADS_VALUE): vol.Coerce(int), vol.Required(CONF_ADS_VAR): cv.string, }) @@ -61,15 +66,19 @@ def setup(hass, config): AdsHub.ADS_TYPEMAP = { ADSTYPE_BOOL: pyads.PLCTYPE_BOOL, ADSTYPE_BYTE: pyads.PLCTYPE_BYTE, + ADSTYPE_DINT: pyads.PLCTYPE_DINT, ADSTYPE_INT: pyads.PLCTYPE_INT, + ADSTYPE_UDINT: pyads.PLCTYPE_UDINT, ADSTYPE_UINT: pyads.PLCTYPE_UINT, } + AdsHub.ADSError = pyads.ADSError AdsHub.PLCTYPE_BOOL = pyads.PLCTYPE_BOOL AdsHub.PLCTYPE_BYTE = pyads.PLCTYPE_BYTE + AdsHub.PLCTYPE_DINT = pyads.PLCTYPE_DINT AdsHub.PLCTYPE_INT = pyads.PLCTYPE_INT + AdsHub.PLCTYPE_UDINT = pyads.PLCTYPE_UDINT AdsHub.PLCTYPE_UINT = pyads.PLCTYPE_UINT - AdsHub.ADSError = pyads.ADSError try: ads = AdsHub(client) @@ -192,6 +201,10 @@ class AdsHub: value = struct.unpack('