From ec1199f630ceeee905b7e9fe405aad42cf7dfc43 Mon Sep 17 00:00:00 2001
From: StefanStrobel <>
Date: Mon, 12 Aug 2019 19:19:05 +0000
Subject: [PATCH] 98_Arducounter.pm: more bugfixes in firmware and module
git-svn-id: https://svn.fhem.de/fhem/trunk@19991 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/98_ArduCounter.pm | 32 +-
fhem/FHEM/firmware/ArduCounter.hex | 636 +++++++++++------------
fhem/contrib/arduino/ArduCounter3.30.ino | 37 +-
3 files changed, 365 insertions(+), 340 deletions(-)
diff --git a/fhem/FHEM/98_ArduCounter.pm b/fhem/FHEM/98_ArduCounter.pm
index b63a78120..c611efab2 100755
--- a/fhem/FHEM/98_ArduCounter.pm
+++ b/fhem/FHEM/98_ArduCounter.pm
@@ -83,6 +83,8 @@
# 2019-06-17 fix log messages and expose logRetries attribute
# 2019-07-20 add clearLevels, parese more verbose level output at 25v
# 2019-08-10 fix parsing of levels at devVerbose >= 25
+# 2019-08-12 fix documentation of keepalive attributes, add parsing of RSSI,
+# add missing attributes if they don't match the running device config
#
#
# ideas / todo:
@@ -108,7 +110,7 @@ use strict;
use warnings;
use Time::HiRes qw(gettimeofday);
-my $ArduCounter_Version = '6.17 - 10.8.2019';
+my $ArduCounter_Version = '6.18 - 12.8.2019';
my %ArduCounter_sets = (
@@ -530,10 +532,12 @@ sub ArduCounter_KeepAlive($)
RemoveInternalTimer ("alive:$name");
InternalTimer($now+$kto, "ArduCounter_AliveTimeout", "alive:$name", 0);
$hash->{WaitForAlive} = 1;
+ #Log3 $name, 5, "$name: keepAlive timeout timer set $kto";
if ($hash->{TCP}) {
RemoveInternalTimer ("keepAlive:$name");
InternalTimer($now+$kdl, "ArduCounter_KeepAlive", "keepAlive:$name", 0); # next keepalive
+ #Log3 $name, 5, "$name: keepAlive timer for next message set in $kdl";
}
}
@@ -545,10 +549,11 @@ sub ArduCounter_AliveTimeout($)
my $param = shift;
my (undef,$name) = split(/:/,$param);
my $hash = $defs{$name};
+ #Log3 $name, 5, "$name: AliveTimeout called";
delete $hash->{WaitForAlive};
$hash->{KeepAliveRetries} = 0 if (!$hash->{KeepAliveRetries});
- if (++$hash->{KeepAliveRetries} > AttrVal($name, "keepAliveRetries", 1)) {
+ if (++$hash->{KeepAliveRetries} > AttrVal($name, "keepAliveRetries", 2)) {
Log3 $name, 3, "$name: device didn't reply to k(eeepAlive), no retries left, setting device to disconnected";
ArduCounter_Disconnected($hash); # set to Disconnected but let _Ready try to Reopen
} else {
@@ -593,6 +598,9 @@ sub ArduCounter_ConfigureDevice($)
Log3 $name, 5, "$name: ConfigureDevice: comparing intervals (>$iRCfg< vs >$iACfg< from attr)";
if (!$iRCfg || $iRCfg ne $iACfg) {
Log3 $name, 5, "$name: ConfigureDevice: intervals don't match (>$iRCfg< vs >$iACfg< from attr)";
+ if (AttrVal($name, "interval", "none") eq "none") { # set attr if no attr is set and running config doesn't match
+ CommandAttr(undef, "$name interval 30 600 2 2")
+ }
last CHECKS;
}
} else {
@@ -602,12 +610,15 @@ sub ArduCounter_ConfigureDevice($)
my $vAttr = AttrVal($name, "devVerbose", "");
if (!$vAttr) {
$vAttr = 0;
- Log3 $name, 5, "$name: ConfigureDevice: devVerbose attr not set - take default $iAttr";
+ Log3 $name, 5, "$name: ConfigureDevice: devVerbose attr not set - take default $vAttr";
}
my $vRCfg = ($hash->{runningCfg}{V} ? $hash->{runningCfg}{V} : 0);
Log3 $name, 5, "$name: ConfigureDevice: comparing devVerbose $vRCfg vs $vAttr from attr)";
if ($vRCfg != $vAttr) {
Log3 $name, 5, "$name: ConfigureDevice: devVerbose don't match ($vRCfg vs $vAttr from attr)";
+ if (!AttrVal($name, "devVerbose", "none" eq "none")) { # set attr if no attr is set and running config doesn't match
+ CommandAttr(undef, "$name devVerbose 0")
+ }
last CHECKS;
}
@@ -625,8 +636,7 @@ sub ArduCounter_ConfigureDevice($)
}
} else {
Log3 $name, 3, "$name: ConfigureDevice: can not compare against analogThreshold attr - wrong format";
- }
-
+ }
}
Log3 $name, 5, "$name: ConfigureDevice: matches so far - now compare pins";
@@ -666,7 +676,7 @@ sub ArduCounter_ConfigureDevice($)
return;
}
# todo: check for additional pins also when rest matches (return above is too early)
-
+
Log3 $name, 5, "$name: ConfigureDevice: now check for pins without attr in @runningPins";
my %cPins; # get all pins from running config in a hash to find out if one is not defined on fhem side
for (my $i = 0; $i < @runningPins; $i++) {
@@ -1586,10 +1596,16 @@ sub ArduCounter_Parse($)
$retStr .= ($retStr ? "\n" : "") . $line;
Log3 $name, 4, "$name: device sent config for pin $1: $2 $p min $4";
- } elsif ($line =~ /^alive/) { # alive response
+ } elsif ($line =~ /^alive( ?RSSI ([\-\d]+))?/) { # alive response
+ Log3 $name, 5, "$name: device sent alive response: $line";
RemoveInternalTimer ("alive:$name");
$hash->{WaitForAlive} = 0;
delete $hash->{KeepAliveRetries};
+ if ($2) {
+ readingsBeginUpdate($hash);
+ readingsBulkUpdate($hash, "RSSI", $2);
+ readingsEndUpdate($hash, 1);
+ }
} elsif ($line =~ /^ArduCounter V([\d\.]+).*(Started|Hello)/) { # setup message
ArduCounter_ParseHello($hash, $line, $now);
@@ -2074,7 +2090,7 @@ sub ArduCounter_ReadAnswer($$)
defines an interval in which the module sends keepalive messages to a counter device that is conected via tcp.
This attribute is ignored if the device is connected via serial port.
If the device doesn't reply within a defined timeout then the module closes and tries to reopen the connection.
- The module tells the device when to expect the next keepalive message and the device will also close the tcp connection if it doesn't see a keepalive message within the delay multiplied by 2.5
+ The module tells the device when to expect the next keepalive message and the device will also close the tcp connection if it doesn't see a keepalive message within the delay multiplied by 3
The delay defaults to 10 seconds.
Example:
diff --git a/fhem/FHEM/firmware/ArduCounter.hex b/fhem/FHEM/firmware/ArduCounter.hex
index ee9c5f0b2..63eb963b1 100755
--- a/fhem/FHEM/firmware/ArduCounter.hex
+++ b/fhem/FHEM/firmware/ArduCounter.hex
@@ -4,19 +4,19 @@
:100030000C9468020C9468020C9468020C94680298
:100040000C9472110C9468020C94F6030C94D00377
:100050000C9468020C9468020C9468020C94680278
-:100060000C9468020C9468028013BF15BF1592139C
-:10007000F113BF15BF15AB14AE14BF15C014BF15D7
-:10008000BF15BF15BF15BF15BF15DC14DF1448150C
-:10009000BF155A1587154D20726573746F72696E9E
+:100060000C9468020C9468028013FC15FC15921322
+:10007000F113FC15FC15AB14AE14FC15C014FC15E3
+:10008000FC15FC15FC15FC15FC15DD14E014911590
+:10009000FC15A315C4154D20726573746F72696EDB
:1000A0006720636F6E6669672066726F6D204545D5
:1000B00050524F4D004D20696C6C6567616C206338
:1000C0006F6E66696720696E20454550524F4D003E
:1000D0004D206E6F20636F6E66696720696E2045E4
:1000E0004550524F4D004572726F723A2000417573
-:1000F0006720313220323031392031393A33343AC5
-:1001000030370020636F6D70696C656420004E416C
+:1000F0006720313220323031392032313A31363ACC
+:1001000033360020636F6D70696C656420004E416A
:100110004E4F00206F6E200041726475436F756E04
-:100120007465722056332E333300200020002000E7
+:100120007465722056332E333400200020002000E6
:10013000490020005400206D696E20002070756C0D
:100140006C757000202D002066616C6C696E670014
:1001500020726973696E6700500040002F007300C1
@@ -71,10 +71,10 @@
:10046000030303496C6C6567616C2070696E2073CF
:10047000706563696669636174696F6E2000BC11A1
:1004800011241FBECFEFD8E0DEBFCDBF11E0A0E04A
-:10049000B1E0E8E3FAE302C005900D92AA3AB10791
+:10049000B1E0EAE3FAE302C005900D92AA3AB1078F
:1004A000D9F726E0AAEAB1E001C01D92A23AB2074C
:1004B000E1F712E0C0E4D2E004C02197FE010E94FF
-:1004C000021ACF33D107C9F70E94E9110C941A1D03
+:1004C000031ACF33D107C9F70E94E9110C941B1D01
:1004D0000C940000CF92DF92EF92FF920F931F9344
:1004E000CF93DF936C017A018B01C0E0D0E0CE1591
:1004F000DF0581F0D8016D918D01D601ED91FC9160
@@ -131,9 +131,9 @@
:1008200020918B05821751F0E0918A05F0E0EF5896
:10083000FA4F958F80938A0501C08081FF91EF91D7
:100840009F918F912F910F900FBE0F901F90189531
-:100850000C94B619FF920F931F93CF93DF93EC0183
+:100850000C94B719FF920F931F93CF93DF93EC0182
:10086000F62E08811981C8010E9428048F1521F0F5
-:100870006F2DC8010E94BE198881998101969983C4
+:100870006F2DC8010E94BF198881998101969983C3
:100880008883DF91CF911F910F91FF900895AF92D0
:10089000BF92CF92DF92EF92FF920F931F93CF936D
:1008A000DF93EC015A0169010E942A046A2DCE01EE
@@ -208,7 +208,7 @@
:100CF000DC016C9180919706909198060E94430EBA
:100D000081149104A104B104C1F067E671E08091FF
:100D10009706909198060E9481036B897C898D8942
-:100D20009E89A50194010E94E019BA01A901809150
+:100D20009E89A50194010E94E119BA01A90180914F
:100D30009706909198060E94E00D809197069091F9
:100D400098066A960FB6F894DEBF0FBECDBFDF914E
:100D5000CF911F910F91FF90EF90DF90CF90BF90B8
@@ -220,8 +220,8 @@
:100DB0006F927F928F929F92AF92BF92CF92DF926B
:100DC000EF92FF920F931F93CF93DF9300D000D049
:100DD000CDB7DEB71C012A013B018091110590E0DF
-:100DE000029664E170E00E94CC19FC0120E030E042
-:100DF00040E0CF01820F931F64E170E00E94CC19A4
+:100DE000029664E170E00E94CD19FC0120E030E041
+:100DF00040E0CF01820F931F64E170E00E94CD19A3
:100E0000DC01A65EBC4F8C9190E08215930509F43D
:100E10004F5F2F5F3F4F2431310559F7442309F4C9
:100E2000F7C0FA83E98365E671E0809197069091B7
@@ -229,7 +229,7 @@
:100E40006081718180919706909198060E94FB0DB8
:100E500063E671E080919706909198060E94810365
:100E6000E12CF12C21E089819A818E0D9F1D64E196
-:100E700070E00E94CC198C01FC01E65EFC4F808181
+:100E700070E00E94CD198C01FC01E65EFC4F808180
:100E800090E02816390609F09FC0C801880F991F05
:100E9000880F991F9C838B83211121C0FC01E6538D
:100EA000FD4F80819181A281B381EB81FC81E65865
@@ -276,14 +276,14 @@
:10113000CF92DF92EF92FF9260E371E08091970689
:10114000909198060E9481036091100170911101A5
:10115000809112019091130128EEC22E23E0D22E2D
-:10116000E12CF12CA70196010E94E019BA01A90116
+:10116000E12CF12CA70196010E94E119BA01A90115
:1011700080919706909198060E94E00D6EE271E0D2
:1011800080919706909198060E94810360910C01CE
:1011900070910D0180910E0190910F01A7019601B0
-:1011A0000E94E019BA01A9018091970690919806D2
+:1011A0000E94E119BA01A9018091970690919806D1
:1011B0000E94E00D6CE271E0809197069091980694
:1011C0000E948103609108017091090180910A01D8
-:1011D00090910B01A70196010E94E019BA01A901A3
+:1011D00090910B01A70196010E94E119BA01A901A2
:1011E00080919706909198060E94E00D6AE271E066
:1011F00080919706909198060E9481036091060164
:10120000709107018091970690919806FF90EF905A
@@ -427,12 +427,12 @@
:101AA00050101F5FF1129DCF1092A00410929F045E
:101AB00010929E04E8E1F6E088E296E0119211921D
:101AC0008E179F07D9F7DF91CF911F910F91FF904C
-:101AD000EF90DF90CF9008950E942B1A8F929F92E3
+:101AD000EF90DF90CF9008950E942C1A8F929F92E2
:101AE000AF92BF92EF92FF920F931F93CF93DF932A
:101AF000CDB7DEB7A1970FB6F894DEBF0FBECDBF4E
:101B00007C01FA01CB0119A2223008F42AE08E01EF
:101B10000F5D1F4F822E912CA12CB12CBF01A5016E
-:101B200094010E94E019F901CA01015011096A30BB
+:101B200094010E94E119F901CA01015011096A30BA
:101B300014F4605D01C0695CD8016C93232B242BE5
:101B4000252B61F7B801C7010E94A503A1960FB626
:101B5000F894DEBF0FBECDBFDF91CF911F910F91E3
@@ -462,14 +462,14 @@
:101CD0000E9481036C2F8091970690919806CF9176
:101CE0000C944A0E2091180630911906C9010197EB
:101CF00080319E4038F00E94060A6091180670916B
-:101D0000190693C0A8EEB3E00E94081A6093100170
+:101D0000190693C0A8EEB3E00E94091A609310016F
:101D100070931101809312019093130120911A0680
:101D200030911B06C901019780319E4038F00E9416
:101D3000060A60911A0670911B0677C0A8EEB3E000
-:101D40000E94081A60930C0170930D0180930E019C
+:101D40000E94091A60930C0170930D0180930E019B
:101D500090930F0120911C0630911D0621318EE0D9
:101D6000380738F00E94060A60911C0670911D0623
-:101D70005CC0A8EEB3E00E94081A6093080170935B
+:101D70005CC0A8EEB3E00E94091A6093080170935A
:101D8000090180930A0190930B0180911E069091A6
:101D90001F068536910518F00E94060A42C09093EE
:101DA0000701809306016DEB73E080919706909197
@@ -602,14 +602,14 @@
:1025900050F420919C0430919D042F5F3F4F309365
:1025A0009D0420939C0460930E0670930F06809305
:1025B00010069093110681E795E00E94C902892BCD
-:1025C00009F4EBC281E795E00E94A702D82E9CE2B5
-:1025D000D91219C0E091A004E73008F0DEC281E012
+:1025C00009F428C381E795E00E94A702D82E9CE277
+:1025D000D91219C0E091A004E73008F01BC381E0D4
:1025E0008E0F8093A004F0E0EE0FFF1FE85EF94F1E
:1025F00080919E0490919F049183808310929F0408
-:1026000010929E04CAC280ED8D0D8A30A0F42091F4
+:1026000010929E0407C380ED8D0D8A30A0F42091B6
:102610009E0430919F04EAE0E29FC001E39F900D89
:102620001124C0978D0D911DD7FC9A9590939F040E
-:1026300080939E04B2C28FE98D0D8A3108F0ADC23D
+:1026300080939E04EFC28FE98D0D8A3108F0EAC2C3
:1026400080917005882309F44BC0E091A004F0E06C
:10265000EE0FFF1FE85EF94F80919E0490919F045A
:10266000918380836FEB72E081E795E00E948103A4
@@ -621,32 +621,32 @@
:1026C00095E00E9481036091A00470E06F5F7F4FEE
:1026D00081E795E00E94FB0D81E795E00E94BA0337
:1026E0008D2DDD0C990BAA0BBB0BFC01E156F109FA
-:1026F000E731F10508F043C2EC5CFF4F0C94021A7D
+:1026F000E731F10508F080C2EC5CFF4F0C94031A3F
:102700008091A004E82FF0E0EE0FFF1FE85EF94F84
:1027100020919E0430919F04318320838F5F0E941B
-:1027200050102DC28091A004E82FF0E0EE0FFF1FA3
+:1027200050106AC28091A004E82FF0E0EE0FFF1F66
:10273000E85EF94F20919E0430919F0431832083FD
:1027400000911806109119068F3F61F0063150F480
:10275000F801FF27EE0FFF1FE859FE4F808191819E
-:1027600097FF05C00E94060A6BE972E0D0C4992762
-:10277000FC01EE5CFE4F20812111C2C4FC01EE0F72
+:1027600097FF05C00E94060A6BE972E00DC5992724
+:10277000FC01EE5CFE4F20812111FFC4FC01EE0F35
:10278000FF1FEC5BFE4F208131813327F901EC50B4
:10279000FC4F4491F901E15BFB4F2491222309F4A2
-:1027A000A4C42250E22FF0E0EE0FFF1FE45DFE4FC5
+:1027A000E1C42250E22FF0E0EE0FFF1FE45DFE4F88
:1027B000A081B1813C91409543234C933C913111D0
-:1027C0009FC46091680041E050E04A0102C0880C5B
+:1027C000DCC46091680041E050E04A0102C0880C1E
:1027D000991C2A95E2F794012095262320936800FE
-:1027E0008FC41A82198263E4C3010E942A0466E638
+:1027E000CCC41A82198263E4C3010E942A0466E6FB
:1027F000C3010E942A0467E6C3010E942A04B3E7CA
:10280000CB2EB6E0DB2EF60181E02191319137FF2E
:102810008F5FA7E9AA2EA6E0BA2EAE16BF06A9F7CB
:102820008F5F8D8B682FC3010E942A04E090060100
:10283000F0900701609108017091090180910A01EF
-:1028400090910B0128EE33E040E050E00E94E01947
+:1028400090910B0128EE33E040E050E00E94E11946
:1028500019012A0160910C0170910D0180910E0106
-:1028600090910F0128EE33E040E050E00E94E01923
+:1028600090910F0128EE33E040E050E00E94E11922
:1028700049015A016091100170911101809112017A
-:102880009091130128EE33E040E050E00E94E019FF
+:102880009091130128EE33E040E050E00E94E119FE
:10289000BA01A9018101940169E4C3010E944704BE
:1028A00020910201309103014091040150910501F2
:1028B000E12CF12C00E010E064E5C3010E94470424
@@ -659,286 +659,286 @@
:1029200026E0D206C9F66AE772E081E795E00E94E8
:1029300081036D8981E795E00E94430E67E772E0AD
:1029400081E795E00E94810369817A8181E795E0C2
-:102950000E94310E14C10E943F0911C18091A00450
+:102950000E94310E51C10E943F094EC18091A004D6
:10296000E82FF0E0EE0FFF1FE85EF94F20919E0484
-:1029700030919F04318320838F5F0E945C0EFFC0E3
-:102980008091A004E82FF0E0EE0FFF1FE85EF94F02
-:1029900020919E0430919F0431832083209118065A
-:1029A000309119062130310509F0E9C08F3F09F453
-:1029B000E6C061E772E09DC30E946C0CE0C00E941B
-:1029C00044104B015C0166E672E08091970690919D
-:1029D00098060E9481030E940C09809197069091AD
-:1029E00098060E94BA030E9498080E94740864E640
-:1029F00072E080919706909198060E948103609101
-:102A0000700580919706909198060E944A0E43E7C0
-:102A1000E42E46E0F42E00E010E0F7018191919160
-:102A20007F0197FD16C0C8010E941F0861E672E091
-:102A300080919706909198060E948103A5019401C8
-:102A400061E0C8010E948004B501A401C8010E9490
-:102A5000D4060F5F1F4F02311105F9F680E090E0B8
-:102A60000E9428040091970610919806833409F07B
-:102A700049C481E090E00E942804863609F042C4EF
-:102A800082E090E00E942804873609F03BC44DC3E1
-:102A90008091A004E82FF0E0EE0FFF1FE85EF94FF1
-:102AA00020919E0430919F04318320838F5F0E9488
-:102AB0001C0F65C08091A004E82FF0E0EE0FFF1F0F
-:102AC000E85EF94F20919E0430919F04318320836A
-:102AD0008F3F89F40E94060A6AEC71E080919706A4
-:102AE000909198060E948103809197069091980694
-:102AF0000E94BA0344C0809118069091190683334E
-:102B0000910520F5809370056FEC71E028C08091ED
-:102B1000A004E82FF0E0EE0FFF1FE85EF94F2091D0
-:102B20009E0430919F04318320838F3F29F40E94BB
-:102B3000060A69EA71E0D2CF8091180690911906D1
-:102B40009C0121503109273E334018F00E94060AAB
-:102B50000CC090930101809300016EEA71E08091B6
-:102B60009706909198060E948103609118067091D3
-:102B7000190680919706909198060E94E90D10928F
-:102B8000A00410929F0410929E04E8E1F6E01192D6
-:102B9000119216E0E832F107D1F7809195069091F5
-:102BA000960697FD7BC10E9444106B017C01209129
-:102BB0000001309101018091A1049091A204A091A3
-:102BC000A304B091A404B701A601481B590B6A0BDA
-:102BD0007B0BC901A0E0B0E084179507A607B707F3
-:102BE00008F05CC190911706923001F128F4992306
-:102BF00049F0913069F048C1943051F108F19530B5
-:102C0000A9F142C160E082E00E94B40F81E00BC0F4
-:102C1000C9010296A0E0B0E0481759076A077B0790
-:102C200008F43CC182E08093170638C10E94780FF7
-:102C3000909316068093150623E0209317062EC165
-:102C400061E082E00E94B40F34E03093170626C1A1
-:102C5000C9010496A0E0B0E0481759076A077B074E
-:102C600008F41CC145E04093170618C10E94780F74
-:102C7000909314068093130610921706C092A10435
-:102C8000D092A204E092A304F092A404209115062D
-:102C900030911606821B930B2091020130910301A3
-:102CA0002817390754F0209104013091050182174B
-:102CB00093070CF0A0C010E001C011E08091120653
-:102CC000811709F498C010931206612F8CE00E94BE
-:102CD000B40F0E9444109B01AC01612F81E10E945E
-:102CE0000E0A809170058A3008F485C062E073E0B6
-:102CF00080919706909198060E94810365E170E0AB
-:102D000080919706909198060E94FB0D69EF72E002
-:102D100080919706909198060E94810361E170E08E
-:102D200080919706909198060E94FB0D6DEE72E0DF
-:102D300080919706909198060E94810365E170E06A
-:102D400080919706909198060E94FB0D69EE72E0C3
-:102D500080919706909198060E94810364EE72E03C
-:102D600080919706909198060E948103612F80912F
-:102D70009706909198060E94430E69ED72E080914B
-:102D80009706909198060E948103609111058091A9
-:102D90009706909198060E94430E60ED72E0809134
-:102DA0009706909198060E94810340910D055091DD
-:102DB0000E0560910F057091100580919706909116
-:102DC00098060E94E00D66EC72E080919706909163
-:102DD00098060E9481036091C7047091C804809195
-:102DE0009706909198060E94E30D80919706909126
-:102DF00098060E94BA0380917005893150F1809144
-:102E00001306909114062091150630911606AC0118
-:102E1000421B530B5F934F933F932F939F938F933B
-:102E200087E991E09F938F937F926F920E94301A6F
-:102E30000091970610919806B301C8010E94A5035E
-:102E4000C8010E94BA030FB6F894DEBF0FBECDBF13
-:102E500025C0843118F16AE273E080919706909161
-:102E600098060E9481036091130670911406809168
-:102E7000150690911606681B790B80919706909124
-:102E800098060E94310E0AC01092170669E073E09E
-:102E900080919706909198060E94BE0380917005DC
-:102EA0008A3060F50E94441000916C0510916D0508
-:102EB00020916E0530916F054B015C01801A910ADB
-:102EC000A20AB30AC0901001D0901101E090120143
-:102ED000F0901301C814D904EA04FB0408F4D6C026
-:102EE000C0900C01D0900D01E0900E01F0900F0108
-:102EF000E3E7F6E0A4E2B5E040E0C1C053E7A52E69
-:102F000056E0B52E62E1E62E65E0F62E74E4C72E9B
-:102F100071E0D72E00E010E0F501819091905F0103
-:102F2000181419040CF085C0F6014080842D0E940D
-:102F30008B0F582EF7018081581609F47AC0508201
-:102F400065E673E080919706909198060E94810350
-:102F5000B40180919706909198060E94FB0D69E557
-:102F600073E080919706909198060E948103642DEA
-:102F700080919706909198060E94430E67E573E052
-:102F800080919706909198060E9481036AE473E00D
-:102F900080919706909198060E948103652D8091FB
-:102FA0009706909198060E94430E6FE373E080911C
-:102FB0009706909198060E94810360911105809177
-:102FC0009706909198060E94430E66E373E0809105
-:102FD0009706909198060E948103F801EE0FFF1F5B
-:102FE000EE0FFF1FE753FB4F4081518162817381D8
-:102FF00080919706909198060E94E00D6CE273E034
-:1030000080919706909198060E948103F801EE0F37
-:10301000FF1FEB55FB4F6081718180919706909166
-:1030200098060E94E30D80919706909198060E9461
-:10303000BA030F5F1F4FFFEFEF1AFF0A22E0C20E25
-:10304000D11C0231110509F067CF2CCF0D911D91D4
-:103050002D913C9113974B015C01801A910AA20AB1
-:10306000B30AC814D904EA04FB0408F441E0149636
-:1030700027E9A22E26E0B22EAE16BF0629F0219136
-:10308000319137FDF4CFE2CF442361F10E94441027
-:103090004B015C0183E7E82E86E0F82E00E010E0AB
-:1030A000F701819191917F0197FD0FC0A5019401D6
-:1030B00060E0C8010E94800480917005853028F08E
-:1030C000B501A401C8010E94D4060F5F1F4F023151
-:1030D000110531F780926C0590926D05A0926E05F6
-:1030E000B0926F050E94700345CA0E94060A64E907
-:1030F00072E080919706909198060E94BE033FCDA2
-:1031000040E050E0BA010E94FD0B69E872E0809156
-:103110009706909198060E948103602F80919706F0
-:10312000909198060E944A0E2ACD83E090E00E947A
-:103130002804482EF4E1F81718F460E172E0E4C0C6
-:10314000C8010E94BA036EEF71E0809197069091DA
-:1031500098060E94810380E090E00E942804682F76
-:1031600080919706909198060E947A0381E090E002
-:103170000E942804682F80919706909198060E94DB
-:103180007A0382E090E00E942804682F80919706DD
-:10319000909198060E947A0365EF71E080919706FE
-:1031A000909198060E94810383E090E00E94280499
-:1031B000682F70E080919706909198060E94FB0D11
-:1031C00080919706909198060E94BA03512C04E0D2
-:1031D00010E0451409F49BC0C8010E942804382E51
-:1031E000C80101960E942804F82EC80102960E9488
-:1031F0002804882E912C982C88248F0C911CC801AF
-:1032000003960E942804F82EC80104960E94280400
-:10321000A82EB12CBA2CAA24AF0CB11CC80105965B
-:103220000E942804F82EC80106960E942804C82E81
-:10323000D12CDC2CCC24CF0CD11CC80107960E94C9
-:103240002804F82EC80108960E94280490E0982FC0
-:1032500088279C012F0D311D7901075F1F4F6CEEF0
-:1032600071E080919706909198060E948103632DEA
-:1032700080919706909198060E947A036AEE71E019
-:1032800080919706909198060E948103B4018091E5
-:103290009706909198060E94E30D68EE71E0809188
-:1032A0009706909198060E948103B5018091970638
-:1032B000909198060E94E30D66EE71E0809197066A
-:1032C000909198060E948103B60180919706909193
-:1032D00098060E94E30D64EE71E08091970690914C
-:1032E00098060E948103B7018091970690919806F5
-:1032F0000E94E30D80919706909198060E94BA0370
-:10330000539467CF6BE272E0C8010E94BE036FE482
-:1033100072E080919706909198060E948103C09078
-:103320006C05D0906D05E0906E05F0906F05809172
-:10333000100190911101A0911201B0911301C80EDA
-:10334000D91EEA1EFB1E0E94441046015701861A30
-:10335000970AA80AB90AB501A4018091970690912D
-:1033600098060E94E00D61E472E0B8CBF999FECFB7
-:1033700092BD81BDF89A992780B50895262FF999B5
-:10338000FECF1FBA92BD81BD20BD0FB6F894FA9A48
-:10339000F99A0FBE0196089597FB072E16F4009434
-:1033A00007D077FD09D00E94171A07FC05D03EF41C
-:1033B000909581959F4F0895709561957F4F0895E1
-:1033C000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F29
-:1033D000EE1FFF1FA217B307E407F50720F0A21B9B
-:1033E000B30BE40BF50B661F771F881F991F1A9408
-:1033F00069F760957095809590959B01AC01BD0132
-:10340000CF010895EE0FFF1F0590F491E02D099470
-:10341000A29FB001B39FC001A39F700D811D112415
-:10342000911DB29F700D811D1124911D0895AA1B3D
-:10343000BB1B51E107C0AA1FBB1FA617B70710F09F
-:10344000A61BB70B881F991F5A95A9F780959095D1
-:10345000BC01CD01089581E090E0F8940C941A1D10
-:10346000AEE0B0E0E6E3FAE10C94F11C0D891E89B0
-:1034700086E08C831A8309838FEF9FE79E838D8379
-:10348000AE01475E5F4F6F89788DCE0101960E9435
-:10349000521AEF81F885E00FF11F10822E96E4E0BA
-:1034A0000C940D1DABE0B0E0E8E5FAE10C94E31CF0
-:1034B0006C017B018A01FC0117821682838181FFE6
-:1034C000CCC1CE0101963C01F6019381F70193FD39
-:1034D000859193FF81917F01882309F4BAC18532D8
-:1034E00039F493FD859193FF81917F01853229F411
-:1034F000B60190E00E94491CE7CF912C212C312C81
-:10350000FFE1F315D8F08B3279F038F4803279F09E
-:103510008332A1F4232D20611DC08D3261F08033F0
-:1035200069F4232D216016C0832D8260382EE32D8F
-:10353000E4603E2E2AC0F32DF8601DC037FC2DC07C
-:1035400020ED280F2A3040F08E32B9F436FC81C1CC
-:10355000232D2064322E19C036FE06C08AE0989EC4
-:10356000200D1124922E11C0EAE02E9E200D112470
-:10357000222EF32DF0623F2E08C08C3621F4832DCD
-:103580008068382E02C0883641F4F70193FD85919A
-:1035900093FF81917F018111B3CF982F9F7D955427
-:1035A000933028F40C5F1F4F9FE399830DC083363F
-:1035B00031F0833771F0833509F059C021C0F8012B
-:1035C000808189830E5F1F4F88248394912C53013F
-:1035D00013C02801F2E04F0E511CF801A080B18009
-:1035E00036FE03C0692D70E002C06FEF7FEFC501AA
-:1035F0000E943E1C4C018201F32DFF773F2E16C026
-:10360000280122E0420E511CF801A080B18036FE54
-:1036100003C0692D70E002C06FEF7FEFC5010E940B
-:10362000331C4C01F32DF0683F2E820133FC1BC08C
-:10363000822D90E088169906B0F4B60180E290E001
-:103640000E94491C2A94F4CFF50137FC859137FE7E
-:1036500081915F01B60190E00E94491C21102A94DB
-:1036600021E0821A91088114910471F7E8C0843630
-:1036700011F0893641F5F80137FE07C0608171818C
-:10368000828193810C5F1F4F08C060817181072E7A
-:10369000000C880B990B0E5F1F4FF32DFF763F2E0A
-:1036A00097FF09C090958095709561957F4F8F4FDA
-:1036B0009F4FF0683F2E2AE030E0A3010E94851C56
-:1036C000882E861845C0853731F4232D2F7EB22EE3
-:1036D0002AE030E025C0932D997FB92E8F36C1F0B6
-:1036E00018F4883579F0B5C0803719F0883721F0A3
-:1036F000B0C0E92FE061BE2EB4FE0DC0FB2DF4601A
-:10370000BF2E09C034FE0AC0292F2660B22E06C083
-:1037100028E030E005C020E130E002C020E132E0E6
-:10372000F801B7FE07C060817181828193810C5FCF
-:103730001F4F06C06081718180E090E00E5F1F4FD7
-:10374000A3010E94851C882E8618FB2DFF773F2E33
-:1037500036FE0DC0232D2E7FA22E891458F434FE80
-:103760000BC032FC09C0832D8E7EA82E05C0B82C5C
-:10377000A32C03C0B82C01C0B92CA4FE0FC0FE01BD
-:10378000E80DF11D8081803321F49A2D997EA92EB8
-:1037900009C0A2FE06C0B394B39404C08A2D8678F3
-:1037A00009F0B394A3FC11C0A0FE06C0B21488F4C3
-:1037B000280C922C9B180EC0B21460F4B60180E263
-:1037C00090E00E94491CB394F7CFB21418F42B1860
-:1037D00002C0982C212CA4FE10C0B60180E390E01A
-:1037E0000E94491CA2FE17C0A1FC03C088E790E01C
-:1037F00002C088E590E0B6010CC08A2D867859F0A9
-:10380000A1FE02C08BE201C080E2A7FC8DE2B601FE
-:1038100090E00E94491C891438F4B60180E390E0DE
-:103820000E94491C9A94F7CF8A94F301E80DF11D88
-:103830008081B60190E00E94491C8110F5CF2220C2
-:1038400009F442CEB60180E290E00E94491C2A941D
-:10385000F6CFF6018681978102C08FEF9FEF2B96FE
-:10386000E2E10C94FF1CFC010590615070400110D6
-:10387000D8F7809590958E0F9F1F0895FC01615099
-:10388000704001900110D8F7809590958E0F9F1F82
-:1038900008950F931F93CF93DF93FB01238121FDA5
-:1038A00003C08FEF9FEF2CC022FF16C046815781C7
-:1038B000248135814217530744F4A081B1819D01D1
-:1038C0002F5F3F4F318320838C93268137812F5F79
-:1038D0003F4F3783268314C08B01EC01FB0100842A
-:1038E000F185E02D0995892BE1F6D80116968D9189
-:1038F0009C911797019617969C938E931697CE01DD
-:10390000DF91CF911F910F910895FA01AA272830D6
-:1039100051F1203181F1E8946F936E7F6E5F7F4F9C
-:103920008F4F9F4FAF4FB1E03ED0B4E03CD0670F18
-:10393000781F891F9A1FA11D680F791F8A1F911D6B
-:10394000A11D6A0F711D811D911DA11D20D009F4BB
-:1039500068943F912AE0269F11243019305D3193FD
-:10396000DEF6CF010895462F4770405D4193B3E0E6
-:103970000FD0C9F7F6CF462F4F70405D4A3318F08D
-:10398000495D31FD4052419302D0A9F7EACFB4E03E
-:10399000A6959795879577956795BA95C9F70097F6
-:1039A0006105710508959B01AC010A2E0694579597
-:1039B000479537952795BA95C9F7620F731F841FEE
-:1039C000951FA01D08952F923F924F925F926F9284
-:1039D0007F928F929F92AF92BF92CF92DF92EF929F
-:1039E000FF920F931F93CF93DF93CDB7DEB7CA1B20
-:1039F000DB0B0FB6F894DEBF0FBECDBF09942A884B
-:103A0000398848885F846E847D848C849B84AA84F2
-:103A1000B984C884DF80EE80FD800C811B81AA817F
-:103A2000B981CE0FD11D0FB6F894DEBF0FBECDBF4A
-:083A3000ED010895F894FFCFA9
-:103A380014006E0064000200D007000060EA000075
-:103A4800307500000D1307080E0000000000010388
-:103A58006A0298024E03C902A702BB026B006C00FF
-:103A68006D000000000000000000000000000000E1
-:103A7800000000010300040005000600070008001C
-:103A880009000A000B000C000E000F0010001100C6
-:103A98001200130014001500FFFFFFFFFFFF0000D6
-:103AA80001000200030004000500060007000800EA
-:103AB800FFFF09000A000B000C000D000E000F00AC
-:103AC800100011000D0A004C2534642C20253464A4
-:0A3AD800202D3E202520346400005C
+:1029700030919F04318320838F5F0E945C0E3CC1A5
+:102980001091A004E12FF0E0EE0FFF1FE85EF94F79
+:1029900080919E0490919F04918380830E944410B3
+:1029A0008091180690911906019709F025C11F3FE3
+:1029B00009F422C161E772E0A7C00E946C0C1CC13F
+:1029C0000E9444104B015C0166E672E0809197061C
+:1029D000909198060E9481030E940C0980919706AD
+:1029E000909198060E94BA030E9498080E94740869
+:1029F00064E672E080919706909198060E948103A8
+:102A00006091700580919706909198060E944A0EF9
+:102A100043E7E42E46E0F42E00E010E0F701819158
+:102A200091917F0197FD16C0C8010E941F0861E6C1
+:102A300072E080919706909198060E948103A5010B
+:102A4000940161E0C8010E948004B501A401C8019D
+:102A50000E94D4060F5F1F4F02311105F9F680E086
+:102A600090E00E9428040091970610919806833404
+:102A700009F07AC481E090E00E942804863609F0CB
+:102A800073C482E090E00E942804873609F06CC489
+:102A900083E090E00E942804482EF4E1F81708F043
+:102AA00081C360E172E0C8010E94BE036FE472E07E
+:102AB00080919706909198060E948103C0906C05C2
+:102AC000D0906D05E0906E05F0906F05809110013B
+:102AD00090911101A0911201B0911301C80ED91E5D
+:102AE000EA1EFB1E0E94441046015701861A970AEF
+:102AF000A80AB90AB501A401809197069091980699
+:102B00000E94E00D61E472E0809197069091980632
+:102B10000E94810380919706909198060E94BA03C3
+:102B20006BC08091A004E82FF0E0EE0FFF1FE85E7D
+:102B3000F94F20919E0430919F04318320838F5F51
+:102B40000E941C0F59C08091A004E82FF0E0EE0F06
+:102B5000FF1FE85EF94F20919E0430919F0431835E
+:102B600020838F3F29F40E94060A6AEC71E0CCCFE3
+:102B700080911806909119068333910520F5809372
+:102B800070056FEC71E028C08091A004E82FF0E0A0
+:102B9000EE0FFF1FE85EF94F20919E0430919F04D5
+:102BA000318320838F3F29F40E94060A69EA71E08D
+:102BB000ABCF80911806909119069C0121503109E4
+:102BC000273E334018F00E94060A0CC09093010182
+:102BD000809300016EEA71E08091970690919806CB
+:102BE0000E948103609118067091190680919706E2
+:102BF000909198060E94E90D1092A00410929F04F3
+:102C000010929E04E8E1F6E01192119216E0E8328B
+:102C1000F107D1F7809195069091960697FD7BC1BB
+:102C20000E9444106B017C01209100013091010150
+:102C30008091A1049091A204A091A304B091A40456
+:102C4000B701A601481B590B6A0B7B0BC901A0E019
+:102C5000B0E084179507A607B70708F05CC190910C
+:102C60001706923001F128F4992349F0913069F068
+:102C700048C1943051F108F19530A9F142C160E0AA
+:102C800082E00E94B40F81E00BC0C9010296A0E06F
+:102C9000B0E0481759076A077B0708F43CC182E097
+:102CA0008093170638C10E94780F90931606809380
+:102CB000150623E0209317062EC161E082E00E94F2
+:102CC000B40F34E03093170626C1C9010496A0E082
+:102CD000B0E0481759076A077B0708F41CC145E0B4
+:102CE0004093170618C10E94780F909314068093A2
+:102CF000130610921706C092A104D092A204E0928B
+:102D0000A304F092A4042091150630911606821BAC
+:102D1000930B20910201309103012817390754F0D9
+:102D20002091040130910501821793070CF0A0C097
+:102D300010E001C011E080911206811709F498C0DB
+:102D400010931206612F8CE00E94B40F0E94441071
+:102D50009B01AC01612F81E10E940E0A80917005F8
+:102D60008A3008F485C062E073E080919706909104
+:102D700098060E94810365E170E08091970690912A
+:102D800098060E94FB0D69EF72E080919706909182
+:102D900098060E94810361E170E08091970690910E
+:102DA00098060E94FB0D6DEE72E08091970690915F
+:102DB00098060E94810365E170E0809197069091EA
+:102DC00098060E94FB0D69EE72E080919706909143
+:102DD00098060E94810364EE72E0809197069091BC
+:102DE00098060E948103612F809197069091980622
+:102DF0000E94430E69ED72E08091970690919806CB
+:102E00000E94810360911105809197069091980628
+:102E10000E94430E60ED72E08091970690919806B3
+:102E20000E94810340910D0550910E0560910F05A0
+:102E30007091100580919706909198060E94E00D80
+:102E400066EC72E080919706909198060E9481034B
+:102E50006091C7047091C80480919706909198067C
+:102E60000E94E30D80919706909198060E94BA0304
+:102E700080917005893150F180911306909114066C
+:102E80002091150630911606AC01421B530B5F933F
+:102E90004F933F932F939F938F9387E991E09F9355
+:102EA0008F937F926F920E94311A00919706109132
+:102EB0009806B301C8010E94A503C8010E94BA0385
+:102EC0000FB6F894DEBF0FBECDBF25C0843118F118
+:102ED0006AE273E080919706909198060E948103C0
+:102EE0006091130670911406809115069091160654
+:102EF000681B790B80919706909198060E94310E7D
+:102F00000AC01092170669E073E0809197069091CD
+:102F100098060E94BE03809170058A3060F50E9479
+:102F2000441000916C0510916D0520916E05309153
+:102F30006F054B015C01801A910AA20AB30AC09086
+:102F40001001D0901101E0901201F0901301C8140B
+:102F5000D904EA04FB0408F4D6C0C0900C01D09058
+:102F60000D01E0900E01F0900F01E3E7F6E0A4E21E
+:102F7000B5E040E0C1C053E7A52E56E0B52E62E1B2
+:102F8000E62E65E0F62E74E4C72E71E0D72E00E041
+:102F900010E0F501819091905F01181419040CF074
+:102FA00085C0F6014080842D0E948B0F582EF701BA
+:102FB0008081581609F47AC0508265E673E08091EA
+:102FC0009706909198060E948103B401809197061C
+:102FD000909198060E94FB0D69E573E08091970639
+:102FE000909198060E948103642D8091970690919C
+:102FF00098060E94430E67E573E0809197069091D2
+:1030000098060E9481036AE473E08091970690918C
+:1030100098060E948103652D8091970690919806ED
+:103020000E94430E6FE373E080919706909198069B
+:103030000E948103609111058091970690919806F6
+:103040000E94430E66E373E0809197069091980684
+:103050000E948103F801EE0FFF1FEE0FFF1FE753E1
+:10306000FB4F4081518162817381809197069091DD
+:1030700098060E94E00D6CE273E0809197069091B3
+:1030800098060E948103F801EE0FFF1FEB55FB4FDE
+:103090006081718180919706909198060E94E30D5E
+:1030A00080919706909198060E94BA030F5F1F4F78
+:1030B000FFEFEF1AFF0A22E0C20ED11C0231110508
+:1030C00009F067CF2CCF0D911D912D913C91139755
+:1030D0004B015C01801A910AA20AB30AC814D904F0
+:1030E000EA04FB0408F441E0149627E9A22E26E046
+:1030F000B22EAE16BF0629F02191319137FDF4CFE3
+:10310000E2CF442361F10E9444104B015C0183E74C
+:10311000E82E86E0F82E00E010E0F7018191919111
+:103120007F0197FD0FC0A501940160E0C8010E94D6
+:10313000800480917005853028F0B501A401C80194
+:103140000E94D4060F5F1F4F0231110531F78092A4
+:103150006C0590926D05A0926E05B0926F050E946D
+:10316000700308CA0E94060A64E972E0809197061B
+:10317000909198060E94BE033FCD40E050E0BA0116
+:103180000E94FD0B69E872E0809197069091980685
+:103190000E948103602F80919706909198060E946B
+:1031A0004A0E2ACDC8010E94BA036EEF71E08091E9
+:1031B0009706909198060E94810380E090E00E941B
+:1031C0002804682F80919706909198060E947A03B0
+:1031D00081E090E00E942804682F809197069091EA
+:1031E00098060E947A0382E090E00E942804682FEB
+:1031F00080919706909198060E947A0365EF71E09E
+:1032000080919706909198060E94810383E090E058
+:103210000E942804682F70E080919706909198068C
+:103220000E94FB0D80919706909198060E94BA0328
+:10323000512C04E010E0451409F438CCC8010E9478
+:103240002804382EC80101960E942804F82EC801CF
+:1032500002960E942804882E912C982C88248F0C8A
+:10326000911CC80103960E942804F82EC8010496F8
+:103270000E942804A82EB12CBA2CAA24AF0CB11C91
+:10328000C80105960E942804F82EC80106960E94DF
+:103290002804C82ED12CDC2CCC24CF0CD11CC80186
+:1032A00007960E942804F82EC80108960E94280458
+:1032B00090E0982F88279C012F0D311D7901075F21
+:1032C0001F4F6CEE71E080919706909198060E94D6
+:1032D0008103632D80919706909198060E947A034E
+:1032E0006AEE71E080919706909198060E948103A2
+:1032F000B40180919706909198060E94E30D68EEC4
+:1033000071E080919706909198060E948103B50123
+:1033100080919706909198060E94E30D66EE71E009
+:1033200080919706909198060E948103B601809142
+:103330009706909198060E94E30D64EE71E08091EB
+:103340009706909198060E948103B7018091970695
+:10335000909198060E94E30D8091970690919806AF
+:103360000E94BA03539467CF6BE272E09CCBF99949
+:10337000FECF92BD81BDF89A992780B50895262F7A
+:10338000F999FECF1FBA92BD81BD20BD0FB6F8944A
+:10339000FA9AF99A0FBE0196089597FB072E16F434
+:1033A000009407D077FD09D00E94181A07FC05D0B9
+:1033B0003EF4909581959F4F0895709561957F4F4C
+:1033C0000895A1E21A2EAA1BBB1BFD010DC0AA1F66
+:1033D000BB1FEE1FFF1FA217B307E407F50720F07E
+:1033E000A21BB30BE40BF50B661F771F881F991FF9
+:1033F0001A9469F760957095809590959B01AC0142
+:10340000BD01CF010895EE0FFF1F0590F491E02D4F
+:103410000994A29FB001B39FC001A39F700D811DAD
+:103420001124911DB29F700D811D1124911D0895CD
+:10343000AA1BBB1B51E107C0AA1FBB1FA617B707DA
+:1034400010F0A61BB70B881F991F5A95A9F78095F6
+:103450009095BC01CD01089581E090E0F8940C9422
+:103460001B1DAEE0B0E0E7E3FAE10C94F21C0D891D
+:103470001E8986E08C831A8309838FEF9FE79E83E2
+:103480008D83AE01475E5F4F6F89788DCE010196C7
+:103490000E94531AEF81F885E00FF11F10822E96DB
+:1034A000E4E00C940E1DABE0B0E0E9E5FAE10C9429
+:1034B000E41C6C017B018A01FC0117821682838166
+:1034C00081FFCCC1CE0101963C01F6019381F70149
+:1034D00093FD859193FF81917F01882309F4BAC1FF
+:1034E000853239F493FD859193FF81917F01853277
+:1034F00029F4B60190E00E944A1CE7CF912C212CC0
+:10350000312CFFE1F315D8F08B3279F038F48032AA
+:1035100079F08332A1F4232D20611DC08D3261F03A
+:10352000803369F4232D216016C0832D8260382EEC
+:10353000E32DE4603E2E2AC0F32DF8601DC037FC59
+:103540002DC020ED280F2A3040F08E32B9F436FC21
+:1035500081C1232D2064322E19C036FE06C08AE0B8
+:10356000989E200D1124922E11C0EAE02E9E200D6F
+:103570001124222EF32DF0623F2E08C08C3621F448
+:10358000832D8068382E02C0883641F4F70193FD00
+:10359000859193FF81917F018111B3CF982F9F7DFA
+:1035A0009554933028F40C5F1F4F9FE399830DC00F
+:1035B000833631F0833771F0833509F059C021C06B
+:1035C000F801808189830E5F1F4F88248394912C9A
+:1035D000530113C02801F2E04F0E511CF801A080E6
+:1035E000B18036FE03C0692D70E002C06FEF7FEF3F
+:1035F000C5010E943F1C4C018201F32DFF773F2E35
+:1036000016C0280122E0420E511CF801A080B180B2
+:1036100036FE03C0692D70E002C06FEF7FEFC50179
+:103620000E94341C4C01F32DF0683F2E820133FCC4
+:103630001BC0822D90E088169906B0F4B60180E296
+:1036400090E00E944A1C2A94F4CFF50137FC859142
+:1036500037FE81915F01B60190E00E944A1C211063
+:103660002A9421E0821A91088114910471F7E8C02C
+:10367000843611F0893641F5F80137FE07C06081C4
+:103680007181828193810C5F1F4F08C060817181BD
+:10369000072E000C880B990B0E5F1F4FF32DFF7642
+:1036A0003F2E97FF09C090958095709561957F4F4B
+:1036B0008F4F9F4FF0683F2E2AE030E0A3010E9419
+:1036C000861C882E861845C0853731F4232D2F7E21
+:1036D000B22E2AE030E025C0932D997FB92E8F3687
+:1036E000C1F018F4883579F0B5C0803719F0883703
+:1036F00021F0B0C0E92FE061BE2EB4FE0DC0FB2D5D
+:10370000F460BF2E09C034FE0AC0292F2660B22EF5
+:1037100006C028E030E005C020E130E002C020E132
+:1037200032E0F801B7FE07C0608171818281938128
+:103730000C5F1F4F06C06081718180E090E00E5FDA
+:103740001F4FA3010E94861C882E8618FB2DFF7731
+:103750003F2E36FE0DC0232D2E7FA22E891458F445
+:1037600034FE0BC032FC09C0832D8E7EA82E05C00E
+:10377000B82CA32C03C0B82C01C0B92CA4FE0FC0D8
+:10378000FE01E80DF11D8081803321F49A2D997E90
+:10379000A92E09C0A2FE06C0B394B39404C08A2D1A
+:1037A000867809F0B394A3FC11C0A0FE06C0B21441
+:1037B00088F4280C922C9B180EC0B21460F4B60149
+:1037C00080E290E00E944A1CB394F7CFB21418F440
+:1037D0002B1802C0982C212CA4FE10C0B60180E347
+:1037E00090E00E944A1CA2FE17C0A1FC03C088E71B
+:1037F00090E002C088E590E0B6010CC08A2D867882
+:1038000059F0A1FE02C08BE201C080E2A7FC8DE26C
+:10381000B60190E00E944A1C891438F4B60180E396
+:1038200090E00E944A1C9A94F7CF8A94F301E80D25
+:10383000F11D8081B60190E00E944A1C8110F5CFF5
+:10384000222009F442CEB60180E290E00E944A1C98
+:103850002A94F6CFF6018681978102C08FEF9FEF01
+:103860002B96E2E10C94001DFC0105906150704024
+:103870000110D8F7809590958E0F9F1F0895FC0139
+:103880006150704001900110D8F7809590958E0F8F
+:103890009F1F08950F931F93CF93DF93FB01238105
+:1038A00021FD03C08FEF9FEF2CC022FF16C0468181
+:1038B0005781248135814217530744F4A081B18197
+:1038C0009D012F5F3F4F318320838C932681378169
+:1038D0002F5F3F4F3783268314C08B01EC01FB0120
+:1038E0000084F185E02D0995892BE1F6D801169623
+:1038F0008D919C911797019617969C938E9316978E
+:10390000CE01DF91CF911F910F910895FA01AA275F
+:10391000283051F1203181F1E8946F936E7F6E5F12
+:103920007F4F8F4F9F4FAF4FB1E03ED0B4E03CD0C0
+:10393000670F781F891F9A1FA11D680F791F8A1FA3
+:10394000911DA11D6A0F711D811D911DA11D20D00A
+:1039500009F468943F912AE0269F11243019305DC4
+:103960003193DEF6CF010895462F4770405D4193B5
+:10397000B3E00FD0C9F7F6CF462F4F70405D4A3302
+:1039800018F0495D31FD4052419302D0A9F7EACFCA
+:10399000B4E0A6959795879577956795BA95C9F7F9
+:1039A00000976105710508959B01AC010A2E0694EC
+:1039B0005795479537952795BA95C9F7620F731FA5
+:1039C000841F951FA01D08952F923F924F925F92E2
+:1039D0006F927F928F929F92AF92BF92CF92DF921F
+:1039E000EF92FF920F931F93CF93DF93CDB7DEB784
+:1039F000CA1BDB0B0FB6F894DEBF0FBECDBF099418
+:103A00002A88398848885F846E847D848C849B846E
+:103A1000AA84B984C884DF80EE80FD800C811B817C
+:103A2000AA81B981CE0FD11D0FB6F894DEBF0FBEAB
+:0A3A3000CDBFED010895F894FFCF1B
+:103A3A0014006E0064000200D007000060EA000073
+:103A4A00307500000D1307080E0000000000010386
+:103A5A006A0298024E03C902A702BB026B006C00FD
+:103A6A006D000000000000000000000000000000DF
+:103A7A00000000010300040005000600070008001A
+:103A8A0009000A000B000C000E000F0010001100C4
+:103A9A001200130014001500FFFFFFFFFFFF0000D4
+:103AAA0001000200030004000500060007000800E8
+:103ABA00FFFF09000A000B000C000D000E000F00AA
+:103ACA00100011000D0A004C2534642C20253464A2
+:0A3ADA00202D3E202520346400005A
:00000001FF
diff --git a/fhem/contrib/arduino/ArduCounter3.30.ino b/fhem/contrib/arduino/ArduCounter3.30.ino
index f236a364d..85798e228 100755
--- a/fhem/contrib/arduino/ArduCounter3.30.ino
+++ b/fhem/contrib/arduino/ArduCounter3.30.ino
@@ -93,6 +93,7 @@
21.7.19 - V3.30 replace delay during analog read with millis() logic, optimize waiting times for analog read
10.8.19 - V3.32 add ICACHE_RAM_ATTR for ISRs and remove remaining long casts (bug) when handling time
12.8.19 - V3.33 fix handling of keepalive timeouts when millis wraps
+ V3.34 add RSSI output when devVerbose >= 5 in kealive responses
ToDo / Ideas:
make analogInterval available in Fhem
@@ -103,7 +104,7 @@
*/
/* Remove this before compiling */
-/* #define TestConfig */
+#define TestConfig // include my SSID / secret
/* allow printing of every pin change to Serial */
@@ -121,7 +122,7 @@
#include "pins_arduino.h"
#include
-const char versionStr[] PROGMEM = "ArduCounter V3.33";
+const char versionStr[] PROGMEM = "ArduCounter V3.34";
#define SERIAL_SPEED 38400
#define MAX_INPUT_NUM 8
@@ -157,7 +158,6 @@ WiFiClient Client1; // active TCP connection
WiFiClient Client2; // secound TCP connection to send reject message
boolean Client1Connected; // remember state of TCP connection
boolean Client2Connected; // remember state of TCP connection
-long rssi; // WiFi connection strength
boolean tcpMode = false;
uint8_t delayedTcpReports = 0; // how often did we already delay reporting because tcp disconnected
@@ -340,7 +340,7 @@ uint16_t countMin = 2; // continue counting if count is less than t
uint32_t lastReportCall;
#ifdef ESP8266
-uint16_t keepAliveTimeout;
+uint16_t keepAliveTimeout = 200;
uint32_t lastKeepAlive;
#endif
@@ -1199,19 +1199,28 @@ void devVerboseCmd(uint16_t *values, uint8_t size) {
void keepAliveCmd(uint16_t *values, uint8_t size) {
+ uint32_t now = millis();
+
if (values[0] == 1 && size > 0) {
- Output->println(F("alive"));
- }
+ Output->print(F("alive"));
#ifdef ESP8266
- if (values[0] == 1 && size > 0 && size < 3 && Client1.connected()) {
- tcpMode = true;
- if (size == 2) {
- keepAliveTimeout = values[1]; // timeout in seconds (on ESP side we use it times 3)
- } else {
- keepAliveTimeout = 200; // *3*1000 gives 10 minutes if nothing sent (should not happen)
+ if (devVerbose >=5) {
+ Output->print(F(" RSSI "));
+ Output->print(WiFi.RSSI());
}
- }
+
+ if (values[0] == 1 && size > 0 && size < 3 && Client1.connected()) {
+ tcpMode = true;
+ if (size == 2) {
+ keepAliveTimeout = values[1]; // timeout in seconds (on ESP side we use it times 3)
+ } else {
+ keepAliveTimeout = 200; // *3*1000 gives 10 minutes if nothing sent (should not happen)
+ }
+ }
+ lastKeepAlive = now;
#endif
+ Output->println();
+ }
}
@@ -1571,7 +1580,7 @@ void handleConnections() {
uint32_t now = millis();
if (Client1Connected) {
- if((now - lastKeepAlive) > (keepAliveTimeout *3000)) {
+ if((now - lastKeepAlive) > (keepAliveTimeout * 3000)) {
Serial.println(F("M no keepalive from Client - disconnecting"));
Client1.stop();
}