4 Commits

Author SHA1 Message Date
499f90c080 MySwitch, first test passed 2018-04-28 18:12:05 +02:00
341829efe0 more heating stuff 2018-04-28 17:49:03 +02:00
e1088083de some more window contacts 2018-04-27 22:52:38 +02:00
f4d35b5e04 fix case 2018-04-25 19:09:25 +02:00
10 changed files with 1142 additions and 429 deletions

18
dispatcher.service Executable file
View File

@ -0,0 +1,18 @@
[Unit]
Description=dispatcher_ng
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
GuessMainPID=yes
ExecStart=/usr/bin/npm start -- -c dispatcher_ng.conf
ExecStop=kill -SIGINT $mainpid
Restart=on-failure
WorkingDirectory=/opt/services/dispatcher_ng
[Install]
Alias=dispatcher
WantedBy=multi-user.target

52
dist/MySwitchThing.js vendored Normal file
View File

@ -0,0 +1,52 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const logger = require("./log");
const MqttDispatcher_1 = require("./MqttDispatcher");
const AItem_1 = require("./AItem");
class MySwitchSingleItem {
constructor(actionTopic) {
this.actionTopic = actionTopic;
}
processMessage(topic, payload) {
switch (payload) {
case 'PRESS_SHORT':
MqttDispatcher_1.mqttHandler.send(this.actionTopic, 'SHORT', true);
break;
case 'PRESS_LONG':
case 'PRESS_CONT':
MqttDispatcher_1.mqttHandler.send(this.actionTopic, 'LONG_HOLD', true);
break;
case 'PRESS_LONG_RELEASE':
MqttDispatcher_1.mqttHandler.send(this.actionTopic, 'LONG_END', true);
break;
default:
logger.warn(`HM4BSI: no handling available for ${topic}`);
break;
}
}
}
exports.MySwitchSingleItem = MySwitchSingleItem;
class MySwitchThing extends AItem_1.AItem {
constructor(floor, room, item, itemObjs) {
super(floor, room, item, '');
this.itemObjs = itemObjs;
if (this.itemObjs.length != 3) {
throw new Error('itemObjs for MySwitchThing must have three elements');
}
this.subscribeTopics = [
`${this.topicFirstPart}/#`
];
}
processMessage(topic, payload) {
logger.info(`MyT: ${topic}, ${payload}`);
let buttonIdx = parseInt(topic.substring(this.topicFirstPart.length + 1));
if (buttonIdx >= 1 && buttonIdx <= 3) {
this.itemObjs[buttonIdx - 1].processMessage('', payload);
}
else {
logger.warn(`MyT: no handling available for ${topic}, ${buttonIdx}`);
}
}
}
exports.MySwitchThing = MySwitchThing;
//# sourceMappingURL=MySwitchThing.js.map

View File

@ -60,7 +60,7 @@ class TwoLedSignal extends AItem_1.AItem {
} }
// logger.info(`DBG: TwoLedSignal ${item.getSignalState()}, ${reds}`) // logger.info(`DBG: TwoLedSignal ${item.getSignalState()}, ${reds}`)
}); });
let msg = (reds > 0) ? "RED" : "GREEN"; let msg = (reds > 0) ? "red" : "green";
MqttDispatcher_1.mqttHandler.send(`${this.topicFirstPart}/led1`, msg); MqttDispatcher_1.mqttHandler.send(`${this.topicFirstPart}/led1`, msg);
reds = 0; reds = 0;
this.led2Items.forEach((item) => { this.led2Items.forEach((item) => {
@ -70,7 +70,7 @@ class TwoLedSignal extends AItem_1.AItem {
} }
// logger.info(`DBG: TwoLedSignal ${item.getSignalState()}, ${reds}`) // logger.info(`DBG: TwoLedSignal ${item.getSignalState()}, ${reds}`)
}); });
msg = (reds > 0) ? "RED" : "GREEN"; msg = (reds > 0) ? "red" : "green";
MqttDispatcher_1.mqttHandler.send(`${this.topicFirstPart}/led2`, msg); MqttDispatcher_1.mqttHandler.send(`${this.topicFirstPart}/led2`, msg);
} }
} }

50
dist/main.js vendored
View File

@ -22,6 +22,7 @@ const TouchSwitchMultiButtonThing_1 = require("./TouchSwitchMultiButtonThing");
const RelayBox_1 = require("./RelayBox"); const RelayBox_1 = require("./RelayBox");
const HeatingScene_1 = require("./HeatingScene"); const HeatingScene_1 = require("./HeatingScene");
const TwoLedSignal_1 = require("./TwoLedSignal"); const TwoLedSignal_1 = require("./TwoLedSignal");
const MySwitchThing_1 = require("./MySwitchThing");
logger.info("Dispatcher starting"); logger.info("Dispatcher starting");
let allLabeledItems = new Array(); let allLabeledItems = new Array();
let allThermostatItems = new Array(); let allThermostatItems = new Array();
@ -81,7 +82,7 @@ let matthiasSpeaker = new M433SwitchItem_1.M433SwitchItem('1st', 'Matthias', 'Sp
matthiasSpeaker.start(); matthiasSpeaker.start();
allLabeledItems.push(matthiasSpeaker); allLabeledItems.push(matthiasSpeaker);
allRelevantLights.push(matthiasSpeaker); allRelevantLights.push(matthiasSpeaker);
let windowContactMatthias = new MaxWindowContact_1.MaxWindowContact('1st', 'Matthias', 'WindowContact', 'Fenster', 24); let windowContactMatthias = new MaxWindowContact_1.MaxWindowContact('1st', 'Matthias', 'WindowContact', 'Fenster Matthias', 24);
windowContactMatthias.start(); windowContactMatthias.start();
allLabeledItems.push(windowContactMatthias); allLabeledItems.push(windowContactMatthias);
allWindows.push(windowContactMatthias); allWindows.push(windowContactMatthias);
@ -110,6 +111,19 @@ let diningRoomNaehkaestchenLight = new HueColorBulbItem_1.HueColorBulbItem('Gnd'
diningRoomNaehkaestchenLight.start(); diningRoomNaehkaestchenLight.start();
allLabeledItems.push(diningRoomNaehkaestchenLight); allLabeledItems.push(diningRoomNaehkaestchenLight);
allRelevantLights.push(diningRoomNaehkaestchenLight); allRelevantLights.push(diningRoomNaehkaestchenLight);
let windowContactDiningRoom1 = new MaxWindowContact_1.MaxWindowContact('Gnd', 'DiningRoom', 'WindowContact1', 'Fenster Esszimmer Straße links', 26);
windowContactDiningRoom1.start();
allLabeledItems.push(windowContactDiningRoom1);
allWindows.push(windowContactDiningRoom1);
let windowContactDiningRoom2 = new MaxWindowContact_1.MaxWindowContact('Gnd', 'DiningRoom', 'WindowContact2', 'Fenster Esszimmer Straße rechts', 27);
windowContactDiningRoom2.start();
allLabeledItems.push(windowContactDiningRoom2);
allWindows.push(windowContactDiningRoom2);
let thermostatDiningRoom = new MaxThermostat_1.MaxThermostat('Gnd', 'DiningRoom', 'Thermostat', 'Thermostat Esszimmer', 31, [windowContactDiningRoom1, windowContactDiningRoom2]);
thermostatDiningRoom.start();
thermostatDiningRoom.setPresetTemperature(21.0);
allLabeledItems.push(thermostatDiningRoom);
allThermostatItems.push(thermostatDiningRoom);
// Wohnzimmer ----------------------------------------------------------------------------------------------- // Wohnzimmer -----------------------------------------------------------------------------------------------
// Wohnzimmer grosse Lampe 65557 24 1 65556 24 1 // Wohnzimmer grosse Lampe 65557 24 1 65556 24 1
let livingRoomLargeLight = new M433SwitchItem_1.M433SwitchItem('Gnd', 'LivingRoom', 'LargeLight', 'große Lampe Wohnzimmer', '65557 24 1', '65556 24 1'); let livingRoomLargeLight = new M433SwitchItem_1.M433SwitchItem('Gnd', 'LivingRoom', 'LargeLight', 'große Lampe Wohnzimmer', '65557 24 1', '65556 24 1');
@ -131,6 +145,19 @@ let livingRoomStandLight = new M433SwitchItem_1.M433SwitchItem('Gnd', 'LivingRoo
livingRoomStandLight.start(); livingRoomStandLight.start();
allLabeledItems.push(livingRoomStandLight); allLabeledItems.push(livingRoomStandLight);
allRelevantLights.push(livingRoomStandLight); allRelevantLights.push(livingRoomStandLight);
let windowContactLivingRoom1 = new MaxWindowContact_1.MaxWindowContact('Gnd', 'LivingRoom', 'WindowContact1', 'Fenster Wohnzimmer Garten rechts', 28);
windowContactLivingRoom1.start();
allLabeledItems.push(windowContactLivingRoom1);
allWindows.push(windowContactLivingRoom1);
let windowContactLivingRoom2 = new MaxWindowContact_1.MaxWindowContact('Gnd', 'LivingRoom', 'WindowContact2', 'Fenster Wohnzimmer Garten links', 29);
windowContactLivingRoom2.start();
allLabeledItems.push(windowContactLivingRoom2);
allWindows.push(windowContactLivingRoom2);
let thermostatLivingRoom = new MaxThermostat_1.MaxThermostat('Gnd', 'LivingRoom', 'Thermostat', 'Thermostat Wohnzimmer', 30, [windowContactLivingRoom1, windowContactLivingRoom2]);
thermostatLivingRoom.start();
thermostatLivingRoom.setPresetTemperature(21.0);
allLabeledItems.push(thermostatLivingRoom);
allThermostatItems.push(thermostatLivingRoom);
// Flur ----------------------------------------------------------------------------------------------------- // Flur -----------------------------------------------------------------------------------------------------
// Flur Schreibtisch 83221 24 1 83220 24 1 // Flur Schreibtisch 83221 24 1 83220 24 1
let hallwayDeskLight = new M433SwitchItem_1.M433SwitchItem('Gnd', 'Hallway', 'DeskLight', 'Schreibtischlampe Flur', '83221 24 1', '83220 24 1'); let hallwayDeskLight = new M433SwitchItem_1.M433SwitchItem('Gnd', 'Hallway', 'DeskLight', 'Schreibtischlampe Flur', '83221 24 1', '83220 24 1');
@ -147,6 +174,20 @@ let hallwayWardrobeLight = new M433SwitchItem_1.M433SwitchItem('Gnd', 'Hallway',
hallwayWardrobeLight.start(); hallwayWardrobeLight.start();
allLabeledItems.push(hallwayWardrobeLight); allLabeledItems.push(hallwayWardrobeLight);
allRelevantLights.push(hallwayWardrobeLight); allRelevantLights.push(hallwayWardrobeLight);
let windowContactHallway = new MaxWindowContact_1.MaxWindowContact('Gnd', 'Hallway', 'WindowContact', 'Fenster Flur', 25);
windowContactHallway.start();
allLabeledItems.push(windowContactHallway);
allWindows.push(windowContactHallway);
let thermostatHallway1 = new MaxThermostat_1.MaxThermostat('Gnd', 'Hallway', 'Thermostat1', 'Thermostat Flur vorne', 32, []);
thermostatHallway1.start();
thermostatHallway1.setPresetTemperature(19.0);
allLabeledItems.push(thermostatHallway1);
allThermostatItems.push(thermostatHallway1);
let thermostatHallway2 = new MaxThermostat_1.MaxThermostat('Gnd', 'Hallway', 'Thermostat2', 'Thermostat Flur hinten', 33, []);
thermostatHallway2.start();
thermostatHallway2.setPresetTemperature(5.0);
allLabeledItems.push(thermostatHallway2);
allThermostatItems.push(thermostatHallway2);
// Küche ---------------------------------------------------------------------------------------------------- // Küche ----------------------------------------------------------------------------------------------------
// Küche Fensterbank 66837 24 1 66836 24 1 // Küche Fensterbank 66837 24 1 66836 24 1
let kitchenWindowLight = new M433SwitchItem_1.M433SwitchItem('Gnd', 'Kitchen', 'WindowLight', 'Fensterbanklicht Küche', '66837 24 1', '66836 24 1'); let kitchenWindowLight = new M433SwitchItem_1.M433SwitchItem('Gnd', 'Kitchen', 'WindowLight', 'Fensterbanklicht Küche', '66837 24 1', '66836 24 1');
@ -182,6 +223,13 @@ let bedRoomWindowLight = new M433SwitchItem_1.M433SwitchItem('1st', 'BedRoom', '
bedRoomWindowLight.start(); bedRoomWindowLight.start();
allLabeledItems.push(bedRoomWindowLight); allLabeledItems.push(bedRoomWindowLight);
allRelevantLights.push(bedRoomWindowLight); allRelevantLights.push(bedRoomWindowLight);
// MySwitchTHing
let mySwitchThingWolfgang = new MySwitchThing_1.MySwitchThing('1st', 'BedRoom', 'WolfgangsSwitch', [
new MySwitchThing_1.MySwitchSingleItem(bedRoomWolfgangBedLightDimmerAdaptor.getInTopic()),
new MySwitchThing_1.MySwitchSingleItem('IoT/InsLeere/1'),
new MySwitchThing_1.MySwitchSingleItem('IoT/InsLeere/2'),
]);
mySwitchThingWolfgang.start();
let windowContactBedroomStreet1st = new MaxWindowContact_1.MaxWindowContact('1st', 'Bedroom', 'WindowContactStreet', 'Fenster Schlafzimmer Strasse', 17); let windowContactBedroomStreet1st = new MaxWindowContact_1.MaxWindowContact('1st', 'Bedroom', 'WindowContactStreet', 'Fenster Schlafzimmer Strasse', 17);
windowContactBedroomStreet1st.start(); windowContactBedroomStreet1st.start();
allLabeledItems.push(windowContactBedroomStreet1st); allLabeledItems.push(windowContactBedroomStreet1st);

View File

@ -105,7 +105,7 @@
}, },
"1st_Matthias_WindowContact": { "1st_Matthias_WindowContact": {
"id": "1st_Matthias_WindowContact", "id": "1st_Matthias_WindowContact",
"name": "Fenster", "name": "Fenster Matthias",
"service": "ContactSensor", "service": "ContactSensor",
"topic": { "topic": {
"statusContactSensorState": "dispatcher_ng/items/1st/Matthias/WindowContact/state/feedback" "statusContactSensorState": "dispatcher_ng/items/1st/Matthias/WindowContact/state/feedback"
@ -165,6 +165,23 @@
}, },
"config": {} "config": {}
}, },
"Gnd_DiningRoom_ShelfLight": {
"id": "Gnd_DiningRoom_ShelfLight",
"name": "Regallicht Esszimmer",
"service": "Lightbulb",
"topic": {
"setOn": "dispatcher_ng/items/Gnd/DiningRoom/ShelfLight/state",
"statusOn": "dispatcher_ng/items/Gnd/DiningRoom/ShelfLight/state/feedback"
},
"payload": {
"onTrue": "ON",
"onFalse": "OFF",
"brightnessFactor": "",
"hueFactor": "",
"saturationFactor": ""
},
"config": {}
},
"Gnd_DiningRoom_NaehkaestchenLight": { "Gnd_DiningRoom_NaehkaestchenLight": {
"id": "Gnd_DiningRoom_NaehkaestchenLight", "id": "Gnd_DiningRoom_NaehkaestchenLight",
"name": "Lampe Naehkaestchen", "name": "Lampe Naehkaestchen",
@ -191,6 +208,39 @@
"saturationFactor": 1 "saturationFactor": 1
} }
}, },
"Gnd_DiningRoom_WindowContact1": {
"id": "Gnd_DiningRoom_WindowContact1",
"name": "Fenster Esszimmer Straße links",
"service": "ContactSensor",
"topic": {
"statusContactSensorState": "dispatcher_ng/items/Gnd/DiningRoom/WindowContact1/state/feedback"
},
"payload": {
"onContactDetected": "CLOSED"
}
},
"Gnd_DiningRoom_WindowContact2": {
"id": "Gnd_DiningRoom_WindowContact2",
"name": "Fenster Esszimmer Straße rechts",
"service": "ContactSensor",
"topic": {
"statusContactSensorState": "dispatcher_ng/items/Gnd/DiningRoom/WindowContact2/state/feedback"
},
"payload": {
"onContactDetected": "CLOSED"
}
},
"Gnd_DiningRoom_Thermostat": {
"id": "Gnd_DiningRoom_Thermostat",
"name": "Thermostat Esszimmer",
"service": "Thermostat",
"topic": {
"setTargetTemperature": "dispatcher_ng/items/Gnd/DiningRoom/Thermostat/temperature",
"statusTargetTemperature": "dispatcher_ng/items/Gnd/DiningRoom/Thermostat/temperature/feedback",
"statusCurrentTemperature": "dispatcher_ng/items/Gnd/DiningRoom/Thermostat/temperature/feedback"
},
"payload": {}
},
"Gnd_LivingRoom_LargeLight": { "Gnd_LivingRoom_LargeLight": {
"id": "Gnd_LivingRoom_LargeLight", "id": "Gnd_LivingRoom_LargeLight",
"name": "große Lampe Wohnzimmer", "name": "große Lampe Wohnzimmer",
@ -259,6 +309,39 @@
}, },
"config": {} "config": {}
}, },
"Gnd_LivingRoom_WindowContact1": {
"id": "Gnd_LivingRoom_WindowContact1",
"name": "Fenster Wohnzimmer Garten rechts",
"service": "ContactSensor",
"topic": {
"statusContactSensorState": "dispatcher_ng/items/Gnd/LivingRoom/WindowContact1/state/feedback"
},
"payload": {
"onContactDetected": "CLOSED"
}
},
"Gnd_LivingRoom_WindowContact2": {
"id": "Gnd_LivingRoom_WindowContact2",
"name": "Fenster Wohnzimmer Garten links",
"service": "ContactSensor",
"topic": {
"statusContactSensorState": "dispatcher_ng/items/Gnd/LivingRoom/WindowContact2/state/feedback"
},
"payload": {
"onContactDetected": "CLOSED"
}
},
"Gnd_LivingRoom_Thermostat": {
"id": "Gnd_LivingRoom_Thermostat",
"name": "Thermostat Wohnzimmer",
"service": "Thermostat",
"topic": {
"setTargetTemperature": "dispatcher_ng/items/Gnd/LivingRoom/Thermostat/temperature",
"statusTargetTemperature": "dispatcher_ng/items/Gnd/LivingRoom/Thermostat/temperature/feedback",
"statusCurrentTemperature": "dispatcher_ng/items/Gnd/LivingRoom/Thermostat/temperature/feedback"
},
"payload": {}
},
"Gnd_Hallway_DeskLight": { "Gnd_Hallway_DeskLight": {
"id": "Gnd_Hallway_DeskLight", "id": "Gnd_Hallway_DeskLight",
"name": "Schreibtischlampe Flur", "name": "Schreibtischlampe Flur",
@ -310,6 +393,39 @@
}, },
"config": {} "config": {}
}, },
"Gnd_Hallway_WindowContact": {
"id": "Gnd_Hallway_WindowContact",
"name": "Fenster Flur",
"service": "ContactSensor",
"topic": {
"statusContactSensorState": "dispatcher_ng/items/Gnd/Hallway/WindowContact/state/feedback"
},
"payload": {
"onContactDetected": "CLOSED"
}
},
"Gnd_Hallway_Thermostat1": {
"id": "Gnd_Hallway_Thermostat1",
"name": "Thermostat Flur vorne",
"service": "Thermostat",
"topic": {
"setTargetTemperature": "dispatcher_ng/items/Gnd/Hallway/Thermostat1/temperature",
"statusTargetTemperature": "dispatcher_ng/items/Gnd/Hallway/Thermostat1/temperature/feedback",
"statusCurrentTemperature": "dispatcher_ng/items/Gnd/Hallway/Thermostat1/temperature/feedback"
},
"payload": {}
},
"Gnd_Hallway_Thermostat2": {
"id": "Gnd_Hallway_Thermostat2",
"name": "Thermostat Flur hinten",
"service": "Thermostat",
"topic": {
"setTargetTemperature": "dispatcher_ng/items/Gnd/Hallway/Thermostat2/temperature",
"statusTargetTemperature": "dispatcher_ng/items/Gnd/Hallway/Thermostat2/temperature/feedback",
"statusCurrentTemperature": "dispatcher_ng/items/Gnd/Hallway/Thermostat2/temperature/feedback"
},
"payload": {}
},
"Gnd_Kitchen_WindowLight": { "Gnd_Kitchen_WindowLight": {
"id": "Gnd_Kitchen_WindowLight", "id": "Gnd_Kitchen_WindowLight",
"name": "Fensterbanklicht Küche", "name": "Fensterbanklicht Küche",

1197
log

File diff suppressed because one or more lines are too long

View File

@ -6,18 +6,32 @@ Number Preset_1st_Anna_Thermostat "Preset_Thermostat Anna [%.1f °C]" {mqtt=">[l
Switch 1st_Matthias_StandLight "Stehlampen Matthias"{mqtt=">[localbroker:dispatcher_ng/items/1st/Matthias/StandLight/state:command:*:default],<[localbroker:dispatcher_ng/items/1st/Matthias/StandLight/state/feedback:state:default]"} Switch 1st_Matthias_StandLight "Stehlampen Matthias"{mqtt=">[localbroker:dispatcher_ng/items/1st/Matthias/StandLight/state:command:*:default],<[localbroker:dispatcher_ng/items/1st/Matthias/StandLight/state/feedback:state:default]"}
Switch 1st_Matthias_BedLight "Bettlicht Matthias"{mqtt=">[localbroker:dispatcher_ng/items/1st/Matthias/BedLight/state:command:*:default],<[localbroker:dispatcher_ng/items/1st/Matthias/BedLight/state/feedback:state:default]"} Switch 1st_Matthias_BedLight "Bettlicht Matthias"{mqtt=">[localbroker:dispatcher_ng/items/1st/Matthias/BedLight/state:command:*:default],<[localbroker:dispatcher_ng/items/1st/Matthias/BedLight/state/feedback:state:default]"}
Switch 1st_Matthias_Speaker "Lautsprecher Matthias"{mqtt=">[localbroker:dispatcher_ng/items/1st/Matthias/Speaker/state:command:*:default],<[localbroker:dispatcher_ng/items/1st/Matthias/Speaker/state/feedback:state:default]"} Switch 1st_Matthias_Speaker "Lautsprecher Matthias"{mqtt=">[localbroker:dispatcher_ng/items/1st/Matthias/Speaker/state:command:*:default],<[localbroker:dispatcher_ng/items/1st/Matthias/Speaker/state/feedback:state:default]"}
Contact 1st_Matthias_WindowContact "Fenster" {mqtt="<[localbroker:dispatcher_ng/items/1st/Matthias/WindowContact/state/feedback:state:default]"} Contact 1st_Matthias_WindowContact "Fenster Matthias" {mqtt="<[localbroker:dispatcher_ng/items/1st/Matthias/WindowContact/state/feedback:state:default]"}
Switch Gnd_DiningRoom_SmallLight "kleine Lampe Esszimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/DiningRoom/SmallLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/SmallLight/state/feedback:state:default]"} Switch Gnd_DiningRoom_SmallLight "kleine Lampe Esszimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/DiningRoom/SmallLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/SmallLight/state/feedback:state:default]"}
Switch Gnd_DiningRoom_StandLight "Stehlampe Esszimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/DiningRoom/StandLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/StandLight/state/feedback:state:default]"} Switch Gnd_DiningRoom_StandLight "Stehlampe Esszimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/DiningRoom/StandLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/StandLight/state/feedback:state:default]"}
Switch Gnd_DiningRoom_CupboardLight "Schranklicht Esszimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/DiningRoom/CupboardLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/CupboardLight/state/feedback:state:default]"} Switch Gnd_DiningRoom_CupboardLight "Schranklicht Esszimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/DiningRoom/CupboardLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/CupboardLight/state/feedback:state:default]"}
Switch Gnd_DiningRoom_ShelfLight "Regallicht Esszimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/DiningRoom/ShelfLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/ShelfLight/state/feedback:state:default]"}
Contact Gnd_DiningRoom_WindowContact1 "Fenster Esszimmer Straße links" {mqtt="<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/WindowContact1/state/feedback:state:default]"}
Contact Gnd_DiningRoom_WindowContact2 "Fenster Esszimmer Straße rechts" {mqtt="<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/WindowContact2/state/feedback:state:default]"}
Number Gnd_DiningRoom_Thermostat "Thermostat Esszimmer [%.1f °C]" {mqtt=">[localbroker:dispatcher_ng/items/Gnd/DiningRoom/Thermostat/temperature:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/Thermostat/temperature/feedback:state:default]"}
Number Preset_Gnd_DiningRoom_Thermostat "Preset_Thermostat Esszimmer [%.1f °C]" {mqtt=">[localbroker:dispatcher_ng/items/Gnd/DiningRoom/Thermostat/presetTemperature:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/DiningRoom/Thermostat/presetTemperature/feedback:state:default]"}
Switch Gnd_LivingRoom_LargeLight "große Lampe Wohnzimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/LargeLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/LargeLight/state/feedback:state:default]"} Switch Gnd_LivingRoom_LargeLight "große Lampe Wohnzimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/LargeLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/LargeLight/state/feedback:state:default]"}
Switch Gnd_LivingRoom_SmallLight "kleine Lampe Wohnzimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/SmallLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/SmallLight/state/feedback:state:default]"} Switch Gnd_LivingRoom_SmallLight "kleine Lampe Wohnzimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/SmallLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/SmallLight/state/feedback:state:default]"}
Switch Gnd_LivingRoom_Stars "Sterne Wohnzimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/Stars/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/Stars/state/feedback:state:default]"} Switch Gnd_LivingRoom_Stars "Sterne Wohnzimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/Stars/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/Stars/state/feedback:state:default]"}
Switch Gnd_LivingRoom_StandLight "Stehlampe Wohnzimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/StandLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/StandLight/state/feedback:state:default]"} Switch Gnd_LivingRoom_StandLight "Stehlampe Wohnzimmer"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/StandLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/StandLight/state/feedback:state:default]"}
Contact Gnd_LivingRoom_WindowContact1 "Fenster Wohnzimmer Garten rechts" {mqtt="<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/WindowContact1/state/feedback:state:default]"}
Contact Gnd_LivingRoom_WindowContact2 "Fenster Wohnzimmer Garten links" {mqtt="<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/WindowContact2/state/feedback:state:default]"}
Number Gnd_LivingRoom_Thermostat "Thermostat Wohnzimmer [%.1f °C]" {mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/Thermostat/temperature:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/Thermostat/temperature/feedback:state:default]"}
Number Preset_Gnd_LivingRoom_Thermostat "Preset_Thermostat Wohnzimmer [%.1f °C]" {mqtt=">[localbroker:dispatcher_ng/items/Gnd/LivingRoom/Thermostat/presetTemperature:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/LivingRoom/Thermostat/presetTemperature/feedback:state:default]"}
Switch Gnd_Hallway_DeskLight "Schreibtischlampe Flur"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/DeskLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/DeskLight/state/feedback:state:default]"} Switch Gnd_Hallway_DeskLight "Schreibtischlampe Flur"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/DeskLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/DeskLight/state/feedback:state:default]"}
Switch Gnd_Hallway_StandLight "Stehlampe Flur"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/StandLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/StandLight/state/feedback:state:default]"} Switch Gnd_Hallway_StandLight "Stehlampe Flur"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/StandLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/StandLight/state/feedback:state:default]"}
Switch Gnd_Hallway_WardrobeLight "Schranklicht Flur"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/WardrobeLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/WardrobeLight/state/feedback:state:default]"} Switch Gnd_Hallway_WardrobeLight "Schranklicht Flur"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/WardrobeLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/WardrobeLight/state/feedback:state:default]"}
Contact Gnd_Hallway_WindowContact "Fenster Flur" {mqtt="<[localbroker:dispatcher_ng/items/Gnd/Hallway/WindowContact/state/feedback:state:default]"}
Number Gnd_Hallway_Thermostat1 "Thermostat Flur vorne [%.1f °C]" {mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/Thermostat1/temperature:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/Thermostat1/temperature/feedback:state:default]"}
Number Preset_Gnd_Hallway_Thermostat1 "Preset_Thermostat Flur vorne [%.1f °C]" {mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/Thermostat1/presetTemperature:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/Thermostat1/presetTemperature/feedback:state:default]"}
Number Gnd_Hallway_Thermostat2 "Thermostat Flur hinten [%.1f °C]" {mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/Thermostat2/temperature:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/Thermostat2/temperature/feedback:state:default]"}
Number Preset_Gnd_Hallway_Thermostat2 "Preset_Thermostat Flur hinten [%.1f °C]" {mqtt=">[localbroker:dispatcher_ng/items/Gnd/Hallway/Thermostat2/presetTemperature:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Hallway/Thermostat2/presetTemperature/feedback:state:default]"}
Switch Gnd_Kitchen_WindowLight "Fensterbanklicht Küche"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Kitchen/WindowLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Kitchen/WindowLight/state/feedback:state:default]"} Switch Gnd_Kitchen_WindowLight "Fensterbanklicht Küche"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Kitchen/WindowLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Kitchen/WindowLight/state/feedback:state:default]"}
Switch Gnd_Kitchen_CeilingLight "Deckenlampe Küche"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Kitchen/CeilingLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Kitchen/CeilingLight/state/feedback:state:default]"} Switch Gnd_Kitchen_CeilingLight "Deckenlampe Küche"{mqtt=">[localbroker:dispatcher_ng/items/Gnd/Kitchen/CeilingLight/state:command:*:default],<[localbroker:dispatcher_ng/items/Gnd/Kitchen/CeilingLight/state/feedback:state:default]"}
Switch 1st_BedRoom_WolfgangsSide "Wolfgangs Seite Schlafzimmer"{mqtt=">[localbroker:dispatcher_ng/items/1st/BedRoom/WolfgangsSide/state:command:*:default],<[localbroker:dispatcher_ng/items/1st/BedRoom/WolfgangsSide/state/feedback:state:default]"} Switch 1st_BedRoom_WolfgangsSide "Wolfgangs Seite Schlafzimmer"{mqtt=">[localbroker:dispatcher_ng/items/1st/BedRoom/WolfgangsSide/state:command:*:default],<[localbroker:dispatcher_ng/items/1st/BedRoom/WolfgangsSide/state/feedback:state:default]"}

56
src/MySwitchThing.ts Normal file
View File

@ -0,0 +1,56 @@
import * as logger from './log'
import { mqttHandler } from './MqttDispatcher'
import { AItem } from './AItem'
export class MySwitchSingleItem {
private actionTopic: string
constructor(actionTopic: string) {
this.actionTopic = actionTopic
}
processMessage(topic: string, payload: string) {
switch(payload) {
case 'PRESS_SHORT':
mqttHandler.send(this.actionTopic, 'SHORT', true)
break
case 'PRESS_LONG':
case 'PRESS_CONT':
mqttHandler.send(this.actionTopic, 'LONG_HOLD', true)
break
case 'PRESS_LONG_RELEASE':
mqttHandler.send(this.actionTopic, 'LONG_END', true)
break
default:
logger.warn(`HM4BSI: no handling available for ${topic}`)
break
}
}
}
export class MySwitchThing extends AItem {
private itemObjs: MySwitchSingleItem[]
constructor(floor: string, room: string, item: string, itemObjs: MySwitchSingleItem[]) {
super(floor, room, item, '')
this.itemObjs = itemObjs
if (this.itemObjs.length != 3) {
throw new Error('itemObjs for MySwitchThing must have three elements')
}
this.subscribeTopics = [
`${this.topicFirstPart}/#`
]
}
processMessage(topic: string, payload: string) {
logger.info(`MyT: ${topic}, ${payload}`)
let buttonIdx = parseInt(topic.substring(this.topicFirstPart.length+1))
if (buttonIdx >= 1 && buttonIdx <= 3) {
this.itemObjs[buttonIdx-1].processMessage('', payload)
} else {
logger.warn(`MyT: no handling available for ${topic}, ${buttonIdx}`)
}
}
}

View File

@ -73,7 +73,7 @@ export class TwoLedSignal extends AItem {
} }
// logger.info(`DBG: TwoLedSignal ${item.getSignalState()}, ${reds}`) // logger.info(`DBG: TwoLedSignal ${item.getSignalState()}, ${reds}`)
}) })
let msg = (reds > 0) ? "RED" : "GREEN" let msg = (reds > 0) ? "red" : "green"
mqttHandler.send(`${this.topicFirstPart}/led1`, msg) mqttHandler.send(`${this.topicFirstPart}/led1`, msg)
reds = 0 reds = 0
@ -84,7 +84,7 @@ export class TwoLedSignal extends AItem {
} }
// logger.info(`DBG: TwoLedSignal ${item.getSignalState()}, ${reds}`) // logger.info(`DBG: TwoLedSignal ${item.getSignalState()}, ${reds}`)
}) })
msg = (reds > 0) ? "RED" : "GREEN" msg = (reds > 0) ? "red" : "green"
mqttHandler.send(`${this.topicFirstPart}/led2`, msg) mqttHandler.send(`${this.topicFirstPart}/led2`, msg)
} }
} }

View File

@ -24,6 +24,8 @@ import { TouchSwitchMultiButtonThing, TouchSwitchButtonSingleItem } from './Touc
import { RelayBoxThing } from './RelayBox' import { RelayBoxThing } from './RelayBox'
import { HeatingScene } from './HeatingScene' import { HeatingScene } from './HeatingScene'
import { TwoLedSignal } from './TwoLedSignal' import { TwoLedSignal } from './TwoLedSignal'
import { MySwitchThing, MySwitchSingleItem } from './MySwitchThing'
logger.info("Dispatcher starting") logger.info("Dispatcher starting")
@ -100,7 +102,7 @@ matthiasSpeaker.start()
allLabeledItems.push(matthiasSpeaker) allLabeledItems.push(matthiasSpeaker)
allRelevantLights.push(matthiasSpeaker) allRelevantLights.push(matthiasSpeaker)
let windowContactMatthias = new MaxWindowContact('1st', 'Matthias', 'WindowContact', 'Fenster', 24) let windowContactMatthias = new MaxWindowContact('1st', 'Matthias', 'WindowContact', 'Fenster Matthias', 24)
windowContactMatthias.start() windowContactMatthias.start()
allLabeledItems.push(windowContactMatthias) allLabeledItems.push(windowContactMatthias)
allWindows.push(windowContactMatthias) allWindows.push(windowContactMatthias)
@ -137,6 +139,21 @@ diningRoomNaehkaestchenLight.start()
allLabeledItems.push(diningRoomNaehkaestchenLight) allLabeledItems.push(diningRoomNaehkaestchenLight)
allRelevantLights.push(diningRoomNaehkaestchenLight) allRelevantLights.push(diningRoomNaehkaestchenLight)
let windowContactDiningRoom1 = new MaxWindowContact('Gnd', 'DiningRoom', 'WindowContact1', 'Fenster Esszimmer Straße links', 26)
windowContactDiningRoom1.start()
allLabeledItems.push(windowContactDiningRoom1)
allWindows.push(windowContactDiningRoom1)
let windowContactDiningRoom2 = new MaxWindowContact('Gnd', 'DiningRoom', 'WindowContact2', 'Fenster Esszimmer Straße rechts', 27)
windowContactDiningRoom2.start()
allLabeledItems.push(windowContactDiningRoom2)
allWindows.push(windowContactDiningRoom2)
let thermostatDiningRoom = new MaxThermostat('Gnd', 'DiningRoom', 'Thermostat', 'Thermostat Esszimmer', 31, [windowContactDiningRoom1, windowContactDiningRoom2])
thermostatDiningRoom.start()
thermostatDiningRoom.setPresetTemperature(21.0)
allLabeledItems.push(thermostatDiningRoom)
allThermostatItems.push(thermostatDiningRoom)
// Wohnzimmer ----------------------------------------------------------------------------------------------- // Wohnzimmer -----------------------------------------------------------------------------------------------
// Wohnzimmer grosse Lampe 65557 24 1 65556 24 1 // Wohnzimmer grosse Lampe 65557 24 1 65556 24 1
let livingRoomLargeLight = new M433SwitchItem('Gnd', 'LivingRoom', 'LargeLight', 'große Lampe Wohnzimmer', '65557 24 1', '65556 24 1') let livingRoomLargeLight = new M433SwitchItem('Gnd', 'LivingRoom', 'LargeLight', 'große Lampe Wohnzimmer', '65557 24 1', '65556 24 1')
@ -162,6 +179,20 @@ livingRoomStandLight.start()
allLabeledItems.push(livingRoomStandLight) allLabeledItems.push(livingRoomStandLight)
allRelevantLights.push(livingRoomStandLight) allRelevantLights.push(livingRoomStandLight)
let windowContactLivingRoom1 = new MaxWindowContact('Gnd', 'LivingRoom', 'WindowContact1', 'Fenster Wohnzimmer Garten rechts', 28)
windowContactLivingRoom1.start()
allLabeledItems.push(windowContactLivingRoom1)
allWindows.push(windowContactLivingRoom1)
let windowContactLivingRoom2 = new MaxWindowContact('Gnd', 'LivingRoom', 'WindowContact2', 'Fenster Wohnzimmer Garten links', 29)
windowContactLivingRoom2.start()
allLabeledItems.push(windowContactLivingRoom2)
allWindows.push(windowContactLivingRoom2)
let thermostatLivingRoom = new MaxThermostat('Gnd', 'LivingRoom', 'Thermostat', 'Thermostat Wohnzimmer', 30, [windowContactLivingRoom1, windowContactLivingRoom2])
thermostatLivingRoom.start()
thermostatLivingRoom.setPresetTemperature(21.0)
allLabeledItems.push(thermostatLivingRoom)
allThermostatItems.push(thermostatLivingRoom)
// Flur ----------------------------------------------------------------------------------------------------- // Flur -----------------------------------------------------------------------------------------------------
// Flur Schreibtisch 83221 24 1 83220 24 1 // Flur Schreibtisch 83221 24 1 83220 24 1
@ -182,6 +213,22 @@ hallwayWardrobeLight.start()
allLabeledItems.push(hallwayWardrobeLight) allLabeledItems.push(hallwayWardrobeLight)
allRelevantLights.push(hallwayWardrobeLight) allRelevantLights.push(hallwayWardrobeLight)
let windowContactHallway = new MaxWindowContact('Gnd', 'Hallway', 'WindowContact', 'Fenster Flur', 25)
windowContactHallway.start()
allLabeledItems.push(windowContactHallway)
allWindows.push(windowContactHallway)
let thermostatHallway1 = new MaxThermostat('Gnd', 'Hallway', 'Thermostat1', 'Thermostat Flur vorne', 32, [])
thermostatHallway1.start()
thermostatHallway1.setPresetTemperature(19.0)
allLabeledItems.push(thermostatHallway1)
allThermostatItems.push(thermostatHallway1)
let thermostatHallway2 = new MaxThermostat('Gnd', 'Hallway', 'Thermostat2', 'Thermostat Flur hinten', 33, [])
thermostatHallway2.start()
thermostatHallway2.setPresetTemperature(5.0)
allLabeledItems.push(thermostatHallway2)
allThermostatItems.push(thermostatHallway2)
// Küche ---------------------------------------------------------------------------------------------------- // Küche ----------------------------------------------------------------------------------------------------
// Küche Fensterbank 66837 24 1 66836 24 1 // Küche Fensterbank 66837 24 1 66836 24 1
@ -228,6 +275,13 @@ bedRoomWindowLight.start()
allLabeledItems.push(bedRoomWindowLight) allLabeledItems.push(bedRoomWindowLight)
allRelevantLights.push(bedRoomWindowLight) allRelevantLights.push(bedRoomWindowLight)
// MySwitchTHing
let mySwitchThingWolfgang = new MySwitchThing('1st', 'BedRoom', 'WolfgangsSwitch', [
new MySwitchSingleItem(bedRoomWolfgangBedLightDimmerAdaptor.getInTopic()),
new MySwitchSingleItem('IoT/InsLeere/1'),
new MySwitchSingleItem('IoT/InsLeere/2'),
])
mySwitchThingWolfgang.start()
let windowContactBedroomStreet1st = new MaxWindowContact('1st', 'Bedroom', 'WindowContactStreet', 'Fenster Schlafzimmer Strasse', 17) let windowContactBedroomStreet1st = new MaxWindowContact('1st', 'Bedroom', 'WindowContactStreet', 'Fenster Schlafzimmer Strasse', 17)