Compare commits
147 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0f4848c872 | ||
|
|
6911d203ca | ||
|
|
e96b5bbf1b | ||
|
|
8457db50f6 | ||
|
|
279c5f8321 | ||
|
|
889b9153fa | ||
|
|
0de1d0bb6f | ||
|
|
bf13965a9e | ||
|
|
7b52efd332 | ||
|
|
c936f605d6 | ||
|
|
9d0ceb9ca8 | ||
|
|
b33273e3cc | ||
|
|
d9b45d037b | ||
|
|
8c75a9530e | ||
|
|
73d00f786a | ||
|
|
ab016fff93 | ||
|
|
a215aa7766 | ||
|
|
d747c84a14 | ||
|
|
26634f96b0 | ||
|
|
97669cf4ad | ||
|
|
e12980db11 | ||
|
|
732639814b | ||
|
|
c07c2e66d6 | ||
|
|
9b70802450 | ||
|
|
30d73c3a6e | ||
|
|
bd905c3595 | ||
|
|
1a2e70b1fb | ||
|
|
d6da7b2715 | ||
|
|
059a430f9a | ||
|
|
8ade50c2a6 | ||
|
|
5b94d8ff61 | ||
|
|
232b9c279d | ||
|
|
9b6a6af6ec | ||
|
|
9671e1eba3 | ||
|
|
78e531a7e9 | ||
|
|
478d63505d | ||
|
|
d8dfaaa730 | ||
|
|
f311b70b37 | ||
|
|
52bc2b14c9 | ||
|
|
2ddfc16d6a | ||
|
|
51ab4a7f07 | ||
|
|
e90a30bfde | ||
|
|
a63e6962d3 | ||
|
|
951ccf7de5 | ||
|
|
001e3376df | ||
|
|
9e4bf93f0a | ||
|
|
e5ac823f69 | ||
|
|
73fd228e2f | ||
|
|
fdac8f88af | ||
|
|
9c8552869c | ||
|
|
be75b013c0 | ||
|
|
79274e490d | ||
|
|
47293eebe4 | ||
|
|
90b62638ed | ||
|
|
78e766156d | ||
|
|
4b32af69a7 | ||
|
|
916b5550d9 | ||
|
|
48016240f9 | ||
|
|
518b408205 | ||
|
|
73a0359597 | ||
|
|
bbe82f9cdc | ||
|
|
4786735d4c | ||
|
|
227eb7b6ff | ||
|
|
00edd94033 | ||
|
|
ccd818e1ab | ||
|
|
fc42fb22d8 | ||
|
|
f6066fbbf3 | ||
|
|
9c09740a41 | ||
|
|
4e24e2949a | ||
|
|
eff00f1fe0 | ||
|
|
f484f3eb0e | ||
|
|
b2174dd521 | ||
|
|
fe79a96827 | ||
|
|
517a40b0a6 | ||
|
|
75f3c8c592 | ||
|
|
554cc7c023 | ||
|
|
6d0c722c98 | ||
|
|
d2f93c07bd | ||
|
|
d63516fd49 | ||
|
|
c114b777c7 | ||
|
|
a06729b535 | ||
|
|
0ea21991ea | ||
|
|
1994f16b82 | ||
|
|
b6efae656f | ||
|
|
fa0f93cefe | ||
|
|
058dc658c1 | ||
|
|
f6df84bf9a | ||
|
|
4b9cb27e58 | ||
|
|
5f14517258 | ||
|
|
ad820fff01 | ||
|
|
6d3d4adc7e | ||
|
|
99a23b3bf7 | ||
|
|
15e861ce70 | ||
|
|
fdfadb9bf9 | ||
|
|
388d35c390 | ||
|
|
e466a45b5c | ||
|
|
2e7b9e8e43 | ||
|
|
deb2148e9a | ||
|
|
27cb5dd833 | ||
|
|
7e6ac860fd | ||
|
|
3a7f6078f4 | ||
|
|
dbc551a41d | ||
|
|
9bb596aab1 | ||
|
|
4a3d22e75c | ||
|
|
d68ffc827d | ||
|
|
20c62a63cf | ||
|
|
8f85b43fc3 | ||
|
|
57d8603790 | ||
|
|
fc1f1554d8 | ||
|
|
70ed0b538a | ||
|
|
ced6f125fd | ||
|
|
f76cacf835 | ||
|
|
a8205edae9 | ||
|
|
0a317450f6 | ||
|
|
e9ed6d825a | ||
|
|
a6751c787c | ||
|
|
378dbbcc99 | ||
|
|
aed56b0b56 | ||
|
|
36b37eb2a6 | ||
|
|
550b216ba6 | ||
|
|
7e4047096b | ||
|
|
7fdedd8bcf | ||
|
|
f693869bd4 | ||
|
|
3312f88804 | ||
|
|
50faaca559 | ||
|
|
bf44849ecf | ||
|
|
4bfd9dee9a | ||
|
|
32d58fdd71 | ||
|
|
aef78962fb | ||
|
|
8ee713b616 | ||
|
|
0fa3e3585a | ||
|
|
a88291c0f0 | ||
|
|
ac1609bfac | ||
|
|
22d5839d60 | ||
|
|
8f0932f1f1 | ||
|
|
aeb161455e | ||
|
|
568180d7b2 | ||
|
|
0d99da6c9a | ||
|
|
843cea7626 | ||
|
|
c82a2a1d4b | ||
|
|
86dd8c1b87 | ||
|
|
bdc0c03a76 | ||
|
|
5680b5a501 | ||
|
|
4cd1fa87d1 | ||
|
|
1579562612 | ||
|
|
2713b5adae | ||
|
|
c20b07bfc2 |
10
.github/workflows/build.yml
vendored
@@ -2,8 +2,14 @@ name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- src/**
|
||||
- lib/**
|
||||
- scripts/**
|
||||
- web/**
|
||||
- platformio.ini
|
||||
branches:
|
||||
- '*'
|
||||
- master
|
||||
tags:
|
||||
- '*'
|
||||
- '!v*.*.*'
|
||||
@@ -34,6 +40,8 @@ jobs:
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -U platformio
|
||||
- name: Configure build targets
|
||||
run: echo "[platformio]\ndefault_envs = hw1esp12e, esp12e, esp32" > platformio-user.ini
|
||||
- name: PlatformIO lib install
|
||||
run: pio lib install
|
||||
- name: PlatformIO run
|
||||
|
||||
66
.github/workflows/release.yml
vendored
@@ -14,6 +14,16 @@ jobs:
|
||||
steps:
|
||||
- name: Check out code from repo
|
||||
uses: actions/checkout@v1
|
||||
- name: Get release version for filenames
|
||||
id: release_tag
|
||||
env:
|
||||
GITHUB_REF: ${{ github.ref }}
|
||||
run: echo ::set-output name=tag::$(echo ${GITHUB_REF:11})
|
||||
- name: Get release version for code
|
||||
id: release_tag
|
||||
env:
|
||||
GITHUB_REF: ${{ github.ref }}
|
||||
run: echo ::set-env name=GITHUB_TAG::$(echo ${GITHUB_REF##*/})
|
||||
- name: Cache Python dependencies
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
@@ -46,17 +56,8 @@ jobs:
|
||||
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
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
@@ -64,3 +65,48 @@ jobs:
|
||||
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 esp12e binary to release
|
||||
uses: actions/upload-release-asset@v1
|
||||
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 d1mini binary to release
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: .pio/build/d1mini/firmware.bin
|
||||
asset_name: ams2mqtt-d1mini-${{ steps.release_tag.outputs.tag }}.bin
|
||||
asset_content_type: application/octet-stream
|
||||
- name: Upload esp32 binary to release
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: .pio/build/esp32/firmware.bin
|
||||
asset_name: ams2mqtt-esp32-${{ steps.release_tag.outputs.tag }}.bin
|
||||
asset_content_type: application/octet-stream
|
||||
- name: Upload lolind32 binary to release
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: .pio/build/lolind32/firmware.bin
|
||||
asset_name: ams2mqtt-lolind32-${{ steps.release_tag.outputs.tag }}.bin
|
||||
asset_content_type: application/octet-stream
|
||||
- name: Upload featheresp32 binary to release
|
||||
uses: actions/upload-release-asset@v1
|
||||
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
|
||||
|
||||
5
.gitignore
vendored
@@ -6,4 +6,7 @@
|
||||
*.sw[op]
|
||||
.vscode
|
||||
.pio
|
||||
platformio-user.ini
|
||||
platformio-user.ini
|
||||
/src/version.h
|
||||
/src/web/root
|
||||
/src/AmsToMqttBridge.ino.cpp
|
||||
|
||||
@@ -1,371 +0,0 @@
|
||||
/*
|
||||
Name: AmsToMqttBridge.ino
|
||||
Created: 3/13/2018 7:40:28 PM
|
||||
Author: roarf
|
||||
*/
|
||||
|
||||
|
||||
//#define HAS_DALLAS_TEMP_SENSOR 1 // Set to zero if Dallas one wire temp sensor is not present
|
||||
//#define IS_CUSTOM_AMS_BOARD 1 // Set to zero if using NodeMCU or board not designed by Roar Fredriksen
|
||||
|
||||
#include <ArduinoJson.h>
|
||||
#include <MQTT.h>
|
||||
|
||||
#if HAS_DALLAS_TEMP_SENSOR
|
||||
#include <DallasTemperature.h>
|
||||
#include <OneWire.h>
|
||||
#endif
|
||||
|
||||
#if defined(ESP8266)
|
||||
#include <ESP8266WiFi.h>
|
||||
#elif defined(ESP32)
|
||||
#include <WiFi.h>
|
||||
#endif
|
||||
|
||||
#include "HanConfigAp.h"
|
||||
#include "HanReader.h"
|
||||
#include "HanToJson.h"
|
||||
|
||||
#define WIFI_CONNECTION_TIMEOUT 30000;
|
||||
|
||||
#if IS_CUSTOM_AMS_BOARD
|
||||
#define LED_PIN 2 // The blue on-board LED of the ESP8266 custom AMS board
|
||||
#define LED_ACTIVE_HIGH 0
|
||||
#define AP_BUTTON_PIN 0
|
||||
#else
|
||||
#define LED_PIN LED_BUILTIN
|
||||
#define LED_ACTIVE_HIGH 1
|
||||
#define AP_BUTTON_PIN INVALID_BUTTON_PIN
|
||||
#endif
|
||||
|
||||
#if HAS_DALLAS_TEMP_SENSOR
|
||||
#define TEMP_SENSOR_PIN 5 // Temperature sensor connected to GPIO5
|
||||
|
||||
OneWire oneWire(TEMP_SENSOR_PIN);
|
||||
DallasTemperature tempSensor(&oneWire);
|
||||
#endif
|
||||
|
||||
// Object used to boot as Access Point
|
||||
HanConfigAp ap;
|
||||
|
||||
// WiFi client and MQTT client
|
||||
WiFiClient *client;
|
||||
MQTTClient mqtt(384);
|
||||
|
||||
// Object used for debugging
|
||||
HardwareSerial* debugger = NULL;
|
||||
|
||||
// The HAN Port reader, used to read serial data and decode DLMS
|
||||
HanReader hanReader;
|
||||
|
||||
// the setup function runs once when you press reset or power the board
|
||||
void setup()
|
||||
{
|
||||
// Uncomment to debug over the same port as used for HAN communication
|
||||
//debugger = &Serial;
|
||||
|
||||
if (debugger) {
|
||||
// Setup serial port for debugging
|
||||
debugger->begin(2400, SERIAL_8E1);
|
||||
//debugger->begin(115200);
|
||||
while (!debugger);
|
||||
debugger->println("");
|
||||
debugger->println("Started...");
|
||||
}
|
||||
|
||||
// Flash the LED, to indicate we can boot as AP now
|
||||
pinMode(LED_PIN, OUTPUT);
|
||||
led_on();
|
||||
|
||||
delay(1000);
|
||||
|
||||
// Initialize the AP
|
||||
ap.setup(AP_BUTTON_PIN, debugger);
|
||||
|
||||
led_off();
|
||||
|
||||
if (!ap.isActivated)
|
||||
{
|
||||
setupWiFi();
|
||||
// Configure uart for AMS data
|
||||
Serial.begin(2400, SERIAL_8E1);
|
||||
while (!Serial);
|
||||
|
||||
hanReader.setup(&Serial, debugger);
|
||||
|
||||
// Compensate for the known Kaifa bug
|
||||
hanReader.compensateFor09HeaderBug = (ap.config.meterType == 1);
|
||||
}
|
||||
}
|
||||
|
||||
// the loop function runs over and over again until power down or reset
|
||||
void loop()
|
||||
{
|
||||
// Only do normal stuff if we're not booted as AP
|
||||
if (!ap.loop())
|
||||
{
|
||||
// Turn off the LED
|
||||
led_off();
|
||||
|
||||
// allow the MQTT client some resources
|
||||
mqtt.loop();
|
||||
delay(10); // <- fixes some issues with WiFi stability
|
||||
|
||||
// Reconnect to WiFi and MQTT as needed
|
||||
if (!mqtt.connected()) {
|
||||
MQTT_connect();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Read data from the HAN port
|
||||
readHanPort();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Continously flash the LED when AP mode
|
||||
if (millis() / 1000 % 2 == 0) led_on();
|
||||
else led_off();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void led_on()
|
||||
{
|
||||
#if LED_ACTIVE_HIGH
|
||||
digitalWrite(LED_PIN, HIGH);
|
||||
#else
|
||||
digitalWrite(LED_PIN, LOW);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void led_off()
|
||||
{
|
||||
#if LED_ACTIVE_HIGH
|
||||
digitalWrite(LED_PIN, LOW);
|
||||
#else
|
||||
digitalWrite(LED_PIN, HIGH);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void setupWiFi()
|
||||
{
|
||||
// Turn off AP
|
||||
WiFi.enableAP(false);
|
||||
|
||||
// Connect to WiFi
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(ap.config.ssid, ap.config.ssidPassword);
|
||||
|
||||
// Wait for WiFi connection
|
||||
if (debugger) debugger->print("\nWaiting for WiFi to connect...");
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
if (debugger) debugger->print(".");
|
||||
delay(500);
|
||||
}
|
||||
if (debugger) debugger->println(" connected");
|
||||
|
||||
client = new WiFiClient();
|
||||
mqtt.begin(ap.config.mqtt, *client);
|
||||
|
||||
// Direct incoming MQTT messages
|
||||
if (ap.config.mqttSubscribeTopic != 0 && strlen(ap.config.mqttSubscribeTopic) > 0) {
|
||||
mqtt.subscribe(ap.config.mqttSubscribeTopic);
|
||||
mqtt.onMessage(mqttMessageReceived);
|
||||
}
|
||||
|
||||
// Notify everyone we're here!
|
||||
sendMqttData("Connected!");
|
||||
}
|
||||
|
||||
void mqttMessageReceived(String &topic, String &payload)
|
||||
{
|
||||
|
||||
if (debugger) {
|
||||
debugger->println("Incoming MQTT message:");
|
||||
debugger->print("[");
|
||||
debugger->print(topic);
|
||||
debugger->print("] ");
|
||||
debugger->println(payload);
|
||||
}
|
||||
|
||||
// Do whatever needed here...
|
||||
// Ideas could be to query for values or to initiate OTA firmware update
|
||||
}
|
||||
|
||||
void readHanPort()
|
||||
{
|
||||
if (hanReader.read())
|
||||
{
|
||||
// Flash LED on, this shows us that data is received
|
||||
led_on();
|
||||
|
||||
// Get the timestamp (as unix time) from the package
|
||||
time_t time = hanReader.getPackageTime();
|
||||
if (debugger) debugger->print("Time of the package is: ");
|
||||
if (debugger) debugger->println(time);
|
||||
|
||||
// Define a json object to keep the data
|
||||
StaticJsonDocument<500> json;
|
||||
|
||||
// Any generic useful info here
|
||||
json["id"] = WiFi.macAddress();
|
||||
json["up"] = millis();
|
||||
json["t"] = time;
|
||||
|
||||
// Add a sub-structure to the json object,
|
||||
// to keep the data from the meter itself
|
||||
JsonObject data = json.createNestedObject("data");
|
||||
|
||||
#if HAS_DALLAS_TEMP_SENSOR
|
||||
// Get the temperature too
|
||||
tempSensor.requestTemperatures();
|
||||
data["temp"] = tempSensor.getTempCByIndex(0);
|
||||
#endif
|
||||
|
||||
hanToJson(data, ap.config.meterType, hanReader);
|
||||
|
||||
// Write the json to the debug port
|
||||
if (debugger) {
|
||||
debugger->print("Sending data to MQTT: ");
|
||||
serializeJsonPretty(json, *debugger);
|
||||
debugger->println();
|
||||
}
|
||||
|
||||
// Make sure we have configured a publish topic
|
||||
if (! ap.config.mqttPublishTopic == 0 || strlen(ap.config.mqttPublishTopic) == 0)
|
||||
{
|
||||
// Publish the json to the MQTT server
|
||||
String msg;
|
||||
serializeJson(json, msg);
|
||||
|
||||
mqtt.publish(ap.config.mqttPublishTopic, msg.c_str());
|
||||
mqtt.loop();
|
||||
}
|
||||
|
||||
// Flash LED off
|
||||
led_off();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Function to connect and reconnect as necessary to the MQTT server.
|
||||
// Should be called in the loop function and it will take care if connecting.
|
||||
void MQTT_connect()
|
||||
{
|
||||
// Connect to WiFi access point.
|
||||
if (debugger)
|
||||
{
|
||||
debugger->println();
|
||||
debugger->println();
|
||||
debugger->print("Connecting to WiFi network ");
|
||||
debugger->println(ap.config.ssid);
|
||||
}
|
||||
|
||||
if (WiFi.status() != WL_CONNECTED)
|
||||
{
|
||||
// Make one first attempt at connect, this seems to considerably speed up the first connection
|
||||
WiFi.disconnect();
|
||||
WiFi.begin(ap.config.ssid, ap.config.ssidPassword);
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
// Wait for the WiFi connection to complete
|
||||
long vTimeout = millis() + WIFI_CONNECTION_TIMEOUT;
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(50);
|
||||
if (debugger) debugger->print(".");
|
||||
|
||||
// If we timed out, disconnect and try again
|
||||
if (vTimeout < millis())
|
||||
{
|
||||
if (debugger)
|
||||
{
|
||||
debugger->print("Timout during connect. WiFi status is: ");
|
||||
debugger->println(WiFi.status());
|
||||
}
|
||||
WiFi.disconnect();
|
||||
WiFi.begin(ap.config.ssid, ap.config.ssidPassword);
|
||||
vTimeout = millis() + WIFI_CONNECTION_TIMEOUT;
|
||||
}
|
||||
yield();
|
||||
}
|
||||
|
||||
if (debugger) {
|
||||
debugger->println();
|
||||
debugger->println("WiFi connected");
|
||||
debugger->println("IP address: ");
|
||||
debugger->println(WiFi.localIP());
|
||||
debugger->print("\nconnecting to MQTT: ");
|
||||
debugger->print(ap.config.mqtt);
|
||||
debugger->print(", port: ");
|
||||
debugger->print(ap.config.mqttPort);
|
||||
debugger->println();
|
||||
}
|
||||
|
||||
// Wait for the MQTT connection to complete
|
||||
while (!mqtt.connected()) {
|
||||
// Connect to a unsecure or secure MQTT server
|
||||
if ((ap.config.mqttUser == 0 && mqtt.connect(ap.config.mqttClientID)) ||
|
||||
(ap.config.mqttUser != 0 && mqtt.connect(ap.config.mqttClientID, ap.config.mqttUser, ap.config.mqttPass)))
|
||||
{
|
||||
if (debugger) debugger->println("\nSuccessfully connected to MQTT!");
|
||||
|
||||
// Subscribe to the chosen MQTT topic, if set in configuration
|
||||
if (ap.config.mqttSubscribeTopic != 0 && strlen(ap.config.mqttSubscribeTopic) > 0)
|
||||
{
|
||||
mqtt.subscribe(ap.config.mqttSubscribeTopic);
|
||||
if (debugger) debugger->printf(" Subscribing to [%s]\r\n", ap.config.mqttSubscribeTopic);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (debugger)
|
||||
{
|
||||
debugger->print(".");
|
||||
debugger->print("failed, ");
|
||||
debugger->println(" trying again in 5 seconds");
|
||||
}
|
||||
|
||||
// Wait 2 seconds before retrying
|
||||
mqtt.disconnect();
|
||||
|
||||
delay(2000);
|
||||
}
|
||||
|
||||
// Allow some resources for the WiFi connection
|
||||
yield();
|
||||
delay(2000);
|
||||
}
|
||||
}
|
||||
|
||||
// Send a simple string embedded in json over MQTT
|
||||
void sendMqttData(String data)
|
||||
{
|
||||
// Make sure we have configured a publish topic
|
||||
if (ap.config.mqttPublishTopic == 0 || strlen(ap.config.mqttPublishTopic) == 0)
|
||||
return;
|
||||
|
||||
// Make sure we're connected
|
||||
if (!client->connected() || !mqtt.connected()) {
|
||||
MQTT_connect();
|
||||
}
|
||||
|
||||
// Build a json with the message in a "data" attribute
|
||||
StaticJsonDocument<500> json;
|
||||
json["id"] = WiFi.macAddress();
|
||||
json["up"] = millis();
|
||||
json["data"] = data;
|
||||
|
||||
// Stringify the json
|
||||
String msg;
|
||||
serializeJson(json, msg);
|
||||
|
||||
// Send the json over MQTT
|
||||
mqtt.publish(ap.config.mqttPublishTopic, msg.c_str());
|
||||
|
||||
if (debugger) debugger->print("sendMqttData: ");
|
||||
if (debugger) debugger->println(data);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -1,9 +0,0 @@
|
||||
name=HanConfigAp
|
||||
version=1.0.0
|
||||
author=roarfred
|
||||
maintainer=roarfred <not@important.com>
|
||||
sentence=HAN Configuraiton accesspoint
|
||||
paragraph=HAN Configuraiton accesspoint
|
||||
category=Sensors
|
||||
url=https://github.com/roarfred/AmsToMqttBridge
|
||||
architectures=*
|
||||
@@ -1,60 +0,0 @@
|
||||
// ap.h
|
||||
|
||||
#ifndef _ACCESSPOINT_h
|
||||
#define _ACCESSPOINT_h
|
||||
|
||||
#if defined(ARDUINO) && ARDUINO >= 100
|
||||
#include "Arduino.h"
|
||||
#else
|
||||
#include "WProgram.h"
|
||||
#endif
|
||||
|
||||
#if defined(ESP8266)
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266WebServer.h>
|
||||
#elif defined(ESP32) // ARDUINO_ARCH_ESP32
|
||||
#include <WiFi.h>
|
||||
#include <WebServer.h>
|
||||
#else
|
||||
#warning "Unsupported board type"
|
||||
#endif
|
||||
|
||||
#include <DNSServer.h>
|
||||
#include "configuration.h"
|
||||
|
||||
#define INVALID_BUTTON_PIN 0xFFFFFFFF
|
||||
|
||||
class HanConfigAp {
|
||||
public:
|
||||
void setup(int accessPointButtonPin, Stream* debugger);
|
||||
bool loop();
|
||||
bool hasConfig();
|
||||
configuration config;
|
||||
bool isActivated = false;
|
||||
|
||||
private:
|
||||
const char* AP_SSID = "AMS2MQTT";
|
||||
|
||||
// DNS server
|
||||
const byte DNS_PORT = 53;
|
||||
DNSServer dnsServer;
|
||||
|
||||
static size_t print(const char* text);
|
||||
static size_t println(const char* text);
|
||||
static size_t print(const Printable& data);
|
||||
static size_t println(const Printable& data);
|
||||
|
||||
// Web server
|
||||
static void handleRoot();
|
||||
static void handleSave();
|
||||
#if defined(ESP8266)
|
||||
static ESP8266WebServer server;
|
||||
#elif defined(ESP32) // ARDUINO_ARCH_ESP32
|
||||
static WebServer server;
|
||||
#endif
|
||||
|
||||
static Stream* debugger;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,230 +0,0 @@
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
#include "configuration.h"
|
||||
|
||||
bool configuration::hasConfig()
|
||||
{
|
||||
bool hasConfig = false;
|
||||
EEPROM.begin(EEPROM_SIZE);
|
||||
hasConfig = EEPROM.read(EEPROM_CONFIG_ADDRESS) == EEPROM_CHECK_SUM;
|
||||
EEPROM.end();
|
||||
return hasConfig;
|
||||
}
|
||||
|
||||
bool configuration::save()
|
||||
{
|
||||
int address = EEPROM_CONFIG_ADDRESS;
|
||||
|
||||
EEPROM.begin(EEPROM_SIZE);
|
||||
EEPROM.put(address, EEPROM_CHECK_SUM);
|
||||
address++;
|
||||
|
||||
address += saveString(address, ssid);
|
||||
address += saveString(address, ssidPassword);
|
||||
address += saveByte(address, meterType);
|
||||
address += saveString(address, mqtt);
|
||||
address += saveInt(address, mqttPort);
|
||||
address += saveString(address, mqttClientID);
|
||||
address += saveString(address, mqttPublishTopic);
|
||||
address += saveString(address, mqttSubscribeTopic);
|
||||
|
||||
if (isSecure()) {
|
||||
address += saveBool(address, true);
|
||||
address += saveString(address, mqttUser);
|
||||
address += saveString(address, mqttPass);
|
||||
}
|
||||
else
|
||||
address += saveBool(address, false);
|
||||
|
||||
bool success = EEPROM.commit();
|
||||
EEPROM.end();
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
bool configuration::load()
|
||||
{
|
||||
int address = EEPROM_CONFIG_ADDRESS;
|
||||
bool success = false;
|
||||
|
||||
EEPROM.begin(EEPROM_SIZE);
|
||||
if (EEPROM.read(address) == EEPROM_CHECK_SUM)
|
||||
{
|
||||
address++;
|
||||
|
||||
address += readString(address, &ssid);
|
||||
address += readString(address, &ssidPassword);
|
||||
address += readByte(address, &meterType);
|
||||
address += readString(address, &mqtt);
|
||||
address += readInt(address, &mqttPort);
|
||||
address += readString(address, &mqttClientID);
|
||||
address += readString(address, &mqttPublishTopic);
|
||||
address += readString(address, &mqttSubscribeTopic);
|
||||
|
||||
bool secure = false;
|
||||
address += readBool(address, &secure);
|
||||
|
||||
if (secure)
|
||||
{
|
||||
address += readString(address, &mqttUser);
|
||||
address += readString(address, &mqttPass);
|
||||
}
|
||||
else
|
||||
{
|
||||
mqttUser = 0;
|
||||
mqttPass = 0;
|
||||
}
|
||||
|
||||
success = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ssid = (char*)String("").c_str();
|
||||
ssidPassword = (char*)String("").c_str();
|
||||
meterType = (byte)0;
|
||||
mqtt = (char*)String("").c_str();
|
||||
mqttClientID = (char*)String("").c_str();
|
||||
mqttPublishTopic = (char*)String("").c_str();
|
||||
mqttSubscribeTopic = (char*)String("").c_str();
|
||||
mqttUser = 0;
|
||||
mqttPass = 0;
|
||||
mqttPort = 1883;
|
||||
}
|
||||
EEPROM.end();
|
||||
return success;
|
||||
}
|
||||
|
||||
bool configuration::isSecure()
|
||||
{
|
||||
return (mqttUser != 0) && (String(mqttUser).length() > 0);
|
||||
}
|
||||
|
||||
int configuration::readInt(int address, int *value)
|
||||
{
|
||||
int lower = EEPROM.read(address);
|
||||
int higher = EEPROM.read(address + 1);
|
||||
*value = lower + (higher << 8);
|
||||
return 2;
|
||||
}
|
||||
int configuration::saveInt(int address, int value)
|
||||
{
|
||||
byte lowByte = value & 0xFF;
|
||||
byte highByte = ((value >> 8) & 0xFF);
|
||||
|
||||
EEPROM.write(address, lowByte);
|
||||
EEPROM.write(address + 1, highByte);
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
int configuration::readBool(int address, bool *value)
|
||||
{
|
||||
byte y = EEPROM.read(address);
|
||||
*value = (bool)y;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int configuration::saveBool(int address, bool value)
|
||||
{
|
||||
byte y = (byte)value;
|
||||
EEPROM.write(address, y);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int configuration::readByte(int address, byte *value)
|
||||
{
|
||||
*value = EEPROM.read(address);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int configuration::saveByte(int address, byte value)
|
||||
{
|
||||
EEPROM.write(address, value);
|
||||
return 1;
|
||||
}
|
||||
void configuration::print(Stream* debugger)
|
||||
{
|
||||
/*
|
||||
char* ssid;
|
||||
char* ssidPassword;
|
||||
byte meterType;
|
||||
char* mqtt;
|
||||
int mqttPort;
|
||||
char* mqttClientID;
|
||||
char* mqttPublishTopic;
|
||||
char* mqttSubscribeTopic;
|
||||
bool secure;
|
||||
char* mqttUser;
|
||||
char* mqttPass;
|
||||
*/
|
||||
|
||||
debugger->println("Configuration:");
|
||||
debugger->println("-----------------------------------------------");
|
||||
debugger->printf("ssid: %s\r\n", this->ssid);
|
||||
debugger->printf("ssidPassword: %s\r\n", this->ssidPassword);
|
||||
debugger->printf("meterType: %i\r\n", this->meterType);
|
||||
debugger->printf("mqtt: %s\r\n", this->mqtt);
|
||||
debugger->printf("mqttPort: %i\r\n", this->mqttPort);
|
||||
debugger->printf("mqttClientID: %s\r\n", this->mqttClientID);
|
||||
debugger->printf("mqttPublishTopic: %s\r\n", this->mqttPublishTopic);
|
||||
debugger->printf("mqttSubscribeTopic: %s\r\n", this->mqttSubscribeTopic);
|
||||
|
||||
if (this->isSecure())
|
||||
{
|
||||
debugger->printf("SECURE MQTT CONNECTION:\r\n");
|
||||
debugger->printf("mqttUser: %s\r\n", this->mqttUser);
|
||||
debugger->printf("mqttPass: %s\r\n", this->mqttPass);
|
||||
}
|
||||
debugger->println("-----------------------------------------------");
|
||||
}
|
||||
|
||||
template <class T> int configuration::writeAnything(int ee, const T& value)
|
||||
{
|
||||
const byte* p = (const byte*)(const void*)&value;
|
||||
unsigned int i;
|
||||
for (i = 0; i < sizeof(value); i++)
|
||||
EEPROM.write(ee++, *p++);
|
||||
return i;
|
||||
}
|
||||
|
||||
template <class T> int configuration::readAnything(int ee, T& value)
|
||||
{
|
||||
byte* p = (byte*)(void*)&value;
|
||||
unsigned int i;
|
||||
for (i = 0; i < sizeof(value); i++)
|
||||
*p++ = EEPROM.read(ee++);
|
||||
return i;
|
||||
}
|
||||
|
||||
int configuration::readString(int pAddress, char* pString[])
|
||||
{
|
||||
int address = 0;
|
||||
byte length = EEPROM.read(pAddress + address);
|
||||
address++;
|
||||
|
||||
char* buffer = new char[length];
|
||||
for (int i = 0; i<length; i++)
|
||||
{
|
||||
buffer[i] = EEPROM.read(pAddress + address++);
|
||||
}
|
||||
*pString = buffer;
|
||||
return address;
|
||||
}
|
||||
int configuration::saveString(int pAddress, char* pString)
|
||||
{
|
||||
int address = 0;
|
||||
int length = strlen(pString) + 1;
|
||||
EEPROM.put(pAddress + address, length);
|
||||
address++;
|
||||
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
EEPROM.put(pAddress + address, pString[i]);
|
||||
address++;
|
||||
}
|
||||
|
||||
return address;
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
// config.h
|
||||
|
||||
#ifndef _CONFIGURATION_h
|
||||
#define _CONFIGURATION_h
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
|
||||
#if defined(ARDUINO) && ARDUINO >= 100
|
||||
#include "Arduino.h"
|
||||
#else
|
||||
#include "WProgram.h"
|
||||
#endif
|
||||
|
||||
class configuration {
|
||||
public:
|
||||
char* ssid;
|
||||
char* ssidPassword;
|
||||
char* mqtt;
|
||||
int mqttPort;
|
||||
char* mqttClientID;
|
||||
char* mqttPublishTopic;
|
||||
char* mqttSubscribeTopic;
|
||||
char* mqttUser;
|
||||
char* mqttPass;
|
||||
byte meterType;
|
||||
|
||||
bool hasConfig();
|
||||
bool isSecure();
|
||||
bool save();
|
||||
bool load();
|
||||
|
||||
void print(Stream* debugger);
|
||||
protected:
|
||||
|
||||
private:
|
||||
const int EEPROM_SIZE = 512;
|
||||
const byte EEPROM_CHECK_SUM = 71; // Used to check if config is stored. Change if structure changes
|
||||
const int EEPROM_CONFIG_ADDRESS = 0;
|
||||
|
||||
int saveString(int pAddress, char* pString);
|
||||
int readString(int pAddress, char* pString[]);
|
||||
int saveInt(int pAddress, int pValue);
|
||||
int readInt(int pAddress, int *pValue);
|
||||
int saveBool(int pAddress, bool pValue);
|
||||
int readBool(int pAddress, bool *pValue);
|
||||
int saveByte(int pAddress, byte pValue);
|
||||
int readByte(int pAddress, byte *pValue);
|
||||
|
||||
|
||||
template <class T> int writeAnything(int ee, const T& value);
|
||||
template <class T> int readAnything(int ee, T& value);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -1,9 +0,0 @@
|
||||
name=HanToJson
|
||||
version=1.0.0
|
||||
author=roarfred
|
||||
maintainer=roarfred <not@important.com>
|
||||
sentence=HAN reader data to Json
|
||||
paragraph=HAN reader data to Json
|
||||
category=Sensors
|
||||
url=https://github.com/roarfred/AmsToMqttBridge
|
||||
architectures=*
|
||||
@@ -1,240 +0,0 @@
|
||||
#include "HanToJson.h"
|
||||
#include "Aidon.h"
|
||||
#include "Kaifa.h"
|
||||
#include "Kamstrup.h"
|
||||
|
||||
|
||||
static void hanToJsonKaifa3phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
if (listSize >= (int)Kaifa::List3PhaseShort)
|
||||
{
|
||||
data["lv"] = hanReader.getString( (int)Kaifa_List3Phase::ListVersionIdentifier);
|
||||
data["id"] = hanReader.getString( (int)Kaifa_List3Phase::MeterID);
|
||||
data["type"] = hanReader.getString( (int)Kaifa_List3Phase::MeterType);
|
||||
data["P"] = hanReader.getInt( (int)Kaifa_List3Phase::ActiveImportPower);
|
||||
data["Q"] = hanReader.getInt( (int)Kaifa_List3Phase::ReactiveImportPower);
|
||||
data["I1"] = hanReader.getInt( (int)Kaifa_List3Phase::CurrentL1);
|
||||
data["I2"] = hanReader.getInt( (int)Kaifa_List3Phase::CurrentL2);
|
||||
data["I3"] = hanReader.getInt( (int)Kaifa_List3Phase::CurrentL3);
|
||||
data["U1"] = hanReader.getInt( (int)Kaifa_List3Phase::VoltageL1);
|
||||
data["U2"] = hanReader.getInt( (int)Kaifa_List3Phase::VoltageL2);
|
||||
data["U3"] = hanReader.getInt( (int)Kaifa_List3Phase::VoltageL3);
|
||||
}
|
||||
|
||||
if (listSize >= (int)Kaifa::List3PhaseLong)
|
||||
{
|
||||
data["tPI"] = hanReader.getInt( (int)Kaifa_List3Phase::CumulativeActiveImportEnergy);
|
||||
data["tPO"] = hanReader.getInt( (int)Kaifa_List3Phase::CumulativeActiveExportEnergy);
|
||||
data["tQI"] = hanReader.getInt( (int)Kaifa_List3Phase::CumulativeReactiveImportEnergy);
|
||||
data["tQO"] = hanReader.getInt( (int)Kaifa_List3Phase::CumulativeReactiveExportEnergy);
|
||||
}
|
||||
}
|
||||
|
||||
static void hanToJsonKaifa1phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
if (listSize >= (int)Kaifa::List1PhaseShort)
|
||||
{
|
||||
data["lv"] = hanReader.getString( (int)Kaifa_List1Phase::ListVersionIdentifier);
|
||||
data["id"] = hanReader.getString( (int)Kaifa_List1Phase::MeterID);
|
||||
data["type"] = hanReader.getString( (int)Kaifa_List1Phase::MeterType);
|
||||
data["P"] = hanReader.getInt( (int)Kaifa_List1Phase::ActiveImportPower);
|
||||
data["Q"] = hanReader.getInt( (int)Kaifa_List1Phase::ReactiveImportPower);
|
||||
data["I1"] = hanReader.getInt( (int)Kaifa_List1Phase::CurrentL1);
|
||||
data["U1"] = hanReader.getInt( (int)Kaifa_List1Phase::VoltageL1);
|
||||
}
|
||||
|
||||
if (listSize >= (int)Kaifa::List1PhaseLong)
|
||||
{
|
||||
data["tPI"] = hanReader.getInt( (int)Kaifa_List1Phase::CumulativeActiveImportEnergy);
|
||||
data["tPO"] = hanReader.getInt( (int)Kaifa_List1Phase::CumulativeActiveExportEnergy);
|
||||
data["tQI"] = hanReader.getInt( (int)Kaifa_List1Phase::CumulativeReactiveImportEnergy);
|
||||
data["tQO"] = hanReader.getInt( (int)Kaifa_List1Phase::CumulativeReactiveExportEnergy);
|
||||
}
|
||||
}
|
||||
|
||||
static void hanToJsonKaifa(JsonObject& data, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
int listSize = hanReader.getListSize();
|
||||
|
||||
if (listSize == (int)Kaifa::List1)
|
||||
{
|
||||
// Handle listSize == 1 specially
|
||||
data["P"] = hanReader.getInt( (int)Kaifa_List1::ActivePowerImported);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (listSize) {
|
||||
case (int)Kaifa::List3PhaseShort:
|
||||
case (int)Kaifa::List3PhaseLong:
|
||||
return hanToJsonKaifa3phase(listSize, data, hanReader, debugger);
|
||||
case (int)Kaifa::List1PhaseShort:
|
||||
case (int)Kaifa::List1PhaseLong:
|
||||
return hanToJsonKaifa1phase(listSize, data, hanReader, debugger);
|
||||
default:
|
||||
if (debugger) debugger->printf("Warning: Unknown listSize %d\n", listSize);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void hanToJsonAidon3phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
if (listSize >= (int)Aidon::List3PhaseShort)
|
||||
{
|
||||
data["lv"] = hanReader.getString( (int)Aidon_List3Phase::ListVersionIdentifier);
|
||||
data["id"] = hanReader.getString( (int)Aidon_List3Phase::MeterID);
|
||||
data["type"] = hanReader.getString( (int)Aidon_List3Phase::MeterType);
|
||||
data["P"] = hanReader.getInt( (int)Aidon_List3Phase::ActiveImportPower);
|
||||
data["Q"] = hanReader.getInt( (int)Aidon_List3Phase::ReactiveExportPower);
|
||||
data["I1"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::CurrentL1)) / 10;
|
||||
data["I2"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::CurrentL2)) / 10;
|
||||
data["I3"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::CurrentL3)) / 10;
|
||||
data["U1"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::VoltageL1)) / 10;
|
||||
data["U2"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::VoltageL2)) / 10;
|
||||
data["U3"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::VoltageL3)) / 10;
|
||||
}
|
||||
|
||||
if (listSize >= (int)Aidon::List3PhaseLong)
|
||||
{
|
||||
data["tPI"] = hanReader.getInt( (int)Aidon_List3Phase::CumulativeActiveImportEnergy);
|
||||
data["tPO"] = hanReader.getInt( (int)Aidon_List3Phase::CumulativeActiveExportEnergy);
|
||||
data["tQI"] = hanReader.getInt( (int)Aidon_List3Phase::CumulativeReactiveImportEnergy);
|
||||
data["tQO"] = hanReader.getInt( (int)Aidon_List3Phase::CumulativeReactiveExportEnergy);
|
||||
}
|
||||
|
||||
// TODO: Do not divide Aidon values by 10!?
|
||||
}
|
||||
|
||||
static void hanToJsonAidon1phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
if (listSize >= (int)Aidon::List1PhaseShort)
|
||||
{
|
||||
data["lv"] = hanReader.getString( (int)Aidon_List1Phase::ListVersionIdentifier);
|
||||
data["id"] = hanReader.getString( (int)Aidon_List1Phase::MeterID);
|
||||
data["type"] = hanReader.getString( (int)Aidon_List1Phase::MeterType);
|
||||
data["P"] = hanReader.getInt( (int)Aidon_List1Phase::ActiveImportPower);
|
||||
data["Q"] = hanReader.getInt( (int)Aidon_List1Phase::ReactiveExportPower);
|
||||
data["I1"] = ((double) hanReader.getInt( (int)Aidon_List1Phase::CurrentL1)) / 10;
|
||||
data["U1"] = ((double) hanReader.getInt( (int)Aidon_List1Phase::VoltageL1)) / 10;
|
||||
}
|
||||
|
||||
// TODO Aidon::List1PhaseLong
|
||||
}
|
||||
|
||||
static void hanToJsonAidon(JsonObject& data, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
int listSize = hanReader.getListSize();
|
||||
|
||||
// Based on the list number, get all details
|
||||
// according to OBIS specifications for the meter
|
||||
if (listSize == (int)Aidon::List1)
|
||||
{
|
||||
// Handle listSize == 1 specially
|
||||
data["P"] = hanReader.getInt((int)Aidon_List1::ActiveImportPower);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (listSize) {
|
||||
case (int)Aidon::List3PhaseShort:
|
||||
case (int)Aidon::List3PhaseLong:
|
||||
return hanToJsonAidon3phase(listSize, data, hanReader, debugger);
|
||||
case (int)Aidon::List1PhaseShort:
|
||||
case (int)Aidon::List1PhaseLong:
|
||||
return hanToJsonAidon1phase(listSize, data, hanReader, debugger);
|
||||
default:
|
||||
if (debugger) debugger->printf("Warning: Unknown listSize %d\n", listSize);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static void hanToJsonKamstrup3phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
if (listSize >= (int)Kamstrup::List3PhaseShort)
|
||||
{
|
||||
data["lv"] = hanReader.getString( (int)Kamstrup_List3Phase::ListVersionIdentifier);
|
||||
data["id"] = hanReader.getString( (int)Kamstrup_List3Phase::MeterID);
|
||||
data["type"] = hanReader.getString( (int)Kamstrup_List3Phase::MeterType);
|
||||
data["P"] = hanReader.getInt( (int)Kamstrup_List3Phase::ActiveImportPower);
|
||||
data["Q"] = hanReader.getInt( (int)Kamstrup_List3Phase::ReactiveImportPower);
|
||||
data["I1"] = hanReader.getInt( (int)Kamstrup_List3Phase::CurrentL1);
|
||||
data["I2"] = hanReader.getInt( (int)Kamstrup_List3Phase::CurrentL2);
|
||||
data["I3"] = hanReader.getInt( (int)Kamstrup_List3Phase::CurrentL3);
|
||||
data["U1"] = hanReader.getInt( (int)Kamstrup_List3Phase::VoltageL1);
|
||||
data["U2"] = hanReader.getInt( (int)Kamstrup_List3Phase::VoltageL2);
|
||||
data["U3"] = hanReader.getInt( (int)Kamstrup_List3Phase::VoltageL3);
|
||||
}
|
||||
|
||||
if (listSize >= (int)Kamstrup::List3PhaseLong)
|
||||
{
|
||||
data["tPI"] = hanReader.getInt( (int)Kamstrup_List3Phase::CumulativeActiveImportEnergy);
|
||||
data["tPO"] = hanReader.getInt( (int)Kamstrup_List3Phase::CumulativeActiveExportEnergy);
|
||||
data["tQI"] = hanReader.getInt( (int)Kamstrup_List3Phase::CumulativeReactiveImportEnergy);
|
||||
data["tQO"] = hanReader.getInt( (int)Kamstrup_List3Phase::CumulativeReactiveExportEnergy);
|
||||
}
|
||||
}
|
||||
|
||||
static void hanToJsonKamstrup1phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
if (listSize >= (int)Kamstrup::List1PhaseShort)
|
||||
{
|
||||
data["lv"] = hanReader.getString( (int)Kamstrup_List1Phase::ListVersionIdentifier);
|
||||
data["id"] = hanReader.getString( (int)Kamstrup_List1Phase::MeterID);
|
||||
data["type"] = hanReader.getString( (int)Kamstrup_List1Phase::MeterType);
|
||||
data["P"] = hanReader.getInt( (int)Kamstrup_List1Phase::ActiveImportPower);
|
||||
data["Q"] = hanReader.getInt( (int)Kamstrup_List1Phase::ReactiveImportPower);
|
||||
data["I1"] = hanReader.getInt( (int)Kamstrup_List1Phase::CurrentL1);
|
||||
data["U1"] = hanReader.getInt( (int)Kamstrup_List1Phase::VoltageL1);
|
||||
}
|
||||
|
||||
if (listSize >= (int)Kamstrup::List1PhaseLong)
|
||||
{
|
||||
data["tPI"] = hanReader.getInt( (int)Kamstrup_List1Phase::CumulativeActiveImportEnergy);
|
||||
data["tPO"] = hanReader.getInt( (int)Kamstrup_List1Phase::CumulativeActiveExportEnergy);
|
||||
data["tQI"] = hanReader.getInt( (int)Kamstrup_List1Phase::CumulativeReactiveImportEnergy);
|
||||
data["tQO"] = hanReader.getInt( (int)Kamstrup_List1Phase::CumulativeReactiveExportEnergy);
|
||||
}
|
||||
}
|
||||
|
||||
static void hanToJsonKamstrup(JsonObject& data, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
int listSize = hanReader.getListSize();
|
||||
|
||||
switch (listSize) {
|
||||
case (int)Kamstrup::List3PhaseShort:
|
||||
case (int)Kamstrup::List3PhaseLong:
|
||||
return hanToJsonKamstrup3phase(listSize, data, hanReader, debugger);
|
||||
case (int)Kamstrup::List1PhaseShort:
|
||||
case (int)Kamstrup::List1PhaseLong:
|
||||
return hanToJsonKamstrup1phase(listSize, data, hanReader, debugger);
|
||||
default:
|
||||
if (debugger) debugger->printf("Warning: Unknown listSize %d\n", listSize);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void hanToJson(JsonObject& data, byte meterType, HanReader& hanReader, Stream *debugger)
|
||||
{
|
||||
// Based on the list number, get all details
|
||||
// according to OBIS specifications for the meter
|
||||
switch (meterType)
|
||||
{
|
||||
case 1: // Kaifa
|
||||
return hanToJsonKaifa(data, hanReader, debugger);
|
||||
case 2: // Aidon
|
||||
return hanToJsonAidon(data, hanReader, debugger);
|
||||
case 3: // Kamstrup
|
||||
return hanToJsonKamstrup(data, hanReader, debugger);
|
||||
default:
|
||||
if (debugger) {
|
||||
debugger->print("Meter type ");
|
||||
debugger->print(meterType, HEX);
|
||||
debugger->println(" is unknown");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void hanToJson(JsonObject& data, byte meterType, HanReader& hanReader)
|
||||
{
|
||||
return hanToJson(data, meterType, hanReader, NULL);
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
#ifndef _HANTOJSON_h
|
||||
#define _HANTOJSON_h
|
||||
|
||||
#if defined(ARDUINO) && ARDUINO >= 100
|
||||
#include "Arduino.h"
|
||||
#else
|
||||
#include "WProgram.h"
|
||||
#endif
|
||||
|
||||
#include <ArduinoJson.h>
|
||||
#include "HanReader.h"
|
||||
|
||||
void hanToJson(JsonObject& data, byte meterType, HanReader& hanReader);
|
||||
void hanToJson(JsonObject& root, byte meterType, HanReader& hanReader, Stream *debugPort);
|
||||
|
||||
|
||||
#endif
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
|
||||
### 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).
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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/#`
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
7
Debugging/Code/ESPDebugger/.gitignore
vendored
@@ -1,7 +0,0 @@
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
__vm/
|
||||
*.user
|
||||
|
Before Width: | Height: | Size: 178 KiB |
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
Before Width: | Height: | Size: 38 KiB |
253
Debugging/Code/HanDebugger/.gitignore
vendored
@@ -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
|
||||
@@ -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
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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")]
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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}");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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")]
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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>
|
||||
|
Before Width: | Height: | Size: 26 KiB |
@@ -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.
|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||
.jpg)
|
||||

|
||||
|
||||
### SerialTestPattern (Arduino sketch, any variant)
|
||||
This code outputs a changing serial test pattern.
|
||||
|
||||

|
||||
|
||||
### 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).
|
||||
|
||||

|
||||
|
Before Width: | Height: | Size: 234 KiB |
@@ -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
|
||||
@@ -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~',
|
||||
]
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
Before Width: | Height: | Size: 60 KiB |
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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'
|
||||
```
|
||||
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 198 KiB |
@@ -1 +0,0 @@
|
||||
Record=TopLevelDocument|FileName=AMSTOMQTT.SchDoc
|
||||
@@ -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
|
||||
@@ -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
|
||||
------------------------------------------------------------------------------------------
|
||||
@@ -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*
|
||||
@@ -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*
|
||||
@@ -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*
|
||||
@@ -1,7 +0,0 @@
|
||||
G04 Layer_Color=16711935*
|
||||
%FSLAX25Y25*%
|
||||
%MOIN*%
|
||||
G70*
|
||||
G01*
|
||||
G75*
|
||||
M02*
|
||||
@@ -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*
|
||||
@@ -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*
|
||||
@@ -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*
|
||||
@@ -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*
|
||||
@@ -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*
|
||||
@@ -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*
|
||||
@@ -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*
|
||||
@@ -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
|
||||
@@ -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
|
||||
*************************************************************
|
||||
|
||||