The files contained in this repository can be downloaded to your computer using a svn client.
On Linux you simply type the command displayed below.
This URL has Read-Only access.
root / trunk / DomotiGa / CXMLRPC.class @ 672
History | View | Annotate | Download (24.2 kB)
| 1 | ' Gambas class file |
|---|---|
| 2 | |
| 3 | ' Description: |
| 4 | ' CXMLRPC.class |
| 5 | ' Built-in XML-RPC server. |
| 6 | |
| 7 | ' Development Status: |
| 8 | ' Just started. |
| 9 | |
| 10 | ' DomotiGa - an open source home automation program. |
| 11 | ' Copyright(C) 2008-2011 Ron Klinkien |
| 12 | |
| 13 | ' Read file called COPYING for license details. |
| 14 | |
| 15 | PROPERTY HTTPPort AS Integer |
| 16 | PROPERTY MaxConn AS Integer |
| 17 | PROPERTY XMLRPCDebug AS Boolean |
| 18 | |
| 19 | PRIVATE iHTTPPort AS Integer |
| 20 | PRIVATE iMaxConn AS Integer |
| 21 | PRIVATE bXMLRPCDebug AS Boolean |
| 22 | |
| 23 | PUBLIC hXMLRPC AS RpcServer |
| 24 | PRIVATE APIVersion AS String = "0.09" |
| 25 | |
| 26 | PUBLIC FUNCTION Connect() AS Boolean |
| 27 | |
| 28 | DIM hRpcFunc AS RpcFunction |
| 29 | |
| 30 | hXMLRPC = NEW RpcServer AS "hXMLRPC" |
| 31 | |
| 32 | ' start method definitions |
| 33 | hRpcFunc = NEW RpcFunction("system.program_uptime", NULL, XmlRpc.xString)
|
| 34 | hRpcFunc.Help = ("returns the program uptime.")
|
| 35 | hXMLRPC.Register(hRpcFunc) |
| 36 | hRpcFunc = NEW RpcFunction("system.program_version", NULL, XmlRpc.xString)
|
| 37 | hRpcFunc.Help = ("returns the program version.")
|
| 38 | hXMLRPC.Register(hRpcFunc) |
| 39 | hRpcFunc = NEW RpcFunction("api.version", NULL, XmlRpc.xString)
|
| 40 | hRpcFunc.Help = ("returns the api version.")
|
| 41 | hXMLRPC.Register(hRpcFunc) |
| 42 | hRpcFunc = NEW RpcFunction("system.pid", NULL, XmlRpc.xString)
|
| 43 | hRpcFunc.Help = ("returns the process id.")
|
| 44 | hXMLRPC.Register(hRpcFunc) |
| 45 | hRpcFunc = NEW RpcFunction("system.hostname", NULL, XmlRpc.xString)
|
| 46 | hRpcFunc.Help = ("returns the hostname.")
|
| 47 | hXMLRPC.Register(hRpcFunc) |
| 48 | hRpcFunc = NEW RpcFunction("data.newmessages", NULL, XmlRpc.xArray)
|
| 49 | hRpcFunc.Help = ("returns new mails, calls and voicemails.")
|
| 50 | hXMLRPC.Register(hRpcFunc) |
| 51 | hRpcFunc = NEW RpcFunction("data.sunmoon", NULL, XmlRpc.xArray)
|
| 52 | hRpcFunc.Help = ("returns sun and moon data.")
|
| 53 | hXMLRPC.Register(hRpcFunc) |
| 54 | hRpcFunc = NEW RpcFunction("mode.get_housemode", NULL, XmlRpc.xString)
|
| 55 | hRpcFunc.Help = ("returns the house mode.")
|
| 56 | hXMLRPC.Register(hRpcFunc) |
| 57 | hRpcFunc = NEW RpcFunction("mode.get_mutemode", NULL, XmlRpc.xBoolean)
|
| 58 | hRpcFunc.Help = ("returns the mute mode.")
|
| 59 | hXMLRPC.Register(hRpcFunc) |
| 60 | hRpcFunc = NEW RpcFunction("globalvar.list", NULL, XmlRpc.xArray)
|
| 61 | hRpcFunc.Help = ("returns a list of global variables.")
|
| 62 | hXMLRPC.Register(hRpcFunc) |
| 63 | hRpcFunc = NEW RpcFunction("device.list", NULL, XmlRpc.xStruct)
|
| 64 | hRpcFunc.Help = ("returns a list of devices.")
|
| 65 | hXMLRPC.Register(hRpcFunc) |
| 66 | hRpcFunc = NEW RpcFunction("device.listswitch", NULL, XmlRpc.xStruct)
|
| 67 | hRpcFunc.Help = ("returns a list of devices which can be switched.")
|
| 68 | hXMLRPC.Register(hRpcFunc) |
| 69 | hRpcFunc = NEW RpcFunction("device.listdim", NULL, XmlRpc.xStruct)
|
| 70 | hRpcFunc.Help = ("returns a list of devices which can be dimmed.")
|
| 71 | hXMLRPC.Register(hRpcFunc) |
| 72 | hRpcFunc = NEW RpcFunction("module.restart", [XmlRpc.xString], XmlRpc.xBoolean)
|
| 73 | hRpcFunc.Help = ("reload config and restart module param1.")
|
| 74 | hXMLRPC.Register(hRpcFunc) |
| 75 | hRpcFunc = NEW RpcFunction("send.email", [XmlRpc.xString, XmlRpc.xString, XmlRpc.xString], XmlRpc.xBoolean)
|
| 76 | hRpcFunc.Help = ("send email to param1, with subject param2 and body param3.")
|
| 77 | hXMLRPC.Register(hRpcFunc) |
| 78 | hRpcFunc = NEW RpcFunction("send.tweet", [XmlRpc.xString], XmlRpc.xBoolean)
|
| 79 | hRpcFunc.Help = ("send tweet with param1 as contents.")
|
| 80 | hXMLRPC.Register(hRpcFunc) |
| 81 | hRpcFunc = NEW RpcFunction("send.sms", [XmlRpc.xString, XmlRpc.xString], XmlRpc.xBoolean)
|
| 82 | hRpcFunc.Help = ("send sms to param1, with param2 as contents.")
|
| 83 | hXMLRPC.Register(hRpcFunc) |
| 84 | hRpcFunc = NEW RpcFunction("set.housemode", [XmlRpc.xString], XmlRpc.xBoolean)
|
| 85 | hRpcFunc.Help = ("set house mode to param1.")
|
| 86 | hXMLRPC.Register(hRpcFunc) |
| 87 | hRpcFunc = NEW RpcFunction("set.mutemode", [XmlRpc.xBoolean], XmlRpc.xBoolean)
|
| 88 | hRpcFunc.Help = ("set mute mode to param1.")
|
| 89 | hXMLRPC.Register(hRpcFunc) |
| 90 | hRpcFunc = NEW RpcFunction("device.setdevice", [XmlRpc.xString, XmlRpc.xString], XmlRpc.xBoolean)
|
| 91 | hRpcFunc.Help = ("set device param1 with value param2.")
|
| 92 | hXMLRPC.Register(hRpcFunc) |
| 93 | hRpcFunc = NEW RpcFunction("set.alarmpin", [XmlRpc.xString], XmlRpc.xBoolean)
|
| 94 | hRpcFunc.Help = ("set alarm pin to param1.")
|
| 95 | hXMLRPC.Register(hRpcFunc) |
| 96 | hRpcFunc = NEW RpcFunction("set.alarmmode", [XmlRpc.xString], XmlRpc.xBoolean)
|
| 97 | hRpcFunc.Help = ("set alarm mode to param1.")
|
| 98 | hXMLRPC.Register(hRpcFunc) |
| 99 | hRpcFunc = NEW RpcFunction("play.sound", [XmlRpc.xString, XmlRpc.xInteger], XmlRpc.xBoolean)
|
| 100 | hRpcFunc.Help = ("play sound param1 with volume param2.")
|
| 101 | hXMLRPC.Register(hRpcFunc) |
| 102 | hRpcFunc = NEW RpcFunction("voicetext.speak", [XmlRpc.xString, XmlRpc.xString], XmlRpc.xBoolean)
|
| 103 | hRpcFunc.Help = ("speak text param1 with voice param2.")
|
| 104 | hXMLRPC.Register(hRpcFunc) |
| 105 | hRpcFunc = NEW RpcFunction("pachube.list", NULL, XmlRpc.xString)
|
| 106 | hRpcFunc.Help = ("get pachube device list in eeml.")
|
| 107 | hXMLRPC.Register(hRpcFunc) |
| 108 | hRpcFunc = NEW RpcFunction("rrdtool.listgraphs", NULL, XmlRpc.xString)
|
| 109 | hRpcFunc.Help = ("get list of rrdtool graph images in group param1.")
|
| 110 | hXMLRPC.Register(hRpcFunc) |
| 111 | hRpcFunc = NEW RpcFunction("rrdtool.updategraphs", [XmlRpc.xString, XmlRpc.xString], XmlRpc.xString)
|
| 112 | hRpcFunc.Help = ("update rrdtool graph images in group param1.")
|
| 113 | hXMLRPC.Register(hRpcFunc) |
| 114 | hRpcFunc = NEW RpcFunction("rrdtool.createrrds", [XmlRpc.xString], XmlRpc.xBoolean)
|
| 115 | hRpcFunc.Help = ("create rrdtool database for device id param1.")
|
| 116 | hXMLRPC.Register(hRpcFunc) |
| 117 | hRpcFunc = NEW RpcFunction("display.ledmessage", [XmlRpc.xString, XmlRpc.xString], XmlRpc.xBoolean)
|
| 118 | hRpcFunc.Help = ("display message param2 on display with id param1.")
|
| 119 | hXMLRPC.Register(hRpcFunc) |
| 120 | hRpcFunc = NEW RpcFunction("av.setcontrol", [XmlRpc.xString, XmlRpc.xString, XmlRpc.xString, XmlRpc.xString], XmlRpc.xBoolean)
|
| 121 | hRpcFunc.Help = ("set audio/video param1 with command param2, value param3, address param4.")
|
| 122 | hXMLRPC.Register(hRpcFunc) |
| 123 | hRpcFunc = NEW RpcFunction("av.getcontrol", [XmlRpc.xString, XmlRpc.xString, XmlRpc.xString], XmlRpc.xBoolean)
|
| 124 | hRpcFunc.Help = ("get audio/video param1 setting param2, address param3.")
|
| 125 | hXMLRPC.Register(hRpcFunc) |
| 126 | hRpcFunc = NEW RpcFunction("globalvar.save", NULL, XmlRpc.xBoolean)
|
| 127 | hRpcFunc.Help = ("saves global variables to database.")
|
| 128 | hXMLRPC.Register(hRpcFunc) |
| 129 | hRpcFunc = NEW RpcFunction("globalvar.get", NULL, XmlRpc.xArray)
|
| 130 | hRpcFunc.Help = ("returns a list of global variables with values.")
|
| 131 | hXMLRPC.Register(hRpcFunc) |
| 132 | hRpcFunc = NEW RpcFunction("globalvar.set", [XmlRpc.xString, XmlRpc.xString], XmlRpc.xBoolean)
|
| 133 | hRpcFunc.Help = ("set global variable param1 to param2.")
|
| 134 | hXMLRPC.Register(hRpcFunc) |
| 135 | hRpcFunc = NEW RpcFunction("zwave.removenodes", NULL, XmlRpc.xBoolean)
|
| 136 | hRpcFunc.Help = ("zwave remove all nodes.")
|
| 137 | hXMLRPC.Register(hRpcFunc) |
| 138 | hRpcFunc = NEW RpcFunction("zwave.createnode", [XmlRpc.xInteger, XmlRpc.xInteger, XmlRpc.xInteger, XmlRpc.xInteger, XmlRpc.xInteger, XmlRpc.xInteger, XmlRpc.xBoolean], XmlRpc.xBoolean)
|
| 139 | hRpcFunc.Help = ("zwave create node.")
|
| 140 | hXMLRPC.Register(hRpcFunc) |
| 141 | hRpcFunc = NEW RpcFunction("zwave.setids", [XmlRpc.xInteger, XmlRpc.xInteger], XmlRpc.xBoolean)
|
| 142 | hRpcFunc.Help = ("zwave set ids.")
|
| 143 | hXMLRPC.Register(hRpcFunc) |
| 144 | hRpcFunc = NEW RpcFunction("zwave.basicreport", [XmlRpc.xInteger, XmlRpc.xInteger, XmlRpc.xInteger], XmlRpc.xBoolean)
|
| 145 | hRpcFunc.Help = ("zwave basic report.")
|
| 146 | hXMLRPC.Register(hRpcFunc) |
| 147 | hRpcFunc = NEW RpcFunction("zwave.allqueried", NULL, XmlRpc.xBoolean)
|
| 148 | hRpcFunc.Help = ("zwave all queried.")
|
| 149 | hXMLRPC.Register(hRpcFunc) |
| 150 | hRpcFunc = NEW RpcFunction("cmdr.culsimulate", NULL, XmlRpc.xString)
|
| 151 | hRpcFunc.Help = ("cmdr inject cul packet in simulator.")
|
| 152 | hXMLRPC.Register(hRpcFunc) |
| 153 | hRpcFunc = NEW RpcFunction("cmdr.culqueuecommand", NULL, XmlRpc.xString)
|
| 154 | hRpcFunc.Help = ("cmdr queue cul command.")
|
| 155 | hXMLRPC.Register(hRpcFunc) |
| 156 | TRY hXMLRPC.Listen(iHTTPPort, iMaxConn) |
| 157 | |
| 158 | IF NOT hXMLRPC.Listening THEN |
| 159 | RETURN FALSE |
| 160 | END IF |
| 161 | RETURN TRUE |
| 162 | |
| 163 | END |
| 164 | |
| 165 | ' shutdown our xmlrpc server |
| 166 | PUBLIC SUB Disconnect() |
| 167 | |
| 168 | hXMLRPC.Stop() |
| 169 | |
| 170 | END |
| 171 | |
| 172 | PRIVATE SUB ReturnDeviceListDimSwitch(sType AS String) |
| 173 | |
| 174 | DIM rResult AS Result |
| 175 | DIM sString AS NEW Collection |
| 176 | DIM sList AS NEW RpcStruct |
| 177 | DIM sStatusIcon AS String |
| 178 | DIM iCnt AS Integer |
| 179 | |
| 180 | rResult = Main.hDB.Exec("SELECT * FROM devices WHERE enabled is TRUE")
|
| 181 | |
| 182 | IF NOT rResult.Available THEN |
| 183 | Main.WriteLog(("Error: table 'devices' not found!"))
|
| 184 | RETURN |
| 185 | END IF |
| 186 | |
| 187 | FOR iCnt = 0 TO rResult.Count - 1 |
| 188 | IF NOT rResult!hide THEN |
| 189 | IF (sType = "switchable" AND rResult!switchable) OR (sType = "dimable" AND rResult!dimable) THEN |
| 190 | ' status icon |
| 191 | IF rResult!onicon OR rResult!officon THEN |
| 192 | IF UCase$(rResult!value) = "ON" OR UCase$(rResult!value) = "OPEN" OR UCase$(rResult!value) = "MOTION" THEN |
| 193 | sStatusIcon = rResult!onicon |
| 194 | ELSE |
| 195 | sStatusIcon = rResult!officon |
| 196 | END IF |
| 197 | END IF |
| 198 | sString[iCnt] = rResult!id & ";;" & sStatusIcon & ";;" & rResult!name & ";;" & rResult!value |
| 199 | sList.Add(rResult!name, sString[iCnt], XmlRpc.xString) |
| 200 | END IF |
| 201 | END IF |
| 202 | rResult.MoveNext |
| 203 | NEXT |
| 204 | |
| 205 | hXMLRPC.SetReply(sList) |
| 206 | |
| 207 | END |
| 208 | |
| 209 | PRIVATE SUB ModuleRestart(sParams AS Variant[]) |
| 210 | |
| 211 | IF sParams.Count = 1 THEN |
| 212 | Main.GetSettings() |
| 213 | TRY Object.Call(Main, "Restart_" & sParams[0]) |
| 214 | IF ERROR THEN |
| 215 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when restarting module!"))
|
| 216 | hXMLRPC.SetReply(FALSE) |
| 217 | ELSE |
| 218 | hXMLRPC.SetReply(TRUE) |
| 219 | END IF |
| 220 | ELSE |
| 221 | hXMLRPC.SetReply(FALSE) |
| 222 | END IF |
| 223 | |
| 224 | END |
| 225 | |
| 226 | PRIVATE SUB SendEmail(sParams AS Variant[]) |
| 227 | |
| 228 | IF sParams.Count = 3 THEN |
| 229 | TRY Mail.SendMail(sParams[1], sParams[2], sParams[0]) |
| 230 | IF ERROR THEN |
| 231 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when sending an e-mail!"))
|
| 232 | hXMLRPC.SetReply(FALSE) |
| 233 | ELSE |
| 234 | hXMLRPC.SetReply(TRUE) |
| 235 | END IF |
| 236 | ELSE |
| 237 | hXMLRPC.SetReply(FALSE) |
| 238 | END IF |
| 239 | |
| 240 | END |
| 241 | |
| 242 | PRIVATE SUB SendTweet(sParams AS Variant[]) |
| 243 | |
| 244 | IF sParams.Count = 1 THEN |
| 245 | TRY Twitter.PostTweet(sParams[0]) |
| 246 | IF ERROR THEN |
| 247 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when sending an Tweet!"))
|
| 248 | hXMLRPC.SetReply(FALSE) |
| 249 | ELSE |
| 250 | hXMLRPC.SetReply(TRUE) |
| 251 | END IF |
| 252 | ELSE |
| 253 | hXMLRPC.SetReply(FALSE) |
| 254 | END IF |
| 255 | |
| 256 | END |
| 257 | |
| 258 | PRIVATE SUB SendSMS(sParams AS Variant[]) |
| 259 | |
| 260 | IF sParams.Count = 2 THEN |
| 261 | TRY Main.hSMS.SendSMS(sParams[1], sParams[0]) |
| 262 | IF ERROR THEN |
| 263 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when sending an SMS!"))
|
| 264 | hXMLRPC.SetReply(FALSE) |
| 265 | ELSE |
| 266 | hXMLRPC.SetReply(TRUE) |
| 267 | END IF |
| 268 | ELSE |
| 269 | hXMLRPC.SetReply(FALSE) |
| 270 | END IF |
| 271 | |
| 272 | END |
| 273 | |
| 274 | PRIVATE SUB SetHouseMode(sParams AS Variant[]) |
| 275 | |
| 276 | IF sParams.Count = 1 THEN |
| 277 | IF InStr("normal away vacation work", sParams[0]) THEN
|
| 278 | TRY Main.ChangeHouseMode(sParams[0]) |
| 279 | IF ERROR THEN |
| 280 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when setting House mode!"))
|
| 281 | hXMLRPC.SetReply(FALSE) |
| 282 | ELSE |
| 283 | hXMLRPC.SetReply(TRUE) |
| 284 | END IF |
| 285 | END IF |
| 286 | ELSE |
| 287 | hXMLRPC.SetReply(FALSE) |
| 288 | END IF |
| 289 | |
| 290 | END |
| 291 | |
| 292 | PRIVATE SUB SetAlarmMode(sParams AS Variant[]) |
| 293 | |
| 294 | IF sParams.Count = 1 THEN |
| 295 | IF InStr("0311 0301", sParams[0]) THEN
|
| 296 | IF Main.hDSC THEN TRY Main.hDSC.TX(sParams[0]) |
| 297 | IF ERROR THEN |
| 298 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when setting Alarm mode!"))
|
| 299 | hXMLRPC.SetReply(FALSE) |
| 300 | ELSE |
| 301 | hXMLRPC.SetReply(TRUE) |
| 302 | END IF |
| 303 | END IF |
| 304 | ELSE |
| 305 | hXMLRPC.SetReply(FALSE) |
| 306 | END IF |
| 307 | |
| 308 | END |
| 309 | |
| 310 | PRIVATE SUB SetAlarmPin(sParams AS Variant[]) |
| 311 | |
| 312 | IF sParams.Count = 1 THEN |
| 313 | IF Main.hDSC THEN TRY Main.hDSC.TX("0401" & sParams[0])
|
| 314 | IF ERROR THEN |
| 315 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when setting Alarm pin!"))
|
| 316 | hXMLRPC.SetReply(FALSE) |
| 317 | ELSE |
| 318 | hXMLRPC.SetReply(TRUE) |
| 319 | END IF |
| 320 | ELSE |
| 321 | hXMLRPC.SetReply(FALSE) |
| 322 | END IF |
| 323 | |
| 324 | END |
| 325 | |
| 326 | PRIVATE SUB SetMuteMode(sParams AS Variant[]) |
| 327 | |
| 328 | IF sParams.Count = 1 THEN |
| 329 | TRY Main.ChangeMuteMode(sParams[0]) |
| 330 | IF ERROR THEN |
| 331 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when setting Mute mode!"))
|
| 332 | hXMLRPC.SetReply(FALSE) |
| 333 | ELSE |
| 334 | hXMLRPC.SetReply(TRUE) |
| 335 | END IF |
| 336 | ELSE |
| 337 | hXMLRPC.SetReply(FALSE) |
| 338 | END IF |
| 339 | |
| 340 | END |
| 341 | |
| 342 | PRIVATE SUB DeviceSetDevice(sParams AS Variant[]) |
| 343 | |
| 344 | IF sParams.Count = 2 THEN |
| 345 | TRY Devices.SetDevice(sParams[0], sParams[1]) |
| 346 | IF ERROR THEN |
| 347 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when setting device value!"))
|
| 348 | hXMLRPC.SetReply(FALSE) |
| 349 | ELSE |
| 350 | hXMLRPC.SetReply(TRUE) |
| 351 | END IF |
| 352 | ELSE |
| 353 | hXMLRPC.SetReply(FALSE) |
| 354 | END IF |
| 355 | |
| 356 | END |
| 357 | |
| 358 | PRIVATE SUB ReturnDeviceList() |
| 359 | |
| 360 | DIM rResult, rResult3 AS Result |
| 361 | DIM sString AS NEW Collection |
| 362 | DIM sList AS NEW RpcStruct |
| 363 | DIM iCnt AS Integer |
| 364 | DIM sStatusIcon, sLastseen, sValue, sValue2, sValue3, sValue4 AS String |
| 365 | |
| 366 | rResult = Main.hDB.Exec("SELECT * FROM devices WHERE enabled is TRUE")
|
| 367 | |
| 368 | IF NOT rResult.Available THEN |
| 369 | Main.WriteLog(("Error: table 'devices' not found!"))
|
| 370 | RETURN |
| 371 | END IF |
| 372 | |
| 373 | FOR iCnt = 0 TO rResult.Count - 1 |
| 374 | IF NOT rResult!hide THEN |
| 375 | ' status icon |
| 376 | IF rResult!onicon OR rResult!officon THEN |
| 377 | IF UCase$(rResult!value) = "ON" OR UCase$(rResult!value) = "OPEN" OR UCase$(rResult!value) = "MOTION" THEN |
| 378 | sStatusIcon = rResult!onicon |
| 379 | ELSE |
| 380 | sStatusIcon = rResult!officon |
| 381 | END IF |
| 382 | ELSE |
| 383 | sStatusIcon = "" |
| 384 | END IF |
| 385 | ' location |
| 386 | TRY rResult3 = Main.hDB.Exec("SELECT * FROM locations WHERE id = &1", rResult!location)
|
| 387 | ' last seen |
| 388 | IF rResult!lastseen THEN |
| 389 | sLastSeen = Replace$(Str$(Format(rResult!lastseen, "yyyy-mm-dd hh:nn:ss")), Format(Date(), "yyyy-mm-dd") & " ", "") |
| 390 | ELSE |
| 391 | sLastSeen = "Never" |
| 392 | END IF |
| 393 | |
| 394 | sValue = rResult!value |
| 395 | TRY sValue = (sValue / rResult!divider) + rResult!calibration |
| 396 | sValue2 = rResult!value2 |
| 397 | TRY sValue2 = (sValue2 / rResult!divider2) + rResult!calibration2 |
| 398 | sValue3 = rResult!value3 |
| 399 | TRY sValue3 = (sValue3 / rResult!divider3) + rResult!calibration3 |
| 400 | sValue4 = rResult!value4 |
| 401 | TRY sValue4 = (sValue4 / rResult!divider4) + rResult!calibration4 |
| 402 | |
| 403 | sString[iCnt] = rResult!id & ";;" & sStatusIcon & ";;" & rResult!name & ";;" & rResult3!name & ";;" & sValue & ";;" & rResult!label & ";;" & sValue2 & ";;" & rResult!label2 & ";;" & sValue3 & ";;" & rResult!label3 & ";;" & sValue4 & ";;" & rResult!label4 & ";;" & sLastSeen |
| 404 | sList.Add(rResult!name, sString[iCnt], XmlRpc.xString) |
| 405 | END IF |
| 406 | rResult.MoveNext |
| 407 | NEXT |
| 408 | |
| 409 | hXMLRPC.SetReply(sList) |
| 410 | |
| 411 | END |
| 412 | |
| 413 | PRIVATE SUB PlaySound(sParams AS Variant[]) |
| 414 | |
| 415 | IF sParams.Count > 1 AND IF sParams.Count < 3 THEN |
| 416 | TRY Sounds.PlaySnd(sParams[0], sParams[1]) |
| 417 | IF ERROR THEN |
| 418 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when playing sound!"))
|
| 419 | hXMLRPC.SetReply(FALSE) |
| 420 | ELSE |
| 421 | hXMLRPC.SetReply(TRUE) |
| 422 | END IF |
| 423 | ELSE |
| 424 | hXMLRPC.SetReply(FALSE) |
| 425 | END IF |
| 426 | |
| 427 | END |
| 428 | |
| 429 | PRIVATE SUB VoiceTextSpeak(sParams AS Variant[]) |
| 430 | |
| 431 | IF sParams.Count > 1 AND IF sParams.Count < 3 THEN |
| 432 | TRY VoiceText.Speak(sParams[0], sParams[1]) |
| 433 | IF ERROR THEN |
| 434 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when speaking voicetext!"))
|
| 435 | hXMLRPC.SetReply(FALSE) |
| 436 | ELSE |
| 437 | hXMLRPC.SetReply(TRUE) |
| 438 | END IF |
| 439 | ELSE |
| 440 | hXMLRPC.SetReply(FALSE) |
| 441 | END IF |
| 442 | |
| 443 | END |
| 444 | |
| 445 | PRIVATE SUB RRDToolListGraphs(sParams AS Variant[]) |
| 446 | |
| 447 | IF sParams.Count = 1 THEN |
| 448 | TRY RRDTool.Graphs(sParams[0]) |
| 449 | IF ERROR THEN |
| 450 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when listing rrdtool graphs!"))
|
| 451 | hXMLRPC.SetReply(FALSE) |
| 452 | ELSE |
| 453 | hXMLRPC.SetReply(TRUE) |
| 454 | END IF |
| 455 | ELSE |
| 456 | hXMLRPC.SetReply(FALSE) |
| 457 | END IF |
| 458 | |
| 459 | END |
| 460 | |
| 461 | PRIVATE SUB RRDToolUpdateGraphs(sParams AS Variant[]) |
| 462 | |
| 463 | IF sParams.Count = 2 THEN |
| 464 | TRY RRDTool.CreateGraphs(sParams[0], sParams[1]) |
| 465 | TRY RRDTool.CreateExtGraphs(sParams[0], sParams[1]) |
| 466 | IF ERROR THEN |
| 467 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when creating rrdtool graphs!"))
|
| 468 | hXMLRPC.SetReply(FALSE) |
| 469 | ELSE |
| 470 | hXMLRPC.SetReply(TRUE) |
| 471 | END IF |
| 472 | ELSE |
| 473 | hXMLRPC.SetReply(FALSE) |
| 474 | END IF |
| 475 | |
| 476 | END |
| 477 | |
| 478 | PRIVATE SUB RRDToolCreateRRDs(sParams AS Variant[]) |
| 479 | |
| 480 | IF sParams.Count = 1 THEN |
| 481 | TRY RRDTool.CreateRRDs(sParams[0]) |
| 482 | IF ERROR THEN |
| 483 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when creating rrdtool database!"))
|
| 484 | hXMLRPC.SetReply(FALSE) |
| 485 | ELSE |
| 486 | hXMLRPC.SetReply(TRUE) |
| 487 | END IF |
| 488 | ELSE |
| 489 | hXMLRPC.SetReply(FALSE) |
| 490 | END IF |
| 491 | |
| 492 | END |
| 493 | |
| 494 | PRIVATE SUB DisplayLEDMessage(sParams AS Variant[]) |
| 495 | |
| 496 | IF sParams.Count = 2 THEN |
| 497 | TRY Main.hLEDMatrix.DisplayMessage(sParams[0], sParams[1]) |
| 498 | IF ERROR THEN |
| 499 | Main.WriteDebugLog(("XMLRPC Error: '" & ERROR.Text & "' at '" & Error.Where & "' when displaying a message!"))
|
| 500 | hXMLRPC.SetReply(FALSE) |
| 501 | ELSE |
| 502 | hXMLRPC.SetReply(TRUE) |
| 503 | END IF |
| 504 | ELSE |
| 505 | hXMLRPC.SetReply(FALSE) |
| 506 | END IF |
| 507 | |
| 508 | END |
| 509 | |
| 510 | PRIVATE SUB SetAVControl(sParams AS Variant[]) |
| 511 | |
| 512 | IF sParams.Count = 4 THEN |
| 513 | TRY AVControl.Set(sParams[0], sParams[1], sParams[2], sParams[3]) |
| 514 | IF ERROR THEN |
| 515 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when setting audio/video control!"))
|
| 516 | hXMLRPC.SetReply(FALSE) |
| 517 | ELSE |
| 518 | hXMLRPC.SetReply(TRUE) |
| 519 | END IF |
| 520 | ELSE |
| 521 | hXMLRPC.SetReply(FALSE) |
| 522 | END IF |
| 523 | |
| 524 | END |
| 525 | |
| 526 | PRIVATE SUB GetAVControl(sParams AS Variant[]) |
| 527 | |
| 528 | IF sParams.Count = 2 THEN |
| 529 | TRY AVControl.Get(sParams[0], sParams[1], sParams[2]) |
| 530 | IF ERROR THEN |
| 531 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when getting audio/video control!"))
|
| 532 | hXMLRPC.SetReply(FALSE) |
| 533 | ELSE |
| 534 | hXMLRPC.SetReply(TRUE) |
| 535 | END IF |
| 536 | ELSE |
| 537 | hXMLRPC.SetReply(FALSE) |
| 538 | END IF |
| 539 | |
| 540 | END |
| 541 | |
| 542 | PRIVATE SUB GetGlobalVars() |
| 543 | |
| 544 | DIM vValue AS Variant |
| 545 | DIM aArray AS NEW RpcArray |
| 546 | |
| 547 | FOR EACH vValue IN Main.GlobalVar |
| 548 | aArray.Add(Main.GlobalVar.Key, XmlRpc.xString) |
| 549 | aArray.Add(vValue, XmlRpc.xString) |
| 550 | NEXT |
| 551 | hXMLRPC.SetReply(aArray) |
| 552 | |
| 553 | END |
| 554 | |
| 555 | PRIVATE SUB SetGlobalVar(sParams AS Variant[]) |
| 556 | |
| 557 | IF sParams.Count = 2 THEN |
| 558 | TRY Main.SetGlobalVar(sParams[0], sParams[1]) |
| 559 | IF ERROR THEN |
| 560 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' when setting globalvar!"))
|
| 561 | hXMLRPC.SetReply(FALSE) |
| 562 | ELSE |
| 563 | hXMLRPC.SetReply(TRUE) |
| 564 | ENDIF |
| 565 | ELSE |
| 566 | hXMLRPC.SetReply(FALSE) |
| 567 | ENDIF |
| 568 | |
| 569 | END |
| 570 | |
| 571 | PRIVATE SUB SaveGlobalVars() |
| 572 | |
| 573 | TRY Main.SaveGlobalVars() |
| 574 | IF ERROR THEN |
| 575 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' when saving globalvars!"))
|
| 576 | hXMLRPC.SetReply(FALSE) |
| 577 | ELSE |
| 578 | hXMLRPC.SetReply(TRUE) |
| 579 | ENDIF |
| 580 | |
| 581 | END |
| 582 | |
| 583 | PRIVATE SUB ZWaveRemoveNodes(sParams AS Variant[]) |
| 584 | |
| 585 | TRY Main.hZWave.RemoveNodes() |
| 586 | IF ERROR THEN |
| 587 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when removing zwave nodes"))
|
| 588 | hXMLRPC.SetReply(FALSE) |
| 589 | ELSE |
| 590 | hXMLRPC.SetReply(TRUE) |
| 591 | END IF |
| 592 | |
| 593 | END |
| 594 | |
| 595 | PRIVATE SUB ZWaveCreateNode(sParams AS Variant[]) |
| 596 | |
| 597 | IF sParams.Count = 7 THEN |
| 598 | TRY Main.hZWave.CreateNode(sParams[0], sParams[1], sParams[2], sParams[3], sParams[4], sParams[5], sParams[6]) |
| 599 | IF ERROR THEN |
| 600 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when creating a zwave node!"))
|
| 601 | hXMLRPC.SetReply(FALSE) |
| 602 | ELSE |
| 603 | hXMLRPC.SetReply(TRUE) |
| 604 | END IF |
| 605 | ELSE |
| 606 | hXMLRPC.SetReply(FALSE) |
| 607 | END IF |
| 608 | |
| 609 | END |
| 610 | |
| 611 | PRIVATE SUB ZWaveSetIds(sParams AS Variant[]) |
| 612 | |
| 613 | IF sParams.Count = 2 THEN |
| 614 | TRY Main.hZWave.OZW_SetIds(sParams[0], sParams[1]) |
| 615 | IF ERROR THEN |
| 616 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when setting zwave ids!"))
|
| 617 | hXMLRPC.SetReply(FALSE) |
| 618 | ELSE |
| 619 | hXMLRPC.SetReply(TRUE) |
| 620 | END IF |
| 621 | ELSE |
| 622 | hXMLRPC.SetReply(FALSE) |
| 623 | END IF |
| 624 | |
| 625 | END |
| 626 | |
| 627 | PRIVATE SUB ZWaveBasicReport(sParams AS Variant[]) |
| 628 | |
| 629 | IF sParams.Count = 3 THEN |
| 630 | TRY Main.hZWave.OZW_BasicReport(sParams[0], sParams[1], sParams[2]) |
| 631 | IF ERROR THEN |
| 632 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when handling zwave basic report!"))
|
| 633 | hXMLRPC.SetReply(FALSE) |
| 634 | ELSE |
| 635 | hXMLRPC.SetReply(TRUE) |
| 636 | END IF |
| 637 | ELSE |
| 638 | hXMLRPC.SetReply(FALSE) |
| 639 | END IF |
| 640 | |
| 641 | END |
| 642 | |
| 643 | PRIVATE SUB CULSimulate(sParams AS Variant[]) |
| 644 | |
| 645 | IF sParams.Count = 1 THEN |
| 646 | IF Main.hCUL THEN TRY Main.hCUL.Simulate(sParams[0]) |
| 647 | IF ERROR THEN |
| 648 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when injecting CUL packet!"))
|
| 649 | hXMLRPC.SetReply(FALSE) |
| 650 | ELSE |
| 651 | hXMLRPC.SetReply(TRUE) |
| 652 | END IF |
| 653 | ELSE |
| 654 | hXMLRPC.SetReply(FALSE) |
| 655 | END IF |
| 656 | |
| 657 | END |
| 658 | |
| 659 | PRIVATE SUB CULqueuecommand(sParams AS Variant[]) |
| 660 | |
| 661 | IF sParams.Count = 1 THEN |
| 662 | IF Main.hCUL THEN TRY Main.hCUL.QueueCommand(sParams[0]) |
| 663 | IF ERROR THEN |
| 664 | Main.WriteDebugLog(("XMLRPC Error: '" & Error.Text & "' at '" & Error.Where & "' when queueing CUL command!"))
|
| 665 | hXMLRPC.SetReply(FALSE) |
| 666 | ELSE |
| 667 | hXMLRPC.SetReply(TRUE) |
| 668 | END IF |
| 669 | ELSE |
| 670 | hXMLRPC.SetReply(FALSE) |
| 671 | END IF |
| 672 | |
| 673 | END |
| 674 | |
| 675 | PUBLIC SUB hXMLRPC_RemoteCall(sName AS String, sData AS Variant[]) |
| 676 | |
| 677 | DIM vValue AS Variant |
| 678 | DIM aArray AS NEW RpcArray |
| 679 | DIM sParam AS String |
| 680 | DIM iParam AS Integer |
| 681 | |
| 682 | IF bXMLRPCDebug THEN |
| 683 | Main.WriteDebugLog(("[XMLRPC] Got a RemoteCall for method '" & sName & "'"))
|
| 684 | FOR EACH sParam IN sData |
| 685 | Main.WriteDebugLog(("[XMLRPC] Param[" & iParam & "] = '" & sParam & "'"))
|
| 686 | INC iParam |
| 687 | NEXT |
| 688 | ENDIF |
| 689 | |
| 690 | SELECT CASE sName |
| 691 | CASE "system.program_uptime" |
| 692 | hXMLRPC.SetReply(Main.GlobalVar["Program_Uptime"]) |
| 693 | CASE "system.program_version" |
| 694 | hXMLRPC.SetReply(Main.sProgramVersion) |
| 695 | CASE "system.pid" |
| 696 | hXMLRPC.SetReply(Application.Id) |
| 697 | CASE "system.hostname" |
| 698 | hXMLRPC.SetReply(System.Host) |
| 699 | CASE "api.version" |
| 700 | hXMLRPC.SetReply(APIVersion) |
| 701 | CASE "mode.get_housemode" |
| 702 | hXMLRPC.SetReply(Main.GlobalVar["House_Mode"]) |
| 703 | CASE "mode.get_mutemode" |
| 704 | hXMLRPC.SetReply(Main.GlobalVar["Mute"]) |
| 705 | CASE "globalvar.list" |
| 706 | FOR EACH vValue IN Main.GlobalVar |
| 707 | aArray.Add(Main.GlobalVar.Key, XmlRpc.xString) |
| 708 | NEXT |
| 709 | hXMLRPC.SetReply(aArray) |
| 710 | CASE "globalvar.get" |
| 711 | GetGlobalVars() |
| 712 | CASE "set.globalvar" |
| 713 | SetGlobalVar(sData) |
| 714 | CASE "globalvar.save" |
| 715 | SaveGlobalVars() |
| 716 | CASE "data.sunmoon" |
| 717 | aArray.Add(Main.GlobalVar["Sunrise"], XmlRpc.xString) |
| 718 | aArray.Add(Main.GlobalVar["Sunset"], XmlRpc.xString) |
| 719 | hXMLRPC.SetReply(aArray) |
| 720 | CASE "data.newmessages" |
| 721 | aArray.Add(Main.iNewMails, XmlRpc.xString) |
| 722 | aArray.Add(Main.iNewCalls, XmlRpc.xString) |
| 723 | aArray.Add(Main.iNewVoicemails, XmlRpc.xString) |
| 724 | hXMLRPC.SetReply(aArray) |
| 725 | CASE "device.list" |
| 726 | ReturnDeviceList() |
| 727 | CASE "device.listswitch" |
| 728 | ReturnDeviceListDimSwitch("switchable")
|
| 729 | CASE "device.listdim" |
| 730 | ReturnDeviceListDimSwitch("dimable")
|
| 731 | CASE "module.restart" |
| 732 | ModuleRestart(sData) |
| 733 | CASE "send.email" |
| 734 | SendEmail(sData) |
| 735 | CASE "send.tweet" |
| 736 | SendTweet(sData) |
| 737 | CASE "send.sms" |
| 738 | SendSMS(sData) |
| 739 | CASE "set.housemode" |
| 740 | SetHouseMode(sData) |
| 741 | CASE "set.mutemode" |
| 742 | SetMuteMode(sData) |
| 743 | CASE "set.alarmpin" |
| 744 | SetAlarmPin(sData) |
| 745 | CASE "set.alarmmode" |
| 746 | SetAlarmMode(sData) |
| 747 | CASE "device.setdevice" |
| 748 | DeviceSetDevice(sData) |
| 749 | CASE "play.sound" |
| 750 | PlaySound(sData) |
| 751 | CASE "voicetext.speak" |
| 752 | VoiceTextSpeak(sData) |
| 753 | CASE "pachube.list" |
| 754 | hXMLRPC.SetReply(Pachube.CreatePachubeData()) |
| 755 | CASE "rrdtool.listgraphs" |
| 756 | RRDToolListGraphs(sData) |
| 757 | CASE "rrdtool.updategraphs" |
| 758 | RRDToolUpdateGraphs(sData) |
| 759 | CASE "rrdtool.createrrds" |
| 760 | RRDToolCreateRRDs(sData) |
| 761 | CASE "display.ledmessage" |
| 762 | DisplayLEDMessage(sData) |
| 763 | CASE "av.setcontrol" |
| 764 | SetAVControl(sData) |
| 765 | CASE "av.getcontrol" |
| 766 | GetAVControl(sData) |
| 767 | CASE "zwave.removenodes" |
| 768 | ZWaveRemoveNodes(sData) |
| 769 | CASE "zwave.createnode" |
| 770 | ZWaveCreateNode(sData) |
| 771 | CASE "zwave.setids" |
| 772 | ZWaveSetIds(sData) |
| 773 | CASE "zwave.basicreport" |
| 774 | ZWaveBasicReport(sData) |
| 775 | CASE "zwave.allqueried" |
| 776 | Main.hZWave.OZW_AllQueried() |
| 777 | hXMLRPC.SetReply(TRUE) |
| 778 | CASE "cmdr.culsimulate" |
| 779 | CULSimulate(sData) |
| 780 | CASE "cmdr.culqueuecommand" |
| 781 | CULqueuecommand(sData) |
| 782 | DEFAULT |
| 783 | RETURN |
| 784 | END SELECT |
| 785 | |
| 786 | END |
| 787 | |
| 788 | PRIVATE FUNCTION HTTPPort_Read() AS Integer |
| 789 | |
| 790 | RETURN iHTTPPort |
| 791 | |
| 792 | END |
| 793 | |
| 794 | PRIVATE SUB HTTPPort_Write(Value AS Integer) |
| 795 | |
| 796 | iHTTPPort = Value |
| 797 | |
| 798 | END |
| 799 | |
| 800 | PRIVATE FUNCTION MaxConn_Read() AS Integer |
| 801 | |
| 802 | RETURN iMaxConn |
| 803 | |
| 804 | END |
| 805 | |
| 806 | PRIVATE SUB MaxConn_Write(Value AS Integer) |
| 807 | |
| 808 | iMaxConn = Value |
| 809 | |
| 810 | END |
| 811 | |
| 812 | PRIVATE FUNCTION XMLRPCDebug_Read() AS Boolean |
| 813 | |
| 814 | RETURN bXMLRPCDebug |
| 815 | |
| 816 | END |
| 817 | |
| 818 | PRIVATE SUB XMLRPCDebug_Write(Value AS Boolean) |
| 819 | |
| 820 | bXMLRPCDebug = Value |
| 821 | |
| 822 | END |
