From 888704d1155bd513cd90e6e3a76d9ac1820766d3 Mon Sep 17 00:00:00 2001 From: ntruchsess <> Date: Fri, 2 Oct 2015 14:55:54 +0000 Subject: [PATCH] MYSENSORS: add new constants (merge pullrequest from Kolbi) git-svn-id: https://svn.fhem.de/fhem/trunk@9341 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_MYSENSORS.pm | 2 +- fhem/FHEM/10_MYSENSORS_DEVICE.pm | 114 +++++++++++++------- fhem/FHEM/lib/Device/MySensors/Constants.pm | 57 +++++++--- 3 files changed, 116 insertions(+), 57 deletions(-) diff --git a/fhem/FHEM/00_MYSENSORS.pm b/fhem/FHEM/00_MYSENSORS.pm index 21fe7897b..0a5a74349 100644 --- a/fhem/FHEM/00_MYSENSORS.pm +++ b/fhem/FHEM/00_MYSENSORS.pm @@ -342,7 +342,7 @@ sub onInternalMsg($$) { } last; }; - $type == I_STARTUP_COMPLETE and do { + $type == I_GATEWAY_READY and do { readingsSingleUpdate($hash,'connection','startup complete',1); GP_ForallClients($hash,sub { my $client = shift; diff --git a/fhem/FHEM/10_MYSENSORS_DEVICE.pm b/fhem/FHEM/10_MYSENSORS_DEVICE.pm index 6543575c9..e8c5cca89 100644 --- a/fhem/FHEM/10_MYSENSORS_DEVICE.pm +++ b/fhem/FHEM/10_MYSENSORS_DEVICE.pm @@ -83,47 +83,59 @@ BEGIN { }; my %static_types = ( - S_DOOR => { receives => [], sends => [V_TRIPPED] }, # BinarySwitchSensor - S_MOTION => { receives => [], sends => [V_TRIPPED] }, # MotionSensor - S_SMOKE => { receives => [], sends => [] }, # Not used so far - S_LIGHT => { receives => [V_LIGHT], sends => [V_LIGHT] }, # BinarySwitchSensor - S_DIMMER => { receives => [V_LIGHT,V_DIMMER], sends => [V_LIGHT,V_DIMMER] }, # DimmableLEDActuator - S_COVER => { receives => [V_DIMMER,V_UP,V_DOWN,V_STOP], sends => [V_DIMMER] }, # ServoActuator - S_TEMP => { receives => [], sends => [V_TEMP] }, # DallasTemperatureSensor - S_HUM => { receives => [], sends => [V_HUM] }, # HumiditySensor - S_BARO => { receives => [], sends => [V_PRESSURE,V_FORECAST] }, - S_WIND => { receives => [], sends => [V_WIND,V_GUST,V_DIRECTION] }, # Not used so far - S_RAIN => { receives => [], sends => [V_RAIN,V_RAINRATE] }, # Not used so far - S_UV => { receives => [], sends => [V_UV] }, # UVSensor - S_WEIGHT => { receives => [], sends => [V_WEIGHT] }, # Not used so far - S_POWER => { receives => [V_VAR1], sends => [V_WATT,V_KWH,V_VAR1] }, # EnergyMeterPulseSensor - S_HEATER => { receives => [], sends => [V_HEATER,V_HEATER_SW] }, # Not used so far - S_DISTANCE => { receives => [], sends => [V_DISTANCE] }, # DistanceSensor - S_LIGHT_LEVEL => { receives => [], sends => [V_LIGHT_LEVEL] }, # LightSensor - S_ARDUINO_NODE => { receives => [], sends => [] }, # Not used so far - S_ARDUINO_REPEATER_NODE => { receives => [], sends => [] }, # Not used so far - S_LOCK => { receives => [V_LOCK_STATUS], sends => [V_LOCK_STATUS] }, #R FIDLockSensor - S_IR => { receives => [V_IR_SEND], sends => [V_IR_RECEIVE] }, # Not used so far - S_WATER => { receives => [V_VAR1], sends => [V_FLOW,V_VOLUME,V_VAR1] }, # WaterMeterPulseSensor - S_AIR_QUALITY => { receives => [], sends => [V_VAR1] }, # AirQualitySensor - S_CUSTOM => { receives => [], sends => [V_VAR1,V_VAR2,V_VAR3] }, # Not used so far - S_DUST => { receives => [], sends => [V_DUST_LEVEL] }, # Not used so far - S_SCENE_CONTROLLER => { receives => [], sends => [V_SCENE_ON,V_SCENE_OFF] }, # TouchDisplaySceneControllerDisplaySensor + S_DOOR => { receives => [], sends => [V_TRIPPED,V_ARMED] }, # Door and window sensors + S_MOTION => { receives => [], sends => [V_TRIPPED,V_ARMED] }, # MotionSensor + S_SMOKE => { receives => [], sends => [V_TRIPPED,V_ARMED] }, # Smoke sensor + S_LIGHT => { receives => [V_STATUS,V_WATT], sends => [V_STATUS,V_WATT] }, # Light Actuator (on/off) + S_BINARY => { receives => [V_STATUS,V_WATT], sends => [V_STATUS,V_WATT] }, # Binary device (on/off), Alias for S_LIGHT + S_DIMMER => { receives => [V_STATUS,V_PERCENTAGE,V_WATT], sends => [V_STATUS,V_PERCENTAGE,V_WATT] }, # Dimmable device of some kind + S_COVER => { receives => [V_UP,V_DOWN,V_STOP,V_PERCENTAGE], sends => [V_PERCENTAGE] }, # Window covers or shades + S_TEMP => { receives => [], sends => [V_TEMP,V_ID] }, # Temperature sensor + S_HUM => { receives => [], sends => [V_HUM] }, # Humidity sensor + S_BARO => { receives => [], sends => [V_PRESSURE,V_FORECAST] }, # Barometer sensor (Pressure) + S_WIND => { receives => [], sends => [V_WIND,V_GUST] }, # Wind sensor + S_RAIN => { receives => [], sends => [V_RAIN,V_RAINRATE] }, # Rain sensor + S_UV => { receives => [], sends => [V_UV] }, # UV Sensor + S_WEIGHT => { receives => [], sends => [V_WEIGHT,V_IMPEDANCE] }, # Weight sensor for scales etc. + S_POWER => { receives => [], sends => [V_WATT,V_KWH] }, # Power measuring device, like power meters + S_HEATER => { receives => [], sends => [V_HVAC_SETPOINT_HEAT,V_HVAC_FLOW_STATE,V_TEMP] }, # Heater device + S_DISTANCE => { receives => [], sends => [V_DISTANCE,V_UNIT_PREFIX] }, # Distance sensor + S_LIGHT_LEVEL => { receives => [], sends => [V_LIGHT_LEVEL,V_LEVEL] }, # Light sensor + S_ARDUINO_NODE => { receives => [], sends => [] }, # Arduino node device + S_ARDUINO_REPEATER_NODE => { receives => [], sends => [] }, # Arduino repeating node device + S_LOCK => { receives => [V_LOCK_STATUS], sends => [V_LOCK_STATUS] }, # Lock device + S_IR => { receives => [V_IR_SEND], sends => [V_IR_RECEIVE] }, # Ir sender/receiver device + S_WATER => { receives => [], sends => [V_FLOW,V_VOLUME,] }, # Water meter + S_AIR_QUALITY => { receives => [], sends => [V_LEVEL,V_UNIT_PREFIX] }, # Air quality sensor e.g. MQ-2 + S_CUSTOM => { receives => [], sends => [V_VAR1,V_VAR2,V_VAR3,V_VAR4,V_VAR5] }, # Use this for custom sensors where no other fits. + S_DUST => { receives => [], sends => [V_LEVEL,V_UNIT_PREFIX] }, # Dust level sensor + S_SCENE_CONTROLLER => { receives => [], sends => [V_SCENE_ON,V_SCENE_OFF] }, # Scene controller device + S_RGB_LIGHT => { receives => [V_RGB,V_WATT], sends => [V_RGB,V_WATT] }, # RGB light + S_RGBW_LIGHT => { receives => [V_RGBW,V_WATT], sends => [V_RGBW,V_WATT] }, # RGBW light (with separate white component) + S_COLOR_SENSOR => { receives => [V_RGB], sends => [V_RGB] }, # Color sensor + S_HVAC => { receives => [], sends => [V_HVAC_SETPOINT_HEAT,V_HVAC_SETPOINT_COOL,V_HVAC_FLOW_STATE,V_HVAC_FLOW_MODE,V_HVAC_SPEED] }, # Thermostat/HVAC device + S_MULTIMETER => { receives => [], sends => [V_VOLTAGE,V_CURRENT,V_IMPEDANCE] }, # Multimeter device + S_SPRINKLER => { receives => [], sends => [V_STATUS,V_TRIPPED] }, # Sprinkler device + S_WATER_LEAK => { receives => [], sends => [V_TRIPPED,V_ARMED] }, # Water leak sensor + S_SOUND => { receives => [], sends => [V_LEVEL,V_TRIPPED,V_ARMED] }, # Sound sensor + S_VIBRATION => { receives => [], sends => [V_LEVEL,V_TRIPPED,V_ARMED] }, # Vibration sensor + S_MOISTURE => { receives => [], sends => [V_LEVEL,V_TRIPPED,V_ARMED] }, # Moisture sensor ); my %static_mappings = ( V_TEMP => { type => "temperature" }, V_HUM => { type => "humidity" }, + V_STATUS => { type => "status", val => { 0 => 'off', 1 => 'on' }}, + #V_LIGHT => { type => "switch", val => { 0 => 'off', 1 => 'on' }}, # Deprecated + V_PERCENTAGE => { type => "percentage", range => { min => 0, step => 1, max => 100 }}, + #V_DIMMER => { type => "dimmer", range => { min => 0, step => 1, max => 100 }}, # Deprecated V_PRESSURE => { type => "pressure" }, - V_LIGHT_LEVEL => { type => "brightness" }, - V_LIGHT => { type => "switch", val => { 0 => 'off', 1 => 'on' }}, - V_DIMMER => { type => "dimmer", range => { min => 0, step => 1, max => 100 }}, V_FORECAST => { type => "forecast", val => { # PressureSensor, DP/Dt explanation 0 => 'stable', # 0 = "Stable Weather Pattern" - 1 => 'slow rising', # 1 = "Slowly rising Good Weather", "Clear/Sunny " - 2 => 'slow falling', # 2 = "Slowly falling L-Pressure ", "Cloudy/Rain " - 3 => 'quick rising', # 3 = "Quickly rising H-Press", "Not Stable" - 4 => 'quick falling',# 4 = "Quickly falling L-Press", "Thunderstorm" + 1 => 'sunny', # 1 = "Slowly rising Good Weather", "Clear/Sunny " + 2 => 'cloudy', # 2 = "Slowly falling L-Pressure ", "Cloudy/Rain " + 3 => 'unstable', # 3 = "Quickly rising H-Press", "Not Stable" + 4 => 'thunderstorm',# 4 = "Quickly falling L-Press", "Thunderstorm" 5 => 'unknown' }}, # 5 = "Unknown (More Time needed) V_RAIN => { type => "rain" }, V_RAINRATE => { type => "rainrate" }, @@ -134,14 +146,15 @@ my %static_mappings = ( V_WEIGHT => { type => "weight" }, V_DISTANCE => { type => "distance" }, V_IMPEDANCE => { type => "impedance" }, - V_ARMED => { type => "armed" }, + V_ARMED => { type => "armed", val => { 0 => 'off', 1 => 'on' }}, V_TRIPPED => { type => "tripped", val => { 0 => 'off', 1 => 'on' }}, V_WATT => { type => "power" }, V_KWH => { type => "energy" }, V_SCENE_ON => { type => "button_on" }, V_SCENE_OFF => { type => "button_off" }, - V_HEATER => { type => "heater" }, - V_HEATER_SW => { type => "heater_sw" }, + V_HVAC_FLOW_STATE => { type => "hvacflowstate" }, + V_HVAC_SPEED => { type => "hvacspeed" }, + V_LIGHT_LEVEL => { type => "brightness", range => { min => 0, step => 1, max => 100 }}, V_VAR1 => { type => "value1" }, V_VAR2 => { type => "value2" }, V_VAR3 => { type => "value3" }, @@ -155,9 +168,16 @@ my %static_mappings = ( V_FLOW => { type => "flow" }, V_VOLUME => { type => "volume" }, V_LOCK_STATUS => { type => "lockstatus", val => { 0 => 'off', 1 => 'on' }}, - V_DUST_LEVEL => { type => "dustlevel" }, + V_LEVEL => { type => "level" }, V_VOLTAGE => { type => "voltage" }, V_CURRENT => { type => "current" }, + V_RGB => { type => "rgb" }, + V_RGBW => { type => "rgbw" }, + V_ID => { type => "id" }, + V_UNIT_PREFIX => { type => "unitprefix" }, + V_HVAC_SETPOINT_COOL => { type => "hvacsetpointcool" }, + V_HVAC_SETPOINT_HEAT => { type => "hvacsetpointheat" }, + V_HVAC_FLOW_MODE => { type => "hvacflowmode" }, ); sub Define($$) { @@ -484,11 +504,11 @@ sub onInternalMessage($$) { } last; }; - $type == I_PING and do { + $type == I_FIND_PARENT and do { $hash->{$typeStr} = $msg->{payload}; last; }; - $type == I_PING_ACK and do { + $type == I_FIND_PARENT_RESPONSE and do { $hash->{$typeStr} = $msg->{payload}; last; }; @@ -513,6 +533,22 @@ sub onInternalMessage($$) { $hash->{$typeStr} = $msg->{payload}; last; }; + $type == I_GATEWAY_READY and do { + $hash->{$typeStr} = $msg->{payload}; + last; + }; + $type == I_REQUEST_SIGNING and do { + $hash->{$typeStr} = $msg->{payload}; + last; + }; + $type == I_GET_NONCE and do { + $hash->{$typeStr} = $msg->{payload}; + last; + }; + $type == I_GET_NONCE_RESPONSE and do { + $hash->{$typeStr} = $msg->{payload}; + last; + }; } } diff --git a/fhem/FHEM/lib/Device/MySensors/Constants.pm b/fhem/FHEM/lib/Device/MySensors/Constants.pm index 9a9f4eb4a..43fd55f15 100644 --- a/fhem/FHEM/lib/Device/MySensors/Constants.pm +++ b/fhem/FHEM/lib/Device/MySensors/Constants.pm @@ -21,8 +21,8 @@ sub commandToStr($) { use constant { V_TEMP => 0, V_HUM => 1, - V_LIGHT => 2, - V_DIMMER => 3, + V_STATUS => 2, + V_PERCENTAGE => 3, V_PRESSURE => 4, V_FORECAST => 5, V_RAIN => 6, @@ -40,8 +40,8 @@ use constant { V_KWH => 18, V_SCENE_ON => 19, V_SCENE_OFF => 20, - V_HEATER => 21, - V_HEATER_SW => 22, + V_HVAC_FLOW_STATE => 21, + V_HVAC_SPEED => 22, V_LIGHT_LEVEL => 23, V_VAR1 => 24, V_VAR2 => 25, @@ -56,17 +56,24 @@ use constant { V_FLOW => 34, V_VOLUME => 35, V_LOCK_STATUS => 36, - V_DUST_LEVEL => 37, - V_VOLTAGE => 38, + V_LEVEL => 37, + V_VOLTAGE => 38, V_CURRENT => 39, + V_RGB => 40, + V_RGBW => 41, + V_ID => 42, + V_UNIT_PREFIX => 43, + V_HVAC_SETPOINT_COOL => 44, + V_HVAC_SETPOINT_HEAT => 45, + V_HVAC_FLOW_MODE => 46, }; -use constant variableTypes => qw{ V_TEMP V_HUM V_LIGHT V_DIMMER V_PRESSURE V_FORECAST V_RAIN +use constant variableTypes => qw{ V_TEMP V_HUM V_STATUS V_PERCENTAGE V_PRESSURE V_FORECAST V_RAIN V_RAINRATE V_WIND V_GUST V_DIRECTION V_UV V_WEIGHT V_DISTANCE V_IMPEDANCE V_ARMED V_TRIPPED V_WATT V_KWH V_SCENE_ON V_SCENE_OFF - V_HEATER V_HEATER_SW V_LIGHT_LEVEL V_VAR1 V_VAR2 V_VAR3 V_VAR4 V_VAR5 + V_HVAC_FLOW_STATE V_HVAC_SPEED V_LIGHT_LEVEL V_VAR1 V_VAR2 V_VAR3 V_VAR4 V_VAR5 V_UP V_DOWN V_STOP V_IR_SEND V_IR_RECEIVE V_FLOW V_VOLUME V_LOCK_STATUS - V_DUST_LEVEL V_VOLTAGE V_CURRENT}; + V_LEVEL V_VOLTAGE V_CURRENT V_RGB V_RGBW V_ID V_UNIT_PREFIX V_HVAC_SETPOINT_COOL V_HVAC_SETPOINT_HEAT V_HVAC_FLOW_MODE}; sub variableTypeToStr($) { (variableTypes)[shift]; @@ -86,20 +93,23 @@ use constant { I_ID_RESPONSE => 4, I_INCLUSION_MODE => 5, I_CONFIG => 6, - I_PING => 7, - I_PING_ACK => 8, + I_FIND_PARENT => 7, + I_FIND_PARENT_RESPONSE => 8, I_LOG_MESSAGE => 9, I_CHILDREN => 10, I_SKETCH_NAME => 11, I_SKETCH_VERSION => 12, I_REBOOT => 13, - I_STARTUP_COMPLETE => 14. + I_GATEWAY_READY => 14, + I_REQUEST_SIGNING => 15, + I_GET_NONCE => 16, + I_GET_NONCE_RESPONSE => 17. }; use constant internalMessageTypes => qw{ I_BATTERY_LEVEL I_TIME I_VERSION I_ID_REQUEST I_ID_RESPONSE - I_INCLUSION_MODE I_CONFIG I_PING I_PING_ACK + I_INCLUSION_MODE I_CONFIG I_FIND_PARENT I_FIND_PARENT_RESPONSE I_LOG_MESSAGE I_CHILDREN I_SKETCH_NAME I_SKETCH_VERSION - I_REBOOT I_STARTUP_COMPLETE }; + I_REBOOT I_GATEWAY_READY I_REQUEST_SIGNING I_GET_NONCE I_GET_NONCE_RESPONSE }; sub internalMessageTypeToStr($) { (internalMessageTypes)[shift]; @@ -111,6 +121,7 @@ use constant { S_MOTION => 1, S_SMOKE => 2, S_LIGHT => 3, + S_BINARY => 3, S_DIMMER => 4, S_COVER => 5, S_TEMP => 6, @@ -133,11 +144,23 @@ use constant { S_CUSTOM => 23, S_DUST => 24, S_SCENE_CONTROLLER => 25, + S_RGB_LIGHT => 26, + S_RGBW_LIGHT => 27, + S_COLOR_SENSOR => 28, + S_HVAC => 29, + S_MULTIMETER => 30, + S_SPRINKLER => 31, + S_WATER_LEAK => 32, + S_SOUND => 33, + S_VIBRATION => 34, + S_MOISTURE => 35, }; -use constant sensorTypes => qw{ S_DOOR S_MOTION S_SMOKE S_LIGHT S_DIMMER S_COVER S_TEMP S_HUM S_BARO S_WIND +use constant sensorTypes => qw{ S_DOOR S_MOTION S_SMOKE S_LIGHT S_BINARY S_DIMMER S_COVER S_TEMP S_HUM S_BARO S_WIND S_RAIN S_UV S_WEIGHT S_POWER S_HEATER S_DISTANCE S_LIGHT_LEVEL S_ARDUINO_NODE - S_ARDUINO_REPEATER_NODE S_LOCK S_IR S_WATER S_AIR_QUALITY S_CUSTOM S_DUST S_SCENE_CONTROLLER }; + S_ARDUINO_REPEATER_NODE S_LOCK S_IR S_WATER S_AIR_QUALITY S_CUSTOM S_DUST S_SCENE_CONTROLLER + S_RGB_LIGHT S_RGBW_LIGHT S_COLOR_SENSOR S_HVAC S_MULTIMETER S_SPRINKLER S_WATER_LEAK S_SOUND S_VIBRATION + S_MOISTURE}; sub sensorTypeToStr($) { (sensorTypes)[shift]; @@ -236,4 +259,4 @@ use Exporter ('import'); %EXPORT_TAGS = (all => [@EXPORT_OK]); -1; \ No newline at end of file +1;