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(); }