mirror of
https://github.com/Fishwaldo/open-zwave.git
synced 2025-03-16 03:51:39 +00:00
Pull Request #840 - Allow Config Files to specify different Alarm Type Lists
This commit is contained in:
commit
fa333a6cff
3 changed files with 44 additions and 21 deletions
|
@ -32,27 +32,25 @@
|
|||
|
||||
<!-- COMMAND_CLASS_ALARM. -->
|
||||
<CommandClass id="113" name="COMMAND_CLASS_ALARM">
|
||||
<Instance index="1" />
|
||||
<Instance index="2" />
|
||||
<Value type="byte" genre="user" instance="1" index="0" label="Power Applied" value="2">
|
||||
<Help>
|
||||
Once the power has been applied, Alarm Report Command will be sent to
|
||||
Nodes in Grouping 1 to confirm the power applied status for HSM02.
|
||||
</Help>
|
||||
<Value type="byte" genre="user" instance="1" index="0" label="Alarm Type" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="12">
|
||||
<Help>Grouping 1, afterward, LED will light up for 1 sec to remind user when HSM02 is triggered due to open or close incidents.</Help>
|
||||
</Value>
|
||||
<Value type="byte" genre="user" instance="1" index="1" label="low battery" value="255">
|
||||
<Value type="list" genre="user" instance="1" index="1" label="Alarm Report" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" vindex="0" value="0" size="1">
|
||||
<Help>
|
||||
When HSM02 automatically wakes up, it will check the battery usage. When
|
||||
No alarm : There is no alarm to report.
|
||||
Power applied : Once the power has been applied, Alarm Report Command will be sent to
|
||||
Nodes in Grouping 1 to confirm the power applied status for HSM02.
|
||||
Tamper event : Grouping 1, afterward, LED will light up for 1 sec to remind user when HSM02 is
|
||||
triggered due to open or close incidents.
|
||||
Low battery : When HSM02 automatically wakes up, it will check the battery usage. When
|
||||
low battery is detected, Alarm Report Command will be sent to Nodes in
|
||||
Grouping 1, afterward, LED will light up for 1 sec to remind user when HSM02 is
|
||||
triggered due to open or close incidents.
|
||||
</Help>
|
||||
</Value>
|
||||
<Value type="byte" genre="user" instance="2" index="0" label="Tamper event" value="17">
|
||||
<Help>
|
||||
Grouping 1, afterward, LED will light up for 1 sec to remind user when HSM02 is
|
||||
triggered due to open or close incidents.
|
||||
</Help>
|
||||
<Item label="No alarm" value="0" />
|
||||
<Item label="Power applied" value="2" />
|
||||
<Item label="Tamper event" value="17" />
|
||||
<Item label="Low battery" value="255" />
|
||||
</Value>
|
||||
</CommandClass>
|
||||
|
||||
|
|
|
@ -2517,7 +2517,6 @@ bool Node::CreateValueFromXML
|
|||
if( value )
|
||||
{
|
||||
value->ReadXML( m_homeId, m_nodeId, _commandClassId, _valueElement );
|
||||
|
||||
ValueStore* store = GetValueStore();
|
||||
if( store->AddValue( value ) )
|
||||
{
|
||||
|
@ -2567,8 +2566,16 @@ void Node::ReadValueFromXML
|
|||
{
|
||||
if( Value* value = store->GetValue( id.GetValueStoreKey() ) )
|
||||
{
|
||||
value->ReadXML( m_homeId, m_nodeId, _commandClassId, _valueElement );
|
||||
value->Release();
|
||||
// Check if values type are the same
|
||||
ValueID::ValueType v_type = value->GetID().GetType();
|
||||
if ( v_type == type ) {
|
||||
value->ReadXML( m_homeId, m_nodeId, _commandClassId, _valueElement );
|
||||
value->Release();
|
||||
} else {
|
||||
Log::Write( LogLevel_Info, m_nodeId, "xml value type (%s) is different to stored value type (%s). Value is recreate with xml params.", value->GetTypeNameFromEnum(type), value->GetTypeNameFromEnum(v_type) );
|
||||
store->RemoveValue( value->GetID().GetValueStoreKey() );
|
||||
CreateValueFromXML( _commandClassId, _valueElement );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -229,12 +229,30 @@ bool Alarm::HandleMsg
|
|||
value->OnValueRefreshed( _data[1] );
|
||||
value->Release();
|
||||
}
|
||||
if( (value = static_cast<ValueByte*>( GetValue( _instance, AlarmIndex_Level ) )) )
|
||||
// For device on version 1 the level could have different value. This level value correspond to a list of alarm type.
|
||||
if ( Value* value = GetValue( _instance, AlarmIndex_Level ) )
|
||||
{
|
||||
value->OnValueRefreshed( _data[2] );
|
||||
switch ( value->GetID().GetType() )
|
||||
{
|
||||
case ValueID::ValueType_Byte:
|
||||
{
|
||||
ValueByte* valueByte = static_cast<ValueByte*>( value );
|
||||
valueByte->OnValueRefreshed( _data[2] );
|
||||
break;
|
||||
}
|
||||
case ValueID::ValueType_List:
|
||||
{
|
||||
ValueList* valueList = static_cast<ValueList*>( value );
|
||||
valueList->OnValueRefreshed( _data[2] );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
Log::Write( LogLevel_Info, GetNodeId(), "Invalid type (%d) for Alarm Level %d", value->GetID().GetType(), _data[2] );
|
||||
}
|
||||
}
|
||||
value->Release();
|
||||
}
|
||||
|
||||
// With Version=2, the data has more detailed information about the alarm
|
||||
if(( GetVersion() > 1 ) && ( _length >= 7 ))
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue