Skip to content

Commit

Permalink
Try wait mode (#42)
Browse files Browse the repository at this point in the history
* Use wait mode for all set operations
* Add output of execution time
* Update version number
  • Loading branch information
Feilner authored Sep 12, 2023
1 parent f2d0069 commit 9eca9b4
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 132 deletions.
7 changes: 4 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Changelog

## [1.1.0-beta.11] 2022-09-29
## [1.1.0-beta.12] 2023-09-12
### Changed
**Action required** Breaking changes!
In order to support configuration by GUI some configuration options needs to be renamed.
Expand Down Expand Up @@ -86,8 +86,9 @@ In order to support configuration by GUI some configuration options needs to be
- `PLC_AirPurifier`
- `PLC_FilterMaintenance`

### Changed
- Use seperate buffer for each set operation
### Fixed
- Data corruption during multiple SET operations e.g. close all blinds
- Synchronous execution of SET oparations

## [1.0.37] 2022-04-23
### Fixed
Expand Down
249 changes: 121 additions & 128 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3189,23 +3189,21 @@ GenericPLCAccessory.prototype = {

//ensure PLC connection
if (this.platform.S7ClientConnect()) {

buf.writeUInt8(1);
S7Client.WriteArea(S7Client.S7AreaDB, db, ((offset*8) + bit), 1, S7Client.S7WLBit, buf, function(err) {
if(err) {
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
log.debug(logprefix , String(value));
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
});
if (!S7Client.WriteArea(S7Client.S7AreaDB, db, ((offset*8) + bit), 1, S7Client.S7WLBit, buf)) {
var err = S7Client.LastError();
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
log.debug(logprefix + " %d ms", String(value), S7Client.ExecTime());
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
}
else {
callback(new Error('PLC not connected'), false);
Expand All @@ -3228,28 +3226,27 @@ GenericPLCAccessory.prototype = {
//ensure PLC connection
if (this.platform.S7ClientConnect()) {
buf.writeInt8(valuePLC ? 1 : 0);
S7Client.WriteArea(S7Client.S7AreaDB, db, ((offset*8) + bit), 1, S7Client.S7WLBit, buf, function(err) {
if(err) {
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
if (!S7Client.WriteArea(S7Client.S7AreaDB, db, ((offset*8) + bit), 1, S7Client.S7WLBit, buf)) {
var err = S7Client.LastError();
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix + " %d ms", String(value) + "->" + String(valuePLC), S7Client.ExecTime());
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix , String(value) + "->" + String(valuePLC));
}
else
{
log.debug(logprefix , String(value));
}
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
else
{
log.debug(logprefix + " %d ms", String(value), S7Client.ExecTime());
}
});
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
}
else {
callback(new Error('PLC not connected'), false);
Expand Down Expand Up @@ -3311,29 +3308,28 @@ GenericPLCAccessory.prototype = {

//ensure PLC connection
if (this.platform.S7ClientConnect()) {
buf.writeFloatBE(valuePLC);
S7Client.WriteArea(S7Client.S7AreaDB, db, offset, 1, S7Client.S7WLReal, buf, function(err) {
if(err) {
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix , String(value) + "->" + String(valuePLC));
}
else
{
log.debug(logprefix , String(value));
}
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
});
buf.writeFloatBE(valuePLC);
if (!S7Client.WriteArea(S7Client.S7AreaDB, db, offset, 1, S7Client.S7WLReal, buf)) {
var err = S7Client.LastError();
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix + " %d ms", String(value) + "->" + String(valuePLC), S7Client.ExecTime());
}
else
{
log.debug(logprefix + " %d ms", String(value), S7Client.ExecTime());
}
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
}
else {
callback(new Error('PLC not connected'));
Expand Down Expand Up @@ -3395,29 +3391,28 @@ GenericPLCAccessory.prototype = {

//ensure PLC connection
if (this.platform.S7ClientConnect()) {
buf.writeUInt8(valuePLC);
S7Client.WriteArea(S7Client.S7AreaDB, db, offset, 1, S7Client.S7WLByte, buf, function(err) {
if(err) {
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix , String(value) + "->" + String(valuePLC));
}
else
{
log.debug(logprefix , String(value));
}
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
});
buf.writeUInt8(valuePLC);
if (!S7Client.WriteArea(S7Client.S7AreaDB, db, offset, 1, S7Client.S7WLByte, buf)) {
var err = S7Client.LastError();
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix , String(value) + "->" + String(valuePLC));
}
else
{
log.debug(logprefix , String(value));
}
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
}
else {
callback(new Error('PLC not connected'));
Expand Down Expand Up @@ -3478,29 +3473,28 @@ GenericPLCAccessory.prototype = {

//ensure PLC connection
if (this.platform.S7ClientConnect()) {
buf.writeInt16BE(valuePLC);
S7Client.WriteArea(S7Client.S7AreaDB, db, offset, 1, S7Client.S7WLWord, buf, function(err) {
if(err) {
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix , String(value) + "->" + String(valuePLC));
}
else
{
log.debug(logprefix , String(value));
}
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
});
buf.writeInt16BE(valuePLC);
if (!S7Client.WriteArea(S7Client.S7AreaDB, db, offset, 1, S7Client.S7WLWord, buf)) {
var err = S7Client.LastError();
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix + " %d ms", String(value) + "->" + String(valuePLC)), S7Client.ExecTime();
}
else
{
log.debug(logprefix + " %d ms", String(value), S7Client.ExecTime());
}
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
}
else {
callback(new Error('PLC not connected'));
Expand Down Expand Up @@ -3564,29 +3558,28 @@ GenericPLCAccessory.prototype = {

//ensure PLC connection
if (this.platform.S7ClientConnect()) {
buf.writeInt32BE(valuePLC);
S7Client.WriteArea(S7Client.S7AreaDB, db, offset, 1, S7Client.S7WLDWord, buf, function(err) {
if(err) {
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix , String(value) + "->" + String(valuePLC));
}
else
{
log.debug(logprefix , String(value));
}
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
});
buf.writeInt32BE(valuePLC);
if (!S7Client.WriteArea(S7Client.S7AreaDB, db, offset, 1, S7Client.S7WLDWord, buf)) {
var err = S7Client.LastError();
log.error(logprefix, "WriteArea failed #" + err.toString(16) + " - " + S7Client.ErrorText(err));
if(err & 0xFFFFF) {S7Client.Disconnect();}
callback(new Error('PLC error'));
}
else {
if (typeof(valueMod) != 'undefined' && valueMod)
{
log.debug(logprefix + " %d ms", String(value) + "->" + String(valuePLC), S7Client.ExecTime());
}
else
{
log.debug(logprefix + " %d ms", String(value), S7Client.ExecTime());
}
callback(null);
if (typeof(inform) != 'undefined' && inform)
{
inform(value);
}
}
}
else {
callback(new Error('PLC not connected'));
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "homebridge-plc",
"version": "1.1.0-beta.11",
"version": "1.1.0-beta.12",
"description": "Homebridge plugin for Siemens Step7 and compatible PLCs. (https://github.com/homebridge)",
"license": "MIT",
"keywords": [
Expand Down

0 comments on commit 9eca9b4

Please sign in to comment.