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") { 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) } }