EL_dev_arduino 4.3.0
読み取り中…
検索中…
一致する文字列を見つけられません
C:/Users/sugimura/Documents/EL_dev_arduino/EL.h
[詳解]
1
8#ifndef __EL_H__
9#define __EL_H__
10#pragma once
11
12// auto config
13#ifndef GPP
14// arduino
15#include <Arduino.h>
16#include <WiFi.h>
17#include <ELOBJ.h>
18
19#else
20// g++
21typedef unsigned char byte;
22typedef bool boolean;
23#include <iostream>
24#include "ELOBJ.h"
25using std::cout;
26using std::dec;
27using std::endl;
28using std::hex;
29using std::move;
30#endif
31
32// defined
33#define EL_PORT 3610
34#define EL_EHD1 0
35#define EL_EHD2 1
36#define EL_TID 2
37#define EL_SEOJ 4
38#define EL_DEOJ 7
39#define EL_ESV 10
40#define EL_OPC 11
41#define EL_EPC 12
42#define EL_PDC 13
43#define EL_EDT 14
44#define EL_SETI_SNA 0x50
45#define EL_SETC_SNA 0x51
46#define EL_GET_SNA 0x52
47#define EL_INF_SNA 0x53
48#define EL_SETGET_SNA 0x5e
49#define EL_SETI 0x60
50#define EL_SETC 0x61
51#define EL_GET 0x62
52#define EL_INF_REQ 0x63
53#define EL_SETGET 0x6e
54#define EL_SET_RES 0x71
55#define EL_GET_RES 0x72
56#define EL_INF 0x73
57#define EL_INFC 0x74
58#define EL_INFC_RES 0x7a
59#define EL_SETGET_RES 0x7e
60#define EL_BUFFER_SIZE 1500
61#define EL_MINIMUM_FRAME 13
62
63// Device Object
64// センサ関連機器
65#define EL_GasLeakSensor 0x00, 0x01
66#define EL_CrimePreventionSensor 0x00, 0x02
67#define EL_EmergencyButton 0x00, 0x03
68#define EL_FirstAidSensor 0x00, 0x04
69#define EL_EarthquakeSensor 0x00, 0x05
70#define EL_ElectricLeakSensor 0x00, 0x06
71#define EL_HumanDetectionSensor 0x00, 0x07
72#define EL_VisitorSensor 0x00, 0x08
73#define EL_CallSensor 0x00, 0x09
74#define EL_CondensationSensor 0x00, 0x0A
75#define EL_AirPollutionSensor 0x00, 0x0B
76#define EL_OxygenSensor 0x00, 0x0C
77#define EL_IlluminanceSensor 0x00, 0x0D
78#define EL_SoundSensor 0x00, 0x0E
79#define EL_MailingSensor 0x00, 0x0F
80#define EL_WeightSensor 0x00, 0x10
81#define EL_TemperatureSensor 0x00, 0x11
82#define EL_HumiditySensor 0x00, 0x12
83#define EL_RainSensor 0x00, 0x13
84#define EL_WaterLevelSensor 0x00, 0x14
85#define EL_BathWaterLevelSensor 0x00, 0x15
86#define EL_BathHeatingStatusSensor 0x00, 0x16
87#define EL_WaterLeakSensor 0x00, 0x17
88#define EL_WaterOverflowSensor 0x00, 0x18
89#define EL_FireSensor 0x00, 0x19
90#define EL_CigaretteSmokeSensor 0x00, 0x1A
91#define EL_CO2Sensor 0x00, 0x1B
92#define EL_GasSensor 0x00, 0x1C
93#define EL_VOCSensor 0x00, 0x1D
94#define EL_DifferentialPressureSensor 0x00, 0x1E
95#define EL_AirSpeedSensor 0x00, 0x1F
96#define EL_OdorSensor 0x00, 0x20
97#define EL_FlameSensor 0x00, 0x21
98#define EL_ElectricEnergySensor 0x00, 0x22
99#define EL_CurrentValueSensor 0x00, 0x23
100#define EL_WaterFlowRateSensor 0x00, 0x25
101#define EL_MicromotionSensor 0x00, 0x26
102#define EL_PassageSensor 0x00, 0x27
103#define EL_BedPresenceSensor 0x00, 0x28
104#define EL_OpenCloseSensor 0x00, 0x29
105#define EL_ActivityAmountSensor 0x00, 0x2A
106#define EL_HumanBodyLocationSensor 0x00, 0x2B
107#define EL_SnowSensor 0x00, 0x2C
108// 空調関連機器
109#define EL_HomeAirConditioner 0x01, 0x30
110#define EL_VentilationFan 0x01, 0x32
111#define EL_AirConditionerVentilationFan 0x01, 0x34
112#define EL_AirCleaner 0x01, 0x35
113#define EL_Humidifier 0x01, 0x39
114#define EL_ElectricHeater 0x01, 0x42
115#define EL_FanHeater 0x01, 0x43
116#define EL_PackageTypeCommercialAirConditionerIndoorUnit 0x01, 0x56
117#define EL_PackageTypeCommercialAirConditionerOutdoorUnit 0x01, 0x57
118// 住宅・設備関連機器
119#define EL_ElectricallyOperatedShade 0x02, 0x60
120#define EL_ElectricShutter 0x02, 0x61
121#define EL_ElectricStormWindow 0x02, 0x63
122#define EL_Sprinkler 0x02, 0x67
123#define EL_ElectricWaterHeater 0x02, 0x6B
124#define EL_ElectricToiletSeat 0x02, 0x6E
125#define EL_ElectricLock 0x02, 0x6F
126#define EL_InstantaneousWaterHeater 0x02, 0x72
127#define EL_BathroomHeaterAndDryer 0x02, 0x73
128#define EL_HouseholdSolarPowerGeneration 0x02, 0x79
129#define EL_ColdOrHotWaterHeatSourceEquipment 0x02, 0x7A
130#define EL_FloorHeater 0x02, 0x7B
131#define EL_FuelCell 0x02, 0x7C
132#define EL_Battery 0x02, 0x7D
133#define EL_ElectricVehicle 0x02, 0x7E
134#define EL_EngineCogeneration 0x02, 0x7F
135#define EL_WattHourMeter 0x02, 0x80
136#define EL_WaterFlowmeter 0x02, 0x81
137#define EL_GasMeter 0x02, 0x82
138#define EL_LPGasMeter 0x02, 0x83
139#define EL_PowerDistributionBoardMetering 0x02, 0x87
140#define EL_SmartElectricEnergyMeter 0x02, 0x88
141#define EL_SmartGasMeter 0x02, 0x89
142#define EL_GeneralLighting 0x02, 0x90
143#define EL_Buzzer 0x02, 0xA0
144// 調理・家事関連機器
145#define EL_ElectricHotWaterPot 0x03, 0xB2
146#define EL_Refrigerator 0x03, 0xB7
147#define EL_CombinationMicrowaveOven 0x03, 0xB8
148#define EL_CookingHeater 0x03, 0xB9
149#define EL_RiceCooker 0x03, 0xBB
150#define EL_WashingMachine 0x03, 0xC5
151#define EL_ClothesDryer 0x03, 0xC6
152#define EL_WasherAndDryer 0x03, 0xD3
153// 健康関連機器
154#define EL_Weighing 0x04, 0x01
155// 管理・操作関連機器
156#define EL_Switch 0x05, 0xFD
157#define EL_Controller 0x05, 0xFF
158// AV関連機器
159#define EL_Display 0x06, 0x01
160#define EL_Television 0x06, 0x02
161// Node profile
162#define EL_NodeProfile 0x0e, 0xf0
163
164// 内部利用
165#define EL_DEVID_NODEPROFILE -1
166#define EL_DEVID_NOTHING -2
167#define EL_DEVID_MULTI -3
168
169// V.4
170// bool (*ELCallback) ( tid, seoj, deoj, esv, opc, epc, pdc, edt);
171typedef bool (*ELCallback)(byte[], byte[], byte[], byte, byte, byte, byte, byte[]);
172
177class EL
178{
179private:
180 IPAddress ip;
181 IPAddress _multi;
182 IPAddress _broad;
183 byte _mac[6];
184 byte *_eojs;
185 int deviceCount;
186 int _sendPacketSize = 0;
187 int _readPacketSize = 0;
188 byte _sBuffer[EL_BUFFER_SIZE];
189 WiFiUDP *_udp;
190 ELCallback userfunc;
191
192protected:
193 int parsePacket(void); // 受信データを読む
194 void commonConstructor(WiFiUDP &udp, byte eojs[][3], int count); // コンストラクタで共通にコールされる
195 void tidAutoIncrement(void); // データ送信時にTIDを自動的にインクリメントの再計算する(シンプルに+1するとオーバーフローするのでこれ使う)
196
197public:
201 byte _tid[2];
202
204 EL(WiFiUDP &udp, byte classGroupCode, byte classCode, byte instanceNumber); // for single dev (devid=0)
205 EL(WiFiUDP &udp, byte eojs[][3], int count); // for multi dev
206 EL(WiFiUDP &udp, std::initializer_list<std::initializer_list<byte>> eojs); // for multi dev
207
208 void begin(void);
209 void begin(ELCallback cb); // V.4
210
211 // details change
212 void update(const byte epc, PDCEDT pdcedt); // for single dev (devid=0)
213 void update(const int devId, const byte epc, PDCEDT pdcedt); // for multi dev
214 void update(const byte epc, std::initializer_list<byte> edt); // for single dev (devid=0)
215 void update(const int devId, const byte epc, std::initializer_list<byte> edt); // for multi dev
216
217 // details
218 byte *at(const byte epc); // for single dev (devid=0)
219 byte *at(const int devId, const byte epc); // for multi dev
220
221 // sender
222 void send(IPAddress toip, byte sBuffer[], int size);
223 void sendOPC1(const IPAddress toip, const byte tid[], const byte seoj[], const byte deoj[], const byte esv, const byte epc, const byte pdcedt[]);
224 void sendOPC1(const IPAddress toip, const byte seoj[], const byte deoj[], const byte esv, const byte epc, const byte pdcedt[]);
225 void sendOPC1(const IPAddress toip, const byte deoj[], const byte esv, const byte epc, const byte pdcedt[]);
226 void sendOPC1(const IPAddress toip, const byte seoj[], const byte deoj[], const byte esv, const byte epc, std::initializer_list<byte> edt);
227 void sendOPC1ID(const IPAddress toip, const int devId, const byte deoj[], const byte esv, const byte epc, const byte pdcedt[]);
228 void sendBroad(byte sBuffer[], int size);
229 void sendMulti(byte sBuffer[], int size);
230 void sendMultiOPC1(const byte tid[], const byte seoj[], const byte deoj[], const byte esv, const byte epc, const byte pdcedt[]);
231 void sendMultiOPC1(const byte seoj[], const byte deoj[], const byte esv, const byte epc, const byte pdcedt[]);
232 void sendMultiOPC1(const byte deoj[], const byte esv, const byte epc, const byte pdcedt[]);
233 void sendMultiOPC1(const byte seoj[], const byte deoj[], const byte esv, const byte epc, std::initializer_list<byte> edt);
234 void sendMultiOPC1ID(const int devId, const byte deoj[], const byte esv, const byte epc, const byte pdcedt[]);
235 // multi opc
236 void sendDetails(const IPAddress toip, const byte tid[], const byte seoj[], const byte deoj[], const byte esv, const byte opc, const byte detail[], const byte detailSize);
237 // return
238 // void replyOPC1(const IPAddress toip, const unsigned short tid, const byte *seoj, const byte* deoj, const byte esv, const byte epc, const byte* edt);
239 void replyGetDetail(const IPAddress toip, const byte seoj[]); // GET -> GET_RES | GET_SNA
240 boolean replyGetDetail_sub(const byte eoj[], const byte epc, int &devId); // GET用内部関数
241 void replySetDetail(const IPAddress toip, const byte seoj[]); // SETI, SETC -> SET_RES | SET_SNA
242 boolean replySetDetail_sub(const byte eoj[], const byte epc, int &devId); // SET用内部関数
243 void replyInfreqDetail(const IPAddress toip, const byte seoj[]); // INF_REQ -> INF | INF_SNA
244 boolean replyInfreqDetail_sub(const byte eoj[], const byte epc, int &devId); // INF用内部関数
245 void replySetgetDetail(const IPAddress toip, const byte seoj[]); // SETGET -> SETGET_SNA
246 void replyInfcDetail(const IPAddress toip, const byte seoj[]); // INFC -> INFC_RES
247 // INFプロパティ
248 void checkInfAndSend(int devId, const byte epc);
249 void checkInfAndSend(const byte eoj[], const byte epc);
250
251 // reseiver
252 int read();
253 IPAddress remoteIP(void);
254 void returner(void);
255 void recvProcess(void); // 受信処理 V4, begin(callback)と一緒に使う
256
257 // display, debug
258 void printAll(void);
259
261 // inline function
262
263 // オブジェクトを持っているかどうか判定して、持っているならdevIdを返す
264 int getDevId(const byte obj[]);
265
266 // byte[] を安全にdeleteする
267 void delPtr(byte ptr[]);
268
269 // 受信パケットの正常生チェック
270 bool verifyPacket(const byte data[], int size);
271};
272
273#endif
275// EOF
#define EL_BUFFER_SIZE
BUFFER_SIZE
Definition EL.h:60
bool(* ELCallback)(byte[], byte[], byte[], byte, byte, byte, byte, byte[])
Definition EL.h:171
Subclasses for ECHONET Lite protocol
Main class for EL
Definition EL.h:178
void sendMultiOPC1ID(const int devId, const byte deoj[], const byte esv, const byte epc, const byte pdcedt[])
OPC一個用のマルチキャスト送信、seojの代わりにIDで指定、TID自動
Definition EL.cpp:598
void begin(void)
通信の開始、受信開始
Definition EL.cpp:227
boolean replyInfreqDetail_sub(const byte eoj[], const byte epc, int &devId)
EOJとEPCを指定したとき、そのプロパティ(EDT)があるかチェックする内部関数
Definition EL.cpp:1266
void delPtr(byte ptr[])
byte[] を安全にdeleteするinline関数
Definition EL.cpp:1813
void replySetDetail(const IPAddress toip, const byte seoj[])
Setに対して複数OPCにも対応して返答する内部関数
Definition EL.cpp:981
void sendMulti(byte sBuffer[], int size)
マルチキャストによる送信(default: 192.168.1.255)
Definition EL.cpp:468
int parsePacket(void)
受信データを読む
Definition EL.cpp:1446
void returner(void)
受信データを処理する。EL処理でupdateしたら呼ぶ, Ver.3
Definition EL.cpp:1476
void sendDetails(const IPAddress toip, const byte tid[], const byte seoj[], const byte deoj[], const byte esv, const byte opc, const byte detail[], const byte detailSize)
複数のEPCで送信する場合はこれを使う
Definition EL.cpp:787
void send(IPAddress toip, byte sBuffer[], int size)
IP指定による送信
Definition EL.cpp:619
bool verifyPacket(const byte data[], int size)
受信パケットの正常生チェック
Definition EL.cpp:1827
void recvProcess(void)
受信処理 Ver.4
Definition EL.cpp:1571
void replyInfreqDetail(const IPAddress toip, const byte seoj[])
INF_REQに対して複数OPCにも対応して返答する内部関数
Definition EL.cpp:1137
ELOBJ profile
profile object (for specialist)
Definition EL.h:198
void replyInfcDetail(const IPAddress toip, const byte seoj[])
INFCに対して複数OPCにも対応して返答する内部関数
Definition EL.cpp:1351
byte _rBuffer[EL_BUFFER_SIZE]
receive buffer
Definition EL.h:200
byte * at(const byte epc)
EPCの値を取得する, eojが1個の場合(複数の場合は0番に相当)
Definition EL.cpp:412
void replyGetDetail(const IPAddress toip, const byte seoj[])
Getに対して複数OPCにも対応して返答する内部関数
Definition EL.cpp:823
int getDevId(const byte obj[])
device idを取得する内部関数
Definition EL.cpp:1770
void update(const byte epc, PDCEDT pdcedt)
EPCの値を変更する, eojが1個の場合(複数の場合は0番に相当)
Definition EL.cpp:335
boolean replyGetDetail_sub(const byte eoj[], const byte epc, int &devId)
EOJとEPCを指定したとき、そのプロパティ(EDT)があるかチェックする内部関数
Definition EL.cpp:946
ELOBJ * devices
device objects (for multi eoj)
Definition EL.h:199
void tidAutoIncrement(void)
TIDの自動インクリメント、オーバーフロー対策
Definition EL.cpp:207
void sendOPC1(const IPAddress toip, const byte tid[], const byte seoj[], const byte deoj[], const byte esv, const byte epc, const byte pdcedt[])
OPC1指定による送信(SEOJも指定する,ほぼ内部関数)
Definition EL.cpp:668
void checkInfAndSend(int devId, const byte epc)
INFプロパティならマルチキャストで送信
Definition EL.cpp:1410
void commonConstructor(WiFiUDP &udp, byte eojs[][3], int count)
コンストラクタ共通処理
Definition EL.cpp:77
int read()
受信データを受け取る
Definition EL.cpp:1462
boolean replySetDetail_sub(const byte eoj[], const byte epc, int &devId)
EOJとEPCを指定したとき、そのプロパティ(EDT)があるかチェックする内部関数
Definition EL.cpp:1104
byte _tid[2]
TID (semi-auto incremented)
Definition EL.h:201
void printAll(void)
インスタンスの情報を表示
Definition EL.cpp:1730
void sendMultiOPC1(const byte tid[], const byte seoj[], const byte deoj[], const byte esv, const byte epc, const byte pdcedt[])
OPC一個用のマルチキャスト送信、TID指定有り
Definition EL.cpp:510
void sendBroad(byte sBuffer[], int size)
ブロードキャストによる送信(default: 192.168.1.255)
Definition EL.cpp:439
void sendOPC1ID(const IPAddress toip, const int devId, const byte deoj[], const byte esv, const byte epc, const byte pdcedt[])
Definition EL.cpp:770
IPAddress remoteIP(void)
受信データの送信元を取得する
Definition EL.cpp:1454
void replySetgetDetail(const IPAddress toip, const byte seoj[])
SETGETに対して返答する内部関数(現在は一律で不可応答する)
Definition EL.cpp:1299
EL Object
Definition ELOBJ.h:75
PDC and EDT in ELOBJ
Definition ELOBJ.h:35
byte * pdcedt
Definition main.cpp:56