forked from Nall-chan/Elro
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathELROBase.php
More file actions
265 lines (243 loc) · 12.8 KB
/
ELROBase.php
File metadata and controls
265 lines (243 loc) · 12.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
<?
if (@constant('IPS_BASE') == null) //Nur wenn Konstanten noch nicht bekannt sind.
{
// --- BASE MESSAGE
define('IPS_BASE', 10000); //Base Message
define('IPS_KERNELSHUTDOWN', IPS_BASE + 1); //Pre Shutdown Message, Runlevel UNINIT Follows
define('IPS_KERNELSTARTED', IPS_BASE + 2); //Post Ready Message
// --- KERNEL
define('IPS_KERNELMESSAGE', IPS_BASE + 100); //Kernel Message
define('KR_CREATE', IPS_KERNELMESSAGE + 1); //Kernel is beeing created
define('KR_INIT', IPS_KERNELMESSAGE + 2); //Kernel Components are beeing initialised, Modules loaded, Settings read
define('KR_READY', IPS_KERNELMESSAGE + 3); //Kernel is ready and running
define('KR_UNINIT', IPS_KERNELMESSAGE + 4); //Got Shutdown Message, unloading all stuff
define('KR_SHUTDOWN', IPS_KERNELMESSAGE + 5); //Uninit Complete, Destroying Kernel Inteface
// --- KERNEL LOGMESSAGE
define('IPS_LOGMESSAGE', IPS_BASE + 200); //Logmessage Message
define('KL_MESSAGE', IPS_LOGMESSAGE + 1); //Normal Message | FG: Black | BG: White | STLYE : NONE
define('KL_SUCCESS', IPS_LOGMESSAGE + 2); //Success Message | FG: Black | BG: Green | STYLE : NONE
define('KL_NOTIFY', IPS_LOGMESSAGE + 3); //Notiy about Changes | FG: Black | BG: Blue | STLYE : NONE
define('KL_WARNING', IPS_LOGMESSAGE + 4); //Warnings | FG: Black | BG: Yellow | STLYE : NONE
define('KL_ERROR', IPS_LOGMESSAGE + 5); //Error Message | FG: Black | BG: Red | STLYE : BOLD
define('KL_DEBUG', IPS_LOGMESSAGE + 6); //Debug Informations + Script Results | FG: Grey | BG: White | STLYE : NONE
define('KL_CUSTOM', IPS_LOGMESSAGE + 7); //User Message | FG: Black | BG: White | STLYE : NONE
// --- MODULE LOADER
define('IPS_MODULEMESSAGE', IPS_BASE + 300); //ModuleLoader Message
define('ML_LOAD', IPS_MODULEMESSAGE + 1); //Module loaded
define('ML_UNLOAD', IPS_MODULEMESSAGE + 2); //Module unloaded
// --- OBJECT MANAGER
define('IPS_OBJECTMESSAGE', IPS_BASE + 400);
define('OM_REGISTER', IPS_OBJECTMESSAGE + 1); //Object was registered
define('OM_UNREGISTER', IPS_OBJECTMESSAGE + 2); //Object was unregistered
define('OM_CHANGEPARENT', IPS_OBJECTMESSAGE + 3); //Parent was Changed
define('OM_CHANGENAME', IPS_OBJECTMESSAGE + 4); //Name was Changed
define('OM_CHANGEINFO', IPS_OBJECTMESSAGE + 5); //Info was Changed
define('OM_CHANGETYPE', IPS_OBJECTMESSAGE + 6); //Type was Changed
define('OM_CHANGESUMMARY', IPS_OBJECTMESSAGE + 7); //Summary was Changed
define('OM_CHANGEPOSITION', IPS_OBJECTMESSAGE + 8); //Position was Changed
define('OM_CHANGEREADONLY', IPS_OBJECTMESSAGE + 9); //ReadOnly was Changed
define('OM_CHANGEHIDDEN', IPS_OBJECTMESSAGE + 10); //Hidden was Changed
define('OM_CHANGEICON', IPS_OBJECTMESSAGE + 11); //Icon was Changed
define('OM_CHILDADDED', IPS_OBJECTMESSAGE + 12); //Child for Object was added
define('OM_CHILDREMOVED', IPS_OBJECTMESSAGE + 13); //Child for Object was removed
define('OM_CHANGEIDENT', IPS_OBJECTMESSAGE + 14); //Ident was Changed
// --- INSTANCE MANAGER
define('IPS_INSTANCEMESSAGE', IPS_BASE + 500); //Instance Manager Message
define('IM_CREATE', IPS_INSTANCEMESSAGE + 1); //Instance created
define('IM_DELETE', IPS_INSTANCEMESSAGE + 2); //Instance deleted
define('IM_CONNECT', IPS_INSTANCEMESSAGE + 3); //Instance connectged
define('IM_DISCONNECT', IPS_INSTANCEMESSAGE + 4); //Instance disconncted
define('IM_CHANGESTATUS', IPS_INSTANCEMESSAGE + 5); //Status was Changed
define('IM_CHANGESETTINGS', IPS_INSTANCEMESSAGE + 6); //Settings were Changed
define('IM_CHANGESEARCH', IPS_INSTANCEMESSAGE + 7); //Searching was started/stopped
define('IM_SEARCHUPDATE', IPS_INSTANCEMESSAGE + 8); //Searching found new results
define('IM_SEARCHPROGRESS', IPS_INSTANCEMESSAGE + 9); //Searching progress in %
define('IM_SEARCHCOMPLETE', IPS_INSTANCEMESSAGE + 10); //Searching is complete
// --- VARIABLE MANAGER
define('IPS_VARIABLEMESSAGE', IPS_BASE + 600); //Variable Manager Message
define('VM_CREATE', IPS_VARIABLEMESSAGE + 1); //Variable Created
define('VM_DELETE', IPS_VARIABLEMESSAGE + 2); //Variable Deleted
define('VM_UPDATE', IPS_VARIABLEMESSAGE + 3); //On Variable Update
define('VM_CHANGEPROFILENAME', IPS_VARIABLEMESSAGE + 4); //On Profile Name Change
define('VM_CHANGEPROFILEACTION', IPS_VARIABLEMESSAGE + 5); //On Profile Action Change
// --- SCRIPT MANAGER
define('IPS_SCRIPTMESSAGE', IPS_BASE + 700); //Script Manager Message
define('SM_CREATE', IPS_SCRIPTMESSAGE + 1); //On Script Create
define('SM_DELETE', IPS_SCRIPTMESSAGE + 2); //On Script Delete
define('SM_CHANGEFILE', IPS_SCRIPTMESSAGE + 3); //On Script File changed
define('SM_BROKEN', IPS_SCRIPTMESSAGE + 4); //Script Broken Status changed
// --- EVENT MANAGER
define('IPS_EVENTMESSAGE', IPS_BASE + 800); //Event Scripter Message
define('EM_CREATE', IPS_EVENTMESSAGE + 1); //On Event Create
define('EM_DELETE', IPS_EVENTMESSAGE + 2); //On Event Delete
define('EM_UPDATE', IPS_EVENTMESSAGE + 3);
define('EM_CHANGEACTIVE', IPS_EVENTMESSAGE + 4);
define('EM_CHANGELIMIT', IPS_EVENTMESSAGE + 5);
define('EM_CHANGESCRIPT', IPS_EVENTMESSAGE + 6);
define('EM_CHANGETRIGGER', IPS_EVENTMESSAGE + 7);
define('EM_CHANGETRIGGERVALUE', IPS_EVENTMESSAGE + 8);
define('EM_CHANGETRIGGEREXECUTION', IPS_EVENTMESSAGE + 9);
define('EM_CHANGECYCLIC', IPS_EVENTMESSAGE + 10);
define('EM_CHANGECYCLICDATEFROM', IPS_EVENTMESSAGE + 11);
define('EM_CHANGECYCLICDATETO', IPS_EVENTMESSAGE + 12);
define('EM_CHANGECYCLICTIMEFROM', IPS_EVENTMESSAGE + 13);
define('EM_CHANGECYCLICTIMETO', IPS_EVENTMESSAGE + 14);
// --- MEDIA MANAGER
define('IPS_MEDIAMESSAGE', IPS_BASE + 900); //Media Manager Message
define('MM_CREATE', IPS_MEDIAMESSAGE + 1); //On Media Create
define('MM_DELETE', IPS_MEDIAMESSAGE + 2); //On Media Delete
define('MM_CHANGEFILE', IPS_MEDIAMESSAGE + 3); //On Media File changed
define('MM_AVAILABLE', IPS_MEDIAMESSAGE + 4); //Media Available Status changed
define('MM_UPDATE', IPS_MEDIAMESSAGE + 5);
// --- LINK MANAGER
define('IPS_LINKMESSAGE', IPS_BASE + 1000); //Link Manager Message
define('LM_CREATE', IPS_LINKMESSAGE + 1); //On Link Create
define('LM_DELETE', IPS_LINKMESSAGE + 2); //On Link Delete
define('LM_CHANGETARGET', IPS_LINKMESSAGE + 3); //On Link TargetID change
// --- DATA HANDLER
define('IPS_DATAMESSAGE', IPS_BASE + 1100); //Data Handler Message
define('DM_CONNECT', IPS_DATAMESSAGE + 1); //On Instance Connect
define('DM_DISCONNECT', IPS_DATAMESSAGE + 2); //On Instance Disconnect
// --- SCRIPT ENGINE
define('IPS_ENGINEMESSAGE', IPS_BASE + 1200); //Script Engine Message
define('SE_UPDATE', IPS_ENGINEMESSAGE + 1); //On Library Refresh
define('SE_EXECUTE', IPS_ENGINEMESSAGE + 2); //On Script Finished execution
define('SE_RUNNING', IPS_ENGINEMESSAGE + 3); //On Script Started execution
// --- PROFILE POOL
define('IPS_PROFILEMESSAGE', IPS_BASE + 1300);
define('PM_CREATE', IPS_PROFILEMESSAGE + 1);
define('PM_DELETE', IPS_PROFILEMESSAGE + 2);
define('PM_CHANGETEXT', IPS_PROFILEMESSAGE + 3);
define('PM_CHANGEVALUES', IPS_PROFILEMESSAGE + 4);
define('PM_CHANGEDIGITS', IPS_PROFILEMESSAGE + 5);
define('PM_CHANGEICON', IPS_PROFILEMESSAGE + 6);
define('PM_ASSOCIATIONADDED', IPS_PROFILEMESSAGE + 7);
define('PM_ASSOCIATIONREMOVED', IPS_PROFILEMESSAGE + 8);
define('PM_ASSOCIATIONCHANGED', IPS_PROFILEMESSAGE + 9);
// --- TIMER POOL
define('IPS_TIMERMESSAGE', IPS_BASE + 1400); //Timer Pool Message
define('TM_REGISTER', IPS_TIMERMESSAGE + 1);
define('TM_UNREGISTER', IPS_TIMERMESSAGE + 2);
define('TM_SETINTERVAL', IPS_TIMERMESSAGE + 3);
define('TM_UPDATE', IPS_TIMERMESSAGE + 4);
define('TM_RUNNING', IPS_TIMERMESSAGE + 5);
// --- STATUS CODES
define('IS_SBASE', 100);
define('IS_CREATING', IS_SBASE + 1); //module is being created
define('IS_ACTIVE', IS_SBASE + 2); //module created and running
define('IS_DELETING', IS_SBASE + 3); //module us being deleted
define('IS_INACTIVE', IS_SBASE + 4); //module is not beeing used
// --- ERROR CODES
define('IS_EBASE', 200); //default errorcode
define('IS_NOTCREATED', IS_EBASE + 1); //instance could not be created
// --- Search Handling
define('FOUND_UNKNOWN', 0); //Undefined value
define('FOUND_NEW', 1); //Device is new and not configured yet
define('FOUND_OLD', 2); //Device is already configues (InstanceID should be set)
define('FOUND_CURRENT', 3); //Device is already configues (InstanceID is from the current/searching Instance)
define('FOUND_UNSUPPORTED', 4); //Device is not supported by Module
define('vtBoolean', 0);
define('vtInteger', 1);
define('vtFloat', 2);
define('vtString', 3);
}
class ELROBase extends IPSModule
{
public function Create()
{
parent::Create();
//Register Variables
$this->RegisterVariableBoolean("STATE", "STATE", "~Switch");
$this->EnableAction("STATE");
$this->ConnectParent("{E6D7692A-7F4C-441D-827B-64062CFE1C02}");
}
public function ApplyChanges()
{
parent::ApplyChanges();
if (IPS_GetKernelRunlevel() == KR_READY)
{
$Address = $this->GetAdress();
$this->SetSummary("0x" . $Address);
}
}
################## PRIVATE
protected function DoSend($Value)
{
$i = 0;
$Address = $this->GetAdress();
$Repeat = $this->ReadPropertyInteger("Repeat");
$SendData[] = hex2bin('01002003CA000000');
$SendData[] = hex2bin('0200206060201812');
$SendData[] = hex2bin('03' . $Address . $Value . '00000000');
$SendData[] = hex2bin('0400000000000000');
$SendData[] = hex2bin('0500000000000000');
do
{
foreach ($SendData as $Data)
{
try
{
IPS_SendDataToParent($this->InstanceID, json_encode(Array(
"DataID" => "{4A550680-80C5-4465-971E-BBF83205A02B}",
"EventID" => 0,
"Buffer" => utf8_encode($Data))));
} catch (Exception $ex)
{
return false;
}
}
$i++;
} while ($i < $Repeat);
return true;
}
################## ActionHandler
public function RequestAction($Ident, $Value)
{
if ($Ident == 'STATE')
$this->SendSwitch($Value);
}
################## PUBLIC
protected function SendSwitch( boolean $State)
{
if (!$this->HasActiveParent())
{
trigger_error("Instance has no active Parent Instance!", E_USER_NOTICE);
return false;
} else
{
if ((bool) $State)
$SendState = static::on;
else
$SendState = static::off;
if ($this->DoSend($SendState))
SetValueBoolean($this->GetIDForIdent('STATE'), $State);
else
{
trigger_error('Fehler beim senden!', E_USER_NOTICE);
return false;
}
}
}
protected function GetAdress() // must overwrite
{
}
################## DUMMYS / WOARKAROUNDS - protected
protected function HasActiveParent()
{
$instance = @IPS_GetInstance($this->InstanceID);
if ($instance['ConnectionID'] > 0)
{
$parent = IPS_GetInstance($instance['ConnectionID']);
if ($parent['InstanceStatus'] == IS_ACTIVE)
return true;
}
return false;
}
protected function LogMessage($data, $cata)
{
}
protected function SetSummary($data)
{
}
}
?>