Informations Flow, Readingsync bei setzen von diversen Set States verbessert. Fehlerbereinigung - Abstürze von FHEM bei falschen Portangaben oder IP's

This commit is contained in:
Marko Oldenburg 2015-08-10 13:40:09 +02:00
parent 27b928f247
commit ea333b3a75
3 changed files with 213 additions and 3 deletions

View File

@ -22,7 +22,7 @@
#
################################################################
###### Version 0.2.0 ############
###### Version 0.2.1 ############
@ -77,7 +77,7 @@ sub AMAD_Define($$) {
InternalTimer(gettimeofday()+$hash->{INTERVAL}, "AMAD_GetUpdateTimer", $hash, 0);
$hash->{STATE} = "active";
$hash->{STATE} = "initialized";
readingsSingleUpdate ($hash,"deviceState","online",0);
return undef;
@ -140,7 +140,7 @@ sub AMAD_GetUpdateTimer($)
my ($hash) = @_;
my $name = $hash->{NAME};
AMAD_RetrieveAutomagicInfo($hash) if (ReadingsVal($name,"deviceState","online") eq "online" && $hash->{STATE} eq "active");
AMAD_RetrieveAutomagicInfo($hash) if (ReadingsVal($name,"deviceState","online") eq "online" && $hash->{STATE} eq "active" || $hash->{STATE} eq "error" || $hash->{STATE} eq "initialized");
InternalTimer(gettimeofday()+$hash->{INTERVAL}, "AMAD_GetUpdateTimer", $hash, 1);
Log3 $name, 4, "AMAD ($name) - Call AMAD_GetUpdateTimer";
@ -239,6 +239,7 @@ sub AMAD_RetrieveAutomagicInfoFinished($$$)
if (defined($err)) {
if ($err ne "")
{
$hash->{STATE} = "error" if ($hash->{STATE} ne "initialized");
Log3 $name, 4, "AMAD ($name) - AMAD_RetrieveAutomagicInfoFinished: error while requesting AutomagicInfo: $err";
return;
}
@ -246,6 +247,7 @@ sub AMAD_RetrieveAutomagicInfoFinished($$$)
if($data eq "" and exists($param->{code}))
{
$hash->{STATE} = "error" if ($hash->{STATE} ne "initialized");
Log3 $name, 4, "AMAD ($name) - AMAD_RetrieveAutomagicInfoFinished: received http code ".$param->{code}." without any data after requesting AMAD AutomagicInfo";
return;
}
@ -267,6 +269,8 @@ sub AMAD_RetrieveAutomagicInfoFinished($$$)
}
readingsEndUpdate($hash, 1);
$hash->{STATE} = "active" if ($hash->{STATE} eq "error" || $hash->{STATE} eq "initialized");
return undef;
}
@ -277,6 +281,17 @@ sub AMAD_HTTP_POST($$)
my $state = $hash->{STATE};
if ($hash->{STATE} eq "initialized")
{
Log3 $name, 4, "AMAD ($name) - AMAD_HTTP_POST: set command only works if STATE active, please wait next interval run";
return;
}
if ($hash->{STATE} eq "error")
{
Log3 $name, 4, "AMAD ($name) - AMAD_HTTP_POST: error while send Set command. Please check IP or PORT";
return;
}
$hash->{STATE} = "Send HTTP POST";
HttpUtils_NonblockingGet(

View File

@ -0,0 +1,98 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<data version="1.28.0">
<trigger type="http_request">
<useDefaultName>true</useDefaultName>
<name>HTTP Request: /automagic/deviceInfo, Port 8089</name>
<enabled>true</enabled>
<path>/automagic/deviceInfo</path>
<port>8089</port>
<acquireWifiLock>true</acquireWifiLock>
</trigger>
<condition type="battery_level">
<useDefaultName>true</useDefaultName>
<name>Akku Ladestand: grösser als 0%</name>
<levelPercentage>0</levelPercentage>
<batteryLevelCondition>HIGHER_THAN</batteryLevelCondition>
</condition>
<action type="write_http_response_text">
<useDefaultName>false</useDefaultName>
<name>HTTP Response</name>
<text>powerLevel {battery_percentage}@@powerPlugged {battery_plugged}@@volumeMusikSpeaker {volumeMusikSpeaker}@@networkCountryIso {network_country_iso}@@voiceMailNumber {voice_mail_number}@@screenBrightness {screenBrightness}@@nextAlarmDay {next_alarmday}@@nextAlarmTime {next_alarmtime}</text>
<replaceVariables>true</replaceVariables>
<contentType>text/html</contentType>
</action>
<action type="init_variable_next_alarm">
<useDefaultName>true</useDefaultName>
<name>Initialisiere Variable Nächster Alarm: Variable next_alarm</name>
<variable>next_alarm</variable>
</action>
<action type="init_variable_system_setting">
<useDefaultName>true</useDefaultName>
<name>Initialisiere Variable Systemeinstellung: System screen_brightness to screenBrightness</name>
<settingCategory>SYSTEM</settingCategory>
<settingName>screen_brightness</settingName>
<variable>screenBrightness</variable>
</action>
<action type="init_variable_system_setting">
<useDefaultName>true</useDefaultName>
<name>Initialisiere Variable Systemeinstellung: System volume_music_speaker to volumeMusikSpeaker</name>
<settingCategory>SYSTEM</settingCategory>
<settingName>volume_music_speaker</settingName>
<variable>volumeMusikSpeaker</variable>
</action>
<action type="init_variables_phone_info">
<useDefaultName>true</useDefaultName>
<name>Initialisiere Variablen Telefoninfo: network_country_iso, voice_mail_number</name>
<isVariableNetworkCountryIso>true</isVariableNetworkCountryIso>
<variableNetworkCountryIso>network_country_iso</variableNetworkCountryIso>
<isVariableVoiceMailNumber>true</isVariableVoiceMailNumber>
<variableVoiceMailNumber>voice_mail_number</variableVoiceMailNumber>
</action>
<action type="sleep">
<useDefaultName>true</useDefaultName>
<name>Pause: 2s (Gerät wach halten)</name>
<duration>2s</duration>
<keepDeviceAwake>true</keepDeviceAwake>
</action>
<action type="script">
<useDefaultName>true</useDefaultName>
<name>Script: next_alarmday = "{next_alarm,dateformat,c}"</name>
<script>next_alarmday = "{next_alarm,dateformat,c}"</script>
</action>
<action type="script">
<useDefaultName>true</useDefaultName>
<name>Script: next_alarmtime = "{next_alarm,dateformat,HH:mm}"</name>
<script>next_alarmtime = "{next_alarm,dateformat,HH:mm}"</script>
</action>
<flow type="flow">
<name>Informationen</name>
<group>FHEM Info / Steuerung über AMAD Modul</group>
<enabled>true</enabled>
<executionPolicy>PARALLEL</executionPolicy>
<conditioncontainer id="t1" x="70.0" y="402.5">Akku Ladestand: grösser als 0%</conditioncontainer>
<actioncontainer id="t2" x="525.0" y="647.5">Initialisiere Variable Nächster Alarm: Variable next_alarm</actioncontainer>
<actioncontainer id="t3" x="70.0" y="1172.5">HTTP Response</actioncontainer>
<actioncontainer id="t4" x="-140.0" y="647.5">Initialisiere Variablen Telefoninfo: network_country_iso, voice_mail_number</actioncontainer>
<actioncontainer id="t5" x="70.0" y="647.5">Initialisiere Variable Systemeinstellung: System volume_music_speaker to volumeMusikSpeaker</actioncontainer>
<actioncontainer id="t6" x="280.0" y="647.5">Initialisiere Variable Systemeinstellung: System screen_brightness to screenBrightness</actioncontainer>
<actioncontainer id="t7" x="420.0" y="857.5">Script: next_alarmtime = "{next_alarm,dateformat,HH:mm}"</actioncontainer>
<actioncontainer id="t8" x="630.0" y="857.5">Script: next_alarmday = "{next_alarm,dateformat,c}"</actioncontainer>
<actioncontainer id="t9" x="69.999954" y="157.5001">Pause: 2s (Gerät wach halten)</actioncontainer>
<triggercontainer id="t10" x="70.00001" y="-87.5">
<trigger>HTTP Request: /automagic/deviceInfo, Port 8089</trigger>
</triggercontainer>
<connection from="t1" to="t5" type="TRUE" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t1" to="t4" type="TRUE" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t1" to="t6" type="TRUE" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t1" to="t2" type="TRUE" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t2" to="t7" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t2" to="t8" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t4" to="t3" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t5" to="t3" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t6" to="t3" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t7" to="t3" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t8" to="t3" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t9" to="t1" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t10" to="t9" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
</flow>
</data>

View File

@ -0,0 +1,97 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<data version="1.28.0">
<trigger type="http_request">
<useDefaultName>true</useDefaultName>
<name>HTTP Request: /automagic/deviceInfo, Port 8089</name>
<enabled>true</enabled>
<path>/automagic/deviceInfo</path>
<port>8089</port>
<acquireWifiLock>true</acquireWifiLock>
</trigger>
<condition type="battery_level">
<useDefaultName>true</useDefaultName>
<name>Akku Ladestand: grösser als 0%</name>
<levelPercentage>0</levelPercentage>
<batteryLevelCondition>HIGHER_THAN</batteryLevelCondition>
</condition>
<action type="write_http_response_text">
<useDefaultName>false</useDefaultName>
<name>HTTP Response</name>
<text>powerLevel {battery_percentage}@@powerPlugged {battery_plugged}@@volumeMusikBluetooth {volumeMusikBluetooth}@@volumeMusikSpeaker {volumeMusikSpeaker}@@screenBrightness {screenBrightness}@@nextAlarmTime {next_alarmtime}@@nextAlarmDay {next_alarmday}</text>
<replaceVariables>true</replaceVariables>
<contentType>text/html</contentType>
</action>
<action type="init_variable_next_alarm">
<useDefaultName>true</useDefaultName>
<name>Initialisiere Variable Nächster Alarm: Variable next_alarm</name>
<variable>next_alarm</variable>
</action>
<action type="init_variable_system_setting">
<useDefaultName>true</useDefaultName>
<name>Initialisiere Variable Systemeinstellung: System screen_brightness to screenBrightness</name>
<settingCategory>SYSTEM</settingCategory>
<settingName>screen_brightness</settingName>
<variable>screenBrightness</variable>
</action>
<action type="init_variable_system_setting">
<useDefaultName>true</useDefaultName>
<name>Initialisiere Variable Systemeinstellung: System volume_music_bt_a2dp to volumeMusikBluetooth</name>
<settingCategory>SYSTEM</settingCategory>
<settingName>volume_music_bt_a2dp</settingName>
<variable>volumeMusikBluetooth</variable>
</action>
<action type="init_variable_system_setting">
<useDefaultName>true</useDefaultName>
<name>Initialisiere Variable Systemeinstellung: System volume_music_speaker to volumeMusikSpeaker</name>
<settingCategory>SYSTEM</settingCategory>
<settingName>volume_music_speaker</settingName>
<variable>volumeMusikSpeaker</variable>
</action>
<action type="sleep">
<useDefaultName>true</useDefaultName>
<name>Pause: 2s (Gerät wach halten)</name>
<duration>2s</duration>
<keepDeviceAwake>true</keepDeviceAwake>
</action>
<action type="script">
<useDefaultName>true</useDefaultName>
<name>Script: next_alarmday = "{next_alarm,dateformat,c}"</name>
<script>next_alarmday = "{next_alarm,dateformat,c}"</script>
</action>
<action type="script">
<useDefaultName>true</useDefaultName>
<name>Script: next_alarmtime = "{next_alarm,dateformat,HH:mm}"</name>
<script>next_alarmtime = "{next_alarm,dateformat,HH:mm}"</script>
</action>
<flow type="flow">
<name>Informationen</name>
<group>FHEM Info / Steuerung über AMAD Modul</group>
<enabled>true</enabled>
<executionPolicy>PARALLEL</executionPolicy>
<conditioncontainer id="t1" x="70.0" y="437.5">Akku Ladestand: grösser als 0%</conditioncontainer>
<actioncontainer id="t2" x="665.0" y="612.5">Initialisiere Variable Nächster Alarm: Variable next_alarm</actioncontainer>
<actioncontainer id="t3" x="-175.0" y="612.5">Initialisiere Variable Systemeinstellung: System volume_music_bt_a2dp to volumeMusikBluetooth</actioncontainer>
<actioncontainer id="t4" x="70.0" y="612.5">Initialisiere Variable Systemeinstellung: System volume_music_speaker to volumeMusikSpeaker</actioncontainer>
<actioncontainer id="t5" x="350.0" y="612.5">Initialisiere Variable Systemeinstellung: System screen_brightness to screenBrightness</actioncontainer>
<actioncontainer id="t6" x="560.0" y="857.5">Script: next_alarmtime = "{next_alarm,dateformat,HH:mm}"</actioncontainer>
<actioncontainer id="t7" x="770.0" y="857.5">Script: next_alarmday = "{next_alarm,dateformat,c}"</actioncontainer>
<actioncontainer id="t8" x="69.99997" y="192.5">Pause: 2s (Gerät wach halten)</actioncontainer>
<triggercontainer id="t9" x="70.0" y="-52.5">
<trigger>HTTP Request: /automagic/deviceInfo, Port 8089</trigger>
</triggercontainer>
<actioncontainer id="t10" x="70.0" y="1207.5">HTTP Response</actioncontainer>
<connection from="t1" to="t3" type="TRUE" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t1" to="t4" type="TRUE" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t1" to="t5" type="TRUE" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t1" to="t2" type="TRUE" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t2" to="t6" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t2" to="t7" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t3" to="t10" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t4" to="t10" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t5" to="t10" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t6" to="t10" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t7" to="t10" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t8" to="t1" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
<connection from="t9" to="t8" type="NORMAL" sourcePosition="SOUTH" targetPosition="NORTH" />
</flow>
</data>