Compare commits

..

19 Commits

Author SHA1 Message Date
Gunnar Skjold
3312f88804 Some changes to make it compile for both ESP8266 and ESP32 2020-01-28 18:17:20 +01:00
Gunnar Skjold
50faaca559 Moved Base64 lib 2020-01-24 14:54:42 +01:00
Gunnar Skjold
bf44849ecf Added base64 lib directly into this project to fix build problem with esp32 2020-01-24 14:52:14 +01:00
Gunnar Skjold
4bfd9dee9a Merge pull request #10 from gskjold/issue-6
Make the configuration page available all the time
2020-01-24 14:47:29 +01:00
Gunnar Skjold
8f0932f1f1 Added configurable basic auth to web server 2020-01-15 21:22:06 +01:00
Gunnar Skjold
aeb161455e Enable config page on runtime with populated form 2020-01-15 20:17:06 +01:00
Gunnar Skjold
568180d7b2 Update release.yml 2019-12-12 19:49:22 +01:00
Gunnar Skjold
0d99da6c9a Update build.yml 2019-12-12 19:48:22 +01:00
Gunnar Skjold
843cea7626 Updated readme 2019-12-12 19:39:00 +01:00
Gunnar Skjold
c82a2a1d4b Added adafruit esp32 feather as a target 2019-12-12 19:32:20 +01:00
Gunnar Skjold
86dd8c1b87 Updated readme 2019-12-12 19:25:32 +01:00
Gunnar Skjold
bdc0c03a76 Restructuring and cleaning out unnecessary files 2019-12-12 19:25:10 +01:00
Gunnar Skjold
5680b5a501 Restructuring and cleaning out unnecessary files 2019-12-12 19:23:15 +01:00
Gunnar Skjold
4cd1fa87d1 Making watt, amperage and volt the standard unit for all meters 2019-12-11 18:20:21 +01:00
Gunnar Skjold
1579562612 Set correct parity for Kamstrup 2019-12-11 14:40:08 +01:00
Gunnar Skjold
2713b5adae Updated readme with release and flashing section 2019-11-22 21:08:30 +01:00
Gunnar Skjold
c20b07bfc2 Add release version to binaries 2019-11-22 20:36:42 +01:00
Gunnar Skjold
0c3d44dc83 Changed name of build action 2019-11-22 20:32:22 +01:00
Gunnar Skjold
8a88c207ee Added release action 2019-11-22 20:29:02 +01:00
280 changed files with 959 additions and 227523 deletions

View File

@@ -1,9 +1,12 @@
name: Push build
name: Build
on:
push:
paths:
- src/**
- lib/**
branches:
- '*'
- master
tags:
- '*'
- '!v*.*.*'

80
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,80 @@
name: Release
on:
push:
tags:
- 'v*.*.*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out code from repo
uses: actions/checkout@v1
- name: Get release version from tag
id: release_tag
env:
GITHUB_REF: ${{ github.ref }}
run: echo ::set-output name=tag::$(echo ${GITHUB_REF:11})
- name: Cache Python dependencies
uses: actions/cache@v1
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('platformio.ini') }}
- name: Cache PlatformIO dependencies
uses: actions/cache@v1
with:
path: ~/.pio/libdeps
key: ${{ runner.os }}-pio-${{ hashFiles('platformio.ini') }}
- name: Set up Python 3.7
uses: actions/setup-python@v1
with:
python-version: 3.7
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -U platformio
- name: PlatformIO lib install
run: pio lib install
- name: PlatformIO run
run: pio run
- name: Create Release
id: create_release
uses: actions/create-release@v1.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
- name: Upload esp12e binary to release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: .pio/build/esp12e/firmware.bin
asset_name: ams2mqtt-esp12e-${{ steps.release_tag.outputs.tag }}.bin
asset_content_type: application/octet-stream
- name: Upload hw1esp12e binary to release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: .pio/build/hw1esp12e/firmware.bin
asset_name: ams2mqtt-hw1esp12e-${{ steps.release_tag.outputs.tag }}.bin
asset_content_type: application/octet-stream
- name: Upload featheresp32 binary to release
uses: actions/upload-release-asset@v1.0.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: .pio/build/featheresp32/firmware.bin
asset_name: ams2mqtt-featheresp32-${{ steps.release_tag.outputs.tag }}.bin
asset_content_type: application/octet-stream

3
.gitignore vendored
View File

@@ -6,4 +6,5 @@
*.sw[op]
.vscode
.pio
platformio-user.ini
platformio-user.ini
src/version.h

View File

@@ -1,31 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.16
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AmsToMqttBridge", "AmsToMqttBridge.vcxproj", "{C5F80730-F44F-4478-BDAE-6634EFC2CA88}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HanReader", "..\HanReader\HanReader.vcxitems", "{CD0F5364-923B-49E4-8BE5-EA7D8A60DF80}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
..\HanReader\HanReader.vcxitems*{c5f80730-f44f-4478-bdae-6634efc2ca88}*SharedItemsImports = 4
..\HanReader\HanReader.vcxitems*{cd0f5364-923b-49e4-8be5-ea7d8a60df80}*SharedItemsImports = 9
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.ActiveCfg = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.Build.0 = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.ActiveCfg = Release|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5DFC14B6-4C33-4307-8BDA-C050F68A74F6}
EndGlobalSection
EndGlobal

View File

@@ -1,104 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{C5F80730-F44F-4478-BDAE-6634EFC2CA88}</ProjectGuid>
<RootNamespace>AmsToMqttBridge</RootNamespace>
<ProjectName>AmsToMqttBridge</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>
</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>
</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
<Import Project="..\HanReader\HanReader.vcxitems" Label="Shared" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)..\AmsToMqttBridge;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\EEPROM;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WebServer\src;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\DNSServer\src;$(ProjectDir)..\HanReader\src;$(ProjectDir)..\..\..\..\..\..\..\..\..\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries;$(ProjectDir)..\..\..\..\..\..\..\Google Drive\Private\Elektronikk\Arduino\libraries;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\libb64;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\spiffs;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\umm_malloc;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\variants\generic;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\lwip\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\xtensa-lx106-elf;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\lib\gcc\xtensa-lx106-elf\4.8.2\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<ForcedIncludeFiles>$(ProjectDir)__vm\.AmsToMqttBridge.vsarduino.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<PreprocessorDefinitions>__ESP8266_ESp8266__;__ESP8266_ESP8266__;__ets__;ICACHE_FLASH;F_CPU=80000000L;LWIP_OPEN_SRC;ARDUINO=106012;ARDUINO_ESP8266_ESP01;ARDUINO_ARCH_ESP8266;ESP8266;__cplusplus=201103L;_VMICRO_INTELLISENSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectCapability Include="VisualMicro" />
</ItemGroup>
<PropertyGroup>
<DebuggerFlavor>VisualMicroDebugger</DebuggerFlavor>
</PropertyGroup>
<ItemGroup>
<None Include="AmsToMqttBridge.ino">
<FileType>CppCode</FileType>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="accesspoint.h" />
<ClInclude Include="configuration.h" />
<ClInclude Include="__vm\.AmsToMqttBridge.vsarduino.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="accesspoint.cpp" />
<ClCompile Include="configuration.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties custom_esp8266_generic_UploadSpeed="256000" />
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="AmsToMqttBridge.ino" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="__vm\.AmsToMqttBridge.vsarduino.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

File diff suppressed because one or more lines are too long

View File

@@ -1,15 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.16
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HanReader", "HanReader.vcxitems", "{CD0F5364-923B-49E4-8BE5-EA7D8A60DF80}"
EndProject
Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AFFB18CF-A4FB-46A9-8148-C5B4A380C48B}
EndGlobalSection
EndGlobal

View File

@@ -1,34 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Globals">
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
<HasSharedItems>true</HasSharedItems>
<ItemsProjectGuid>{cd0f5364-923b-49e4-8be5-ea7d8a60df80}</ItemsProjectGuid>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(MSBuildThisFileDirectory)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectCapability Include="SourceItemsFromImports" />
</ItemGroup>
<ItemGroup>
<Text Include="$(MSBuildThisFileDirectory)keywords.txt" />
<Text Include="$(MSBuildThisFileDirectory)readme.txt" />
<Text Include="$(MSBuildThisFileDirectory)library.properties" />
</ItemGroup>
<ItemGroup>
<!-- <ClInclude Include="$(MSBuildThisFileDirectory)HanReader.h" /> -->
<ClInclude Include="$(MSBuildThisFileDirectory)src\Crc16.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)src\DlmsReader.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)src\HanReader.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)src\Kaifa.h" />
<ClInclude Include="$(MSBuildThisFileDirectory)src\Kamstrup.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(MSBuildThisFileDirectory)src\Crc16.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)src\DlmsReader.cpp" />
<ClCompile Include="$(MSBuildThisFileDirectory)src\HanReader.cpp" />
</ItemGroup>
</Project>

View File

@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;s</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(MSBuildThisFileDirectory)src\Crc16.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)src\DlmsReader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="$(MSBuildThisFileDirectory)src\HanReader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Text Include="$(MSBuildThisFileDirectory)readme.txt" />
<Text Include="$(MSBuildThisFileDirectory)library.properties" />
<Text Include="$(MSBuildThisFileDirectory)keywords.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="$(MSBuildThisFileDirectory)src\Crc16.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)src\DlmsReader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)src\HanReader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)src\Kaifa.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="$(MSBuildThisFileDirectory)src\Kamstrup.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@@ -1,27 +0,0 @@
## Arduino Code
FW and libraries for running on various HW
### AmsToMqttBridge
The original FW by roarfred, runs a Wifi access point until configured. Uploads data as json to a MQTT server.
### WifiFeatherRestBridge
_Note: This project is still under development._
Firmware for runninw AMS decoding with off-the-shelf components, so no PCB etching or soldering necessary. Specifially,
the sketch runs on the [Adafruit Feather M0 WiFi w/ATWINC1500](https://www.adafruit.com/product/3010) card and uses the
[TSS721 M-BUS module board](https://www.aliexpress.com/item/TSS721/32751482255.html) available from Aliexpress.
![FeatherMbus](/Debugging/Documentation/feather_3010-00_mbus_slave.jpg)
### Arduino Libraries/HanReader
The shared library to read from a serial port and decode the data into packets.
### Arduino Libraries/HanToJson
Shared library to create a json structure from the read HAN packets (for the different meter types).

View File

@@ -1,283 +0,0 @@
/**
* Simple sketch to simulate reading data from different meters.
*
* Created 24. October 2017 by Roar Fredriksen
*/
#include <ArduinoJson.h>
//#include "Kaifa.h"
//#include "Kamstrup.h"
//#include "Aidon.h"
#include "HanReader.h"
#include "HanToJson.h"
// The HAN Port reader
HanReader hanReader;
HardwareSerial* debugger = NULL;
byte meterType = 1; // Start with Kaifa
int sampleIndex = 0;
int expectIndex = 0;
byte kaifa_samples[] =
{
// List #1
0x7E, 0xA0, 0x27, 0x01, 0x02, 0x01, 0x10, 0x5A, 0x87, 0xE6, 0xE7, 0x00, 0x0F, 0x40, 0x00, 0x00,
0x00, 0x09, 0x0C, 0x07, 0xE1, 0x09, 0x0E, 0x04, 0x13, 0x1F, 0x02, 0xFF, 0x80, 0x00, 0x00, 0x02,
0x01, 0x06, 0x00, 0x00, 0x03, 0x98, 0xAB, 0xAD, 0x7E,
// List#2
0x7E, 0xA0, 0x79, 0x01, 0x02, 0x01, 0x10, 0x80, 0x93, 0xE6, 0xE7, 0x00, 0x0F, 0x40, 0x00, 0x00,
0x00, 0x09, 0x0C, 0x07, 0xE1, 0x09, 0x0E, 0x04, 0x13, 0x1F, 0x0A, 0xFF, 0x80, 0x00, 0x00, 0x02,
0x0D, 0x09, 0x07, 0x4B, 0x46, 0x4D, 0x5F, 0x30, 0x30, 0x31, 0x09, 0x10, 0x36, 0x39, 0x37, 0x30,
0x36, 0x33, 0x31, 0x34, 0x30, 0x31, 0x37, 0x35, 0x33, 0x39, 0x38, 0x35, 0x09, 0x08, 0x4D, 0x41,
0x33, 0x30, 0x34, 0x48, 0x33, 0x45, 0x06, 0x00, 0x00, 0x03, 0x96, 0x06, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x05, 0x64, 0x06,
0x00, 0x00, 0x0C, 0x92, 0x06, 0x00, 0x00, 0x0C, 0x49, 0x06, 0x00, 0x00, 0x09, 0x46, 0x06, 0x00,
0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x4E, 0x1F, 0x85, 0x7E,
// List#3
0x7E, 0xA0, 0x9B, 0x01, 0x02, 0x01, 0x10, 0xEE, 0xAE, 0xE6, 0xE7, 0x00, 0x0F, 0x40, 0x00, 0x00,
0x00, 0x09, 0x0C, 0x07, 0xE1, 0x09, 0x0E, 0x04, 0x14, 0x00, 0x0A, 0xFF, 0x80, 0x00, 0x00, 0x02,
0x12, 0x09, 0x07, 0x4B, 0x46, 0x4D, 0x5F, 0x30, 0x30, 0x31, 0x09, 0x10, 0x36, 0x39, 0x37, 0x30,
0x36, 0x33, 0x31, 0x34, 0x30, 0x31, 0x37, 0x35, 0x33, 0x39, 0x38, 0x35, 0x09, 0x08, 0x4D, 0x41,
0x33, 0x30, 0x34, 0x48, 0x33, 0x45, 0x06, 0x00, 0x00, 0x03, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x07, 0x91, 0x06,
0x00, 0x00, 0x0C, 0x9D, 0x06, 0x00, 0x00, 0x0D, 0x66, 0x06, 0x00, 0x00, 0x09, 0x41, 0x06, 0x00,
0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x4C, 0x09, 0x0C, 0x07, 0xE1, 0x09, 0x0E, 0x04, 0x14,
0x00, 0x0A, 0xFF, 0x80, 0x00, 0x00, 0x06, 0x00, 0x02, 0xBF, 0x69, 0x06, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0xF7, 0x06, 0x00, 0x00, 0x3F, 0xFC, 0x71, 0x71, 0x7E,
// List#2.1
0x7e, 0xa0, 0x65, 0x01, 0x02, 0x01, 0x10, 0xf0, 0x50, 0xe6, 0xe7, 0x00, 0x0f, 0x40, 0x00, 0x00,
0x00, 0x09, 0x0c, 0x07, 0xe3, 0x05, 0x08, 0x03, 0x16, 0x20, 0x28, 0xff, 0x80, 0x00, 0x00, 0x02,
0x09, 0x09, 0x07, 0x4b, 0x46, 0x4d, 0x5f, 0x30, 0x30, 0x31, 0x09, 0x10, 0x36, 0x39, 0x37, 0x30,
0x36, 0x33, 0x31, 0x34, 0x30, 0x31, 0x39, 0x39, 0x31, 0x36, 0x38, 0x34, 0x09, 0x08, 0x4d, 0x41,
0x31, 0x30, 0x35, 0x48, 0x32, 0x45, 0x06, 0x00, 0x00, 0x03, 0xa5, 0x06, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x21, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x10, 0x0e, 0x06,
0x00, 0x00, 0x09, 0x0a, 0x98, 0x76, 0x7e,
};
String kaifa_expect[] = {
String("{\"t\":1505417462,\"data\":{\"P\":920}}"),
String("{\"t\":1505417470,\"data\":{\"lv\":\"KFM_001\",\"id\":\"6970631401753985\",\"type\":\"MA304H3E\",\"P\":918,\"Q\":0,\"I1\":1380,\"I2\":3218,\"I3\":3145,\"U1\":2374,\"U2\":0,\"U3\":2382}}"),
String("{\"t\":1505419210,\"data\":{\"lv\":\"KFM_001\",\"id\":\"6970631401753985\",\"type\":\"MA304H3E\",\"P\":1022,\"Q\":0,\"I1\":1937,\"I2\":3229,\"I3\":3430,\"U1\":2369,\"U2\":0,\"U3\":2380,\"tPI\":180073,\"tPO\":0,\"tQI\":247,\"tQO\":16380}}"),
String("{\"t\":1557354760,\"data\":{\"lv\":\"KFM_001\",\"id\":\"6970631401991684\",\"type\":\"MA105H2E\",\"P\":933,\"Q\":33,\"I1\":4110,\"U1\":2314}}")
};
byte aidon_samples[] =
{ // From Aidon-HAN-Interface-Description-v10A-ID-34331.pdf
// List 2 sending (1-phase)
0x7e, 0xa0, 0xd2, 0x41, 0x08, 0x83, 0x13, 0x82, 0xd6, 0xe6, 0xe7, 0x00, 0x0f, 0x40, 0x00, 0x00,
0x00, 0x00, 0x01, 0x09, 0x02, 0x02, 0x09, 0x06, 0x01, 0x01, 0x00, 0x02, 0x81, 0xff, 0x0a, 0x0b,
0x41, 0x49, 0x44, 0x4f, 0x4e, 0x5f, 0x56, 0x30, 0x30, 0x30, 0x31, 0x02, 0x02, 0x09, 0x06, 0x00,
0x00, 0x60, 0x01, 0x00, 0xff, 0x0a, 0x10, 0x37, 0x33, 0x35, 0x39, 0x39, 0x39, 0x32, 0x38, 0x39,
0x30, 0x39, 0x34, 0x31, 0x37, 0x34, 0x32, 0x02, 0x02, 0x09, 0x06, 0x00, 0x00, 0x60, 0x01, 0x07,
0xff, 0x0a, 0x04, 0x36, 0x35, 0x31, 0x35, 0x02, 0x03, 0x09, 0x06, 0x01, 0x00, 0x01, 0x07, 0x00,
0xff, 0x06, 0x00, 0x00, 0x05, 0x52, 0x02, 0x02, 0x0f, 0x00, 0x16, 0x1b, 0x02, 0x03, 0x09, 0x06,
0x01, 0x00, 0x02, 0x07, 0x00, 0xff, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0f, 0x00, 0x16,
0x1b, 0x02, 0x03, 0x09, 0x06, 0x01, 0x00, 0x03, 0x07, 0x00, 0xff, 0x06, 0x00, 0x00, 0x03, 0xe4,
0x02, 0x02, 0x0f, 0x00, 0x16, 0x1d, 0x02, 0x03, 0x09, 0x06, 0x01, 0x00, 0x04, 0x07, 0x00, 0xff,
0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0f, 0x00, 0x16, 0x1d, 0x02, 0x03, 0x09, 0x06, 0x01,
0x00, 0x1f, 0x07, 0x00, 0xff, 0x10, 0x00, 0x5d, 0x02, 0x02, 0x0f, 0xff, 0x16, 0x21, 0x02, 0x03,
0x09, 0x06, 0x01, 0x00, 0x20, 0x07, 0x00, 0xff, 0x12, 0x09, 0xc4, 0x02, 0x02, 0x0f, 0xff, 0x16,
0x23, 0xe0, 0xc4, 0x7e
};
String aidon_expect[] = {
String("{\"t\":0,\"data\":{\"lv\":\"AIDON_V0001\",\"id\":\"7359992890941742\",\"type\":\"6515\",\"P\":1362,\"Q\":0,\"I1\":9.3,\"U1\":250}}")
};
byte kamstrup_samples[] =
{ // [2017-10-20 04.43.32.368 - Received 229 (0xE5) bytes]
// List #1
0x7E, 0xA0, 0xE2, 0x2B, 0x21, 0x13, 0x23, 0x9A, 0xE6, 0xE7, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x0C, 0x07, 0xE2, 0x03, 0x04, 0x07, 0x14, 0x3B, 0x32, 0xFF, 0x80, 0x00, 0x00, 0x02, 0x19, 0x0A,
0x0E, 0x4B, 0x61, 0x6D, 0x73, 0x74, 0x72, 0x75, 0x70, 0x5F, 0x56, 0x30, 0x30, 0x30, 0x31, 0x09,
0x06, 0x01, 0x01, 0x00, 0x00, 0x05, 0xFF, 0x0A, 0x10, 0x35, 0x37, 0x30, 0x36, 0x35, 0x36, 0x37,
0x32, 0x37, 0x34, 0x33, 0x38, 0x39, 0x37, 0x30, 0x32, 0x09, 0x06, 0x01, 0x01, 0x60, 0x01, 0x01,
0xFF, 0x0A, 0x12, 0x36, 0x38, 0x34, 0x31, 0x31, 0x32, 0x31, 0x42, 0x4E, 0x32, 0x34, 0x33, 0x31,
0x30, 0x31, 0x30, 0x34, 0x30, 0x09, 0x06, 0x01, 0x01, 0x01, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00,
0x11, 0x28, 0x09, 0x06, 0x01, 0x01, 0x02, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09,
0x06, 0x01, 0x01, 0x03, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x84, 0x09, 0x06, 0x01, 0x01,
0x04, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06, 0x01, 0x01, 0x1F, 0x07, 0x00,
0xFF, 0x06, 0x00, 0x00, 0x05, 0x66, 0x09, 0x06, 0x01, 0x01, 0x33, 0x07, 0x00, 0xFF, 0x06, 0x00,
0x00, 0x03, 0x0C, 0x09, 0x06, 0x01, 0x01, 0x47, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x05, 0x5A,
0x09, 0x06, 0x01, 0x01, 0x20, 0x07, 0x00, 0xFF, 0x12, 0x00, 0xE0, 0x09, 0x06, 0x01, 0x01, 0x34,
0x07, 0x00, 0xFF, 0x12, 0x00, 0xDF, 0x09, 0x06, 0x01, 0x01, 0x48, 0x07, 0x00, 0xFF, 0x12, 0x00,
0xDF, 0xA1, 0xD8, 0x7E,
// List #2
0x7E, 0xA1, 0x2C, 0x2B, 0x21, 0x13, 0xFC, 0x04, 0xE6, 0xE7, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x0C, 0x07, 0xE2, 0x03, 0x04, 0x07, 0x15, 0x00, 0x05, 0xFF, 0x80, 0x00, 0x00, 0x02, 0x23, 0x0A,
0x0E, 0x4B, 0x61, 0x6D, 0x73, 0x74, 0x72, 0x75, 0x70, 0x5F, 0x56, 0x30, 0x30, 0x30, 0x31, 0x09,
0x06, 0x01, 0x01, 0x00, 0x00, 0x05, 0xFF, 0x0A, 0x10, 0x35, 0x37, 0x30, 0x36, 0x35, 0x36, 0x37,
0x32, 0x37, 0x34, 0x33, 0x38, 0x39, 0x37, 0x30, 0x32, 0x09, 0x06, 0x01, 0x01, 0x60, 0x01, 0x01,
0xFF, 0x0A, 0x12, 0x36, 0x38, 0x34, 0x31, 0x31, 0x32, 0x31, 0x42, 0x4E, 0x32, 0x34, 0x33, 0x31,
0x30, 0x31, 0x30, 0x34, 0x30, 0x09, 0x06, 0x01, 0x01, 0x01, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00,
0x0E, 0x3B, 0x09, 0x06, 0x01, 0x01, 0x02, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09,
0x06, 0x01, 0x01, 0x03, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x86, 0x09, 0x06, 0x01, 0x01,
0x04, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06, 0x01, 0x01, 0x1F, 0x07, 0x00,
0xFF, 0x06, 0x00, 0x00, 0x04, 0x21, 0x09, 0x06, 0x01, 0x01, 0x33, 0x07, 0x00, 0xFF, 0x06, 0x00,
0x00, 0x03, 0x0C, 0x09, 0x06, 0x01, 0x01, 0x47, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x04, 0x1C,
0x09, 0x06, 0x01, 0x01, 0x20, 0x07, 0x00, 0xFF, 0x12, 0x00, 0xE2, 0x09, 0x06, 0x01, 0x01, 0x34,
0x07, 0x00, 0xFF, 0x12, 0x00, 0xE0, 0x09, 0x06, 0x01, 0x01, 0x48, 0x07, 0x00, 0xFF, 0x12, 0x00,
0xDF, 0x09, 0x06, 0x00, 0x01, 0x01, 0x00, 0x00, 0xFF, 0x09, 0x0C, 0x07, 0xE2, 0x03, 0x04, 0x07,
0x15, 0x00, 0x05, 0xFF, 0x80, 0x00, 0x00, 0x09, 0x06, 0x01, 0x01, 0x01, 0x08, 0x00, 0xFF, 0x06,
0x00, 0x1A, 0x40, 0x49, 0x09, 0x06, 0x01, 0x01, 0x02, 0x08, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00,
0x00, 0x09, 0x06, 0x01, 0x01, 0x03, 0x08, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x05, 0x64, 0x09, 0x06,
0x01, 0x01, 0x04, 0x08, 0x00, 0xFF, 0x06, 0x00, 0x02, 0x7B, 0x21, 0x20, 0x92, 0x7E
};
String kamstrup_expect[] = {
String("{\"t\":1520197190,\"data\":{\"lv\":\"Kamstrup_V0001\",\"id\":\"5706567274389702\",\"type\":\"6841121BN243101040\",\"P\":4392,\"Q\":132,\"I1\":1382,\"I2\":780,\"I3\":1370,\"U1\":224,\"U2\":223,\"U3\":223}}"),
String("{\"t\":1520197205,\"data\":{\"lv\":\"Kamstrup_V0001\",\"id\":\"5706567274389702\",\"type\":\"6841121BN243101040\",\"P\":3643,\"Q\":134,\"I1\":1057,\"I2\":780,\"I3\":1052,\"U1\":226,\"U2\":224,\"U3\":223,\"tPI\":1720393,\"tPO\":0,\"tQI\":1380,\"tQO\":162593}}")
};
void assert_equal(DynamicJsonDocument& doc, const String& expected)
{
String jsonActual;
serializeJson(doc, jsonActual);
if (jsonActual != expected)
{
debugger->printf("Test assert failed:\n %s\n !=\n %s\n", jsonActual.c_str(), expected.c_str());
while (true) {}
}
}
void setup() {
Serial1.begin(115200);
//while (!Serial) {}
Serial1.println("Serial1 debugging port initialized");
// initialize the HanReader
// (passing no han port, as we are feeding data manually, but provide Serial for debugging)
hanReader.setup(NULL, &Serial1);
hanReader.compensateFor09HeaderBug = true; // Starting with Kaifa
debugger = &Serial1;
}
void loopKaifa()
{
if (sampleIndex >= sizeof(kaifa_samples))
{
meterType++;
sampleIndex = 0;
expectIndex = 0;
hanReader.setup(NULL, debugger);
hanReader.compensateFor09HeaderBug = false;
Serial1.println("Done with Kaifa");
}
// Read one byte from the "port", and see if we got a full package
if (hanReader.read(kaifa_samples[sampleIndex++]))
{
DynamicJsonDocument doc(500);
doc["t"] = hanReader.getPackageTime();
JsonObject data = doc.createNestedObject("data");
hanToJson(data, meterType, hanReader);
debugger->println("Kaifa JsonData: ");
serializeJsonPretty(doc, Serial1);
debugger->println();
if (expectIndex < sizeof(kaifa_expect) / sizeof(kaifa_expect[0]))
{
assert_equal(doc, kaifa_expect[expectIndex++]);
} else {
debugger->println("Not enough expected results spesified");
while (true) {}
}
}
}
void loopAidon()
{
if (sampleIndex >= sizeof(aidon_samples))
{
meterType++;
sampleIndex = 0;
expectIndex = 0;
hanReader.setup(NULL, &Serial1);
debugger->println("Done with Aidon");
}
// Read one byte from the "port", and see if we got a full package
if (hanReader.read(aidon_samples[sampleIndex++]))
{
DynamicJsonDocument doc(500);
doc["t"] = hanReader.getPackageTime();
JsonObject data = doc.createNestedObject("data");
hanToJson(data, meterType, hanReader);
debugger->println("Aidon JsonData: ");
serializeJsonPretty(doc, Serial1);
debugger->println();
if (expectIndex < sizeof(aidon_expect) / sizeof(aidon_expect[0]))
{
assert_equal(doc, aidon_expect[expectIndex++]);
} else {
debugger->println("Not enough expected results spesified");
while (true) {}
}
}
}
void loopKamstrup()
{
if (sampleIndex >= sizeof(kamstrup_samples))
{
meterType++;
sampleIndex = 0;
hanReader.setup(NULL, &Serial1);
debugger->println("Done with Kamstrup");
}
// Read one byte from the "port", and see if we got a full package
if (hanReader.read(kamstrup_samples[sampleIndex++]))
{
DynamicJsonDocument doc(500);
doc["t"] = hanReader.getPackageTime();
JsonObject data = doc.createNestedObject("data");
hanToJson(data, meterType, hanReader);
debugger->println("Kamstrup JsonData: ");
serializeJsonPretty(doc, Serial1);
debugger->println();
if (expectIndex < sizeof(kamstrup_expect) / sizeof(kamstrup_expect[0]))
{
assert_equal(doc, kamstrup_expect[expectIndex++]);
} else {
debugger->println("Not enough expected results spesified");
while (true) {}
}
}
}
void loop() {
switch (meterType)
{
case 1: // Kaifa
return loopKaifa();
case 2: // Aidon
return loopAidon();
case 3: // Kamstrup
return loopKamstrup();
default:
debugger->println("Done");
while (true) ;
break;
}
}

View File

@@ -1,121 +0,0 @@
/*
* Simple sketch to simulate reading data from a Kamstrup
* AMS Meter.
*
* Created 24. October 2017 by Roar Fredriksen
*/
#include <HanReader.h>
#include <Kaifa.h>
// The HAN Port reader
HanReader hanReader;
byte samples[] =
{
// List #1
0x7E, 0xA0, 0x27, 0x01, 0x02, 0x01, 0x10, 0x5A, 0x87, 0xE6, 0xE7, 0x00, 0x0F, 0x40, 0x00, 0x00, 0x00, 0x09, 0x0C, 0x07, 0xE1, 0x09, 0x0E, 0x04, 0x13, 0x1F, 0x02, 0xFF, 0x80, 0x00, 0x00, 0x02, 0x01, 0x06, 0x00, 0x00, 0x03, 0x98, 0xAB, 0xAD, 0x7E,
// List#2
0x7E, 0xA0, 0x79, 0x01, 0x02, 0x01, 0x10, 0x80, 0x93, 0xE6, 0xE7, 0x00, 0x0F, 0x40, 0x00, 0x00, 0x00, 0x09, 0x0C, 0x07, 0xE1, 0x09, 0x0E, 0x04, 0x13, 0x1F, 0x0A, 0xFF, 0x80, 0x00, 0x00, 0x02, 0x0D, 0x09, 0x07, 0x4B, 0x46, 0x4D, 0x5F, 0x30, 0x30, 0x31, 0x09, 0x10, 0x36, 0x39, 0x37, 0x30, 0x36, 0x33, 0x31, 0x34, 0x30, 0x31, 0x37, 0x35, 0x33, 0x39, 0x38, 0x35, 0x09, 0x08, 0x4D, 0x41, 0x33, 0x30, 0x34, 0x48, 0x33, 0x45, 0x06, 0x00, 0x00, 0x03, 0x96, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x06, 0x00, 0x00, 0x05, 0x64, 0x06, 0x00, 0x00, 0x0C, 0x92, 0x06, 0x00, 0x00, 0x0C, 0x49, 0x06, 0x00, 0x00, 0x09, 0x46, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x4E, 0x1F, 0x85, 0x7E,
// List#3
0x7E, 0xA0, 0x9B, 0x01, 0x02, 0x01, 0x10, 0xEE, 0xAE, 0xE6, 0xE7, 0x00, 0x0F, 0x40, 0x00, 0x00, 0x00, 0x09, 0x0C, 0x07, 0xE1, 0x09, 0x0E, 0x04, 0x14, 0x00, 0x0A, 0xFF, 0x80, 0x00, 0x00, 0x02, 0x12, 0x09, 0x07, 0x4B, 0x46, 0x4D, 0x5F, 0x30, 0x30, 0x31, 0x09, 0x10, 0x36, 0x39, 0x37, 0x30, 0x36, 0x33, 0x31, 0x34, 0x30, 0x31, 0x37, 0x35, 0x33, 0x39, 0x38, 0x35, 0x09, 0x08, 0x4D, 0x41, 0x33, 0x30, 0x34, 0x48, 0x33, 0x45, 0x06, 0x00, 0x00, 0x03, 0xFE, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x07, 0x91, 0x06, 0x00, 0x00, 0x0C, 0x9D, 0x06, 0x00, 0x00, 0x0D, 0x66, 0x06, 0x00, 0x00, 0x09, 0x41, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x09, 0x4C, 0x09, 0x0C, 0x07, 0xE1, 0x09, 0x0E, 0x04, 0x14, 0x00, 0x0A, 0xFF, 0x80, 0x00, 0x00, 0x06, 0x00, 0x02, 0xBF, 0x69, 0x06, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xF7, 0x06, 0x00, 0x00, 0x3F, 0xFC, 0x71, 0x71, 0x7E
};
int sampleIndex = 0;
void setup() {
setupDebugPort();
// initialize the HanReader
// (passing no han port, as we are feeding data manually, but provide Serial for debugging)
hanReader.setup(NULL, &Serial);
hanReader.compensateFor09HeaderBug = true;
}
void setupDebugPort()
{
// Initialize the Serial port for debugging
Serial.begin(115200);
while (!Serial) {}
Serial.setDebugOutput(true);
Serial.println("Serial1");
Serial.println("Serial debugging port initialized");
}
void loop() {
// Read one byte from the "port", and see if we got a full package
if (hanReader.read(samples[sampleIndex++]))
{
// Get the list identifier
int listSize = hanReader.getListSize();
Serial.println("");
Serial.print("List size: ");
Serial.print(listSize);
Serial.print(": ");
// Only care for the ACtive Power Imported, which is found in the first list
if (listSize == (int)Kaifa::List1 || listSize == (int)Kaifa::List2 || listSize == (int)Kaifa::List3)
{
if (listSize == (int)Kaifa::List1)
{
Serial.println(" (list #1 has no ID)");
}
else
{
String id = hanReader.getString((int)Kaifa_List2::ListVersionIdentifier);
Serial.println(id);
}
time_t time = hanReader.getPackageTime();
Serial.print("Time of the package is: ");
Serial.println(time);
if (listSize == (int)Kaifa::List1)
{
int power = hanReader.getInt((int)Kaifa_List1::ActivePowerImported);
Serial.print("Power consumtion is right now: ");
Serial.print(power);
Serial.println(" W");
}
else
{
float current[3];
current[0] = (float)hanReader.getInt((int)Kaifa_List2::CurrentL1) / 1000.0;
current[1] = (float)hanReader.getInt((int)Kaifa_List2::CurrentL2) / 1000.0;
current[2] = (float)hanReader.getInt((int)Kaifa_List2::CurrentL3) / 1000.0;
int voltage[3];
voltage[0] = hanReader.getInt((int)Kaifa_List2::VoltageL1);
voltage[1] = hanReader.getInt((int)Kaifa_List2::VoltageL2);
voltage[2] = hanReader.getInt((int)Kaifa_List2::VoltageL3);
for (int i = 0; i < 3; i++)
{
Serial.print("L");
Serial.print(i + 1);
Serial.print(" is ");
Serial.print(voltage[i]);
Serial.print(" V (");
Serial.print(current[i]);
Serial.println(" A)");
}
if (listSize == (int)Kaifa::List3)
{
time_t clock = hanReader.getTime((int)Kaifa_List3::MeterClock);
Serial.print("Clock is: ");
Serial.println(clock);
}
}
}
}
delay(10);
if (sampleIndex >= sizeof(samples))
{
delay(2000);
sampleIndex = 0;
}
}

View File

@@ -1,31 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.16
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KaifaTest", "KaifaTest.vcxproj", "{C5F80730-F44F-4478-BDAE-6634EFC2CA88}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HanReader", "..\HanReader\HanReader.vcxitems", "{CD0F5364-923B-49E4-8BE5-EA7D8A60DF80}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
..\HanReader\HanReader.vcxitems*{c5f80730-f44f-4478-bdae-6634efc2ca88}*SharedItemsImports = 4
..\HanReader\HanReader.vcxitems*{cd0f5364-923b-49e4-8be5-ea7d8a60df80}*SharedItemsImports = 9
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.ActiveCfg = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.Build.0 = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.ActiveCfg = Release|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {35D8A583-E857-4E42-B780-543F324B8851}
EndGlobalSection
EndGlobal

View File

@@ -1,93 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{C5F80730-F44F-4478-BDAE-6634EFC2CA88}</ProjectGuid>
<RootNamespace>KaifaTest</RootNamespace>
<ProjectName>KaifaTest</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>
</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>
</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
<Import Project="..\HanReader\HanReader.vcxitems" Label="Shared" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)..\KaifaTest;$(ProjectDir)..\HanReader\src;$(ProjectDir)..\..\..\..\..\..\..\..\..\Program Files (x86)\Arduino\libraries;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries;$(ProjectDir)..\..\..\..\..\..\..\Google Drive\Private\Elektronikk\Arduino\libraries;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\libb64;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\spiffs;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\umm_malloc;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\variants\generic;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\lwip\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\xtensa-lx106-elf;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\lib\gcc\xtensa-lx106-elf\4.8.2\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<ForcedIncludeFiles>$(ProjectDir)__vm\.KaifaTest.vsarduino.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<PreprocessorDefinitions>__ESP8266_ESp8266__;__ESP8266_ESP8266__;__ets__;ICACHE_FLASH;F_CPU=80000000L;LWIP_OPEN_SRC;ARDUINO=106012;ARDUINO_ESP8266_ESP01;ARDUINO_ARCH_ESP8266;ESP8266;__cplusplus=201103L;_VMICRO_INTELLISENSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectCapability Include="VisualMicro" />
</ItemGroup>
<PropertyGroup>
<DebuggerFlavor>VisualMicroDebugger</DebuggerFlavor>
</PropertyGroup>
<ItemGroup>
<None Include="KaifaTest.ino">
<FileType>CppCode</FileType>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="__vm\.KaifaTest.vsarduino.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="KaifaTest.ino" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="__vm\.KaifaTest.vsarduino.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@@ -1,128 +0,0 @@
/*
* Simple sketch to simulate reading data from a Kamstrup
* AMS Meter.
*
* Created 24. October 2017 by Roar Fredriksen
*/
#include <HanReader.h>
#include <Kamstrup.h>
// The HAN Port reader
HanReader hanReader;
byte samples[] =
// [2017-10-20 04.43.32.368 - Received 229 (0xE5) bytes]
{
// List #1
0x7E, 0xA0, 0xE2, 0x2B, 0x21, 0x13, 0x23, 0x9A, 0xE6, 0xE7, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x07, 0xE2, 0x03, 0x04, 0x07, 0x14, 0x3B,
0x32, 0xFF, 0x80, 0x00, 0x00, 0x02, 0x19, 0x0A, 0x0E, 0x4B, 0x61, 0x6D, 0x73, 0x74, 0x72, 0x75, 0x70, 0x5F, 0x56, 0x30, 0x30, 0x30, 0x31, 0x09,
0x06, 0x01, 0x01, 0x00, 0x00, 0x05, 0xFF, 0x0A, 0x10, 0x35, 0x37, 0x30, 0x36, 0x35, 0x36, 0x37, 0x32, 0x37, 0x34, 0x33, 0x38, 0x39, 0x37, 0x30,
0x32, 0x09, 0x06, 0x01, 0x01, 0x60, 0x01, 0x01, 0xFF, 0x0A, 0x12, 0x36, 0x38, 0x34, 0x31, 0x31, 0x32, 0x31, 0x42, 0x4E, 0x32, 0x34, 0x33, 0x31,
0x30, 0x31, 0x30, 0x34, 0x30, 0x09, 0x06, 0x01, 0x01, 0x01, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x11, 0x28, 0x09, 0x06, 0x01, 0x01, 0x02, 0x07,
0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06, 0x01, 0x01, 0x03, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x84, 0x09, 0x06, 0x01, 0x01,
0x04, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06, 0x01, 0x01, 0x1F, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x05, 0x66, 0x09, 0x06,
0x01, 0x01, 0x33, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x03, 0x0C, 0x09, 0x06, 0x01, 0x01, 0x47, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x05, 0x5A,
0x09, 0x06, 0x01, 0x01, 0x20, 0x07, 0x00, 0xFF, 0x12, 0x00, 0xE0, 0x09, 0x06, 0x01, 0x01, 0x34, 0x07, 0x00, 0xFF, 0x12, 0x00, 0xDF, 0x09, 0x06,
0x01, 0x01, 0x48, 0x07, 0x00, 0xFF, 0x12, 0x00, 0xDF, 0xA1, 0xD8, 0x7E,
// List #2
0x7E, 0xA1, 0x2C, 0x2B, 0x21, 0x13, 0xFC, 0x04, 0xE6, 0xE7, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x07, 0xE2, 0x03, 0x04, 0x07, 0x15, 0x00,
0x05, 0xFF, 0x80, 0x00, 0x00, 0x02, 0x23, 0x0A, 0x0E, 0x4B, 0x61, 0x6D, 0x73, 0x74, 0x72, 0x75, 0x70, 0x5F, 0x56, 0x30, 0x30, 0x30, 0x31, 0x09,
0x06, 0x01, 0x01, 0x00, 0x00, 0x05, 0xFF, 0x0A, 0x10, 0x35, 0x37, 0x30, 0x36, 0x35, 0x36, 0x37, 0x32, 0x37, 0x34, 0x33, 0x38, 0x39, 0x37, 0x30,
0x32, 0x09, 0x06, 0x01, 0x01, 0x60, 0x01, 0x01, 0xFF, 0x0A, 0x12, 0x36, 0x38, 0x34, 0x31, 0x31, 0x32, 0x31, 0x42, 0x4E, 0x32, 0x34, 0x33, 0x31,
0x30, 0x31, 0x30, 0x34, 0x30, 0x09, 0x06, 0x01, 0x01, 0x01, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x0E, 0x3B, 0x09, 0x06, 0x01, 0x01, 0x02, 0x07,
0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06, 0x01, 0x01, 0x03, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x86, 0x09, 0x06, 0x01, 0x01,
0x04, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06, 0x01, 0x01, 0x1F, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x04, 0x21, 0x09, 0x06,
0x01, 0x01, 0x33, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x03, 0x0C, 0x09, 0x06, 0x01, 0x01, 0x47, 0x07, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x04, 0x1C,
0x09, 0x06, 0x01, 0x01, 0x20, 0x07, 0x00, 0xFF, 0x12, 0x00, 0xE2, 0x09, 0x06, 0x01, 0x01, 0x34, 0x07, 0x00, 0xFF, 0x12, 0x00, 0xE0, 0x09, 0x06,
0x01, 0x01, 0x48, 0x07, 0x00, 0xFF, 0x12, 0x00, 0xDF, 0x09, 0x06, 0x00, 0x01, 0x01, 0x00, 0x00, 0xFF, 0x09, 0x0C, 0x07, 0xE2, 0x03, 0x04, 0x07,
0x15, 0x00, 0x05, 0xFF, 0x80, 0x00, 0x00, 0x09, 0x06, 0x01, 0x01, 0x01, 0x08, 0x00, 0xFF, 0x06, 0x00, 0x1A, 0x40, 0x49, 0x09, 0x06, 0x01, 0x01,
0x02, 0x08, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06, 0x01, 0x01, 0x03, 0x08, 0x00, 0xFF, 0x06, 0x00, 0x00, 0x05, 0x64, 0x09, 0x06,
0x01, 0x01, 0x04, 0x08, 0x00, 0xFF, 0x06, 0x00, 0x02, 0x7B, 0x21, 0x20, 0x92, 0x7E
};
int sampleIndex = 0;
void setup() {
setupDebugPort();
// initialize the HanReader
// (passing no han port, as we are feeding data manually, but provide Serial for debugging)
hanReader.setup(NULL, &Serial);
}
void setupDebugPort()
{
// Initialize the Serial port for debugging
Serial.begin(115200);
while (!Serial) {}
Serial.setDebugOutput(true);
Serial.println("Serial1");
Serial.println("Serial debugging port initialized");
}
void loop() {
// Read one byte from the "port", and see if we got a full package
if (hanReader.read(samples[sampleIndex++]))
{
// Get the list identifier
int listSize = hanReader.getListSize();
Serial.println("");
Serial.print("List size: ");
Serial.print(listSize);
Serial.print(": ");
// Only care for the ACtive Power Imported, which is found in the first list
if (listSize == (int)Kamstrup::List1 || listSize == (int)Kamstrup::List2)
{
String id = hanReader.getString((int)Kamstrup_List1::ListVersionIdentifier);
Serial.println(id);
time_t time = hanReader.getPackageTime();
Serial.print("Time of the package is: ");
Serial.println(time);
int power = hanReader.getInt((int)Kamstrup_List1::ActiveImportPower);
Serial.print("Power consumtion is right now: ");
Serial.print(power);
Serial.println(" W");
float current[3];
current[0] = (float)hanReader.getInt((int)Kamstrup_List1::CurrentL1) / 100.0;
current[1] = (float)hanReader.getInt((int)Kamstrup_List1::CurrentL2) / 100.0;
current[2] = (float)hanReader.getInt((int)Kamstrup_List1::CurrentL3) / 100.0;
int voltage[3];
voltage[0] = hanReader.getInt((int)Kamstrup_List1::VoltageL1);
voltage[1] = hanReader.getInt((int)Kamstrup_List1::VoltageL2);
voltage[2] = hanReader.getInt((int)Kamstrup_List1::VoltageL3);
for (int i = 0; i < 3; i++)
{
Serial.print("L");
Serial.print(i + 1);
Serial.print(" is ");
Serial.print(voltage[i]);
Serial.print(" V (");
Serial.print(current[i]);
Serial.println(" A)");
}
if (listSize == (int)Kamstrup::List2)
{
time_t clock = hanReader.getTime((int)Kamstrup_List2::MeterClock);
Serial.print("Clock is: ");
Serial.println(clock);
}
}
}
delay(10);
if (sampleIndex >= sizeof(samples))
{
delay(2000);
sampleIndex = 0;
}
}

View File

@@ -1,31 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.16
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "KamstrupTest", "KamstrupTest.vcxproj", "{C5F80730-F44F-4478-BDAE-6634EFC2CA88}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HanReader", "..\HanReader\HanReader.vcxitems", "{CD0F5364-923B-49E4-8BE5-EA7D8A60DF80}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
..\HanReader\HanReader.vcxitems*{c5f80730-f44f-4478-bdae-6634efc2ca88}*SharedItemsImports = 4
..\HanReader\HanReader.vcxitems*{cd0f5364-923b-49e4-8be5-ea7d8a60df80}*SharedItemsImports = 9
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.ActiveCfg = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Debug|x86.Build.0 = Debug|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.ActiveCfg = Release|Win32
{C5F80730-F44F-4478-BDAE-6634EFC2CA88}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {852F88D2-3495-4048-9662-E3DDE77A7FD7}
EndGlobalSection
EndGlobal

View File

@@ -1,99 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{C5F80730-F44F-4478-BDAE-6634EFC2CA88}</ProjectGuid>
<RootNamespace>
</RootNamespace>
<ProjectName>KamstrupTest</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>
</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>
</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
<Import Project="..\HanReader\HanReader.vcxitems" Label="Shared" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)..\KamstrupTest;$(ProjectDir)..\HanReader\src;$(ProjectDir)..\..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\53ggn0bh.0i3\Micro Platforms\visualmicro\ide\libraries;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries;$(ProjectDir)..\..\..\..\..\Arduino\libraries;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\libb64;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\spiffs;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\umm_malloc;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\variants\generic;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\lwip\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\xtensa-lx106-elf;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\lib\gcc\xtensa-lx106-elf\4.8.2\include;$(ProjectDir)..\..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<ForcedIncludeFiles>$(ProjectDir)__vm\.KamstrupTest.vsarduino.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<PreprocessorDefinitions>__ESP8266_ESp8266__;__ESP8266_ESP8266__;_VMDEBUG=1;__ets__;ICACHE_FLASH;F_CPU=80000000L;LWIP_OPEN_SRC;ARDUINO=10801;ARDUINO_ESP8266_ESP01;ARDUINO_ARCH_ESP8266;ESP8266;__cplusplus=201103L;_VMICRO_INTELLISENSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectCapability Include="VisualMicro" />
</ItemGroup>
<ItemGroup>
<None Include="KamstrupTest.ino">
<FileType>CppCode</FileType>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="__vm\.KamstrupTest.vsarduino.h" />
</ItemGroup>
<PropertyGroup>
<DebuggerFlavor>VisualMicroDebugger</DebuggerFlavor>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties custom_esp8266_generic_UploadSpeed="115200" arduino.upload.port="COM3" />
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="KamstrupTest.ino" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="__vm\.KamstrupTest.vsarduino.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@@ -1,33 +0,0 @@
# Setup
1. Copy AmsToMqttBridge\Code\Arduino\HanReader\src to Arduino\libraries
2. Download the following libraries and put them in Arduino\libraries
- ESP8266WiFi
- PubSubClient
- ArduinoJson
The device will boot as an AP (Access Point) the first time it starts.
Connect to the AP (ESP-AMS-MQTT) and browse to the Web page http://192.168.4.1/
Fill inn the form on the Web page and hit 'Submit'
The ESP will reboot and connect to your network, publishing it's Firmware version to the 'esp/ams/fw/version' topic.
The ESP can be reset trough the topic 'esp/ams/reset' or by pulling GPIO 13 LOW.
# Firmware Over The Air upgrade
The ESP now supports FOTA upgrades. Compile your Arduino sketch to binary (Sketch > Export compiled binary)
Upload the .bin file to a Web Server and create a version file.
Example:
If your .bin file is named 'ams.bin', create a 'ams.version' in the same folder and write a version number different from the
version published on the 'esp/ams/fw/version' topic.
Then send the URL of the file, exluding the file ending, to the 'esp/ams/fw/update' topic like this:
`mosquitto_pub -t 'esp/ams/fw/update' -m 'http://your.local.webserver/ams'` if the bin and version file is in the root folder.
The ESP will publish upgrade information to the 'esp/ams/fw/info' topic.
# Output
All output is published on `esp/ams/#`

View File

@@ -1,524 +0,0 @@
/*
* Template sketch for a selv managed ESP8266 WiFi - MQTT setup.
*
* The ESP will boot and try to connect to a WiFi network.
* If it's not able to connect, it will boot up as an Access Point (AP).
*
* The user can then connect to the AP and browse to http://192.168.4.1
* and fill inn SSID/password, MQTT IP and meter type.
*
* The ESP will then store the information in EEPROM for later use.
* It is possible to reset the ESP trough MQTT or pulling GPIO13 HIGH.
*
* The sketch also supports Firmware OTA.
*
* Created 01. march 2017 by Ruben Andreassen
*/
/**
* EEPROM
*/
#include <EEPROM.h>
struct SettingsObject {
char ssid[51];
char password[51];
char mqtt[16];
int meter;
};
SettingsObject customSettings;
/**
* WIFI
*/
#include <ESP8266WiFi.h>
WiFiClient espClient;
const char* ssid_ap = "ESP-AMS-MQTT";
/**
* Access Point
*/
#include <ESP8266WebServer.h>
ESP8266WebServer server(80); //Server on port 80
bool apMode = false;
const char MAIN_page[] PROGMEM = R"=====(
<html>
<head>
<title>AMS - MQTT Bridge</title>
</head>
<body>
<form method="post" action="/store">
SSID <input type="text" name="ssid" /><br/>
Password <input type="text" name="password" /><br/>
MQTT IP <input type="text" name="mqtt" /><br/>
Meter <select name="meter">
<option value="0">Kamstrup</option>
<option value="1">Kaifa</option>
<!-- <option value="2">Aidon</option> -->
</select><br/>
<input type="submit" value="Submit" />
</form>
</body>
</html>
)=====";
/**
* Firmware updater
*/
#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>
const int FW_VERSION = 1010;
/**
* MQTT
*/
#include <PubSubClient.h>
PubSubClient client(espClient);
const char* mqtt_topic_fw_version = "esp/ams/fw/version";
const char* mqtt_topic_fw_update = "esp/ams/fw/update";
const char* mqtt_topic_fw_info = "esp/ams/fw/info";
const char* mqtt_topic_reset = "esp/ams/reset";
/**
* AMS
*/
#include <HanReader.h>
#include <Kamstrup.h>
#include <Kaifa.h>
// The HAN Port reader
HanReader hanReader;
const char* mqtt_topic = "esp/ams";
const char* mqtt_topic_PackageTime = "esp/ams/packagetime";
const char* mqtt_topic_ListSize = "esp/ams/listsize";
const char* mqtt_topic_ListVersionIdentifier = "esp/ams/listversionidentifier";
const char* mqtt_topic_MeterID = "esp/ams/meterid";
const char* mqtt_topic_MeterType = "esp/ams/metertype";
const char* mqtt_topic_ActiveImportPower = "esp/ams/activeimportpower";
const char* mqtt_topic_ActiveExportPower = "esp/ams/activeExportpower";
const char* mqtt_topic_ReactiveImportPower = "esp/ams/reactiveimportpower";
const char* mqtt_topic_ReactiveExportPower = "esp/ams/reactiveexportpower";
const char* mqtt_topic_CurrentL1 = "esp/ams/currentl1";
const char* mqtt_topic_CurrentL2 = "esp/ams/currentl2";
const char* mqtt_topic_CurrentL3 = "esp/ams/currentl3";
const char* mqtt_topic_VoltageL1 = "esp/ams/voltagel1";
const char* mqtt_topic_VoltageL2 = "esp/ams/voltagel2";
const char* mqtt_topic_VoltageL3 = "esp/ams/voltagel3";
const char* mqtt_topic_MeterClock = "esp/ams/meterclock";
const char* mqtt_topic_CumulativeActiveImportEnergy = "esp/ams/cumulativeactiveimportenergy";
const char* mqtt_topic_CumulativeActiveExportEnergy = "esp/ams/cumulativeactiveexportenergy";
const char* mqtt_topic_CumulativeReactiveImportEnergy = "esp/ams/cumulativereactiveimportenergy";
const char* mqtt_topic_CumulativeReactiveExportEnergy = "esp/ams/cumulativereactiveexportenergy";
String last_PackageTime = "";
String last_ListVersionIdentifier = "";
String last_MeterID = "";
String last_MeterType = "";
int last_ActiveImportPower = 0;
int last_ActiveExportPower = 0;
int last_ReactiveImportPower = 0;
int last_ReactiveExportPower = 0;
int last_CurrentL1 = 0;
int last_CurrentL2 = 0;
int last_CurrentL3 = 0;
int last_VoltageL1 = 0;
int last_VoltageL2 = 0;
int last_VoltageL3 = 0;
/**
* Setup and loop
*/
void setup() {
Serial.begin(9600);
pinMode(13, INPUT); //Reset PIN
loadCredentials();
if (!setupWiFi()) {
setupAP();
} else {
setupMqtt();
setupAms();
}
}
void loop() {
if (apMode) {
server.handleClient(); //Handle client requests
} else {
if (digitalRead(13) == LOW) {
clearCredentials();
}
loopMqtt();
if (customSettings.meter == 0) {
loopAmsKamstrup();
} else if (customSettings.meter == 1) {
loopAmsKaifa();
} /*else if (customSettings.meter == 2) {
Serial.println("Aidon selected");
// Not yet supported
}*/
}
}
/**
* EEPROM
*/
void clearCredentials() {
EEPROM.begin(512);
// write a 0 to all 512 bytes of the EEPROM
for (int i = 0; i < 512; i++) {
EEPROM.write(i, (char)0);
}
EEPROM.end();
for( int i = 0; i < sizeof(customSettings.ssid); ++i) {
customSettings.ssid[i] = (char)0;
customSettings.password[i] = (char)0;
}
for( int i = 0; i < sizeof(customSettings.mqtt); ++i) {
customSettings.mqtt[i] = (char)0;
}
customSettings.meter = -1;
WiFi.disconnect(1);
}
/** Load WLAN credentials from EEPROM */
void loadCredentials() {
EEPROM.begin(512);
EEPROM.get(0, customSettings);
customSettings.ssid[strlen(customSettings.ssid)] = '\0';
customSettings.password[strlen(customSettings.password)] = '\0';
EEPROM.end();
}
/** Store WLAN credentials to EEPROM */
void saveCredentials() {
EEPROM.begin(512);
EEPROM.put(0, customSettings);
EEPROM.commit();
EEPROM.end();
}
/**
* WIFI
*/
bool setupWiFi()
{
int retryCount = 0;
delay(10);
WiFi.mode(WIFI_STA);
WiFi.begin((char*)customSettings.ssid, (char*)customSettings.password);
while (WiFi.status() != WL_CONNECTED && retryCount < 20) {
delay(500);
Serial.println("Trying to connect to WiFi");
Serial.println(WiFi.status());
retryCount++;
}
Serial.println(WiFi.status());
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Could not connect");
return false;
} else {
Serial.println("Connected!");
return true;
}
}
/**
* Access Point
*/
void setupAP()
{
WiFi.mode(WIFI_AP); //Only Access point
WiFi.softAP(ssid_ap); //Start HOTspot removing password will disable security
IPAddress myIP = WiFi.softAPIP(); //Get IP address
Serial.print("HotSpt IP:");
Serial.println(myIP);
server.on("/", handleRoot); //Which routine to handle at root location
server.on("/store", handleSubmit); //Which routine to handle at root location
server.begin(); //Start server
apMode = true;
}
void handleRoot() {
String s = MAIN_page;
server.send(200, "text/html", s);
}
void handleSubmit() {
clearCredentials();
strncpy(customSettings.ssid, server.arg("ssid").c_str(), 51);
strncpy(customSettings.password, server.arg("password").c_str(), 51);
strncpy(customSettings.mqtt, server.arg("mqtt").c_str(), 16);
//strncpy(customSettings.meter, server.arg("meter").c_str(), 1);
customSettings.meter = server.arg("meter").toInt();
saveCredentials();
server.send(200, "text/plain", "Rebooting and connecting to your WiFi....");
delay(2000);
ESP.reset();
}
/**
* Firmware updater
*/
void checkForUpdates(String fwURL) {
String fwVersionURL = fwURL;
fwVersionURL.concat( ".version" );
client.publish(mqtt_topic_fw_info, ((String)"Checking for firmware updates.").c_str());
client.publish(mqtt_topic_fw_info, fwVersionURL.c_str());
HTTPClient httpClient;
httpClient.begin( fwVersionURL );
int httpCode = httpClient.GET();
if( httpCode == 200 ) {
String newFWVersion = httpClient.getString();
client.publish(mqtt_topic_fw_info, ((String)"Current firmware version").c_str());
client.publish(mqtt_topic_fw_info, ((String)FW_VERSION).c_str());
client.publish(mqtt_topic_fw_info, ((String)"Available firmware version").c_str());
client.publish(mqtt_topic_fw_info, newFWVersion.c_str());
int newVersion = newFWVersion.toInt();
if( newVersion > FW_VERSION ) {
client.publish(mqtt_topic_fw_info, ((String)"Preparing to update").c_str());
String fwImageURL = fwURL;
fwImageURL.concat( ".bin" );
client.publish(mqtt_topic_fw_info, ((String)"Downloading new firmware.").c_str());
client.publish(mqtt_topic_fw_info, fwImageURL.c_str());
t_httpUpdate_return ret = ESPhttpUpdate.update( fwImageURL );
switch(ret) {
case HTTP_UPDATE_FAILED:
//Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
client.publish(mqtt_topic_fw_info, ((String)HTTP_UPDATE_FAILED).c_str());
client.publish(mqtt_topic_fw_info, ((String)ESPhttpUpdate.getLastError()).c_str());
client.publish(mqtt_topic_fw_info, ESPhttpUpdate.getLastErrorString().c_str());
break;
case HTTP_UPDATE_NO_UPDATES:
client.publish(mqtt_topic_fw_info, ((String)HTTP_UPDATE_NO_UPDATES).c_str());
break;
}
}
else {
client.publish(mqtt_topic_fw_info, ((String)"Already on latest version").c_str());
}
}
else {
client.publish(mqtt_topic_fw_info, ((String)"Firmware version check failed, got HTTP response code").c_str());
client.publish(mqtt_topic_fw_info, ((String)httpCode).c_str());
}
httpClient.end();
}
/**
* MQTT
*/
void setupMqtt()
{
String input = (String)customSettings.mqtt;
// Define number of pieces
const int numberOfPieces = 4;
String pieces[numberOfPieces];
// Keep track of current position in array
int counter = 0;
// Keep track of the last comma so we know where to start the substring
int lastIndex = 0;
Serial.println(input);
Serial.println(input.length());
for (int i = 0; i < input.length(); i++) {
// Loop through each character and check if it's a comma
if (input.substring(i, i+1) == ".") {
// Grab the piece from the last index up to the current position and store it
pieces[counter] = input.substring(lastIndex, i);
// Update the last position and add 1, so it starts from the next character
lastIndex = i + 1;
// Increase the position in the array that we store into
counter++;
}
// If we're at the end of the string (no more commas to stop us)
if (i == input.length() - 1) {
// Grab the last part of the string from the lastIndex to the end
pieces[counter] = input.substring(lastIndex, i+1);
}
}
IPAddress server(pieces[0].toInt(), pieces[1].toInt(), pieces[2].toInt(), pieces[3].toInt());
client.setServer(server, 1883);
client.setCallback(callbackMqtt);
}
// Ensure the MQTT lirary gets some attention too
void loopMqtt()
{
if (!client.connected()) {
reconnectMqtt();
}
client.loop();
delay(100);
}
void callbackMqtt(char* topic, byte* payload, unsigned int length) {
/*for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}*/
if (strcmp(topic, mqtt_topic_fw_update) == 0) {
String fwURL = "";
for (int i = 0; i < length; i++) {
fwURL.concat( (char)payload[i] );
}
checkForUpdates(fwURL);
} else if (strcmp(topic, mqtt_topic_reset) == 0) {
clearCredentials();
delay(1000);
ESP.reset();
}
}
void reconnectMqtt() {
// Loop until we're reconnected
while (!client.connected()) {
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
Serial.println("MQTT reconnect");
// Attempt to connect
if (client.connect(clientId.c_str())) {
client.subscribe(mqtt_topic_reset);
client.subscribe(mqtt_topic_fw_update);
client.publish(mqtt_topic_fw_version, ((String)FW_VERSION).c_str());
}
else {
// Wait 5 seconds before retrying
delay(5000);
}
}
}
/**
* AMS
*/
void setupAms() {
// initialize the HanReader
if (customSettings.meter == 0) {
Serial.println("Kamstup selected");
hanReader.setup(&Serial, 2400, SERIAL_8N1, NULL);
}else if (customSettings.meter == 1) {
Serial.println("Kaifa selected");
hanReader.setup(&Serial);
} /*else if (customSettings.meter == 2) {
Serial.println("Aidon selected");
// Not yet supported
}*/ else {
Serial.println("Unknown meter type");
}
}
void loopAmsKamstrup() {
// Read one byte from the port, and see if we got a full package
if (hanReader.read())
{
// Get the list identifier
int listSize = hanReader.getListSize();
if (listSize == (int)Kamstrup::List1 || listSize == (int)Kamstrup::List2)
{
//Publish uptime to let the world know i'm alive
client.publish(mqtt_topic, ((String)millis()).c_str());
last_ListVersionIdentifier = publishNewValue(hanReader.getString((int)Kamstrup_List1::ListVersionIdentifier), last_ListVersionIdentifier, listSize, (int)Kamstrup::List2, mqtt_topic_ListVersionIdentifier);
last_MeterID = publishNewValue(hanReader.getString((int)Kamstrup_List1::MeterID), last_MeterID, listSize, (int)Kamstrup::List2, mqtt_topic_MeterID);
last_MeterType = publishNewValue(hanReader.getString((int)Kamstrup_List1::MeterType), last_MeterType, listSize, (int)Kamstrup::List2, mqtt_topic_MeterType);
last_PackageTime = publishNewValue((String)hanReader.getPackageTime(), last_PackageTime, listSize, (int)Kamstrup::List2, mqtt_topic_PackageTime);
last_ActiveImportPower = publishNewValue(hanReader.getInt((int)Kamstrup_List1::ActiveImportPower), last_ActiveImportPower, listSize, (int)Kamstrup::List2, mqtt_topic_ActiveImportPower);
last_ActiveExportPower = publishNewValue(hanReader.getInt((int)Kamstrup_List1::ActiveExportPower), last_ActiveExportPower, listSize, (int)Kamstrup::List2, mqtt_topic_ActiveExportPower);
last_ReactiveImportPower = publishNewValue(hanReader.getInt((int)Kamstrup_List1::ReactiveImportPower), last_ReactiveImportPower, listSize, (int)Kamstrup::List2, mqtt_topic_ReactiveImportPower);
last_ReactiveExportPower = publishNewValue(hanReader.getInt((int)Kamstrup_List1::ReactiveExportPower), last_ReactiveExportPower, listSize, (int)Kamstrup::List2, mqtt_topic_ReactiveExportPower);
last_CurrentL1 = publishNewValue(((float)hanReader.getInt((int)Kamstrup_List1::CurrentL1) / 100.0), last_CurrentL1, listSize, (int)Kamstrup::List2, mqtt_topic_CurrentL1);
last_CurrentL2 = publishNewValue(((float)hanReader.getInt((int)Kamstrup_List1::CurrentL2) / 100.0), last_CurrentL2, listSize, (int)Kamstrup::List2, mqtt_topic_CurrentL2);
last_CurrentL3 = publishNewValue(((float)hanReader.getInt((int)Kamstrup_List1::CurrentL3) / 100.0), last_CurrentL3, listSize, (int)Kamstrup::List2, mqtt_topic_CurrentL3);
last_VoltageL1 = publishNewValue(hanReader.getInt((int)Kamstrup_List1::VoltageL1), last_VoltageL1, listSize, (int)Kamstrup::List2, mqtt_topic_VoltageL1);
last_VoltageL2 = publishNewValue(hanReader.getInt((int)Kamstrup_List1::VoltageL2), last_VoltageL2, listSize, (int)Kamstrup::List2, mqtt_topic_VoltageL2);
last_VoltageL3 = publishNewValue(hanReader.getInt((int)Kamstrup_List1::VoltageL3), last_VoltageL3, listSize, (int)Kamstrup::List2, mqtt_topic_VoltageL3);
if (listSize == (int)Kamstrup::List2)
{
client.publish(mqtt_topic_MeterClock, ((String)hanReader.getTime((int)Kamstrup_List2::MeterClock)).c_str());
client.publish(mqtt_topic_CumulativeActiveImportEnergy, ((String)hanReader.getInt((int)Kamstrup_List2::CumulativeActiveImportEnergy)).c_str());
client.publish(mqtt_topic_CumulativeActiveExportEnergy, ((String)hanReader.getInt((int)Kamstrup_List2::CumulativeActiveExportEnergy)).c_str());
client.publish(mqtt_topic_CumulativeReactiveImportEnergy, ((String)hanReader.getInt((int)Kamstrup_List2::CumulativeReactiveImportEnergy)).c_str());
client.publish(mqtt_topic_CumulativeReactiveExportEnergy, ((String)hanReader.getInt((int)Kamstrup_List2::CumulativeReactiveExportEnergy)).c_str());
}
}
}
}
void loopAmsKaifa() {
//TODO
}
/*
* Only publish new values or when a spesific list size occours
*/
int publishNewValue(int currentValue, int lastValue, int currentListSize, int publishListSize, const char* topic) {
if (currentValue != lastValue || currentListSize == publishListSize) {
client.publish(topic, ((String)currentValue).c_str());
}
return currentValue;
}
float publishNewValue(float currentValue, float lastValue, int currentListSize, int publishListSize, const char* topic) {
if (currentValue != lastValue || currentListSize == publishListSize) {
client.publish(topic, ((String)currentValue).c_str());
}
return currentValue;
}
String publishNewValue(String currentValue, String lastValue, int currentListSize, int publishListSize, const char* topic) {
if (currentValue != lastValue || currentListSize == publishListSize) {
client.publish(topic, currentValue.c_str());
}
return currentValue;
}

View File

@@ -1,7 +0,0 @@
[Dd]ebug/
[Rr]elease/
# Visual Studio 2015 cache/options directory
.vs/
__vm/
*.user

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 KiB

View File

@@ -1,37 +0,0 @@
#include "Crc16.h"
Crc16Class::Crc16Class()
{
unsigned short value;
unsigned short temp;
for (unsigned short i = 0; i < 256; ++i)
{
value = 0;
temp = i;
for (byte j = 0; j < 8; ++j)
{
if (((value ^ temp) & 0x0001) != 0)
{
value = (ushort)((value >> 1) ^ polynomial);
}
else
{
value >>= 1;
}
temp >>= 1;
}
table[i] = value;
}
}
unsigned short Crc16Class::ComputeChecksum(byte *data, int start, int length)
{
ushort fcs = 0xffff;
for (int i = start; i < (start + length); i++)
{
byte index = (fcs ^ data[i]) & 0xff;
fcs = (ushort)((fcs >> 8) ^ table[index]);
}
fcs ^= 0xffff;
return fcs;
}

View File

@@ -1,23 +0,0 @@
#ifndef _CRC16_h
#define _CRC16_h
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
class Crc16Class
{
public:
Crc16Class();
unsigned short ComputeChecksum(byte *data, int start, int length);
protected:
private:
const unsigned short polynomial = 0x8408;
unsigned short table[256];
};
#endif

View File

@@ -1,154 +0,0 @@
#include "DlmsReader.h"
DlmsReader::DlmsReader()
{
//this->Clear();
}
void DlmsReader::Clear()
{
this->position = 0;
this->dataLength = 0;
this->destinationAddressLength = 0;
this->sourceAddressLength = 0;
this->frameFormatType = 0;
}
bool DlmsReader::Read(byte data)
{
if (position == 0 && data != 0x7E)
{
// we haven't started yet, wait for the start flag (no need to capture any data yet)
return false;
}
else
{
// We have completed reading of one package, so clear and be ready for the next
if (dataLength > 0 && position >= dataLength + 2)
Clear();
// Check if we're about to run into a buffer overflow
if (position >= DLMS_READER_BUFFER_SIZE)
Clear();
// Check if this is a second start flag, which indicates the previous one was a stop from the last package
if (position == 1 && data == 0x7E)
{
// just return, we can keep the one byte we had in the buffer
return false;
}
// We have started, so capture every byte
buffer[position++] = data;
if (position == 1)
{
// This was the start flag, we're not done yet
return false;
}
else if (position == 2)
{
// Capture the Frame Format Type
frameFormatType = (byte)(data & 0xF0);
if (!IsValidFrameFormat(frameFormatType))
Clear();
return false;
}
else if (position == 3)
{
// Capture the length of the data package
dataLength = ((buffer[1] & 0x0F) << 8) | buffer[2];
return false;
}
else if (destinationAddressLength == 0)
{
// Capture the destination address
destinationAddressLength = GetAddress(3, destinationAddress, 0, DLMS_READER_MAX_ADDRESS_SIZE);
if (destinationAddressLength > 3)
Clear();
return false;
}
else if (sourceAddressLength == 0)
{
// Capture the source address
sourceAddressLength = GetAddress(3 + destinationAddressLength, sourceAddress, 0, DLMS_READER_MAX_ADDRESS_SIZE);
if (sourceAddressLength > 3)
Clear();
return false;
}
else if (position == 4 + destinationAddressLength + sourceAddressLength + 2)
{
// Verify the header checksum
ushort headerChecksum = GetChecksum(position - 3);
if (headerChecksum != Crc16.ComputeChecksum(buffer, 1, position - 3))
Clear();
return false;
}
else if (position == dataLength + 1)
{
// Verify the data package checksum
ushort checksum = this->GetChecksum(position - 3);
if (checksum != Crc16.ComputeChecksum(buffer, 1, position - 3))
Clear();
return false;
}
else if (position == dataLength + 2)
{
// We're done, check the stop flag and signal we're done
if (data == 0x7E)
return true;
else
{
Clear();
return false;
}
}
}
return false;
}
bool DlmsReader::IsValidFrameFormat(byte frameFormatType)
{
return frameFormatType == 0xA0;
}
int DlmsReader::GetRawData(byte *dataBuffer, int start, int length)
{
if (dataLength > 0 && position == dataLength + 2)
{
int headerLength = 3 + destinationAddressLength + sourceAddressLength + 2;
int bytesWritten = 0;
for (int i = headerLength + 1; i < dataLength - 1; i++)
{
dataBuffer[i + start - headerLength - 1] = buffer[i];
bytesWritten++;
}
return bytesWritten;
}
else
return 0;
}
int DlmsReader::GetAddress(int addressPosition, byte* addressBuffer, int start, int length)
{
int addressBufferPos = start;
for (int i = addressPosition; i < position; i++)
{
addressBuffer[addressBufferPos++] = buffer[i];
// LSB=1 means this was the last address byte
if ((buffer[i] & 0x01) == 0x01)
break;
// See if we've reached last byte, try again when we've got more data
else if (i == position - 1)
return 0;
}
return addressBufferPos - start;
}
ushort DlmsReader::GetChecksum(int checksumPosition)
{
return (ushort)(buffer[checksumPosition + 2] << 8 |
buffer[checksumPosition + 1]);
}

View File

@@ -1,42 +0,0 @@
#ifndef _DLMSREADER_h
#define _DLMSREADER_h
#include "Crc16.h"
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#define DLMS_READER_BUFFER_SIZE 256
#define DLMS_READER_MAX_ADDRESS_SIZE 5
class DlmsReader
{
public:
DlmsReader();
bool Read(byte data);
int GetRawData(byte *buffer, int start, int length);
protected:
Crc16Class Crc16;
private:
byte buffer[DLMS_READER_BUFFER_SIZE];
int position;
int dataLength;
byte frameFormatType;
byte destinationAddress[DLMS_READER_MAX_ADDRESS_SIZE];
byte destinationAddressLength;
byte sourceAddress[DLMS_READER_MAX_ADDRESS_SIZE];
byte sourceAddressLength;
void Clear();
int GetAddress(int addressPosition, byte* buffer, int start, int length);
unsigned short GetChecksum(int checksumPosition);
bool IsValidFrameFormat(byte frameFormatType);
void WriteBuffer();
};
#endif

View File

@@ -1,191 +0,0 @@
/*
* Simple sketch to read MBus data from electrical meter
* As the protocol requires "Even" parity, and this is
* only supported on the hardware port of the ESP8266,
* we'll have to use Serial1 for debugging.
*
* This means you'll have to program the ESP using the
* regular RX/TX port, and then you must remove the FTDI
* and connect the MBus signal from the meter to the
* RS pin. The FTDI/RX can be moved to Pin2 for debugging
*
* Created 14. september 2017 by Roar Fredriksen
*/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include "HanReader.h"
// The HAN Port reader
HanReader hanReader;
// WiFi and MQTT endpoints
const char* ssid = "Roar_Etne";
const char* password = "**********";
const char* mqtt_server = "192.168.10.203";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
setupDebugPort();
setupWiFi();
setupMqtt();
// initialize the HanReader
// (passing Serial as the HAN port and Serial1 for debugging)
hanReader.setup(&Serial, &Serial1);
}
void setupMqtt()
{
client.setServer(mqtt_server, 1883);
}
void setupDebugPort()
{
// Initialize the Serial1 port for debugging
// (This port is fixed to Pin2 of the ESP8266)
Serial1.begin(115200);
while (!Serial1) {}
Serial1.setDebugOutput(true);
Serial1.println("Serial1");
Serial1.println("Serial debugging port initialized");
}
void setupWiFi()
{
// Initialize wifi
Serial1.print("Connecting to ");
Serial1.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial1.print(".");
}
Serial1.println("");
Serial1.println("WiFi connected");
Serial1.println("IP address: ");
Serial1.println(WiFi.localIP());
}
void loop() {
loopMqtt();
// Read one byt from the port, and see if we got a full package
if (hanReader.read())
{
// Get the list identifier
List list = hanReader.getList();
Serial1.println("");
Serial1.print("List #");
Serial1.print((byte)list, HEX);
Serial1.print(": ");
// Make sure we got a valid list
if (list == List::ListUnknown)
{
Serial1.println("Invalid list");
return;
}
// Get the timestamp (as unix time) from the package
time_t time = hanReader.getPackageTime();
// Define a json object to keep the data
StaticJsonBuffer<500> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
// Any generic useful info here
root["id"] = "espdebugger";
root["up"] = millis();
root["t"] = time;
// Add a sub-structure to the json object,
// to keep the data from the meter itself
JsonObject& data = root.createNestedObject("data");
// Based on the list number, get all details
// according to OBIS specifications for the meter
if (list == List::List1)
{
data["P"] = hanReader.getInt(List1_ObisObjects::ActivePowerImported);
}
else if (list == List::List2)
{
data["lv"] = hanReader.getString(List2_ObisObjects::ObisListVersionIdentifier);
data["id"] = hanReader.getString(List2_ObisObjects::MeterID);
data["type"] = hanReader.getString(List2_ObisObjects::MeterType);
data["P"] = hanReader.getInt(List2_ObisObjects::ActivePowerImported);
data["Q"] = hanReader.getInt(List2_ObisObjects::ReactivePowerImported);
data["I1"] = hanReader.getInt(List2_ObisObjects::CurrentPhaseL1);
data["I2"] = hanReader.getInt(List2_ObisObjects::CurrentPhaseL2);
data["I3"] = hanReader.getInt(List2_ObisObjects::CurrentPhaseL3);
data["U1"] = hanReader.getInt(List2_ObisObjects::VoltagePhaseL1);
data["U2"] = hanReader.getInt(List2_ObisObjects::VoltagePhaseL1);
data["U3"] = hanReader.getInt(List2_ObisObjects::VoltagePhaseL1);
}
else if (list == List::List3)
{
data["lv"] = hanReader.getString(List3_ObisObjects::ObisListVersionIdentifier);;
data["id"] = hanReader.getString(List3_ObisObjects::MeterID);
data["type"] = hanReader.getString(List3_ObisObjects::MeterType);
data["P"] = hanReader.getInt(List3_ObisObjects::ActivePowerImported);
data["Q"] = hanReader.getInt(List3_ObisObjects::ReactivePowerImported);
data["I1"] = hanReader.getInt(List3_ObisObjects::CurrentPhaseL1);
data["I2"] = hanReader.getInt(List3_ObisObjects::CurrentPhaseL2);
data["I3"] = hanReader.getInt(List3_ObisObjects::CurrentPhaseL3);
data["U1"] = hanReader.getInt(List3_ObisObjects::VoltagePhaseL1);
data["U2"] = hanReader.getInt(List3_ObisObjects::VoltagePhaseL1);
data["U3"] = hanReader.getInt(List3_ObisObjects::VoltagePhaseL1);
data["tPI"] = hanReader.getInt(List3_ObisObjects::TotalActiveEnergyImported);
data["tPO"] = hanReader.getInt(List3_ObisObjects::TotalActiveEnergyExported);
data["tQI"] = hanReader.getInt(List3_ObisObjects::TotalReactiveEnergyImported);
data["tQO"] = hanReader.getInt(List3_ObisObjects::TotalReactiveEnergyExported);
}
// Write the json to the debug port
root.printTo(Serial1);
Serial1.println();
// Publish the json to the MQTT server
char msg[1024];
root.printTo(msg, 1024);
client.publish("sensors/out/espdebugger", msg);
}
}
// Ensure the MQTT lirary gets some attention too
void loopMqtt()
{
if (!client.connected()) {
reconnectMqtt();
}
client.loop();
}
void reconnectMqtt() {
// Loop until we're reconnected
while (!client.connected()) {
Serial1.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP8266Client")) {
Serial1.println("connected");
// Once connected, publish an announcement...
// client.publish("sensors", "hello world");
// ... and resubscribe
// client.subscribe("inTopic");
}
else {
Serial1.print("failed, rc=");
Serial1.print(client.state());
Serial1.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}

View File

@@ -1,22 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26228.4
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ESPDebugger", "ESPDebugger.vcxproj", "{B9C3E8F6-86B2-4D70-89ED-D6A7B8C7AC8D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B9C3E8F6-86B2-4D70-89ED-D6A7B8C7AC8D}.Debug|x86.ActiveCfg = Debug|Win32
{B9C3E8F6-86B2-4D70-89ED-D6A7B8C7AC8D}.Debug|x86.Build.0 = Debug|Win32
{B9C3E8F6-86B2-4D70-89ED-D6A7B8C7AC8D}.Release|x86.ActiveCfg = Release|Win32
{B9C3E8F6-86B2-4D70-89ED-D6A7B8C7AC8D}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -1,101 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{B9C3E8F6-86B2-4D70-89ED-D6A7B8C7AC8D}</ProjectGuid>
<RootNamespace>
</RootNamespace>
<ProjectName>ESPDebugger</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>
</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>
</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\..\..\Arduino\libraries\ArduinoJson\src;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src;$(ProjectDir)..\..\..\..\Arduino\libraries\PubSubClient\src;$(ProjectDir)..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\pabjyzh5.4hi\Micro Platforms\visualmicro\ide\libraries;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries;$(ProjectDir)..\..\..\..\Arduino\libraries;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\libb64;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\spiffs;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266\umm_malloc;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\variants\generic;$(ProjectDir)..\ESPDebugger;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\include;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\lwip\include;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\xtensa-lx106-elf;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\lib\gcc\xtensa-lx106-elf\4.8.2\include;$(ProjectDir)..\..\..\..\..\..\AppData\Local\arduino15\packages\esp8266\hardware\esp8266\2.3.0\tools\sdk\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<ForcedIncludeFiles>$(ProjectDir)__vm\.ESPDebugger.vsarduino.h;%(ForcedIncludeFiles)</ForcedIncludeFiles>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<PreprocessorDefinitions>__ESP8266_ESp8266__;__ESP8266_ESP8266__;_VMDEBUG=1;__ets__;ICACHE_FLASH;F_CPU=80000000L;LWIP_OPEN_SRC;ARDUINO=10801;ARDUINO_ESP8266_ESP01;ARDUINO_ARCH_ESP8266;ESP8266;__cplusplus=201103L;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ProjectCapability Include="VisualMicro" />
</ItemGroup>
<ItemGroup>
<None Include="ESPDebugger.ino">
<FileType>CppCode</FileType>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Crc16.h" />
<ClInclude Include="DlmsReader.h" />
<ClInclude Include="HanReader.h" />
<ClInclude Include="KaifaHan.h" />
<ClInclude Include="__vm\.ESPDebugger.vsarduino.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Crc16.cpp" />
<ClCompile Include="DlmsReader.cpp" />
<ClCompile Include="HanReader.cpp" />
<ClCompile Include="KaifaHan.cpp" />
</ItemGroup>
<PropertyGroup>
<DebuggerFlavor>VisualMicroDebugger</DebuggerFlavor>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@@ -1,51 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="ESPDebugger.ino" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="__vm\.ESPDebugger.vsarduino.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="HanReader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="KaifaHan.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DlmsReader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Crc16.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="HanReader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="KaifaHan.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Crc16.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DlmsReader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@@ -1,70 +0,0 @@
#include "HanReader.h"
HanReader::HanReader()
{
}
void HanReader::setup(HardwareSerial *hanPort, unsigned long baudrate, SerialConfig config, Stream *debugPort)
{
// Initialize H/W serial port for MBus communication
hanPort->begin(baudrate, config);
while (!hanPort) {}
bytesRead = 0;
han = hanPort;
debug = debugPort;
if (debug) debug->println("MBUS serial setup complete");
}
void HanReader::setup(HardwareSerial *hanPort)
{
setup(hanPort, 2400, SERIAL_8E1, NULL);
}
void HanReader::setup(HardwareSerial *hanPort, Stream *debugPort)
{
setup(hanPort, 2400, SERIAL_8E1, debugPort);
}
bool HanReader::read()
{
if (han->available())
{
byte newByte = han->read();
if (reader.Read(newByte))
{
bytesRead = reader.GetRawData(buffer, 0, 512);
list = (List)kaifa.GetListID(buffer, 0, bytesRead);
return true;
}
}
return false;
}
List HanReader::getList()
{
return list;
}
time_t HanReader::getPackageTime()
{
return kaifa.GetPackageTime(buffer, 0, bytesRead);
}
int HanReader::getInt(List1_ObisObjects objectId) { return getInt((int)objectId); }
int HanReader::getInt(List2_ObisObjects objectId) { return getInt((int)objectId); }
int HanReader::getInt(List3_ObisObjects objectId) { return getInt((int)objectId); }
int HanReader::getInt(int objectId)
{
return kaifa.GetInt(objectId, buffer, 0, bytesRead);
}
String HanReader::getString(List1_ObisObjects objectId) { return getString((int)objectId); }
String HanReader::getString(List2_ObisObjects objectId) { return getString((int)objectId); }
String HanReader::getString(List3_ObisObjects objectId) { return getString((int)objectId); }
String HanReader::getString(int objectId)
{
return kaifa.GetString(objectId, buffer, 0, bytesRead);
}

View File

@@ -1,45 +0,0 @@
#ifndef _HANREADER_h
#define _HANREADER_h
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include "KaifaHan.h"
#include "DlmsReader.h"
class HanReader
{
public:
HanReader();
void setup(HardwareSerial *hanPort);
void setup(HardwareSerial *hanPort, Stream *debugPort);
void setup(HardwareSerial *hanPort, unsigned long baudrate, SerialConfig config, Stream *debugPort);
bool read();
List getList();
time_t getPackageTime();
int getInt(List1_ObisObjects objectId);
int getInt(List2_ObisObjects objectId);
int getInt(List3_ObisObjects objectId);
int getInt(int objectId);
String getString(List1_ObisObjects objectId);
String getString(List2_ObisObjects objectId);
String getString(List3_ObisObjects objectId);
String getString(int objectId);
private:
Stream *debug;
HardwareSerial *han;
byte buffer[512];
int bytesRead;
KaifaHan kaifa;
DlmsReader reader;
List list;
};
#endif

View File

@@ -1,104 +0,0 @@
#include "KaifaHan.h"
byte KaifaHan::GetListID(byte *buffer, int start, int length)
{
if (length > 23)
{
byte list = buffer[start + 23];
if (list == (byte)List::List1) return (byte)List::List1;
if (list == (byte)List::List2) return (byte)List::List2;
if (list == (byte)List::List3) return (byte)List::List3;
}
return (byte)List::ListUnknown;
}
long KaifaHan::GetPackageTime(byte *buffer, int start, int length)
{
const int timeStart = 10;
int year = buffer[start + timeStart] << 8 |
buffer[start + timeStart + 1];
int month = buffer[start + timeStart + 2];
int day = buffer[start + timeStart + 3];
int hour = buffer[start + timeStart + 5];
int minute = buffer[start + timeStart + 6];
int second = buffer[start + timeStart + 7];
return toUnixTime(year, month, day, hour, minute, second);
}
int KaifaHan::GetInt(int dataPosition, byte *buffer, int start, int length)
{
int valuePosition = findValuePosition(dataPosition, buffer, start, length);
if (valuePosition > 0)
{
int value = 0;
for (int i = valuePosition + 1; i < valuePosition + 5; i++)
{
value = value << 8 | buffer[i];
}
return value;
}
return 0;
}
int KaifaHan::findValuePosition(int dataPosition, byte *buffer, int start, int length)
{
const int dataStart = 24;
for (int i=start + dataStart; i<length; i++)
{
if (dataPosition-- == 0)
return i;
else if (buffer[i] == 0x09) // string value
i += buffer[i+1] + 1;
else if (buffer[i] == 0x06) // integer value
i += 4;
else
return 0; // unknown data type found
}
return 0;
}
String KaifaHan::GetString(int dataPosition, byte *buffer, int start, int length)
{
int valuePosition = findValuePosition(dataPosition, buffer, start, length);
if (valuePosition > 0)
{
String value = String("");
for (int i = valuePosition + 2; i < valuePosition + buffer[valuePosition + 1]; i++)
{
value += String((char)buffer[i]);
}
return value;
}
return String("");
}
time_t KaifaHan::toUnixTime(int year, int month, int day, int hour, int minute, int second)
{
byte daysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
long secondsPerMinute = 60;
long secondsPerHour = secondsPerMinute * 60;
long secondsPerDay = secondsPerHour * 24;
long time = (year - 1970) * secondsPerDay * 365L;
for (int yearCounter = 1970; yearCounter<year; yearCounter++)
if ((yearCounter % 4 == 0) && ((yearCounter % 100 != 0) || (yearCounter % 400 == 0)))
time += secondsPerDay;
if (month > 2 && (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)))
time += secondsPerDay;
for (int monthCounter = 1; monthCounter<month; monthCounter++)
time += daysInMonth[monthCounter - 1] * secondsPerDay;
time += (day - 1) * secondsPerDay;
time += hour * secondsPerHour;
time += minute * secondsPerMinute;
time += second;
return (time_t)time;
}

View File

@@ -1,73 +0,0 @@
#ifndef _KAIFAHAN_h
#define _KAIFAHAN_h
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
class KaifaHan
{
public:
byte GetListID(byte *buffer, int start, int length);
long GetPackageTime(byte *buffer, int start, int length);
int GetInt(int dataPosition, byte *buffer, int start, int length);
String GetString(int dataPosition, byte *buffer, int start, int length);
protected:
private:
int findValuePosition(int dataPosition, byte *buffer, int start, int length);
time_t toUnixTime(int year, int month, int day, int hour, int minute, int second);
};
enum class List : byte {
ListUnknown = 0x00,
List1 = 0x01,
List2 = 0x0D,
List3 = 0x12
};
enum class List1_ObisObjects {
ActivePowerImported
};
enum class List2_ObisObjects {
ObisListVersionIdentifier,
MeterID,
MeterType,
ActivePowerImported,
ActivePowerExported,
ReactivePowerImported,
ReactivePowerExported,
CurrentPhaseL1,
CurrentPhaseL2,
CurrentPhaseL3,
VoltagePhaseL1,
VoltagePhaseL2,
VoltagePhaseL3
};
enum class List3_ObisObjects {
ObisListVersionIdentifier,
MeterID,
MeterType,
ActivePowerImported,
ActivePowerExported,
ReactivePowerImported,
ReactivePowerExported,
CurrentPhaseL1,
CurrentPhaseL2,
CurrentPhaseL3,
VoltagePhaseL1,
VoltagePhaseL2,
VoltagePhaseL3,
ClockAndDate,
TotalActiveEnergyImported,
TotalActiveEnergyExported,
TotalReactiveEnergyImported,
TotalReactiveEnergyExported
};
#endif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -1,253 +0,0 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
appsettings.secrets.json

View File

@@ -1,28 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26228.4
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HanDebugger", "HanDebugger\HanDebugger.csproj", "{EB8BDAFE-8991-4E9E-9E7E-F9BE61EBC122}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HanDebuggerTest", "HanDebuggerTest\HanDebuggerTest.csproj", "{B22621C3-84EB-46DC-8F8D-E01D0A9923C7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EB8BDAFE-8991-4E9E-9E7E-F9BE61EBC122}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EB8BDAFE-8991-4E9E-9E7E-F9BE61EBC122}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EB8BDAFE-8991-4E9E-9E7E-F9BE61EBC122}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EB8BDAFE-8991-4E9E-9E7E-F9BE61EBC122}.Release|Any CPU.Build.0 = Release|Any CPU
{B22621C3-84EB-46DC-8F8D-E01D0A9923C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B22621C3-84EB-46DC-8F8D-E01D0A9923C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B22621C3-84EB-46DC-8F8D-E01D0A9923C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B22621C3-84EB-46DC-8F8D-E01D0A9923C7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>

View File

@@ -1,56 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HanDebugger
{
public static class Crc16
{
private const ushort polynomial = 0x8408;
private static ushort[] table = new ushort[256];
static Crc16()
{
ushort value;
ushort temp;
for (ushort i = 0; i < table.Length; ++i)
{
value = 0;
temp = i;
for (byte j = 0; j < 8; ++j)
{
if (((value ^ temp) & 0x0001) != 0)
{
value = (ushort)((value >> 1) ^ polynomial);
}
else
{
value >>= 1;
}
temp >>= 1;
}
table[i] = value;
}
}
public static ushort ComputeChecksum(byte[] data)
{
return ComputeChecksum(data, 0, data.Length);
}
public static ushort ComputeChecksum(byte[] data, int start, int length)
{
ushort fcs = 0xffff;
for (int i = start; i < (start + length); i++)
{
var index = (fcs ^ data[i]) & 0xff;
fcs = (ushort)((fcs >> 8) ^ table[index]);
}
fcs ^= 0xffff;
return fcs;
}
}
}

View File

@@ -1,166 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HanDebugger
{
public class DlmsReader
{
private byte[] buffer;
private int position;
private int dataLength;
private byte frameFormatType;
private byte[] destinationAddress;
private byte[] sourceAddress;
public DlmsReader()
{
Clear();
}
private void Clear()
{
buffer = new byte[256];
position = 0;
dataLength = 0;
destinationAddress = null;
sourceAddress = null;
frameFormatType = 0;
}
public bool Read(byte data)
{
if (position == 0 && data != 0x7E)
{
// we haven't started yet, wait for the start flag (no need to capture any data yet)
return false;
}
else
{
// We have completed reading of one package, so clear and be ready for the next
if (dataLength > 0 && position >= dataLength + 2)
Clear();
// Check if we're about to run into a buffer overflow
if (position >= buffer.Length)
Clear();
// Check if this is a second start flag, which indicates the previous one was a stop from the last package
if (position == 1 && data == 0x7E)
{
// just return, we can keep the one byte we had in the buffer
return false;
}
// We have started, so capture every byte
buffer[position++] = data;
if (position == 1)
{
// This was the start flag, we're not done yet
return false;
}
else if (position == 2)
{
// Capture the Frame Format Type
frameFormatType = (byte)(data & 0xF0);
if (!IsValidFrameFormat(frameFormatType))
Clear();
return false;
}
else if (position == 3)
{
// Capture the length of the data package
dataLength = ((buffer[1] & 0x0F) << 8) | buffer[2];
return false;
}
else if (destinationAddress == null)
{
// Capture the destination address
destinationAddress = GetAddress(3);
if (destinationAddress?.Length > 3)
Clear();
return false;
}
else if (sourceAddress == null)
{
// Capture the source address
sourceAddress = GetAddress(3 + destinationAddress.Length);
if (sourceAddress?.Length > 3)
Clear();
return false;
}
else if (position == 4 + destinationAddress.Length + sourceAddress.Length + 2)
{
// Verify the header checksum
var headerChecksum = GetChecksum(position - 3);
if (headerChecksum != Crc16.ComputeChecksum(buffer, 1, position - 3))
Clear();
return false;
}
else if (position == dataLength + 1)
{
// Verify the data package checksum
var checksum = GetChecksum(position - 3);
if (checksum != Crc16.ComputeChecksum(buffer, 1, position - 3))
Clear();
return false;
}
else if (position == dataLength + 2)
{
// We're done, check the stop flag and signal we're done
if (data == 0x7E)
return true;
else
{
Clear();
return false;
}
}
}
return false;
}
private bool IsValidFrameFormat(byte frameFormatType)
{
return frameFormatType == 0xA0;
}
public byte[] GetRawData()
{
if (dataLength > 0 && position == dataLength + 2)
{
var headerLength = 3 + destinationAddress.Length + sourceAddress.Length + 2;
return buffer.Skip(headerLength + 1).Take(dataLength - headerLength - 2).ToArray();
}
else
return null;
}
private byte[] GetAddress(int addressPosition)
{
List<byte> address = new List<byte>();
for (int i = addressPosition; i < position; i++)
{
address.Add(buffer[i]);
// LSB=1 means this was the last address byte
if ((buffer[i] & 0x01) == 0x01)
break;
// See if we've reached last byte, try again when we've got more data
else if (i == position - 1)
return null;
}
return address.ToArray();
}
private ushort GetChecksum(int checksumPosition)
{
return (ushort)(buffer[checksumPosition + 2] << 8 |
buffer[checksumPosition + 1]);
}
}
}

View File

@@ -1,64 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{EB8BDAFE-8991-4E9E-9E7E-F9BE61EBC122}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>HanDebugger</RootNamespace>
<AssemblyName>HanDebugger</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Crc16.cs" />
<Compile Include="KaifaHanBeta.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Reader.cs" />
<Compile Include="DlmsReader.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,70 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HanDebugger
{
// As it seems Kaifa/Valider put some premature firmware on my AMS,
// there's need for some dirty hacks to get any information
public class KaifaHanBeta
{
public const byte ListUnknown = 0x00;
public const byte List1 = 0x01;
public const byte List2 = 0x0D;
public const byte List3 = 0x12;
public static byte GetListID(byte[] package, int start, int length)
{
switch (package[start + 23])
{
case List1:
case List2:
case List3:
return package[start + 23];
default:
return 0x00;
}
}
public static double GetPackageTime(byte[] package, int start, int length)
{
const int timeStart = 10;
int year = package[start + timeStart] << 8 |
package[start + timeStart + 1];
int month = package[start + timeStart + 2];
int day = package[start + timeStart + 3];
int hour = package[start + timeStart + 5];
int minute = package[start + timeStart + 6];
int second = package[start + timeStart + 7];
return new DateTime(year, month, day, hour, minute, second).Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds;
}
public static int GetInt(int dataPosition, byte[] buffer, int start, int length)
{
const int dataStart = 24;
int value = 0;
int foundPosition = 0;
for (int i = start + dataStart; i < start + length; i++)
{
if (foundPosition == 0)
{
if (buffer[i] == 0x06)
foundPosition = i;
}
else
{
value = value << 8 |
buffer[i];
if (i == foundPosition + 4)
return value;
}
}
return 0;
}
}
}

View File

@@ -1,63 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace HanDebugger
{
class Program
{
static List<byte> gBuffer = new List<byte>();
static void Main(string[] args)
{
SerialPort vPort = new SerialPort("COM3", 2400, Parity.Even, 8, StopBits.One);
vPort.DataReceived += VPort_DataReceived;
vPort.Open();
while (true)
Thread.Sleep(100);
}
private static void VPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var vPort = sender as SerialPort;
byte[] vBuffer = new byte[1000];
int vBytesRead = vPort.Read(vBuffer, 0, vBuffer.Length);
for (int i = 0; i < vBytesRead; i++)
{
gBuffer.Add(vBuffer[i]);
// If we're catching a '7E' and it's not the beginning, it must be the end
if (gBuffer.Count > 1 && vBuffer[i] == 0x7e)
WriteAndEmptyBuffer();
}
}
private static void WriteAndEmptyBuffer()
{
Console.WriteLine();
Console.WriteLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} - Received {gBuffer.Count} (0x{gBuffer.Count:X2}) bytes]");
int j = 0;
foreach (var vByte in gBuffer)
{
Console.Write(string.Format("{0:X2} ", (int)vByte));
if (++j % 8 == 0)
Console.Write(" ");
if (j % 24 == 0)
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine();
gBuffer.Clear();
}
}
}

View File

@@ -1,36 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("HanDebugger")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("HanDebugger")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("eb8bdafe-8991-4e9e-9e7e-f9be61ebc122")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,72 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HanDebugger
{
public class Reader
{
private int position;
private int dataLength;
private byte[] buffer;
public Reader(byte[] buffer)
{
this.buffer = buffer;
position = 0;
dataLength = ((buffer[1] & 0x0F) << 8) | buffer[2];
}
public bool IsValid()
{
return IsValidStart() &&
IsValidLength() &&
IsValidHeaderChecksum() &&
IsValidChecksum();
}
private bool IsValidChecksum()
{
ushort checkSum = GetChecksum(dataLength - 2);
return checkSum == Crc16.ComputeChecksum(buffer, 1, dataLength - 2);
}
private bool IsValidHeaderChecksum()
{
int headerLength = GetHeaderLength();
ushort checkSum = GetChecksum(headerLength);
return checkSum == Crc16.ComputeChecksum(buffer, 1, headerLength);
}
private ushort GetChecksum(int checksumPosition)
{
return (ushort)(buffer[checksumPosition + 2] << 8 |
buffer[checksumPosition + 1]);
}
private int GetHeaderLength()
{
var pos = position + 3; // Dest address
while ((buffer[pos] & 0x01) == 0x00)
pos++;
pos++; // source address
while ((buffer[pos] & 0x01) == 0x00)
pos++;
pos++; // control field
return pos;
}
private bool IsValidLength()
{
return buffer.Length >= dataLength + 2;
}
public bool IsValidStart()
{
return (buffer[0] == 0x7E);
}
}
}

View File

@@ -1,66 +0,0 @@
using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using HanDebugger;
namespace HanDebuggerTest
{
[TestClass]
public class Crc16Test
{
[TestMethod]
public void Crc16ChecksumTest()
{
TestChecksum(new byte[] { 0x80, 0x93 }, "7E A0 79 01 02 01 10", 1, 6);
TestChecksum(new byte[] { 0x80, 0x93 }, "7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FC 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8C 06 00 00 08 1C 06 00 00 07 97 06 00 00 0A CA 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 66 FD 27 7E", 1, 6);
TestChecksum(new byte[] { 0x80, 0x93 }, "A0 79 01 02 01 10");
TestChecksum(new byte[] { 0xA7, 0x44 }, "A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8A 06 00 00 08 22 06 00 00 07 9A 06 00 00 0A D4 06 00 00 09 5B 06 00 00 00 00 06 00 00 09 66");
//string bytesAsString = "A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8A 06 00 00 08 22 06 00 00 07 9A 06 00 00 0A D4 06 00 00 09 5B 06 00 00 00 00 06 00 00 09 66";
//byte[] bytes = bytesAsString.Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray();
//var checksum = Crc16.ComputeChecksum(bytes);
//var checksumBytes = ConvertToBytes(checksum);
//Assert.IsTrue(Equals(new byte[] { 0xa7, 0x44 }, checksumBytes), "Checksum did not match");
}
private void TestChecksum(byte[] validChecksum, string dataAsString)
{
byte[] bytes = dataAsString.Trim().Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray();
var checksum = Crc16.ComputeChecksum(bytes);
var checksumBytes = ConvertToBytes(checksum);
Assert.IsTrue(Equals(validChecksum, checksumBytes), $"Checksum did not match. Was: {Format(checksumBytes)}, Expected: {Format(validChecksum)}");
}
private void TestChecksum(byte[] validChecksum, string dataAsString, int start, int length)
{
// "A0 79 01 02 01 10"
byte[] bytes = dataAsString.Trim().Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray();
var checksum = Crc16.ComputeChecksum(bytes, start, length);
var checksumBytes = ConvertToBytes(checksum);
Assert.IsTrue(Equals(validChecksum, checksumBytes), $"Checksum did not match. Was: {Format(checksumBytes)}, Expected: {Format(validChecksum)}");
}
private string Format(byte[] buffer)
{
return string.Join(" ", buffer.Select(v => $"{v:X}").ToArray());
}
private static byte[] ConvertToBytes(ushort checksum)
{
return new byte[]
{
(byte)(checksum & 0xff),
(byte)((checksum >> 8) & 0xff)
};
}
private static bool Equals(byte[] a1, byte[] a2)
{
if (a1 == null || a2 == null) return false;
if (a1?.Length != a2?.Length) return false;
for (int i = 0; i < a1.Length; i++)
if (a1[i] != a2[i])
return false;
return true;
}
}
}

View File

@@ -1,55 +0,0 @@
using HanDebugger;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HanDebuggerTest
{
[TestClass]
public class DlmsReaderTest
{
[TestMethod]
public void TestDlmsReader()
{
var text = File.ReadAllText("SampleData.txt").Replace("\r\n", " ").Replace(" ", " ");
byte[] bytes = text.Trim().Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray();
var reader = new DlmsReader();
int packages = 0;
for (int i=0; i<bytes.Length; i++)
{
if (reader.Read(bytes[i]))
{
packages++;
//byte[] data = reader.GetRawData();
}
}
Assert.IsTrue(packages == 559, $"There should be 559 packages. Was: {packages}");
}
[TestMethod]
public void TestDlmsReaderWithError()
{
var text = File.ReadAllText("SampleData.txt").Replace("\r\n", " ").Replace(" ", " ");
byte[] bytes = text.Trim().Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray();
bytes = bytes.Skip(10).ToArray();
var reader = new DlmsReader();
int packages = 0;
for (int i = 0; i < bytes.Length; i++)
{
if (reader.Read(bytes[i]))
{
packages++;
//byte[] data = reader.GetRawData();
}
}
Assert.IsTrue(packages == 558, $"There should be 558 packages. Was: {packages}");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,87 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{B22621C3-84EB-46DC-8F8D-E01D0A9923C7}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>HanDebuggerTest</RootNamespace>
<AssemblyName>HanDebuggerTest</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
<IsCodedUITest>False</IsCodedUITest>
<TestProjectType>UnitTest</TestProjectType>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.1.1.11\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
<ItemGroup>
<Compile Include="Crc16Test.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="DlmsReaderTest.cs" />
<Compile Include="ReaderTest.cs" />
<Compile Include="KaifaHanBetaTest.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\HanDebugger\HanDebugger.csproj">
<Project>{eb8bdafe-8991-4e9e-9e7e-f9be61ebc122}</Project>
<Name>HanDebugger</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="ESP 20170918 Raw.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="SampleData.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Kamstrup228.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.props'))" />
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets'))" />
</Target>
<Import Project="..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.11\build\net45\MSTest.TestAdapter.targets')" />
</Project>

View File

@@ -1,65 +0,0 @@
using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
using System.Collections.Generic;
using HanDebugger;
namespace HanDebuggerTest
{
[TestClass]
[DeploymentItem(@"ESP 20170918 Raw.txt")]
[DeploymentItem("Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll")]
public class KaifaHanBetaTest
{
[TestMethod]
public void TestGetPackageID()
{
Dictionary<byte, int> packageCount = new Dictionary<byte, int>();
var packages = File.ReadAllLines("ESP 20170918 Raw.txt");
var lines = packages.Select(line => line.Trim().Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray()).ToArray();
foreach (var line in lines)
{
byte list = KaifaHanBeta.GetListID(line, 0, line.Length);
if (packageCount.ContainsKey(list))
packageCount[list]++;
else
packageCount.Add(list, 1);
}
var startTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(KaifaHanBeta.GetPackageTime(lines[0], 0, lines[0].Length));
var finishTime = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(KaifaHanBeta.GetPackageTime(lines[packages.Length - 1], 0, packages[packages.Length - 1].Length));
var durationInSeconds = finishTime.Subtract(startTime).TotalSeconds;
Assert.IsTrue(durationInSeconds > 60 * 60 * 4, $"There should be more than 4 hours of recording. Was: {durationInSeconds / 60 * 60 * 4}");
double list3PerSecond = (1.0 / 3600.0);
double list2PerSecond = (1.0 / 10.0) - list3PerSecond;
double list1PerSecond = (1.0 / 2.0) - list2PerSecond;
Assert.AreEqual(false, packageCount.ContainsKey(KaifaHanBeta.ListUnknown), "There should be no unknown packages");
Assert.AreEqual(durationInSeconds * list1PerSecond, packageCount[KaifaHanBeta.List1], 1 + 0.01 * packageCount[KaifaHanBeta.List1], "There should be one 'List1' every 2.5s");
Assert.AreEqual(durationInSeconds * list2PerSecond, packageCount[KaifaHanBeta.List2], 1 + 0.01 * packageCount[KaifaHanBeta.List2], "There should be one 'List2' every 10s");
Assert.AreEqual(durationInSeconds * list3PerSecond, packageCount[KaifaHanBeta.List3], 1 + 0.01 * packageCount[KaifaHanBeta.List3], "There should be one 'List3' every 1h");
double targetList1To2Ratio = 4.0;
double actualList1To2Ratio = (double)packageCount[KaifaHanBeta.List1] / (double)packageCount[KaifaHanBeta.List2];
Assert.AreEqual(targetList1To2Ratio, actualList1To2Ratio, 0.01, "There should be a ratio of List1:List2 of 4");
}
[TestMethod]
public void TestGetConsumption()
{
List<int> consumption = new List<int>();
var packages = File.ReadAllLines("ESP 20170918 Raw.txt");
var lines = packages.Select(line => line.Trim().Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray()).ToArray();
foreach (var line in lines)
{
if (KaifaHanBeta.GetListID(line, 0, line.Length) == KaifaHanBeta.List1)
{
consumption.Add(KaifaHanBeta.GetInt(0, line, 0, line.Length));
}
}
Assert.AreEqual(1500.0, consumption.Average(), 500.0, "Consumption should be between 1000 and 2000 watts");
}
}
}

View File

@@ -1 +0,0 @@
7E A0 E2 2B 21 13 23 9A E6 E7 00 0F 00 00 00 00 0C 07 E2 03 04 07 14 34 00 FF 80 00 00 02 19 0A 0E 4B 61 6D 73 74 72 75 70 5F 56 30 30 30 31 09 06 01 01 00 00 05 FF 0A 10 35 37 30 36 35 36 37 32 37 34 33 38 39 37 30 32 09 06 01 01 60 01 01 FF 0A 12 36 38 34 31 31 32 31 42 4E 32 34 33 31 30 31 30 34 30 09 06 01 01 01 07 00 FF 06 00 00 0E E7 09 06 01 01 02 07 00 FF 06 00 00 00 00 09 06 01 01 03 07 00 FF 06 00 00 00 00 09 06 01 01 04 07 00 FF 06 00 00 00 BF 09 06 01 01 1F 07 00 FF 06 00 00 05 59 09 06 01 01 33 07 00 FF 06 00 00 01 EC 09 06 01 01 47 07 00 FF 06 00 00 05 14 09 06 01 01 20 07 00 FF 12 00 E1 09 06 01 01 34 07 00 FF 12 00 DD 09 06 01 01 48 07 00 FF 12 00 DE 46 0F 7E

View File

@@ -1,20 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: AssemblyTitle("HanDebuggerTest")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("HanDebuggerTest")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("b22621c3-84eb-46dc-8f8d-e01d0a9923c7")]
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,49 +0,0 @@
using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
using HanDebugger;
namespace HanDebuggerTest
{
[TestClass]
[DeploymentItem(@"SampleData.txt")]
[DeploymentItem(@"Kamstrup228.txt")]
[DeploymentItem("Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll")]
public class ReaderTest
{
[TestMethod]
public void TestParser()
{
var lines = File.ReadAllLines("SampleData.txt");
var sample = lines[0].Trim();
byte[] bytes = sample.Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray();
var reader = new Reader(bytes);
Assert.IsTrue(reader.IsValid(), "Data is not valid");
}
[TestMethod]
public void TestAllLines()
{
var lines = File.ReadAllLines("SampleData.txt");
for (int i=0; i<lines.Length; i++)
{
var sample = lines[i].Trim();
byte[] bytes = sample.Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray();
var reader = new Reader(bytes);
Assert.IsTrue(reader.IsValid(), $"Data is not valid (Line #{i + 1}): {sample}");
}
}
[TestMethod]
public void TestKamstrup228()
{
var text = File.ReadAllText("Kamstrup228.txt");
byte[] bytes = text.Trim().Split(' ').Select(v => (byte)int.Parse(v, System.Globalization.NumberStyles.HexNumber)).ToArray();
var reader = new Reader(bytes);
Assert.IsTrue(reader.IsValid(), "Data is not valid");
}
}
}

View File

@@ -1,559 +0,0 @@
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FC 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8C 06 00 00 08 1C 06 00 00 07 97 06 00 00 0A CA 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 66 FD 27 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 02 FF 80 00 00 02 01 06 00 00 02 FF 21 9D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 04 FF 80 00 00 02 01 06 00 00 02 FB C8 DC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 06 FF 80 00 00 02 01 06 00 00 02 FB 73 DE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 08 FF 80 00 00 02 01 06 00 00 02 FD 64 B6 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8A 06 00 00 08 22 06 00 00 07 9A 06 00 00 0A D4 06 00 00 09 5B 06 00 00 00 00 06 00 00 09 66 A7 44 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 0C FF 80 00 00 02 01 06 00 00 02 FC 9B A2 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 0E FF 80 00 00 02 01 06 00 00 02 FF BB 92 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 10 FF 80 00 00 02 01 06 00 00 02 FC D9 B8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 12 FF 80 00 00 02 01 06 00 00 02 FB DD CE 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FE 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8A 06 00 00 08 21 06 00 00 07 99 06 00 00 0A C8 06 00 00 09 60 06 00 00 00 00 06 00 00 09 6C 93 0A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 16 FF 80 00 00 02 01 06 00 00 02 FD 9D AE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 18 FF 80 00 00 02 01 06 00 00 02 F9 98 E5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 1A FF 80 00 00 02 01 06 00 00 02 FB 31 C4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 1C FF 80 00 00 02 01 06 00 00 02 FD CA A6 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FB 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8C 06 00 00 08 11 06 00 00 07 98 06 00 00 0A C1 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 69 FB 4C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 20 FF 80 00 00 02 01 06 00 00 02 FE A3 A5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 22 FF 80 00 00 02 01 06 00 00 02 FD 83 95 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 24 FF 80 00 00 02 01 06 00 00 02 FB 78 F7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 26 FF 80 00 00 02 01 06 00 00 02 FE 6E A2 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 F9 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8B 06 00 00 08 0F 06 00 00 07 97 06 00 00 0A BF 06 00 00 09 5A 06 00 00 00 00 06 00 00 09 65 16 EB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 2A FF 80 00 00 02 01 06 00 00 02 FC E6 8E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 2C FF 80 00 00 02 01 06 00 00 03 01 99 BC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 2E FF 80 00 00 02 01 06 00 00 02 FE 82 A8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 30 FF 80 00 00 02 01 06 00 00 02 FC 69 93 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FE 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8A 06 00 00 08 23 06 00 00 07 9C 06 00 00 0A D4 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 68 8D E0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 34 FF 80 00 00 02 01 06 00 00 02 FB A0 E2 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 36 FF 80 00 00 02 01 06 00 00 02 FE B6 B7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 38 FF 80 00 00 02 01 06 00 00 02 FA B3 FC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 11 3A FF 80 00 00 02 01 06 00 00 03 09 C4 22 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 0B 06 00 00 00 00 06 00 00 00 00 06 00 00 00 85 06 00 00 08 43 06 00 00 07 8D 06 00 00 0A FF 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 67 89 B7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 02 FF 80 00 00 02 01 06 00 00 02 F9 E0 F6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 04 FF 80 00 00 02 01 06 00 00 02 FA B6 C3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 06 FF 80 00 00 02 01 06 00 00 02 FA 0D C1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 08 FF 80 00 00 02 01 06 00 00 02 FC 1A A9 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 F9 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8C 06 00 00 08 07 06 00 00 07 98 06 00 00 0A B6 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 67 53 02 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 0C FF 80 00 00 02 01 06 00 00 02 FA 5A C9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 0E FF 80 00 00 02 01 06 00 00 02 FD 5E BF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 10 FF 80 00 00 02 01 06 00 00 02 F7 FD 08 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 12 FF 80 00 00 02 01 06 00 00 02 F7 46 0A 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 F9 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8C 06 00 00 08 0D 06 00 00 07 95 06 00 00 0A BD 06 00 00 09 5A 06 00 00 00 00 06 00 00 09 63 2B DF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 16 FF 80 00 00 02 01 06 00 00 02 F9 4E E6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 18 FF 80 00 00 02 01 06 00 00 02 F8 E6 FA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 1A FF 80 00 00 02 01 06 00 00 02 FC 79 BE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 1C FF 80 00 00 02 01 06 00 00 02 FA 82 DC 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 F9 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8B 06 00 00 08 09 06 00 00 07 97 06 00 00 0A B8 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 67 F2 4F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 20 FF 80 00 00 02 01 06 00 00 02 FC 46 88 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 22 FF 80 00 00 02 01 06 00 00 02 FA CB EF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 24 FF 80 00 00 02 01 06 00 00 02 F7 E3 33 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 26 FF 80 00 00 02 01 06 00 00 02 FE 99 AC 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FB 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8C 06 00 00 08 15 06 00 00 07 99 06 00 00 0A C3 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 66 B3 90 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 2A FF 80 00 00 02 01 06 00 00 02 F9 BC D7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 2C FF 80 00 00 02 01 06 00 00 02 FD 55 96 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 2E FF 80 00 00 02 01 06 00 00 02 FA 51 E0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 30 FF 80 00 00 02 01 06 00 00 02 FB 21 E9 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8B 06 00 00 08 21 06 00 00 07 98 06 00 00 0A D2 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 66 44 03 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 34 FF 80 00 00 02 01 06 00 00 02 FA DE FD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 36 FF 80 00 00 02 01 06 00 00 02 FB EC EE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 38 FF 80 00 00 02 01 06 00 00 02 FD FB 86 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 12 3A FF 80 00 00 02 01 06 00 00 02 FB 76 E1 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FB 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8B 06 00 00 08 12 06 00 00 07 99 06 00 00 0A C2 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 66 C2 B1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 02 FF 80 00 00 02 01 06 00 00 02 FB 5F D0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 04 FF 80 00 00 02 01 06 00 00 02 F9 80 F4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 06 FF 80 00 00 02 01 06 00 00 02 FB 29 D5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 08 FF 80 00 00 02 01 06 00 00 02 F8 93 EA 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 F7 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8B 06 00 00 08 0E 06 00 00 07 8D 06 00 00 0A B7 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 67 0A A5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 0C FF 80 00 00 02 01 06 00 00 03 01 73 9C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 0E FF 80 00 00 02 01 06 00 00 02 FD F3 BA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 10 FF 80 00 00 02 01 06 00 00 02 FB 3C C7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 12 FF 80 00 00 02 01 06 00 00 02 F9 95 E6 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FA 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8A 06 00 00 08 17 06 00 00 07 98 06 00 00 0A BB 06 00 00 09 5B 06 00 00 00 00 06 00 00 09 64 2C E0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 16 FF 80 00 00 02 01 06 00 00 02 F8 6A F2 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 18 FF 80 00 00 02 01 06 00 00 02 F8 4B FF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 1A FF 80 00 00 02 01 06 00 00 02 FE C6 98 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 1C FF 80 00 00 02 01 06 00 00 03 05 8F CF 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 88 06 00 00 08 19 06 00 00 07 B2 06 00 00 0A D5 06 00 00 09 5B 06 00 00 00 00 06 00 00 09 65 E7 33 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 20 FF 80 00 00 02 01 06 00 00 03 09 11 34 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 22 FF 80 00 00 02 01 06 00 00 03 02 79 88 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 24 FF 80 00 00 02 01 06 00 00 03 0B 75 12 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 26 FF 80 00 00 02 01 06 00 00 02 FE 34 A9 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 06 06 00 00 00 00 06 00 00 00 00 06 00 00 00 87 06 00 00 08 33 06 00 00 07 98 06 00 00 0A F0 06 00 00 09 5C 06 00 00 00 00 06 00 00 09 67 D8 86 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 2A FF 80 00 00 02 01 06 00 00 03 0E F9 48 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 2C FF 80 00 00 02 01 06 00 00 02 FE 63 A1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 2E FF 80 00 00 02 01 06 00 00 02 FA FC E5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 30 FF 80 00 00 02 01 06 00 00 02 FB 8C EC 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FC 06 00 00 00 00 06 00 00 00 00 06 00 00 00 89 06 00 00 08 15 06 00 00 07 96 06 00 00 0A C8 06 00 00 09 56 06 00 00 00 00 06 00 00 09 63 0D 02 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 34 FF 80 00 00 02 01 06 00 00 02 F9 E8 CA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 36 FF 80 00 00 02 01 06 00 00 03 04 E1 FD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 38 FF 80 00 00 02 01 06 00 00 03 15 C8 F1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 13 3A FF 80 00 00 02 01 06 00 00 03 08 17 38 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 10 06 00 00 00 00 06 00 00 00 00 06 00 00 00 85 06 00 00 08 41 06 00 00 07 99 06 00 00 0B 02 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 69 D8 2C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 02 FF 80 00 00 02 01 06 00 00 03 0E E6 71 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 04 FF 80 00 00 02 01 06 00 00 03 1C B8 45 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 06 FF 80 00 00 02 01 06 00 00 03 13 F4 BF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 08 FF 80 00 00 02 01 06 00 00 02 FF 6F 86 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 1A 06 00 00 00 00 06 00 00 00 00 06 00 00 00 83 06 00 00 08 6A 06 00 00 07 98 06 00 00 0B 2E 06 00 00 09 5B 06 00 00 00 00 06 00 00 09 67 78 B7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 0C FF 80 00 00 02 01 06 00 00 02 FE 90 92 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 0E FF 80 00 00 02 01 06 00 00 02 FF A2 81 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 10 FF 80 00 00 02 01 06 00 00 02 FB 7F DF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 12 FF 80 00 00 02 01 06 00 00 02 FA 4D CC 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FC 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8B 06 00 00 08 24 06 00 00 07 8C 06 00 00 0A CE 06 00 00 09 5C 06 00 00 00 00 06 00 00 09 66 96 0B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 16 FF 80 00 00 02 01 06 00 00 02 FE 1F 8F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 18 FF 80 00 00 02 01 06 00 00 03 02 05 A6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 1A FF 80 00 00 02 01 06 00 00 03 05 01 D0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 1C FF 80 00 00 02 01 06 00 00 03 02 73 A3 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 05 06 00 00 00 00 06 00 00 00 00 06 00 00 00 89 06 00 00 08 26 06 00 00 07 97 06 00 00 0A EC 06 00 00 09 5A 06 00 00 00 00 06 00 00 09 66 50 B8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 20 FF 80 00 00 02 01 06 00 00 03 08 DB 3D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 22 FF 80 00 00 02 01 06 00 00 02 FD 9A 86 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 24 FF 80 00 00 02 01 06 00 00 02 FC DE 90 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 26 FF 80 00 00 02 01 06 00 00 03 00 5E B6 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8A 06 00 00 08 1E 06 00 00 07 99 06 00 00 0A D2 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 67 EB 6F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 2A FF 80 00 00 02 01 06 00 00 02 FE ED BE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 2C FF 80 00 00 02 01 06 00 00 02 FD BB 8B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 2E FF 80 00 00 02 01 06 00 00 02 FD 00 89 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 30 FF 80 00 00 02 01 06 00 00 02 FC 70 80 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FE 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8B 06 00 00 08 1D 06 00 00 07 9A 06 00 00 0A D0 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 68 29 72 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 34 FF 80 00 00 02 01 06 00 00 02 F6 5C 2A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 36 FF 80 00 00 02 01 06 00 00 02 F7 6E 39 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 38 FF 80 00 00 02 01 06 00 00 02 FA AA EF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 14 3A FF 80 00 00 02 01 06 00 00 02 FC 27 88 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FB 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8B 06 00 00 08 14 06 00 00 07 99 06 00 00 0A C4 06 00 00 09 60 06 00 00 00 00 06 00 00 09 68 E2 98 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 02 FF 80 00 00 02 01 06 00 00 03 16 82 E8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 04 FF 80 00 00 02 01 06 00 00 03 11 F0 9B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 06 FF 80 00 00 02 01 06 00 00 02 FD F1 AD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 08 FF 80 00 00 02 01 06 00 00 03 08 2A 19 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 02 FE 06 00 00 00 00 06 00 00 00 00 06 00 00 00 8A 06 00 00 08 18 06 00 00 07 9A 06 00 00 0A CC 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 67 F7 2E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 0C FF 80 00 00 02 01 06 00 00 02 FE 3D 97 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 0E FF 80 00 00 02 01 06 00 00 02 FE 86 95 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 10 FF 80 00 00 02 01 06 00 00 02 FC 6D AE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 12 FF 80 00 00 02 01 06 00 00 02 FC D6 AC 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 13 06 00 00 00 00 06 00 00 00 00 06 00 00 00 85 06 00 00 08 61 06 00 00 07 98 06 00 00 0B 29 06 00 00 09 60 06 00 00 00 00 06 00 00 09 68 5D 02 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 16 FF 80 00 00 02 01 06 00 00 03 21 10 BD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 18 FF 80 00 00 02 01 06 00 00 02 FB 3E D0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 1A FF 80 00 00 02 01 06 00 00 03 46 33 A5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 1C FF 80 00 00 02 01 06 00 00 03 5F BE 2F 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 66 06 00 00 00 00 06 00 00 00 00 06 00 00 00 6D 06 00 00 08 58 06 00 00 09 43 06 00 00 0C 0E 06 00 00 09 5C 06 00 00 00 00 06 00 00 09 65 90 F3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 20 FF 80 00 00 02 01 06 00 00 03 60 38 D7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 22 FF 80 00 00 02 01 06 00 00 03 32 14 A4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 24 FF 80 00 00 02 01 06 00 00 03 54 E9 A5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 26 FF 80 00 00 02 01 06 00 00 03 47 48 85 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 86 06 00 00 00 00 06 00 00 00 00 06 00 00 00 59 06 00 00 07 F5 06 00 00 0A 40 06 00 00 0C 64 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 67 70 07 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 2A FF 80 00 00 02 01 06 00 00 03 B4 C6 4F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 2C FF 80 00 00 02 01 06 00 00 03 BC 43 C4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 2E FF 80 00 00 02 01 06 00 00 03 CA 49 D0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 30 FF 80 00 00 02 01 06 00 00 03 94 4B 73 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 A1 06 00 00 00 00 06 00 00 00 00 06 00 00 00 40 06 00 00 06 F1 06 00 00 0B 82 06 00 00 0C 7F 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 65 7A A8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 34 FF 80 00 00 02 01 06 00 00 03 A5 37 56 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 36 FF 80 00 00 02 01 06 00 00 03 B0 A0 13 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 38 FF 80 00 00 02 01 06 00 00 03 C1 8F 7C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 15 3A FF 80 00 00 02 01 06 00 00 03 B7 85 68 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 BB 06 00 00 00 00 06 00 00 00 00 06 00 00 00 34 06 00 00 06 D0 06 00 00 0C 2B 06 00 00 0C DD 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 67 55 B4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 02 FF 80 00 00 02 01 06 00 00 03 BE 37 CF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 04 FF 80 00 00 02 01 06 00 00 03 C1 8A 43 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 06 FF 80 00 00 02 01 06 00 00 03 D4 1D 06 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 08 FF 80 00 00 02 01 06 00 00 03 DE 66 A4 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 C9 06 00 00 00 00 06 00 00 00 00 06 00 00 00 2E 06 00 00 06 D5 06 00 00 0C 6D 06 00 00 0D 12 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 66 FC 7B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 0C FF 80 00 00 02 01 06 00 00 03 CA B5 F7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 0E FF 80 00 00 02 01 06 00 00 03 D8 9D C6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 10 FF 80 00 00 02 01 06 00 00 03 DA 76 FD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 12 FF 80 00 00 02 01 06 00 00 03 CF E1 B8 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 D0 06 00 00 00 00 06 00 00 00 00 06 00 00 00 2B 06 00 00 06 E9 06 00 00 0C 80 06 00 00 0D 35 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 64 EB 38 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 16 FF 80 00 00 02 01 06 00 00 03 D9 20 C8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 18 FF 80 00 00 02 01 06 00 00 03 D1 49 49 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 1A FF 80 00 00 02 01 06 00 00 04 31 F4 E1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 1C FF 80 00 00 02 01 06 00 00 04 0B E0 78 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 51 06 00 00 07 A0 06 00 00 0C 8A 06 00 00 0D 55 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 65 E7 78 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 20 FF 80 00 00 02 01 06 00 00 04 03 5A C5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 22 FF 80 00 00 02 01 06 00 00 04 0A 20 5A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 24 FF 80 00 00 02 01 06 00 00 04 03 2C C0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 26 FF 80 00 00 02 01 06 00 00 04 08 44 7C 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 9E 06 00 00 0C 85 06 00 00 0D 4F 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 69 24 5D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 2A FF 80 00 00 02 01 06 00 00 04 04 B2 B9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 2C FF 80 00 00 02 01 06 00 00 04 03 C0 CA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 2E FF 80 00 00 02 01 06 00 00 04 04 C4 BC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 30 FF 80 00 00 02 01 06 00 00 04 00 19 E2 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 04 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 A0 06 00 00 0C 98 06 00 00 0D 5F 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 66 8A 0F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 34 FF 80 00 00 02 01 06 00 00 04 06 59 82 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 36 FF 80 00 00 02 01 06 00 00 04 12 47 D6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 38 FF 80 00 00 02 01 06 00 00 04 03 6E DA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 16 3A FF 80 00 00 02 01 06 00 00 04 00 4E EA 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 8D 06 00 00 0C 9C 06 00 00 0D 4D 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 67 B0 B1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 02 FF 80 00 00 02 01 06 00 00 04 03 FC E9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 04 FF 80 00 00 02 01 06 00 00 03 FE 53 8F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 06 FF 80 00 00 02 01 06 00 00 03 FF 61 9C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 08 FF 80 00 00 02 01 06 00 00 04 00 30 D3 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 FD 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 84 06 00 00 0C 9D 06 00 00 0D 47 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 65 AD ED 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 0C FF 80 00 00 02 01 06 00 00 03 FC AD A6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 0E FF 80 00 00 02 01 06 00 00 03 FD 9F B5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 10 FF 80 00 00 02 01 06 00 00 04 0C 68 06 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 12 FF 80 00 00 02 01 06 00 00 04 00 BF CE 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 01 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 94 06 00 00 0C 9D 06 00 00 0D 55 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 66 4F 3E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 16 FF 80 00 00 02 01 06 00 00 03 FF B9 89 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 18 FF 80 00 00 02 01 06 00 00 03 FF 98 84 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 1A FF 80 00 00 02 01 06 00 00 04 01 DA D5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 1C FF 80 00 00 02 01 06 00 00 04 00 9E C3 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 8B 06 00 00 0C 98 06 00 00 0D 4A 06 00 00 09 60 06 00 00 00 00 06 00 00 09 68 50 76 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 20 FF 80 00 00 02 01 06 00 00 04 02 7E D1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 22 FF 80 00 00 02 01 06 00 00 03 FE 2E A3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 24 FF 80 00 00 02 01 06 00 00 04 02 08 D4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 26 FF 80 00 00 02 01 06 00 00 04 03 3A C7 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 51 06 00 00 07 94 06 00 00 0C 91 06 00 00 0D 4C 06 00 00 09 62 06 00 00 00 00 06 00 00 09 66 E8 CD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 2A FF 80 00 00 02 01 06 00 00 04 01 B2 EB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 2C FF 80 00 00 02 01 06 00 00 04 03 6D CF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 2E FF 80 00 00 02 01 06 00 00 03 FD 2F 9E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 30 FF 80 00 00 02 01 06 00 00 03 FC 5F 97 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 02 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 B1 06 00 00 0C 8B 06 00 00 0D 5D 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 63 90 B6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 34 FF 80 00 00 02 01 06 00 00 04 01 4B F3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 36 FF 80 00 00 02 01 06 00 00 04 01 F0 F1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 38 FF 80 00 00 02 01 06 00 00 04 04 7C AB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 17 3A FF 80 00 00 02 01 06 00 00 04 00 E3 EF 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 FF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 93 06 00 00 0C 92 06 00 00 0D 4E 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 65 19 A5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 02 FF 80 00 00 02 01 06 00 00 04 01 C5 FF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 04 FF 80 00 00 02 01 06 00 00 03 FF F1 AB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 06 FF 80 00 00 02 01 06 00 00 04 00 3A EB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 08 FF 80 00 00 02 01 06 00 00 04 05 B6 B1 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 51 06 00 00 07 91 06 00 00 0C 94 06 00 00 0D 4E 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 67 7C C3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 0C FF 80 00 00 02 01 06 00 00 04 00 6D E3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 0E FF 80 00 00 02 01 06 00 00 04 02 C4 C2 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 10 FF 80 00 00 02 01 06 00 00 04 00 2F F9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 12 FF 80 00 00 02 01 06 00 00 04 01 1D EA 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 9C 06 00 00 0C 8F 06 00 00 0D 54 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 66 EA AC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 16 FF 80 00 00 02 01 06 00 00 03 FD 80 9F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 18 FF 80 00 00 02 01 06 00 00 03 FE 3A A0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 1A FF 80 00 00 02 01 06 00 00 04 05 D5 A6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 1C FF 80 00 00 02 01 06 00 00 03 FE 4C A5 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 93 06 00 00 0C 95 06 00 00 0D 53 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 64 F9 7E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 20 FF 80 00 00 02 01 06 00 00 04 03 DC F5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 22 FF 80 00 00 02 01 06 00 00 04 01 75 D4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 24 FF 80 00 00 02 01 06 00 00 04 02 23 E1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 26 FF 80 00 00 02 01 06 00 00 04 05 27 97 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 03 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 9E 06 00 00 0C 98 06 00 00 0D 5F 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 65 E5 BE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 2A FF 80 00 00 02 01 06 00 00 04 00 10 CF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 2C FF 80 00 00 02 01 06 00 00 04 03 46 FA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 2E FF 80 00 00 02 01 06 00 00 04 04 42 8C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 30 FF 80 00 00 02 01 06 00 00 04 02 8D F1 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 05 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4D 06 00 00 07 A0 06 00 00 0C 97 06 00 00 0D 62 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 66 FB 6E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 34 FF 80 00 00 02 01 06 00 00 04 00 E9 D7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 36 FF 80 00 00 02 01 06 00 00 04 04 76 93 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 38 FF 80 00 00 02 01 06 00 00 04 03 E8 EA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 18 3A FF 80 00 00 02 01 06 00 00 04 01 41 CB 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0C 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 98 06 00 00 0C BF 06 00 00 0D 7F 06 00 00 09 60 06 00 00 00 00 06 00 00 09 68 1B 6B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 02 FF 80 00 00 02 01 06 00 00 04 07 5E 9F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 04 FF 80 00 00 02 01 06 00 00 04 02 3E CF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 06 FF 80 00 00 02 01 06 00 00 04 03 0C DC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 08 FF 80 00 00 02 01 06 00 00 04 05 1B B4 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 02 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 96 06 00 00 0C 96 06 00 00 0D 57 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 66 67 73 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 0C FF 80 00 00 02 01 06 00 00 04 02 D2 C5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 0E FF 80 00 00 02 01 06 00 00 04 04 5F A2 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 10 FF 80 00 00 02 01 06 00 00 04 02 90 DF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 12 FF 80 00 00 02 01 06 00 00 04 01 B0 EF 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 03 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 A0 06 00 00 0C 96 06 00 00 0D 5F 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 65 5E 3C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 16 FF 80 00 00 02 01 06 00 00 04 03 D4 C9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 18 FF 80 00 00 02 01 06 00 00 04 05 C3 A1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 1A FF 80 00 00 02 01 06 00 00 0A D6 7E DD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 1C FF 80 00 00 02 01 06 00 00 0F F4 1B A6 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F EB 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4B 06 00 00 37 B5 06 00 00 3A 01 06 00 00 0D 60 06 00 00 09 4A 06 00 00 00 00 06 00 00 09 60 80 3E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 20 FF 80 00 00 02 01 06 00 00 0F F0 CD D1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 22 FF 80 00 00 02 01 06 00 00 0F ED 12 18 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 24 FF 80 00 00 02 01 06 00 00 0F F4 9F 92 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 26 FF 80 00 00 02 01 06 00 00 0F F3 9B E4 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F EC 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4C 06 00 00 37 AA 06 00 00 39 FB 06 00 00 0D 64 06 00 00 09 4C 06 00 00 00 00 06 00 00 09 62 8A FA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 2A FF 80 00 00 02 01 06 00 00 0F ED FE 12 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 2C FF 80 00 00 02 01 06 00 00 0F E6 E0 AB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 2E FF 80 00 00 02 01 06 00 00 0F E1 E4 DD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 30 FF 80 00 00 02 01 06 00 00 0F DF E0 1D 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F E1 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4B 06 00 00 37 91 06 00 00 39 D9 06 00 00 0D 74 06 00 00 09 47 06 00 00 00 00 06 00 00 09 5C 0E FB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 34 FF 80 00 00 02 01 06 00 00 0F E2 F0 F2 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 36 FF 80 00 00 02 01 06 00 00 0F E1 D0 C2 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 38 FF 80 00 00 02 01 06 00 00 0F E6 4E BB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 19 3A FF 80 00 00 02 01 06 00 00 0F E4 E7 9A 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F E5 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4C 06 00 00 37 97 06 00 00 39 EA 06 00 00 0D 6B 06 00 00 09 4A 06 00 00 00 00 06 00 00 09 5F 25 AC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 02 FF 80 00 00 02 01 06 00 00 0F E6 86 83 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 04 FF 80 00 00 02 01 06 00 00 0F E0 7D E1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 06 FF 80 00 00 02 01 06 00 00 0F E3 5D D1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 08 FF 80 00 00 02 01 06 00 00 0F E1 6E FF 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F EC 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4C 06 00 00 37 8C 06 00 00 39 F8 06 00 00 0D 8D 06 00 00 09 48 06 00 00 00 00 06 00 00 09 5D CE 5D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 0C FF 80 00 00 02 01 06 00 00 0F DE 6C 33 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 0E FF 80 00 00 02 01 06 00 00 0F E2 38 CA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 10 FF 80 00 00 02 01 06 00 00 0F E0 D3 F1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 12 FF 80 00 00 02 01 06 00 00 0F E2 7A D0 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F E1 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4B 06 00 00 37 8C 06 00 00 39 D9 06 00 00 0D 71 06 00 00 09 48 06 00 00 00 00 06 00 00 09 61 30 BE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 16 FF 80 00 00 02 01 06 00 00 0F E0 1E F6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 18 FF 80 00 00 02 01 06 00 00 0F E1 B6 EA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 1A FF 80 00 00 02 01 06 00 00 0F E2 96 DA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 1C FF 80 00 00 02 01 06 00 00 0F E1 C0 EF 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F E3 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4B 06 00 00 37 8F 06 00 00 39 DF 06 00 00 0D 6F 06 00 00 09 48 06 00 00 00 00 06 00 00 09 5F EA 89 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 20 FF 80 00 00 02 01 06 00 00 0F DF CF 06 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 22 FF 80 00 00 02 01 06 00 00 0F DC EF 36 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 24 FF 80 00 00 02 01 06 00 00 0F DD AB 20 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 26 FF 80 00 00 02 01 06 00 00 0F D9 34 64 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F D4 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4A 06 00 00 37 76 06 00 00 39 B8 06 00 00 0D 77 06 00 00 09 43 06 00 00 00 00 06 00 00 09 5B 4A 2D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 2A FF 80 00 00 02 01 06 00 00 0F CF 19 1E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 2C FF 80 00 00 02 01 06 00 00 0F D3 39 C3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 2E FF 80 00 00 02 01 06 00 00 0F D7 A6 87 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 30 FF 80 00 00 02 01 06 00 00 0F D6 D6 8E 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F DB 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4B 06 00 00 37 79 06 00 00 39 C9 06 00 00 0D 76 06 00 00 09 45 06 00 00 00 00 06 00 00 09 5D 18 EE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 34 FF 80 00 00 02 01 06 00 00 0F D7 29 9A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 36 FF 80 00 00 02 01 06 00 00 0F DB FE 52 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 38 FF 80 00 00 02 01 06 00 00 0F DC 60 2B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1A 3A FF 80 00 00 02 01 06 00 00 0F F5 18 95 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 10 00 06 00 00 00 00 06 00 00 00 00 06 00 00 00 42 06 00 00 37 C0 06 00 00 39 D1 06 00 00 0D F2 06 00 00 09 46 06 00 00 00 00 06 00 00 09 5E 08 07 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 02 FF 80 00 00 02 01 06 00 00 0F F0 9C F3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 04 FF 80 00 00 02 01 06 00 00 0F EA 8A 4B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 06 FF 80 00 00 02 01 06 00 00 0F E7 D4 92 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 08 FF 80 00 00 02 01 06 00 00 0F E5 E7 BC 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F E5 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4B 06 00 00 37 90 06 00 00 39 DF 06 00 00 0D 72 06 00 00 09 48 06 00 00 00 00 06 00 00 09 61 52 09 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 0C FF 80 00 00 02 01 06 00 00 0F F9 7C 63 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 0E FF 80 00 00 02 01 06 00 00 0F E1 0E FD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 10 FF 80 00 00 02 01 06 00 00 0F DA A7 6A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 12 FF 80 00 00 02 01 06 00 00 0F D6 70 A2 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F DF 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4C 06 00 00 37 80 06 00 00 39 CB 06 00 00 0D 8E 06 00 00 09 44 06 00 00 00 00 06 00 00 09 5B 48 E6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 16 FF 80 00 00 02 01 06 00 00 0F D8 78 4E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 18 FF 80 00 00 02 01 06 00 00 0F D2 03 EC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 1A FF 80 00 00 02 01 06 00 00 0F D3 31 FF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 1C FF 80 00 00 02 01 06 00 00 0F D2 75 E9 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F D1 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4B 06 00 00 37 6D 06 00 00 39 BE 06 00 00 0D 6F 06 00 00 09 43 06 00 00 00 00 06 00 00 09 5B 06 B0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 20 FF 80 00 00 02 01 06 00 00 0F D5 38 AC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 22 FF 80 00 00 02 01 06 00 00 0F D7 91 8D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 24 FF 80 00 00 02 01 06 00 00 0F E5 CD 98 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 26 FF 80 00 00 02 01 06 00 00 0F E5 76 9A 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F E8 06 00 00 00 00 06 00 00 00 00 06 00 00 00 49 06 00 00 37 92 06 00 00 39 DE 06 00 00 0D 85 06 00 00 09 48 06 00 00 00 00 06 00 00 09 5F 91 44 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 2A FF 80 00 00 02 01 06 00 00 0F E8 09 4E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 2C FF 80 00 00 02 01 06 00 00 0F EC E0 0F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 2E FF 80 00 00 02 01 06 00 00 0F E9 F6 5A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 30 FF 80 00 00 02 01 06 00 00 0F E5 63 88 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F E4 06 00 00 00 00 06 00 00 00 00 06 00 00 00 49 06 00 00 37 90 06 00 00 39 D1 06 00 00 0D 81 06 00 00 09 47 06 00 00 00 00 06 00 00 09 5D 35 68 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 34 FF 80 00 00 02 01 06 00 00 0F DB E8 55 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 36 FF 80 00 00 02 01 06 00 00 0F E7 BC AC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 38 FF 80 00 00 02 01 06 00 00 0F E2 30 F6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1B 3A FF 80 00 00 02 01 06 00 00 0F DF ED 1E 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 0F DB 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4C 06 00 00 37 7E 06 00 00 39 D1 06 00 00 0D 71 06 00 00 09 46 06 00 00 00 00 06 00 00 09 5E B2 82 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 02 FF 80 00 00 02 01 06 00 00 0F E7 E1 8F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 04 FF 80 00 00 02 01 06 00 00 04 0A 6F 50 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 06 FF 80 00 00 02 01 06 00 00 04 0A D4 52 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 08 FF 80 00 00 02 01 06 00 00 04 0D 4A 2B 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 06 06 00 00 00 00 06 00 00 00 00 06 00 00 00 50 06 00 00 07 98 06 00 00 0C A0 06 00 00 0D 62 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 65 1F 3A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 0C FF 80 00 00 02 01 06 00 00 04 05 74 A2 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 0E FF 80 00 00 02 01 06 00 00 04 08 2A 7B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 10 FF 80 00 00 02 01 06 00 00 04 06 AD 8A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 12 FF 80 00 00 02 01 06 00 00 04 07 9F 99 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 08 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 A4 06 00 00 0C A0 06 00 00 0D 70 06 00 00 09 59 06 00 00 00 00 06 00 00 09 61 61 92 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 16 FF 80 00 00 02 01 06 00 00 04 06 60 8D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 18 FF 80 00 00 02 01 06 00 00 04 04 53 A3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 1A FF 80 00 00 02 01 06 00 00 04 05 61 B0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 1C FF 80 00 00 02 01 06 00 00 04 05 AC B7 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0B 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 A1 06 00 00 0C A8 06 00 00 0D 74 06 00 00 09 5C 06 00 00 00 00 06 00 00 09 66 FD D7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 20 FF 80 00 00 02 01 06 00 00 04 0B 20 6F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 22 FF 80 00 00 02 01 06 00 00 04 08 00 5F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 24 FF 80 00 00 02 01 06 00 00 04 0A DF 7B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 26 FF 80 00 00 02 01 06 00 00 04 08 76 5A 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 08 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 9C 06 00 00 0C A1 06 00 00 0D 68 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 65 CF 6F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 2A FF 80 00 00 02 01 06 00 00 04 08 EC 55 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 2C FF 80 00 00 02 01 06 00 00 04 08 21 52 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 2E FF 80 00 00 02 01 06 00 00 04 06 E4 B9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 30 FF 80 00 00 02 01 06 00 00 04 07 94 B0 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0A 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 9F 06 00 00 0C A3 06 00 00 0D 70 06 00 00 09 5C 06 00 00 00 00 06 00 00 09 65 72 6A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 34 FF 80 00 00 02 01 06 00 00 04 06 6B A4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 36 FF 80 00 00 02 01 06 00 00 04 07 59 B7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 38 FF 80 00 00 02 01 06 00 00 04 0C AB 04 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1C 3A FF 80 00 00 02 01 06 00 00 04 0A 26 63 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 08 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4D 06 00 00 07 AA 06 00 00 0C 96 06 00 00 0D 6C 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 65 8E 58 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 02 FF 80 00 00 02 01 06 00 00 04 07 EA 89 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 04 FF 80 00 00 02 01 06 00 00 04 11 90 FB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 06 FF 80 00 00 02 01 06 00 00 04 05 8E AF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 08 FF 80 00 00 02 01 06 00 00 04 10 83 E5 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 05 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 95 06 00 00 0C A2 06 00 00 0D 62 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 65 30 07 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 0C FF 80 00 00 02 01 06 00 00 04 0B A7 4E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 0E FF 80 00 00 02 01 06 00 00 04 08 87 7E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 10 FF 80 00 00 02 01 06 00 00 04 05 9B BD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 12 FF 80 00 00 02 01 06 00 00 04 06 BB 8D 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 07 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 9B 06 00 00 0C A4 06 00 00 0D 68 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 66 ED 6A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 16 FF 80 00 00 02 01 06 00 00 04 06 CD 88 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 18 FF 80 00 00 02 01 06 00 00 04 07 65 94 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 1A FF 80 00 00 02 01 06 00 00 04 08 29 6E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 1C FF 80 00 00 02 01 06 00 00 04 05 01 B2 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 06 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 98 06 00 00 0C A2 06 00 00 0D 64 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 67 D0 ED 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 20 FF 80 00 00 02 01 06 00 00 04 09 9F 49 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 22 FF 80 00 00 02 01 06 00 00 04 06 D3 B3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 24 FF 80 00 00 02 01 06 00 00 04 06 1E B4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 26 FF 80 00 00 02 01 06 00 00 04 07 2C A7 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 09 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 9C 06 00 00 0C A7 06 00 00 0D 6D 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 69 86 EB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 2A FF 80 00 00 02 01 06 00 00 04 07 B6 A8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 2C FF 80 00 00 02 01 06 00 00 04 16 73 AE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 2E FF 80 00 00 02 01 06 00 00 04 07 C0 AD 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 30 FF 80 00 00 02 01 06 00 00 04 08 CE 4D 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 09 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 A2 06 00 00 0C A5 06 00 00 0D 70 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 65 DD 68 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 34 FF 80 00 00 02 01 06 00 00 04 07 4F B0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 36 FF 80 00 00 02 01 06 00 00 04 09 8A 5B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 38 FF 80 00 00 02 01 06 00 00 04 0D 8F 10 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1D 3A FF 80 00 00 02 01 06 00 00 04 09 10 54 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0C 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4D 06 00 00 07 B9 06 00 00 0C AD 06 00 00 0D 74 06 00 00 09 60 06 00 00 00 00 06 00 00 09 69 FF EA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 02 FF 80 00 00 02 01 06 00 00 04 08 EA 7F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 04 FF 80 00 00 02 01 06 00 00 04 08 27 78 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 06 FF 80 00 00 02 01 06 00 00 04 08 9C 7A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 08 FF 80 00 00 02 01 06 00 00 04 0B 26 45 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 08 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4D 06 00 00 07 A3 06 00 00 0C 9E 06 00 00 0D 6A 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 67 60 76 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 0C FF 80 00 00 02 01 06 00 00 04 07 3C 8A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 0E FF 80 00 00 02 01 06 00 00 04 0D DD 27 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 10 FF 80 00 00 02 01 06 00 00 04 08 89 68 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 12 FF 80 00 00 02 01 06 00 00 04 07 C5 92 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0B 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4D 06 00 00 07 AA 06 00 00 0C A4 06 00 00 0D 77 06 00 00 09 60 06 00 00 00 00 06 00 00 09 67 58 FB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 16 FF 80 00 00 02 01 06 00 00 04 07 B3 97 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 18 FF 80 00 00 02 01 06 00 00 04 0B FE 50 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 1A FF 80 00 00 02 01 06 00 00 04 08 DE 60 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 1C FF 80 00 00 02 01 06 00 00 04 05 F6 BC 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 09 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 A6 06 00 00 0C A6 06 00 00 0D 74 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 65 7B F6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 20 FF 80 00 00 02 01 06 00 00 04 0E D7 33 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 22 FF 80 00 00 02 01 06 00 00 04 0B C1 66 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 24 FF 80 00 00 02 01 06 00 00 04 10 5E CF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 26 FF 80 00 00 02 01 06 00 00 04 0A 3E 72 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0C 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4D 06 00 00 07 BB 06 00 00 0C A9 06 00 00 0D 82 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 66 55 9A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 2A FF 80 00 00 02 01 06 00 00 04 0A A4 7D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 2C FF 80 00 00 02 01 06 00 00 04 0A 69 7A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 2E FF 80 00 00 02 01 06 00 00 04 09 49 4A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 30 FF 80 00 00 02 01 06 00 00 04 15 5D 88 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0E 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 C2 06 00 00 0C A9 06 00 00 0D 87 06 00 00 09 61 06 00 00 00 00 06 00 00 09 68 39 65 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 34 FF 80 00 00 02 01 06 00 00 04 09 C6 57 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 36 FF 80 00 00 02 01 06 00 00 04 0B 6F 76 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 38 FF 80 00 00 02 01 06 00 00 04 0D 78 1E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1E 3A FF 80 00 00 02 01 06 00 00 04 0A 7C 68 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0D 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 B9 06 00 00 0C A7 06 00 00 0D 7E 06 00 00 09 60 06 00 00 00 00 06 00 00 09 68 58 7E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 02 FF 80 00 00 02 01 06 00 00 04 0F F8 0E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 04 FF 80 00 00 02 01 06 00 00 04 0B 11 4F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 06 FF 80 00 00 02 01 06 00 00 04 0A 23 5C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 08 FF 80 00 00 02 01 06 00 00 04 0C 34 34 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0C 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 BA 06 00 00 0C AA 06 00 00 0D 81 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 64 CA 7B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 0C FF 80 00 00 02 01 06 00 00 04 0B FD 45 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 0E FF 80 00 00 02 01 06 00 00 04 10 14 E9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 10 FF 80 00 00 02 01 06 00 00 04 0B BF 5F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 12 FF 80 00 00 02 01 06 00 00 04 0A 8D 4C 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0C 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 C1 06 00 00 0C 9E 06 00 00 0D 7E 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 66 87 96 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 16 FF 80 00 00 02 01 06 00 00 04 09 60 7B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 18 FF 80 00 00 02 01 06 00 00 04 0D 65 30 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 1A FF 80 00 00 02 01 06 00 00 04 0D DE 32 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 1C FF 80 00 00 02 01 06 00 00 04 0C 9A 24 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0E 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 BD 06 00 00 0C A9 06 00 00 0D 84 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 67 96 51 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 20 FF 80 00 00 02 01 06 00 00 04 0F F3 27 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 22 FF 80 00 00 02 01 06 00 00 04 0D 5A 06 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 24 FF 80 00 00 02 01 06 00 00 04 0E 0C 33 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 26 FF 80 00 00 02 01 06 00 00 04 0F 3E 20 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0C 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 BA 06 00 00 0C AA 06 00 00 0D 82 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 68 7E E4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 2A FF 80 00 00 02 01 06 00 00 04 0E 2D 3E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 2C FF 80 00 00 02 01 06 00 00 04 0E E0 39 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 2E FF 80 00 00 02 01 06 00 00 04 0C 49 18 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 30 FF 80 00 00 02 01 06 00 00 04 0E A2 23 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0D 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 BE 06 00 00 0C A8 06 00 00 0D 83 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 68 05 8B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 34 FF 80 00 00 02 01 06 00 00 04 0B 79 71 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 36 FF 80 00 00 02 01 06 00 00 04 08 59 41 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 38 FF 80 00 00 02 01 06 00 00 04 09 F1 5D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 1F 3A FF 80 00 00 02 01 06 00 00 04 15 A7 85 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0B 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4F 06 00 00 07 BC 06 00 00 0C AE 06 00 00 0D 7F 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 65 CE 70 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 02 FF 80 00 00 02 01 06 00 00 04 0C 38 E6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 04 FF 80 00 00 02 01 06 00 00 04 0A C3 84 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 06 FF 80 00 00 02 01 06 00 00 04 0C 4E E3 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 08 FF 80 00 00 02 01 06 00 00 04 10 82 34 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0D 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 C0 06 00 00 0C A8 06 00 00 0D 85 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 64 0A 70 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 0C FF 80 00 00 02 01 06 00 00 04 0E 0B C8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 0E FF 80 00 00 02 01 06 00 00 04 0D 2B F8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 10 FF 80 00 00 02 01 06 00 00 04 0A 6D 94 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 12 FF 80 00 00 02 01 06 00 00 04 0B 5F 87 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 11 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4D 06 00 00 07 CC 06 00 00 0C AE 06 00 00 0D 93 06 00 00 09 60 06 00 00 00 00 06 00 00 09 66 51 C9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 16 FF 80 00 00 02 01 06 00 00 04 0D 1F E7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 18 FF 80 00 00 02 01 06 00 00 04 0C B7 FB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 1A FF 80 00 00 02 01 06 00 00 04 14 C5 65 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 1C FF 80 00 00 02 01 06 00 00 04 23 34 27 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 10 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4D 06 00 00 07 C8 06 00 00 0C 9D 06 00 00 0D 83 06 00 00 09 61 06 00 00 00 00 06 00 00 09 68 EE 44 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 20 FF 80 00 00 02 01 06 00 00 04 10 DE 15 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 22 FF 80 00 00 02 01 06 00 00 04 13 FE 25 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 24 FF 80 00 00 02 01 06 00 00 04 0D CC DB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 26 FF 80 00 00 02 01 06 00 00 04 0F 65 FA 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 04 0F 06 00 00 00 00 06 00 00 00 00 06 00 00 00 4E 06 00 00 07 C7 06 00 00 0C AA 06 00 00 0D 8C 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 66 07 D8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 2A FF 80 00 00 02 01 06 00 00 04 0E 76 E4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 2C FF 80 00 00 02 01 06 00 00 04 0D 20 D1 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 2E FF 80 00 00 02 01 06 00 00 04 0A 24 A7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 30 FF 80 00 00 02 01 06 00 00 04 0A DD BF 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 64 06 00 00 00 00 06 00 00 00 00 06 00 00 00 91 06 00 00 07 C1 06 00 00 08 FE 06 00 00 0B 16 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 67 D9 99 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 34 FF 80 00 00 02 01 06 00 00 03 23 60 4B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 36 FF 80 00 00 02 01 06 00 00 03 0A 18 F5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 38 FF 80 00 00 02 01 06 00 00 03 08 2B DB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 20 3A FF 80 00 00 02 01 06 00 00 03 06 EE 30 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 05 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B0 06 00 00 07 BA 06 00 00 07 97 06 00 00 0A 35 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 68 8E 2C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 02 FF 80 00 00 02 01 06 00 00 03 0A AB CB 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 04 FF 80 00 00 02 01 06 00 00 03 02 2E 40 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 06 FF 80 00 00 02 01 06 00 00 03 08 CF ED 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 08 FF 80 00 00 02 01 06 00 00 03 0B 75 D2 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 08 06 00 00 00 00 06 00 00 00 00 06 00 00 00 AF 06 00 00 07 BB 06 00 00 07 9E 06 00 00 0A 3B 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 69 FD 58 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 0C FF 80 00 00 02 01 06 00 00 03 05 7D 3E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 0E FF 80 00 00 02 01 06 00 00 03 08 23 E7 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 10 FF 80 00 00 02 01 06 00 00 03 05 3F 24 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 12 FF 80 00 00 02 01 06 00 00 03 04 0D 37 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 07 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B0 06 00 00 07 BC 06 00 00 07 9A 06 00 00 0A 3B 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 68 62 08 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 16 FF 80 00 00 02 01 06 00 00 03 05 F2 23 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 18 FF 80 00 00 02 01 06 00 00 03 05 D3 2E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 1A FF 80 00 00 02 01 06 00 00 03 09 04 E6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 1C FF 80 00 00 02 01 06 00 00 03 06 3E 19 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 07 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B0 06 00 00 07 BC 06 00 00 07 9A 06 00 00 0A 38 06 00 00 09 60 06 00 00 00 00 06 00 00 09 6B A6 A2 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 20 FF 80 00 00 02 01 06 00 00 03 09 3B D0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 22 FF 80 00 00 02 01 06 00 00 03 07 FE 3B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 24 FF 80 00 00 02 01 06 00 00 03 08 C4 C4 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 26 FF 80 00 00 02 01 06 00 00 03 09 F6 D7 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 07 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B0 06 00 00 07 C5 06 00 00 07 8F 06 00 00 0A 3D 06 00 00 09 61 06 00 00 00 00 06 00 00 09 6A 24 5B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 2A FF 80 00 00 02 01 06 00 00 03 10 2C 55 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 2C FF 80 00 00 02 01 06 00 00 03 0B B3 FC 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 2E FF 80 00 00 02 01 06 00 00 03 0B 08 FE 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 30 FF 80 00 00 02 01 06 00 00 03 08 6A D4 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 0C 06 00 00 00 00 06 00 00 00 00 06 00 00 00 AF 06 00 00 07 C6 06 00 00 07 A2 06 00 00 0A 4B 06 00 00 09 5C 06 00 00 00 00 06 00 00 09 64 30 46 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 34 FF 80 00 00 02 01 06 00 00 03 09 95 C0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 36 FF 80 00 00 02 01 06 00 00 03 06 D9 3A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 38 FF 80 00 00 02 01 06 00 00 03 07 71 26 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 21 3A FF 80 00 00 02 01 06 00 00 03 04 51 16 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 0B 06 00 00 00 00 06 00 00 00 00 06 00 00 00 AE 06 00 00 07 BD 06 00 00 07 AC 06 00 00 0A 42 06 00 00 09 5C 06 00 00 00 00 06 00 00 09 66 2C 7C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 02 FF 80 00 00 02 01 06 00 00 03 0A 5C C5 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 04 FF 80 00 00 02 01 06 00 00 03 07 74 19 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 06 FF 80 00 00 02 01 06 00 00 03 06 46 0A 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 08 FF 80 00 00 02 01 06 00 00 03 0A 0B CD 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 05 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B1 06 00 00 07 B2 06 00 00 07 98 06 00 00 0A 2F 06 00 00 09 60 06 00 00 00 00 06 00 00 09 6A 8F 73 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 0C FF 80 00 00 02 01 06 00 00 03 04 03 21 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 0E FF 80 00 00 02 01 06 00 00 03 04 B8 23 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 10 FF 80 00 00 02 01 06 00 00 03 03 FE 4F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 12 FF 80 00 00 02 01 06 00 00 03 05 73 28 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 09 06 00 00 00 00 06 00 00 00 00 06 00 00 00 AF 06 00 00 07 C0 06 00 00 07 9C 06 00 00 0A 44 06 00 00 09 5B 06 00 00 00 00 06 00 00 09 66 3E 93 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 16 FF 80 00 00 02 01 06 00 00 03 07 17 0E 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 18 FF 80 00 00 02 01 06 00 00 03 05 24 20 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 1A FF 80 00 00 02 01 06 00 00 03 07 8D 01 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 1C FF 80 00 00 02 01 06 00 00 03 05 52 25 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 07 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B1 06 00 00 07 B7 06 00 00 07 99 06 00 00 0A 36 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 68 19 D9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 20 FF 80 00 00 02 01 06 00 00 03 07 B2 37 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 22 FF 80 00 00 02 01 06 00 00 03 07 09 35 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 24 FF 80 00 00 02 01 06 00 00 03 1B 29 E8 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 26 FF 80 00 00 02 01 06 00 00 03 05 6D 13 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 28 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 03 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B2 06 00 00 07 AE 06 00 00 07 98 06 00 00 0A 28 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 68 C1 72 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 2A FF 80 00 00 02 01 06 00 00 03 07 E5 3F 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 2C FF 80 00 00 02 01 06 00 00 03 05 3A 1B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 2E FF 80 00 00 02 01 06 00 00 03 04 08 08 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 30 FF 80 00 00 02 01 06 00 00 03 01 5C 47 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 32 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 02 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B1 06 00 00 07 B8 06 00 00 07 8F 06 00 00 0A 2D 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 69 7A 05 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 34 FF 80 00 00 02 01 06 00 00 03 0E DD BA 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 36 FF 80 00 00 02 01 06 00 00 03 05 B5 06 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 38 FF 80 00 00 02 01 06 00 00 03 0D DC 87 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 22 3A FF 80 00 00 02 01 06 00 00 03 1A 59 E1 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 00 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 13 06 00 00 00 00 06 00 00 00 00 06 00 00 00 AE 06 00 00 07 DC 06 00 00 07 98 06 00 00 0A 64 06 00 00 09 5C 06 00 00 00 00 06 00 00 09 66 E1 F0 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 02 FF 80 00 00 02 01 06 00 00 03 05 06 38 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 04 FF 80 00 00 02 01 06 00 00 03 02 74 4B 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 06 FF 80 00 00 02 01 06 00 00 03 05 70 3D 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 08 FF 80 00 00 02 01 06 00 00 03 07 43 13 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 0A FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 04 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B0 06 00 00 07 B5 06 00 00 07 98 06 00 00 0A 30 06 00 00 09 5D 06 00 00 00 00 06 00 00 09 67 69 E6 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 0C FF 80 00 00 02 01 06 00 00 03 05 27 35 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 0E FF 80 00 00 02 01 06 00 00 03 0A 6B CF 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 10 FF 80 00 00 02 01 06 00 00 03 07 77 0C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 12 FF 80 00 00 02 01 06 00 00 03 07 CC 0E 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 14 FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 07 06 00 00 00 00 06 00 00 00 00 06 00 00 00 B0 06 00 00 07 BC 06 00 00 07 99 06 00 00 0A 3A 06 00 00 09 5F 06 00 00 00 00 06 00 00 09 67 7A 50 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 16 FF 80 00 00 02 01 06 00 00 03 04 21 39 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 18 FF 80 00 00 02 01 06 00 00 03 04 00 34 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 1A FF 80 00 00 02 01 06 00 00 03 07 20 04 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 1C FF 80 00 00 02 01 06 00 00 03 0C 3E BD 7E
7E A0 79 01 02 01 10 80 93 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 1E FF 80 00 00 02 0D 09 07 4B 46 4D 5F 30 30 31 09 10 36 39 37 30 36 33 31 34 30 31 37 35 33 39 38 35 09 08 4D 41 33 30 34 48 33 45 06 00 00 03 08 06 00 00 00 00 06 00 00 00 00 06 00 00 00 AF 06 00 00 07 BC 06 00 00 07 99 06 00 00 0A 3D 06 00 00 09 5E 06 00 00 00 00 06 00 00 09 68 A2 19 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 20 FF 80 00 00 02 01 06 00 00 03 0C CC 8C 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 22 FF 80 00 00 02 01 06 00 00 03 09 DA D9 7E
7E A0 27 01 02 01 10 5A 87 E6 E7 00 0F 40 00 00 00 09 0C 07 E1 09 0E 04 15 23 24 FF 80 00 00 02 01 06 00 00 03 0A 8C EC 7E

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="MSTest.TestAdapter" version="1.1.11" targetFramework="net452" />
<package id="MSTest.TestFramework" version="1.1.11" targetFramework="net452" />
</packages>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -1,26 +0,0 @@
## AMS <-> MQTT Bridge
# Code
Various code projects to help debug and build the final system
### HanDebugger (C# console)
A very simplified c# console application to read serial data directly from the HAN bus, using the HAN-FTDI circuit and a FTDI device (USB serial port). The application will simply use the right serial setup (2400 baud, 8E1) to set up a connection and continously read incoming data. The received data is split on the package start and -end flags (0x7E) and output to console.
![HanScreenshot](/Code/HanDebugger/screenshot.png)
### ESPDebugger (Arduino sketch on ESP8266)
Very similar to the HanDebugger, simply reading the HAN data and outputting the same data to the Serial1 port, HEX-formatted and splitted by lines on start and -end flags.
![ESPCircuit](./ESPDebugger/Circuit%20(breadboard).jpg)
![ESPScreenshot](./ESPDebugger/screenshot.png)
### SerialTestPattern (Arduino sketch, any variant)
This code outputs a changing serial test pattern.
![](SerialTestPattern/SerialTestPattern.gif)
### SerialSimulator (Python code to send sample HAN data over serial port)
Use this Python3 script (e.g. running on a desktop computer using a USB to serial dongle) to simulate the data sent over the HAN port (after being translate from Mbus to uart signals).
![](SerialSimulator/ams_serial_simulator.jpg)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

View File

@@ -1,19 +0,0 @@
import serial
import time
import sys
import sample_data
serial_port = sys.argv[1]
with serial.Serial(port=serial_port, baudrate=2400, bytesize=8, parity='E', stopbits=1) as ser:
print(ser)
print('sleeping')
time.sleep(1)
while True:
for packet in sample_data.kaifa_20190508_packets[:]:
sys.stdout.flush()
ser.write(packet)
print('sleeping')
time.sleep(2)
break

View File

@@ -1,27 +0,0 @@
# From Samples/Kaifa/HAN 20170912-3.txt:
kaifa_han_20170912_3_packets = [
# [2017-09-13 00.00.07.776 - Received 41 (0x29) bytes]
b'\x7E\xA0\x27\x01\x02\x01\x10\x5A\x87\xE6\xE7\x00\x0F\x40\x00\x00\x00\x09\x0C\x07\xE1\x09\x0D\x02\x00\x00\x06\xFF\x80\x00\x00\x02\x01\x06\x00\x00\x11\xAC\x85\x61\x7E',
# [2017-09-13 00.00.09.784 - Received 41 (0x29) bytes]
b'\x7E\xA0\x27\x01\x02\x01\x10\x5A\x87\xE6\xE7\x00\x0F\x40\x00\x00\x00\x09\x0C\x07\xE1\x09\x0D\x02\x00\x00\x08\xFF\x80\x00\x00\x02\x01\x06\x00\x00\x11\xB4\x6D\xF0\x7E',
# [2017-09-13 00.00.11.761 - Received 157 (0x9D) bytes]
b'\x7E\xA0\x9B\x01\x02\x01\x10\xEE\xAE\xE6\xE7\x00\x0F\x40\x00\x00\x00\x09\x0C\x07\xE1\x09\x0D\x02\x00\x00\x0A\xFF\x80\x00\x00\x02\x12\x09\x07\x4B\x46\x4D\x5F\x30\x30\x31\x09\x10\x36\x39\x37\x30\x36\x33\x31\x34\x30\x31\x37\x35\x33\x39\x38\x35\x09\x08\x4D\x41\x33\x30\x34\x48\x33\x45\x06\x00\x00\x11\xB5\x06\x00\x00\x00\x00\x06\x00\x00\x00\x00\x06\x00\x00\x00\x80\x06\x00\x00\x38\x48\x06\x00\x00\x3C\x76\x06\x00\x00\x14\x5B\x06\x00\x00\x09\x4D\x06\x00\x00\x00\x00\x06\x00\x00\x09\x5A\x09\x0C\x07\xE1\x09\x0D\x02\x00\x00\x0A\xFF\x80\x00\x00\x06\x00\x01\xB8\x57\x06\x00\x00\x00\x00\x06\x00\x00\x00\x65\x06\x00\x00\x33\xA4\x54\x83\x7E',
# [2017-09-13 00.00.13.769 - Received 41 (0x29) bytes]
b'\x7E\xA0\x27\x01\x02\x01\x10\x5A\x87\xE6\xE7\x00\x0F\x40\x00\x00\x00\x09\x0C\x07\xE1\x09\x0D\x02\x00\x00\x0C\xFF\x80\x00\x00\x02\x01\x06\x00\x00\x11\xB9\xFE\x2E\x7E',
# [2017-09-13 00.00.15.778 - Received 41 (0x29) bytes]
b'\x7E\xA0\x27\x01\x02\x01\x10\x5A\x87\xE6\xE7\x00\x0F\x40\x00\x00\x00\x09\x0C\x07\xE1\x09\x0D\x02\x00\x00\x0E\xFF\x80\x00\x00\x02\x01\x06\x00\x00\x11\xBA\xDE\x1E\x7E',
# [2017-09-13 00.00.17.786 - Received 41 (0x29) bytes]
b'\x7E\xA0\x27\x01\x02\x01\x10\x5A\x87\xE6\xE7\x00\x0F\x40\x00\x00\x00\x09\x0C\x07\xE1\x09\x0D\x02\x00\x00\x10\xFF\x80\x00\x00\x02\x01\x06\x00\x00\x11\xBB\xAE\x17\x7E',
# [2017-09-13 00.00.19.762 - Received 41 (0x29) bytes]
b'\x7E\xA0\x27\x01\x02\x01\x10\x5A\x87\xE6\xE7\x00\x0F\x40\x00\x00\x00\x09\x0C\x07\xE1\x09\x0D\x02\x00\x00\x12\xFF\x80\x00\x00\x02\x01\x06\x00\x00\x11\xB7\x79\xDF\x7E',
# [2017-09-13 00.00.21.771 - Received 123 (0x7B) bytes]
b'\x7E\xA0\x79\x01\x02\x01\x10\x80\x93\xE6\xE7\x00\x0F\x40\x00\x00\x00\x09\x0C\x07\xE1\x09\x0D\x02\x00\x00\x14\xFF\x80\x00\x00\x02\x0D\x09\x07\x4B\x46\x4D\x5F\x30\x30\x31\x09\x10\x36\x39\x37\x30\x36\x33\x31\x34\x30\x31\x37\x35\x33\x39\x38\x35\x09\x08\x4D\x41\x33\x30\x34\x48\x33\x45\x06\x00\x00\x11\xBB\x06\x00\x00\x00\x00\x06\x00\x00\x00\x00\x06\x00\x00\x00\x7F\x06\x00\x00\x38\x4D\x06\x00\x00\x3C\x86\x06\x00\x00\x14\x5B\x06\x00\x00\x09\x4F\x06\x00\x00\x00\x00\x06\x00\x00\x09\x5C\xC1\x54\x7E',
]
# From Kaifa MA105H2E 2019-05-08
kaifa_20190508_packets = [
b'~\xa0\'\x01\x02\x01\x10Z\x87\xe6\xe7\x00\x0f@\x00\x00\x00\t\x0c\x07\xe3\x05\x08\x03\x16 "\xff\x80\x00\x00\x02\x01\x06\x00\x00\x03\xa3L\xab~',
b'~\xa0e\x01\x02\x01\x10\xf0P\xe6\xe7\x00\x0f@\x00\x00\x00\t\x0c\x07\xe3\x05\x08\x03\x16 (\xff\x80\x00\x00\x02\t\t\x07KFM_001\t\x106970631401991684\t\x08MA105H2E\x06\x00\x00\x03\xa5\x06\x00\x00\x00\x00\x06\x00\x00\x00!\x06\x00\x00\x00\x00\x06\x00\x00\x10\x0e\x06\x00\x00\t\n\x98v~',
b'~\xa0\'\x01\x02\x01\x10Z\x87\xe6\xe7\x00\x0f@\x00\x00\x00\t\x0c\x07\xe3\x05\x08\x03\x16 "\xff\x80\x00\x00\x02\x01\x06\x00\x00\x03\xa3L\xab~',
]

View File

@@ -1,7 +0,0 @@
This is a simple Arduino sketch that can be used to generate a
serial test pattern (input to the m-bus master for instance).
It will send one byte at the time, changing one bit compared
to previous at a fixed interval.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -1,36 +0,0 @@
#include <SoftwareSerial.h>
#define RX_PIN 10
#define TX_PIN 11
SoftwareSerial mySerial(RX_PIN, TX_PIN);
// https://en.wikipedia.org/wiki/Binary_Gray_sequence
static unsigned int binary_to_gray(unsigned int num)
{
return num ^ (num >> 1);
}
void setup() {
mySerial.begin(9600);
}
void loop() {
static unsigned int i = 0;
static unsigned int ch = 0;
// Change the character more seldom than each loop entry.
if (i++ > 20) {
i = 0;
// 127 => leave the last bit sent always zero.
if (++ch > 127) {
ch = 0;
}
}
mySerial.write(binary_to_gray(ch));
// 9600 bps => 8 bit = 8/9600s ~ 0.8ms
delay(50);
}

View File

@@ -1,77 +0,0 @@
# Getting started building or modifying
## Tools
### Kicad
Install the [KiCad](http://www.kicad-pcb.org/) program to edit the schematic or PCB.
KiCad documentation and forums:
* https://kicad-pcb.org/help/documentation/#_getting_started
* https://forum.kicad.info/
* https://www.reddit.com/r/KiCad/
* https://en.wikipedia.org/wiki/KiCad
### Simulator
If you want to simulate parts of the circuit you also need a simulator. This is
highly recommended! This saves a *lot* of troubleshooting and makes you find
solutions you otherwise would not have found.
[Electronic circuit simulation](https://en.wikipedia.org/wiki/Electronic_circuit_simulation)
using computers have a long history. Many of them have origins directly or indirectly
related to the classic SPICE simulator (e.g. [Ngspice](http://ngspice.sourceforge.net)).
At the core they work similar to source code compilers - you give it a text file
describing the circuit and it produces a textual simulation result. Some of the simulators
are intended to be used just in text mode while other have a graphical frontend where
you are able to draw the circuit like in a schematic editor:
* [QUCS](http://qucs.sourceforge.net/) - Quite Universal Circuit Simulator.
* [QUCS-S](https://ra3xdh.github.io/) - A qucs version using ngspice as simulation backend. This one has been used for the simulations for board 3.
* [eSim](http://esim.fossee.in/).
* [Other alternatives](https://en.wikipedia.org/wiki/List_of_free_electronics_circuit_simulators).
### Git
While it is possible to download the content from this repository as a compresset
zip file, you want to use git to fetch the content. For Linux install depending on
distribution with
```
apt-get install git # debian, ubuntu, etc
dnf install git # fedora
yum install git # rhel, centos
```
For windows the most convenient option is to install [git for windows](https://git-scm.com/download/win).
To download the source of this repository run:
```
git clone https://github.com/roarfred/AmsToMqttBridge
cd AmsToMqttBridge
git submodule init
git submodule update --recursive
```
Make sure that all submodules are fetched. If not `git submodule status` will show something like the following (notice the `-` in front):
```bash
-f886cacb58461d356730e744d9d2ae55590825e4 kicad-symbols
```
while when properly fetched it will show the commit id normally
(plus any labels if appropriate):
```bash
f886cacb58461d356730e744d9d2ae55590825e4 kicad-symbols (5.0.0-rc1)
```
To mitigate, run update:
```bash
$ git submodule update --init
Submodule 'Electrical/kicad-libs/kicad-symbols' (https://github.com/kicad/kicad-symbols) registered for path 'kicad-symbols'
Cloning into '.../AmsToMqttBridge/Electrical/kicad-libs/kicad-symbols'...
Submodule path 'kicad-symbols': checked out 'f886cacb58461d356730e744d9d2ae55590825e4'
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
Record=TopLevelDocument|FileName=AMSTOMQTT.SchDoc

View File

@@ -1,20 +0,0 @@
----------------------------------------------------------------------------------------------------------------------------------
NCDrill File Report For: AMSTOMQTT.PcbDoc 25-Oct-17 2:22:37 PM
----------------------------------------------------------------------------------------------------------------------------------
Layer Pair : Top Layer to Bottom Layer
ASCII RoundHoles File : AMSTOMQTT.TXT
Tool Hole Size Hole Tolerance Hole Type Hole Count Plated Tool Travel
----------------------------------------------------------------------------------------------------------------------------------
T1 28mil (0.7mm) Round 9 PTH 4.25inch (107.84mm)
T2 28mil (0.711mm) Round 1 PTH 0.00inch (0.00mm)
T3 30mil (0.76mm) Round 10 PTH 0.91inch (23.16mm)
T4 33mil (0.85mm) Round 22 PTH 7.25inch (184.18mm)
T5 35mil (0.9mm) Round 18 PTH 5.72inch (145.35mm)
T6 47mil (1.2mm) Round 8 PTH 1.55inch (39.49mm)
T7 126mil (3.2mm) Round 2 PTH 0.45inch (11.43mm)
----------------------------------------------------------------------------------------------------------------------------------
Totals 70
Total Processing Time (hh:mm:ss) : 00:00:00

View File

@@ -1,21 +0,0 @@
------------------------------------------------------------------------------------------
Gerber File Extension Report For: AMSTOMQTT.GBR 25-Oct-17 2:21:42 PM
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
Layer Extension Layer Description
------------------------------------------------------------------------------------------
.GTL Top Layer
.GBL Bottom Layer
.GPB Bottom Pad Master
.GPT Top Pad Master
.GTO Top Overlay
.GTP Top Paste
.GTS Top Solder
.GBS Bottom Solder
.GKO Keep-Out Layer
.GM1 Mechanical 1
.GM13 Mechanical 13
.GM15 Mechanical 15
------------------------------------------------------------------------------------------

View File

@@ -1,248 +0,0 @@
G04 Layer_Physical_Order=2*
G04 Layer_Color=16711680*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD16C,0.02000*%
%ADD18C,0.05512*%
%ADD19C,0.06000*%
%ADD20C,0.04724*%
%ADD21R,0.05906X0.05906*%
%ADD22C,0.05906*%
%ADD23O,0.07874X0.03937*%
%ADD24O,0.07874X0.03937*%
%ADD25R,0.05906X0.05906*%
%ADD26C,0.07087*%
%ADD27C,0.05000*%
D16*
X169500Y152500D02*
X176000D01*
X169000Y153000D02*
X169500Y152500D01*
X162500Y153000D02*
X169000D01*
X124800Y190700D02*
X162500Y153000D01*
X29800Y190700D02*
X124800D01*
X25000Y195500D02*
X29800Y190700D01*
X131657Y41157D02*
X145500Y55000D01*
X67500Y52500D02*
X78843Y41157D01*
X65000Y78000D02*
X75000D01*
X162500Y183000D02*
X166756Y187256D01*
X178500D01*
X180800Y184956D01*
Y147700D02*
Y184956D01*
X169383Y136283D02*
X180800Y147700D01*
X55091Y136283D02*
X169383D01*
X69400Y123600D02*
X85000Y108000D01*
X37124Y123600D02*
X69400D01*
X23000Y109476D02*
X37124Y123600D01*
X159900Y166400D02*
X176000Y182500D01*
X202800Y102700D02*
X206000Y99500D01*
X141200Y102700D02*
X202800D01*
X136000Y97500D02*
X141200Y102700D01*
X95000Y108000D02*
X125500D01*
X136000Y97500D01*
X145500D02*
X166000D01*
X136000Y88000D02*
X145500Y97500D01*
X95000Y88000D02*
X136000D01*
X75000Y108000D02*
X95000Y88000D01*
X49000Y110500D02*
X51900Y113400D01*
X69600D01*
X75000Y108000D01*
X191744Y190256D02*
X204000Y178000D01*
X174744Y190256D02*
X191744D01*
X159000Y206000D02*
X174744Y190256D01*
X90000Y83000D02*
X95000Y78000D01*
X51500Y83000D02*
X90000D01*
X49000Y80500D02*
X51500Y83000D01*
X43000Y80500D02*
X49000D01*
X42000Y79500D02*
X43000Y80500D01*
X36000Y79500D02*
X42000D01*
X173531Y122531D02*
X187969D01*
X189000Y121500D01*
X165500Y114500D02*
X173531Y122531D01*
X78843Y41157D02*
X131657D01*
D18*
X77343Y52500D02*
D03*
X67500D02*
D03*
X165500Y144500D02*
D03*
Y114500D02*
D03*
X136000Y88000D02*
D03*
X166000D02*
D03*
Y97500D02*
D03*
X136000D02*
D03*
X189000Y182500D02*
D03*
Y152500D02*
D03*
X206000Y99500D02*
D03*
Y129500D02*
D03*
X55000Y195500D02*
D03*
X25000D02*
D03*
X36000Y109500D02*
D03*
Y79500D02*
D03*
X49000Y80500D02*
D03*
Y110500D02*
D03*
X55000Y204000D02*
D03*
X25000D02*
D03*
X176000Y152500D02*
D03*
Y182500D02*
D03*
X162500Y153000D02*
D03*
Y183000D02*
D03*
X106500Y41157D02*
D03*
Y51000D02*
D03*
D19*
X185500Y55000D02*
D03*
X180500Y65000D02*
D03*
X175500Y55000D02*
D03*
X170500Y65000D02*
D03*
X165500Y55000D02*
D03*
X160500Y65000D02*
D03*
X155500Y55000D02*
D03*
X150500Y65000D02*
D03*
X140500D02*
D03*
X145500Y55000D02*
D03*
D20*
X25000Y12000D02*
D03*
Y32000D02*
D03*
D21*
X23000Y81524D02*
D03*
X95000Y108000D02*
D03*
X204000Y198000D02*
D03*
D22*
X23000Y109476D02*
D03*
X85000Y108000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X95000Y78000D02*
D03*
X85000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X159000Y206000D02*
D03*
X204000Y188000D02*
D03*
Y178000D02*
D03*
Y168000D02*
D03*
Y158000D02*
D03*
Y148000D02*
D03*
D23*
X189000Y121500D02*
D03*
Y126500D02*
D03*
D24*
Y131500D02*
D03*
D25*
X169000Y206000D02*
D03*
D26*
X55091Y183500D02*
D03*
X29500D02*
D03*
Y165784D02*
D03*
X55091D02*
D03*
Y136283D02*
D03*
X29500D02*
D03*
Y118567D02*
D03*
X55091D02*
D03*
D27*
X159900Y166400D02*
D03*
M02*

View File

@@ -1,169 +0,0 @@
G04 Layer_Color=16711935*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD43C,0.06312*%
%ADD44C,0.06800*%
%ADD45C,0.00800*%
%ADD46C,0.05524*%
%ADD47R,0.06706X0.06706*%
%ADD48C,0.06706*%
%ADD49O,0.08674X0.04737*%
%ADD50O,0.08674X0.04737*%
%ADD51R,0.06706X0.06706*%
%ADD52C,0.07887*%
%ADD53C,0.05800*%
D43*
X77343Y52500D02*
D03*
X67500D02*
D03*
X165500Y144500D02*
D03*
Y114500D02*
D03*
X136000Y88000D02*
D03*
X166000D02*
D03*
Y97500D02*
D03*
X136000D02*
D03*
X189000Y182500D02*
D03*
Y152500D02*
D03*
X206000Y99500D02*
D03*
Y129500D02*
D03*
X55000Y195500D02*
D03*
X25000D02*
D03*
X36000Y109500D02*
D03*
Y79500D02*
D03*
X49000Y80500D02*
D03*
Y110500D02*
D03*
X55000Y204000D02*
D03*
X25000D02*
D03*
X176000Y152500D02*
D03*
Y182500D02*
D03*
X162500Y153000D02*
D03*
Y183000D02*
D03*
X106500Y41157D02*
D03*
Y51000D02*
D03*
D44*
X185500Y55000D02*
D03*
X180500Y65000D02*
D03*
X175500Y55000D02*
D03*
X170500Y65000D02*
D03*
X165500Y55000D02*
D03*
X160500Y65000D02*
D03*
X155500Y55000D02*
D03*
X150500Y65000D02*
D03*
X140500D02*
D03*
X145500Y55000D02*
D03*
D45*
X185500Y30000D02*
D03*
X140500D02*
D03*
D46*
X25000Y12000D02*
D03*
Y32000D02*
D03*
D47*
X23000Y81524D02*
D03*
X95000Y108000D02*
D03*
X204000Y198000D02*
D03*
D48*
X23000Y109476D02*
D03*
X85000Y108000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X95000Y78000D02*
D03*
X85000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X159000Y206000D02*
D03*
X204000Y188000D02*
D03*
Y178000D02*
D03*
Y168000D02*
D03*
Y158000D02*
D03*
Y148000D02*
D03*
D49*
X189000Y121500D02*
D03*
Y126500D02*
D03*
D50*
Y131500D02*
D03*
D51*
X169000Y206000D02*
D03*
D52*
X55091Y183500D02*
D03*
X29500D02*
D03*
Y165784D02*
D03*
X55091D02*
D03*
Y136283D02*
D03*
X29500D02*
D03*
Y118567D02*
D03*
X55091D02*
D03*
D53*
X159900Y166400D02*
D03*
M02*

View File

@@ -1,17 +0,0 @@
G04 Layer_Color=16711935*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD32C,0.01000*%
D32*
X0Y0D02*
X233858D01*
X0D02*
Y214173D01*
X233858Y0D02*
Y214173D01*
X0D02*
X233858D01*
M02*

View File

@@ -1,7 +0,0 @@
G04 Layer_Color=16711935*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
M02*

View File

@@ -1,197 +0,0 @@
G04 Layer_Color=16711935*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD32C,0.01000*%
%ADD54C,0.00394*%
%ADD55C,0.00200*%
D32*
X82155Y117208D02*
X145806D01*
Y211458D01*
X82155D02*
X145806D01*
X82155Y117208D02*
Y211458D01*
D54*
X98701Y103630D02*
G03*
X98701Y103630I-1969J0D01*
G01*
X41811Y14279D02*
X68189D01*
X41811Y28886D02*
X68189D01*
X41811Y14279D02*
Y28886D01*
X68189Y14279D02*
Y28886D01*
X59724Y107173D02*
X100276D01*
X59724Y78827D02*
X100276D01*
Y107173D01*
X59724Y78827D02*
Y107173D01*
D55*
X81984Y189238D02*
Y211500D01*
X145984D01*
Y189238D02*
Y211500D01*
X81984Y189238D02*
X145984D01*
X83651Y208333D02*
X83484Y208500D01*
X83151D01*
X82984Y208333D01*
Y207667D01*
X83151Y207500D01*
X83484D01*
X83651Y207667D01*
X83984Y208500D02*
Y207667D01*
X84150Y207500D01*
X84484D01*
X84650Y207667D01*
Y208500D01*
X84984D02*
X85650D01*
X85317D01*
Y207500D01*
X86483Y208500D02*
X86150D01*
X85983Y208333D01*
Y207667D01*
X86150Y207500D01*
X86483D01*
X86650Y207667D01*
Y208333D01*
X86483Y208500D01*
X86983D02*
Y207667D01*
X87150Y207500D01*
X87483D01*
X87649Y207667D01*
Y208500D01*
X87983D02*
X88649D01*
X88316D01*
Y207500D01*
X89982D02*
Y208500D01*
X90482D01*
X90649Y208333D01*
Y208000D01*
X90482Y207833D01*
X89982D01*
X91482Y208500D02*
X91148D01*
X90982Y208333D01*
Y207667D01*
X91148Y207500D01*
X91482D01*
X91648Y207667D01*
Y208333D01*
X91482Y208500D01*
X91981D02*
Y207500D01*
X92648D01*
X92981Y208500D02*
Y208333D01*
X93314Y208000D01*
X93647Y208333D01*
Y208500D01*
X93314Y208000D02*
Y207500D01*
X94647Y208333D02*
X94481Y208500D01*
X94147D01*
X93981Y208333D01*
Y207667D01*
X94147Y207500D01*
X94481D01*
X94647Y207667D01*
Y208000D01*
X94314D01*
X95480Y208500D02*
X95147D01*
X94980Y208333D01*
Y207667D01*
X95147Y207500D01*
X95480D01*
X95647Y207667D01*
Y208333D01*
X95480Y208500D01*
X95980Y207500D02*
Y208500D01*
X96646Y207500D01*
Y208500D01*
X82984Y209500D02*
Y210167D01*
X83318Y210500D01*
X83651Y210167D01*
Y209500D01*
Y210000D01*
X82984D01*
X83984Y209500D02*
Y210500D01*
X84650Y209500D01*
Y210500D01*
X84984D02*
X85650D01*
X85317D01*
Y209500D01*
X86650Y210500D02*
X85983D01*
Y209500D01*
X86650D01*
X85983Y210000D02*
X86317D01*
X86983Y209500D02*
Y210500D01*
X87649Y209500D01*
Y210500D01*
X87983Y209500D02*
Y210500D01*
X88649Y209500D01*
Y210500D01*
X88982Y209500D02*
Y210167D01*
X89316Y210500D01*
X89649Y210167D01*
Y209500D01*
Y210000D01*
X88982D01*
X90982Y209500D02*
Y210167D01*
X91315Y210500D01*
X91648Y210167D01*
Y209500D01*
Y210000D01*
X90982D01*
X91981Y209500D02*
Y210500D01*
X92481D01*
X92648Y210333D01*
Y210000D01*
X92481Y209833D01*
X91981D01*
X92315D02*
X92648Y209500D01*
X93647Y210500D02*
X92981D01*
Y209500D01*
X93647D01*
X92981Y210000D02*
X93314D01*
X93981Y209500D02*
Y210167D01*
X94314Y210500D01*
X94647Y210167D01*
Y209500D01*
Y210000D01*
X93981D01*
M02*

View File

@@ -1,44 +0,0 @@
G04 Layer_Color=32768*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD32C,0.01000*%
%ADD54C,0.00394*%
%ADD56C,0.00197*%
D32*
X78646Y117208D02*
Y211458D01*
X149315D01*
Y117208D02*
Y211458D01*
X78646Y117208D02*
X149315D01*
D54*
X55000Y19614D02*
Y23551D01*
X53031Y21583D02*
X56969D01*
X80000Y91032D02*
Y94969D01*
X78032Y93000D02*
X81969D01*
X187032Y126500D02*
X190969D01*
X189000Y124531D02*
Y128469D01*
X113980Y163333D02*
Y165333D01*
X112980Y164333D02*
X114980D01*
D56*
X40827Y4457D02*
X69173D01*
X40827Y38709D02*
X69173D01*
X40827Y4457D02*
Y38709D01*
X69173Y4457D02*
Y38709D01*
M02*

View File

@@ -1,159 +0,0 @@
G04 Layer_Color=255*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD18C,0.05512*%
%ADD19C,0.06000*%
%ADD20C,0.04724*%
%ADD21R,0.05906X0.05906*%
%ADD22C,0.05906*%
%ADD23O,0.07874X0.03937*%
%ADD24O,0.07874X0.03937*%
%ADD25R,0.05906X0.05906*%
%ADD26C,0.07087*%
D18*
X77343Y52500D02*
D03*
X67500D02*
D03*
X165500Y144500D02*
D03*
Y114500D02*
D03*
X136000Y88000D02*
D03*
X166000D02*
D03*
Y97500D02*
D03*
X136000D02*
D03*
X189000Y182500D02*
D03*
Y152500D02*
D03*
X206000Y99500D02*
D03*
Y129500D02*
D03*
X55000Y195500D02*
D03*
X25000D02*
D03*
X36000Y109500D02*
D03*
Y79500D02*
D03*
X49000Y80500D02*
D03*
Y110500D02*
D03*
X55000Y204000D02*
D03*
X25000D02*
D03*
X176000Y152500D02*
D03*
Y182500D02*
D03*
X162500Y153000D02*
D03*
Y183000D02*
D03*
X106500Y41157D02*
D03*
Y51000D02*
D03*
D19*
X185500Y55000D02*
D03*
X180500Y65000D02*
D03*
X175500Y55000D02*
D03*
X170500Y65000D02*
D03*
X165500Y55000D02*
D03*
X160500Y65000D02*
D03*
X155500Y55000D02*
D03*
X150500Y65000D02*
D03*
X140500D02*
D03*
X145500Y55000D02*
D03*
D20*
X25000Y12000D02*
D03*
Y32000D02*
D03*
D21*
X23000Y81524D02*
D03*
X95000Y108000D02*
D03*
X204000Y198000D02*
D03*
D22*
X23000Y109476D02*
D03*
X85000Y108000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X95000Y78000D02*
D03*
X85000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X159000Y206000D02*
D03*
X204000Y188000D02*
D03*
Y178000D02*
D03*
Y168000D02*
D03*
Y158000D02*
D03*
Y148000D02*
D03*
D23*
X189000Y121500D02*
D03*
Y126500D02*
D03*
D24*
Y131500D02*
D03*
D25*
X169000Y206000D02*
D03*
D26*
X55091Y183500D02*
D03*
X29500D02*
D03*
Y165784D02*
D03*
X55091D02*
D03*
Y136283D02*
D03*
X29500D02*
D03*
Y118567D02*
D03*
X55091D02*
D03*
M02*

View File

@@ -1,233 +0,0 @@
G04 Layer_Color=255*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD10R,0.03937X0.09449*%
%ADD11R,0.12992X0.09449*%
%ADD12R,0.08858X0.03937*%
%ADD13R,0.08268X0.06299*%
%ADD14R,0.01575X0.05315*%
%ADD15R,0.07087X0.07480*%
%ADD18C,0.05512*%
%ADD19C,0.06000*%
%ADD20C,0.04724*%
%ADD21R,0.05906X0.05906*%
%ADD22C,0.05906*%
%ADD23O,0.07874X0.03937*%
%ADD24O,0.07874X0.03937*%
%ADD25R,0.05906X0.05906*%
%ADD26C,0.07087*%
D10*
X45945Y10165D02*
D03*
X55000D02*
D03*
X64055D02*
D03*
D11*
X55000Y33000D02*
D03*
D12*
X83961Y123382D02*
D03*
Y131256D02*
D03*
Y139130D02*
D03*
Y147004D02*
D03*
Y154878D02*
D03*
Y162752D02*
D03*
Y170626D02*
D03*
Y178500D02*
D03*
X144000D02*
D03*
Y170626D02*
D03*
Y162752D02*
D03*
Y154878D02*
D03*
Y147004D02*
D03*
Y139130D02*
D03*
Y131256D02*
D03*
Y123382D02*
D03*
D13*
X86169Y19736D02*
D03*
X110382D02*
D03*
D14*
X93158Y20228D02*
D03*
X95717D02*
D03*
X98276D02*
D03*
X100835D02*
D03*
X103394D02*
D03*
D15*
X93551Y9500D02*
D03*
X103000D02*
D03*
X113039D02*
D03*
X83512D02*
D03*
D18*
X77343Y52500D02*
D03*
X67500D02*
D03*
X165500Y144500D02*
D03*
Y114500D02*
D03*
X136000Y88000D02*
D03*
X166000D02*
D03*
Y97500D02*
D03*
X136000D02*
D03*
X189000Y182500D02*
D03*
Y152500D02*
D03*
X206000Y99500D02*
D03*
Y129500D02*
D03*
X55000Y195500D02*
D03*
X25000D02*
D03*
X36000Y109500D02*
D03*
Y79500D02*
D03*
X49000Y80500D02*
D03*
Y110500D02*
D03*
X55000Y204000D02*
D03*
X25000D02*
D03*
X176000Y152500D02*
D03*
Y182500D02*
D03*
X162500Y153000D02*
D03*
Y183000D02*
D03*
X106500Y41157D02*
D03*
Y51000D02*
D03*
D19*
X185500Y55000D02*
D03*
X180500Y65000D02*
D03*
X175500Y55000D02*
D03*
X170500Y65000D02*
D03*
X165500Y55000D02*
D03*
X160500Y65000D02*
D03*
X155500Y55000D02*
D03*
X150500Y65000D02*
D03*
X140500D02*
D03*
X145500Y55000D02*
D03*
D20*
X25000Y12000D02*
D03*
Y32000D02*
D03*
D21*
X23000Y81524D02*
D03*
X95000Y108000D02*
D03*
X204000Y198000D02*
D03*
D22*
X23000Y109476D02*
D03*
X85000Y108000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X95000Y78000D02*
D03*
X85000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X159000Y206000D02*
D03*
X204000Y188000D02*
D03*
Y178000D02*
D03*
Y168000D02*
D03*
Y158000D02*
D03*
Y148000D02*
D03*
D23*
X189000Y121500D02*
D03*
Y126500D02*
D03*
D24*
Y131500D02*
D03*
D25*
X169000Y206000D02*
D03*
D26*
X55091Y183500D02*
D03*
X29500D02*
D03*
Y165784D02*
D03*
X55091D02*
D03*
Y136283D02*
D03*
X29500D02*
D03*
Y118567D02*
D03*
X55091D02*
D03*
M02*

View File

@@ -1,457 +0,0 @@
G04 Layer_Physical_Order=1*
G04 Layer_Color=255*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD10R,0.03937X0.09449*%
%ADD11R,0.12992X0.09449*%
%ADD12R,0.08858X0.03937*%
%ADD13R,0.08268X0.06299*%
%ADD14R,0.01575X0.05315*%
%ADD15R,0.07087X0.07480*%
%ADD16C,0.02000*%
%ADD17C,0.01500*%
%ADD18C,0.05512*%
%ADD19C,0.06000*%
%ADD20C,0.04724*%
%ADD21R,0.05906X0.05906*%
%ADD22C,0.05906*%
%ADD23O,0.07874X0.03937*%
%ADD24O,0.07874X0.03937*%
%ADD25R,0.05906X0.05906*%
%ADD26C,0.07087*%
%ADD27C,0.05000*%
D10*
X45945Y10165D02*
D03*
X55000D02*
D03*
X64055D02*
D03*
D11*
X55000Y33000D02*
D03*
D12*
X83961Y123382D02*
D03*
Y131256D02*
D03*
Y139130D02*
D03*
Y147004D02*
D03*
Y154878D02*
D03*
Y162752D02*
D03*
Y170626D02*
D03*
Y178500D02*
D03*
X144000D02*
D03*
Y170626D02*
D03*
Y162752D02*
D03*
Y154878D02*
D03*
Y147004D02*
D03*
Y139130D02*
D03*
Y131256D02*
D03*
Y123382D02*
D03*
D13*
X86169Y19736D02*
D03*
X110382D02*
D03*
D14*
X93158Y20228D02*
D03*
X95717D02*
D03*
X98276D02*
D03*
X100835D02*
D03*
X103394D02*
D03*
D15*
X93551Y9500D02*
D03*
X103000D02*
D03*
X113039D02*
D03*
X83512D02*
D03*
D16*
X106500Y31000D02*
Y41157D01*
X103394Y27894D02*
X106500Y31000D01*
X103394Y20228D02*
Y27894D01*
X43500Y52500D02*
X67500D01*
X25000Y34000D02*
X43500Y52500D01*
X25000Y32000D02*
Y34000D01*
Y32000D02*
X33000Y24000D01*
Y19500D02*
Y24000D01*
Y19500D02*
X42335Y10165D01*
X45945D01*
X92929Y20228D02*
Y25071D01*
X89500Y28500D02*
X92929Y25071D01*
X76500Y28500D02*
X89500D01*
X73500Y25500D02*
X76500Y28500D01*
X73500Y12500D02*
Y25500D01*
X71165Y10165D02*
X73500Y12500D01*
X64055Y10165D02*
X71165D01*
X26195Y13194D02*
X29305D01*
X40000Y2500D01*
X59500D01*
X64055Y7055D02*
Y10165D01*
X162500Y147500D02*
X165500Y144500D01*
X162500Y147500D02*
Y153000D01*
X25000Y195500D02*
Y204000D01*
X74100Y127500D02*
Y155800D01*
Y127500D02*
X78218Y123382D01*
X82800D02*
X83961D01*
X25000Y195500D02*
X34400D01*
X74100Y155800D01*
X78218Y123382D02*
X82800D01*
X80000Y117600D02*
X82800Y120400D01*
X80000Y55157D02*
Y117600D01*
X77343Y52500D02*
X80000Y55157D01*
X74500Y52500D02*
X77343D01*
X55000Y33000D02*
X74500Y52500D01*
X55000Y10165D02*
Y33000D01*
X189000Y163000D02*
Y182500D01*
Y163000D02*
X204000Y148000D01*
X144000Y120488D02*
Y123382D01*
X157744Y106744D02*
X171114D01*
X144000Y120488D02*
X157744Y106744D01*
X144000Y110000D02*
Y120488D01*
Y110000D02*
X166000Y88000D01*
X145500Y67500D02*
X166000Y88000D01*
X145500Y55000D02*
Y67500D01*
X55091Y154000D02*
Y165783D01*
X49100Y148009D02*
X55091Y154000D01*
X49100Y123900D02*
Y148009D01*
X65000Y78000D02*
Y108000D01*
Y55000D02*
Y78000D01*
Y55000D02*
X67500Y52500D01*
X144000Y147004D02*
X147800D01*
X150429Y149633D01*
Y166329D01*
X162500Y178400D01*
Y183000D01*
X128000Y65000D02*
X140500D01*
X85000Y108000D02*
X128000Y65000D01*
X36000Y94524D02*
Y109500D01*
X23000Y81524D02*
X36000Y94524D01*
X55000Y195500D02*
X84500D01*
X90400Y189600D01*
Y164500D02*
Y189600D01*
X88652Y162752D02*
X90400Y164500D01*
X83961Y162752D02*
X88652D01*
X153429Y159929D02*
X159900Y166400D01*
X153429Y143729D02*
Y159929D01*
X148830Y139130D02*
X153429Y143729D01*
X144000Y139130D02*
X148830D01*
X162456Y109744D02*
X168500D01*
X158800Y113400D02*
X162456Y109744D01*
X158800Y113400D02*
Y126956D01*
X154500Y131256D02*
X158800Y126956D01*
X144000Y131256D02*
X154500D01*
X60091Y178500D02*
X83961D01*
X55091Y183500D02*
X60091Y178500D01*
X49800Y198800D02*
X55000Y204000D01*
X49800Y188791D02*
Y198800D01*
Y188791D02*
X55091Y183500D01*
X134500Y181500D02*
X159000Y206000D01*
X134500Y174626D02*
Y181500D01*
Y174626D02*
X138500Y170626D01*
X144000D01*
X181000Y211000D02*
X204000Y188000D01*
X164000Y211000D02*
X181000D01*
X164000Y201000D02*
Y211000D01*
X157700Y194700D02*
X164000Y201000D01*
X157700Y180200D02*
Y194700D01*
X156000Y178500D02*
X157700Y180200D01*
X144000Y178500D02*
X156000D01*
X95000Y72342D02*
X106500Y60842D01*
X95000Y72342D02*
Y78000D01*
X59500Y2500D02*
X64000Y7000D01*
X64055Y7055D01*
X106500Y51000D02*
Y60842D01*
X204000Y129500D02*
X206000D01*
X201000Y126500D02*
X204000Y129500D01*
X189000Y126500D02*
X201000D01*
X171114Y106744D02*
X179500Y115130D01*
Y129500D01*
X181500Y131500D01*
X189000D01*
Y133000D01*
X204000Y148000D01*
X168500Y109744D02*
X175000Y116244D01*
Y138500D01*
X189000Y152500D01*
X165500Y114500D02*
X171000Y120000D01*
X169000Y206000D02*
X171000D01*
Y120000D02*
Y206000D01*
X49100Y123900D02*
X65000Y108000D01*
X82800Y120400D02*
Y123382D01*
D17*
X64500Y6500D02*
Y7500D01*
X65000Y9000D02*
X65500Y8500D01*
X23500Y12000D02*
X25000Y10500D01*
X64000Y6500D02*
Y7000D01*
Y9500D01*
D18*
X77343Y52500D02*
D03*
X67500D02*
D03*
X165500Y144500D02*
D03*
Y114500D02*
D03*
X136000Y88000D02*
D03*
X166000D02*
D03*
Y97500D02*
D03*
X136000D02*
D03*
X189000Y182500D02*
D03*
Y152500D02*
D03*
X206000Y99500D02*
D03*
Y129500D02*
D03*
X55000Y195500D02*
D03*
X25000D02*
D03*
X36000Y109500D02*
D03*
Y79500D02*
D03*
X49000Y80500D02*
D03*
Y110500D02*
D03*
X55000Y204000D02*
D03*
X25000D02*
D03*
X176000Y152500D02*
D03*
Y182500D02*
D03*
X162500Y153000D02*
D03*
Y183000D02*
D03*
X106500Y41157D02*
D03*
Y51000D02*
D03*
D19*
X185500Y55000D02*
D03*
X180500Y65000D02*
D03*
X175500Y55000D02*
D03*
X170500Y65000D02*
D03*
X165500Y55000D02*
D03*
X160500Y65000D02*
D03*
X155500Y55000D02*
D03*
X150500Y65000D02*
D03*
X140500D02*
D03*
X145500Y55000D02*
D03*
D20*
X25000Y12000D02*
D03*
Y32000D02*
D03*
D21*
X23000Y81524D02*
D03*
X95000Y108000D02*
D03*
X204000Y198000D02*
D03*
D22*
X23000Y109476D02*
D03*
X85000Y108000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X95000Y78000D02*
D03*
X85000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X159000Y206000D02*
D03*
X204000Y188000D02*
D03*
Y178000D02*
D03*
Y168000D02*
D03*
Y158000D02*
D03*
Y148000D02*
D03*
D23*
X189000Y121500D02*
D03*
Y126500D02*
D03*
D24*
Y131500D02*
D03*
D25*
X169000Y206000D02*
D03*
D26*
X55091Y183500D02*
D03*
X29500D02*
D03*
Y165784D02*
D03*
X55091D02*
D03*
Y136283D02*
D03*
X29500D02*
D03*
Y118567D02*
D03*
X55091D02*
D03*
D27*
X159900Y166400D02*
D03*
M02*

File diff suppressed because it is too large Load Diff

View File

@@ -1,81 +0,0 @@
G04 Layer_Color=8421504*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD10R,0.03937X0.09449*%
%ADD11R,0.12992X0.09449*%
%ADD12R,0.08858X0.03937*%
%ADD13R,0.08268X0.06299*%
%ADD14R,0.01575X0.05315*%
%ADD15R,0.07087X0.07480*%
D10*
X45945Y10165D02*
D03*
X55000D02*
D03*
X64055D02*
D03*
D11*
X55000Y33000D02*
D03*
D12*
X83961Y123382D02*
D03*
Y131256D02*
D03*
Y139130D02*
D03*
Y147004D02*
D03*
Y154878D02*
D03*
Y162752D02*
D03*
Y170626D02*
D03*
Y178500D02*
D03*
X144000D02*
D03*
Y170626D02*
D03*
Y162752D02*
D03*
Y154878D02*
D03*
Y147004D02*
D03*
Y139130D02*
D03*
Y131256D02*
D03*
Y123382D02*
D03*
D13*
X86169Y19736D02*
D03*
X110382D02*
D03*
D14*
X93158Y20228D02*
D03*
X95717D02*
D03*
X98276D02*
D03*
X100835D02*
D03*
X103394D02*
D03*
D15*
X93551Y9500D02*
D03*
X103000D02*
D03*
X113039D02*
D03*
X83512D02*
D03*
M02*

View File

@@ -1,243 +0,0 @@
G04 Layer_Color=8388736*
%FSLAX25Y25*%
%MOIN*%
G70*
G01*
G75*
%ADD37R,0.04737X0.10249*%
%ADD38R,0.13792X0.10249*%
%ADD39R,0.09658X0.04737*%
%ADD40R,0.09068X0.07099*%
%ADD41R,0.02375X0.06115*%
%ADD42R,0.07887X0.08280*%
%ADD43C,0.06312*%
%ADD44C,0.06800*%
%ADD45C,0.00800*%
%ADD46C,0.05524*%
%ADD47R,0.06706X0.06706*%
%ADD48C,0.06706*%
%ADD49O,0.08674X0.04737*%
%ADD50O,0.08674X0.04737*%
%ADD51R,0.06706X0.06706*%
%ADD52C,0.07887*%
%ADD53C,0.05800*%
D37*
X45945Y10165D02*
D03*
X55000D02*
D03*
X64055D02*
D03*
D38*
X55000Y33000D02*
D03*
D39*
X83961Y123382D02*
D03*
Y131256D02*
D03*
Y139130D02*
D03*
Y147004D02*
D03*
Y154878D02*
D03*
Y162752D02*
D03*
Y170626D02*
D03*
Y178500D02*
D03*
X144000D02*
D03*
Y170626D02*
D03*
Y162752D02*
D03*
Y154878D02*
D03*
Y147004D02*
D03*
Y139130D02*
D03*
Y131256D02*
D03*
Y123382D02*
D03*
D40*
X86169Y19736D02*
D03*
X110382D02*
D03*
D41*
X93158Y20228D02*
D03*
X95717D02*
D03*
X98276D02*
D03*
X100835D02*
D03*
X103394D02*
D03*
D42*
X93551Y9500D02*
D03*
X103000D02*
D03*
X113039D02*
D03*
X83512D02*
D03*
D43*
X77343Y52500D02*
D03*
X67500D02*
D03*
X165500Y144500D02*
D03*
Y114500D02*
D03*
X136000Y88000D02*
D03*
X166000D02*
D03*
Y97500D02*
D03*
X136000D02*
D03*
X189000Y182500D02*
D03*
Y152500D02*
D03*
X206000Y99500D02*
D03*
Y129500D02*
D03*
X55000Y195500D02*
D03*
X25000D02*
D03*
X36000Y109500D02*
D03*
Y79500D02*
D03*
X49000Y80500D02*
D03*
Y110500D02*
D03*
X55000Y204000D02*
D03*
X25000D02*
D03*
X176000Y152500D02*
D03*
Y182500D02*
D03*
X162500Y153000D02*
D03*
Y183000D02*
D03*
X106500Y41157D02*
D03*
Y51000D02*
D03*
D44*
X185500Y55000D02*
D03*
X180500Y65000D02*
D03*
X175500Y55000D02*
D03*
X170500Y65000D02*
D03*
X165500Y55000D02*
D03*
X160500Y65000D02*
D03*
X155500Y55000D02*
D03*
X150500Y65000D02*
D03*
X140500D02*
D03*
X145500Y55000D02*
D03*
D45*
X185500Y30000D02*
D03*
X140500D02*
D03*
D46*
X25000Y12000D02*
D03*
Y32000D02*
D03*
D47*
X23000Y81524D02*
D03*
X95000Y108000D02*
D03*
X204000Y198000D02*
D03*
D48*
X23000Y109476D02*
D03*
X85000Y108000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X95000Y78000D02*
D03*
X85000D02*
D03*
X75000D02*
D03*
X65000D02*
D03*
X159000Y206000D02*
D03*
X204000Y188000D02*
D03*
Y178000D02*
D03*
Y168000D02*
D03*
Y158000D02*
D03*
Y148000D02*
D03*
D49*
X189000Y121500D02*
D03*
Y126500D02*
D03*
D50*
Y131500D02*
D03*
D51*
X169000Y206000D02*
D03*
D52*
X55091Y183500D02*
D03*
X29500D02*
D03*
Y165784D02*
D03*
X55091D02*
D03*
Y136283D02*
D03*
X29500D02*
D03*
Y118567D02*
D03*
X55091D02*
D03*
D53*
X159900Y166400D02*
D03*
M02*

View File

@@ -1,2 +0,0 @@
Layer Pairs Export File for PCB: C:\Users\shaper\Downloads\AMSTOMQTT(FINAL)\AMSTOMQTT.PcbDoc
LayersSetName=Top_Bot_Thru_Holes|DrillFile=amstomqtt.txt|DrillLayers=gtl,gbl

View File

@@ -1,246 +0,0 @@
*************************************************************
FileName = AMSTOMQTT.GBR
AutoAperture = True
*************************************************************
Generating : Top Layer
File : AMSTOMQTT.GTL
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D10
D11
D12
D13
D14
D15
D16
D17
D18
D19
D20
D21
D22
D23
D24
D25
D26
D27
*************************************************************
*************************************************************
Generating : Bottom Layer
File : AMSTOMQTT.GBL
Adding Layer : Bottom Layer
Adding Layer : Multi-Layer
Used DCodes :
D16
D18
D19
D20
D21
D22
D23
D24
D25
D26
D27
*************************************************************
*************************************************************
Generating : Bottom Pad Master
File : AMSTOMQTT.GPB
Adding Layer : Bottom Layer
Adding Layer : Multi-Layer
Used DCodes :
D18
D19
D20
D21
D22
D23
D24
D25
D26
*************************************************************
*************************************************************
Generating : Top Pad Master
File : AMSTOMQTT.GPT
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D10
D11
D12
D13
D14
D15
D18
D19
D20
D21
D22
D23
D24
D25
D26
*************************************************************
*************************************************************
Generating : Top Overlay
File : AMSTOMQTT.GTO
Adding Layer : Top Overlay
Used DCodes :
D28
D29
D30
D31
D32
D33
D34
D35
D36
*************************************************************
*************************************************************
Generating : Top Paste
File : AMSTOMQTT.GTP
Adding Layer : Top Paste
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D10
D11
D12
D13
D14
D15
*************************************************************
*************************************************************
Generating : Top Solder
File : AMSTOMQTT.GTS
Adding Layer : Top Solder
Adding Layer : Top Layer
Adding Layer : Multi-Layer
Used DCodes :
D37
D38
D39
D40
D41
D42
D43
D44
D45
D46
D47
D48
D49
D50
D51
D52
D53
*************************************************************
*************************************************************
Generating : Bottom Solder
File : AMSTOMQTT.GBS
Adding Layer : Bottom Solder
Adding Layer : Bottom Layer
Adding Layer : Multi-Layer
Used DCodes :
D43
D44
D45
D46
D47
D48
D49
D50
D51
D52
D53
*************************************************************
*************************************************************
Generating : Keep-Out Layer
File : AMSTOMQTT.GKO
Adding Layer : Keep-Out Layer
Used DCodes :
D32
*************************************************************
*************************************************************
Generating : Mechanical 1
File : AMSTOMQTT.GM1
Adding Layer : Mechanical 1
Used DCodes :
*************************************************************
*************************************************************
Generating : Mechanical 13
File : AMSTOMQTT.GM13
Adding Layer : Mechanical 13
Used DCodes :
D32
D54
D55
*************************************************************
*************************************************************
Generating : Mechanical 15
File : AMSTOMQTT.GM15
Adding Layer : Mechanical 15
Used DCodes :
D32
D54
D56
*************************************************************

View File

@@ -1,5 +0,0 @@
DRC Rules Export File for PCB: C:\Users\shaper\Downloads\AMSTOMQTT(FINAL)\AMSTOMQTT.PcbDoc
RuleKind=SolderMaskExpansion|RuleName=SolderMaskExpansion|Scope=Board|Minimum=4.00
RuleKind=Width|RuleName=Width|Scope=Board|Minimum=10.00
RuleKind=Clearance|RuleName=Clearance|Scope=Board|Minimum=10.00
RuleKind=ShortCircuit|RuleName=ShortCircuit|Scope=Board|Allowed=1

View File

@@ -1,91 +0,0 @@
M48
;Layer_Color=9474304
;FILE_FORMAT=2:5
INCH,LZ
;TYPE=PLATED
T1F00S00C0.02756
T2F00S00C0.02800
T3F00S00C0.02992
T4F00S00C0.03346
T5F00S00C0.03543
T6F00S00C0.04724
T7F00S00C0.12598
%
T01
X0025Y0012
X00675Y00525
X0077343
X01065Y0051
Y0041157
X0189Y01215
Y01265
Y01315
X0025Y0032
T02
X01599Y01664
T03
X01455Y0055
X01555
X01655
X01755
X01855
X01805Y0065
X01705
X01605
X01505
X01405
T04
X0206Y00995
Y01295
X0189Y01525
X0176
X01625Y0153
X01655Y01445
Y01145
X0166Y00975
Y0088
X0136
Y00975
X0049Y01105
X0036Y01095
Y00795
X0049Y00805
X01625Y0183
X0176Y01825
X0189
X0025Y01955
Y0204
X0055
Y01955
T05
X0204Y0148
Y0158
Y0168
Y0178
X0095Y0108
X0085
X0075
X0065
Y0078
X0075
X0085
X0095
X0023Y0081524
Y0109476
X0159Y0206
X0169
X0204Y0198
Y0188
T06
X0055091Y0118567
Y0136283
Y0165784
Y01835
X00295
Y0165784
Y0136283
Y0118567
T07
X01405Y003
X01855
M30

View File

@@ -1,47 +0,0 @@
D10 RECTANGULAR 39.370 94.488 0.000 FLASH 180.000
D11 RECTANGULAR 129.921 94.488 0.000 FLASH 180.000
D12 RECTANGULAR 88.583 39.370 0.000 FLASH 0.000
D13 RECTANGULAR 82.677 62.992 0.000 FLASH 0.000
D14 RECTANGULAR 15.748 53.150 0.000 FLASH 0.000
D15 RECTANGULAR 70.866 74.803 0.000 FLASH 0.000
D16 ROUNDED 20.000 20.000 0.000 LINE 0.000
D17 ROUNDED 15.000 15.000 0.000 LINE 0.000
D18 ROUNDED 55.118 55.118 0.000 FLASH 0.000
D19 ROUNDED 60.000 60.000 0.000 FLASH 0.000
D20 ROUNDED 47.244 47.244 0.000 FLASH 0.000
D21 RECTANGULAR 59.055 59.055 0.000 FLASH 270.000
D22 ROUNDED 59.055 59.055 0.000 FLASH 0.000
D23 ROUNDED 78.740 39.370 0.000 FLASH 0.000
D24 ROUNDED 78.740 39.370 0.000 FLASH 0.000
D25 RECTANGULAR 59.055 59.055 0.000 FLASH 180.000
D26 ROUNDED 70.866 70.866 0.000 FLASH 0.000
D27 ROUNDED 50.000 50.000 0.000 FLASH 0.000
D28 ROUNDED 7.874 7.874 0.000 LINE 0.000
D29 ROUNDED 9.842 9.842 0.000 LINE 0.000
D30 ROUNDED 23.622 23.622 0.000 LINE 0.000
D31 ROUNDED 11.811 11.811 0.000 LINE 0.000
D32 ROUNDED 10.000 10.000 0.000 LINE 0.000
D33 ROUNDED 0.500 0.500 0.000 LINE 0.000
D34 ROUNDED 6.000 6.000 0.000 LINE 0.000
D35 ROUNDED 5.905 5.905 0.000 LINE 0.000
D36 RECTANGULAR 74.804 31.496 0.000 FLASH 0.000
D37 RECTANGULAR 47.370 102.488 0.000 FLASH 180.000
D38 RECTANGULAR 137.921 102.488 0.000 FLASH 180.000
D39 RECTANGULAR 96.583 47.370 0.000 FLASH 0.000
D40 RECTANGULAR 90.677 70.992 0.000 FLASH 0.000
D41 RECTANGULAR 23.748 61.150 0.000 FLASH 0.000
D42 RECTANGULAR 78.866 82.803 0.000 FLASH 0.000
D43 ROUNDED 63.118 63.118 0.000 FLASH 0.000
D44 ROUNDED 68.000 68.000 0.000 FLASH 0.000
D45 ROUNDED 8.000 8.000 0.000 FLASH 0.000
D46 ROUNDED 55.244 55.244 0.000 FLASH 0.000
D47 RECTANGULAR 67.055 67.055 0.000 FLASH 270.000
D48 ROUNDED 67.055 67.055 0.000 FLASH 0.000
D49 ROUNDED 86.740 47.370 0.000 FLASH 0.000
D50 ROUNDED 86.740 47.370 0.000 FLASH 0.000
D51 RECTANGULAR 67.055 67.055 0.000 FLASH 180.000
D52 ROUNDED 78.866 78.866 0.000 FLASH 0.000
D53 ROUNDED 58.000 58.000 0.000 FLASH 0.000
D54 ROUNDED 3.937 3.937 0.000 LINE 0.000
D55 ROUNDED 2.000 2.000 0.000 LINE 0.000
D56 ROUNDED 1.968 1.968 0.000 LINE 0.000

View File

@@ -1,12 +0,0 @@
Output: NC Drill Files
Type : NC Drill
From : Project [AMSTOMQTT.PrjPcb]
Generated File[AMSTOMQTT.TXT]
Generated File[AMSTOMQTT.LDP]
Generated File[AMSTOMQTT.DRR]
Files Generated : 3
Documents Printed : 0
Finished Output Generation At 2:22:37 PM On 25-Oct-17

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

View File

@@ -1,52 +0,0 @@
# Electrical Design
### **!!NOTE!!**
The more mature version of a HAN Port reader is available under the folder [HAN_ESP_TSS721](../HAN_ESP_TSS721). The main difference in these two versions are that this one is using a proprietary (but simpler) circuit for the M-bus to TTL
conversion and has very limited resources available for doing work on the schematics and PCB. The [HAN_ESP_TSS721](../HAN_ESP_TSS721) is using a TSS721 circuit
from Texas Instruments, specifically designed for M-bus to TTL conversion. Also
all design is available for you in a [KiCad](https://www.kicad-pcb.org) format.
## Explained
The design is using an opamp as a compined level converter and a schmitt trigger, in order to convert
the HAN signal into a 3.3V compatible serial format. As the input levels on the opamp is much higher
than our 5V supply, we are rectifying and smoothing the HAN signal to use for a supply here. (VDD)
As a power source, we've used a micro USB connector, providing 5V, just as this is cheap and easy. However,
no part of the circuit will need any other power than the 3.3V, so any combination of power source and
regulator that provides the 3.3V will do.
The ESP8266 setup is a rather standaraized setup and will allow for programming the ESP directly on the
board, if needed. During programming, it might be neccessary to disconnect the incoming HAN.
### **!!important changes!!**
> * R8 should not be used
> * The two unused inputs on the LM358 should be grounded (Pin 5 and 6)
## Schematics
![Schematics](./Schematics.PNG)
## PCB
![PCB](./PCB.PNG)
## Componenet list
Name | Value | Part
-----|------|-----
C1|10uF/25V|[P5148-ND](https://www.digikey.no/product-detail/en/panasonic-electronic-components/ECA-1EM100/P5148-ND/245007)
C2|100nF|[BC1101CT-ND](https://www.digikey.no/product-detail/en/vishay-bc-components/K104K10X7RF5UH5/BC2665CT-ND/2356879)
C3|220uF/35V|[1572-1706-ND](https://www.digikey.no/product-detail/en/illinois-capacitor/227CKS035M/1572-1706-ND/5411729)
D1|1N4148|[1N4148FS-ND](https://www.digikey.no/product-detail/en/fairchild-on-semiconductor/1N4148/1N4148FS-ND/458603)
P1||[609-4613-1-ND](https://www.digikey.no/product-detail/en/amphenol-fci/10118192-0001LF/609-4613-1-ND/2785378)
P2|Female|[S7004-ND](https://www.digikey.no/product-detail/en/sullins-connector-solutions/PPTC061LFBN-RC/S7004-ND/810145)
P3|Male|[952-2262-ND](https://www.digikey.no/product-detail/en/harwin-inc/M20-9990246/952-2262-ND/3728226)
P4||[609-1047-ND](https://www.digikey.no/product-detail/en/amphenol-fci/54602-910LF/609-1047-ND/1001361)
Q1|BC337|[BC33725TACT-ND](https://www.digikey.no/product-detail/en/fairchild-on-semiconductor/BC33725TA/BC33725TACT-ND/1532787)
R1-5,10,11|10K|[CF14JT10K0CT-ND](https://www.digikey.no/product-detail/en/stackpole-electronics-inc/CF14JT10K0/CF14JT10K0CT-ND/1830374)
R8|100K|[CF14JT100KCT-ND](https://www.digikey.no/product-detail/en/stackpole-electronics-inc/CF14JT100K/CF14JT100KCT-ND/1830399)
R9|330R|[CF14JT330RCT-ND](https://www.digikey.no/product-detail/en/stackpole-electronics-inc/CF14JT330R/CF14JT330RCT-ND/1830338)
R12,13|47K|[CF14JT47K0CT-ND](https://www.digikey.no/product-detail/en/stackpole-electronics-inc/CF14JT47K0/CF14JT47K0CT-ND/1830391)
S1,2||[450-1650-ND](https://www.digikey.no/product-detail/en/te-connectivity-alcoswitch-switches/1825910-6/450-1650-ND/1632536)
U2|LM1117-3.3|[LM1117IMPX-3.3/NOPBCT-ND](https://www.digikey.no/product-detail/en/texas-instruments/LM1117IMPX-3.3-NOPB/LM1117IMPX-3.3-NOPBCT-ND/3440160)
U3|LM358|[LM358NGOS-ND](https://www.digikey.no/product-detail/en/on-semiconductor/LM358NG/LM358NGOS-ND/918519)
Note: The ESP8266 is not included here. It can easily be found on ebay etc

Some files were not shown because too many files have changed in this diff Show More