| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import { PlatformConfig } from 'homebridge'
- import { domoticaPlatform } from './platform'
- const request = require("request")
- const http = require('http')
- const url = require('url')
- export class httpServer {
- private address
- private port
- constructor(
- private readonly platform: domoticaPlatform,
- private readonly config: PlatformConfig
- ) {
- this.address = "0.0.0.0"
- this.port = 8080
- }
- serverCallback (request, response) {
- var urlObject = url.parse(request.url, true)
- var urlQuery = urlObject.query
- var body: Uint8Array[] = []
- var log = this.platform.log
- request.on('error', (err) => {
- log.debug("[ERROR Homebridge Domotica HttpServer] Reason: %s.", err)
- }).on('data', (chunk) => {
- body.push(chunk)
- }).on('end', () => {
- var bodyString = Buffer.concat(body).toString()
- response.on('error', function(err) {
- log.debug("[ERROR Homebridge Domotica HttpServer] Reason: %s.", err)
- })
- response.statusCode = 200
- response.setHeader('Content-Type', 'application/json')
- if (!urlQuery.type || !urlQuery.typeId) {
- response.statusCode = 404
- response.setHeader("Content-Type", "text/plain")
- var errorText = "[ERROR Homebridge Domotica HttpServer] Type or TypeId missing in request."
- response.write(errorText)
- response.end()
- } else {
- var type = urlQuery.type
- var typeId = urlQuery.typeId
- if (type != "PowerSocket" && type != "PowerSwitch" && type != "Xiaomi" && type != "Camera" && type != "Activity") {
- log.debug(request.url)
- }
- if (type == "Xiaomi") {
- type = urlQuery.model
- if (type == "TemperatureHumiditySensor") {
- type = "EnvironmentSensor"
- }
- }
- var foundAccessory
- for (const accessory of this.platform.accessories) {
- if (accessory.type == type && accessory.typeId == typeId) {
- foundAccessory = accessory
- break
- }
- }
- if (foundAccessory) {
- for (const key of Object.keys(urlQuery)) {
- if (key != "type" && key != "typeId") {
- foundAccessory.setValue(key, urlQuery[key])
- }
- }
- var responseBody = { "success" : true };
- response.write(JSON.stringify(responseBody))
- response.end()
- } else {
- response.setHeader("Content-Type", "text/plain")
- errorText = "[ERROR Homebridge Domotica HttpServer] " + type + " " + typeId + " not found."
- if (type != "PowerSocket") {
- log.debug(errorText + '(' + request.url + ')')
- }
- response.write(errorText)
- response.end()
- }
- }
- })
- }
- start() {
- http.createServer(this.serverCallback.bind(this)).listen(this.port, this.address)
- }
- }
|