OpenZWave / node-openzwave-shared

OpenZWave addon for Node.js (all versions) including management and security functions
Other
199 stars 113 forks source link

SendRawData does not take effect for Eurotronic Spirit Z Temperature #358

Open KevinK4711 opened 4 years ago

KevinK4711 commented 4 years ago

Hi,

for some time now I've been playing around with the Eurotronic Spirit Z Thermostat in order to set the measured temperature from an external sensor.

At first parameter 8 of the thermostat has to be set to 0x80 what I did.

After that I tried the following script to change the measured temperature of the device to 12 °C. The expectation was, that the valve opens since the setpoint was set to 19.5°C.

Unfortunately I wasn't able to recognize any success.

var OZW = require('./lib/openzwave-shared.js');
const Buffer = require('buffer').Buffer;

var zwave = new OZW({
    Logging: true,     // enable file logging (OZWLog.txt)
    ConsoleOutput: true // enable console logging
});

zwave.connect('/dev/ttyACM0');

zwave.on('scan complete', function(){
        console.log('Buffer will be written now............................');
        const buffer1 = Buffer.from([
                                         0x31           // COMMAND_CLASS_SENSOR_MULTILEVEL
                                        ,0x05           // SENSOR_MULTILEVEL_REPORT
                                        ,0x01           // Sensor type: TEMPERATURE
                                        ,0x42           // 0010 0010: 001=Decimal  - 00=Celsius - 010=2 Byte
                                        ,0x04,0xB0      // 0AF0 --> 2800 --> 28.00°C.04B0 --> 12°C.
                                        ]);
        console.log('sendRawData will be run now...........................');
        zwave.sendRawData(
                        6                       //nodeID
                        ,'sendTemperature:'     //logText
                        ,49                     //Sensor Multilevel Command Class 0x31
                        ,false                  //sendSecure
                        ,buffer1                //content
                        ,6                      //length bei > 5 ermittelt das Modul automatisch die Length
                        );
        console.log('sendRawData run completed.............................')

        setTimeout(function(){
          console.log('Start to disconnect now............................');
          zwave.disconnect('dev/ttyACM0');
          console.log('ZWAVE disconnect has been run......................')
        }, 15000);
});

The following log was printed related to the SendRawData:

Buffer will be written now............................
sendRawData will be run now...........................
m2019-11-17 12:30:59.880 Detail, Node006, Queuing (Send) sendTemperature: (Node=6): 0x01, 0x0b, 0x31, 0x13, 0x31, 0x05, 0x01, 0x42, 0x04, 0xb0, 0x25, 0x17, 0x27
2019-11-17 12:30:59.881 Detail,
2019-11-17 12:30:59.881 Info, Node006, Sending (Send) message (Callback ID=0x17, Expected Reply=0x13) - sendTemperature: (Node=6): 0x01, 0x0b, 0x31, 0x13, 0x31, 0x05, 0x01, 0x42, 0x04, 0xb0, 0x25, 0x17, 0x27
sendRawData run completed.............................
[39m2019-11-17 12:30:59.882 Info, Node006, Encrypted Flag is 0
2019-11-17 12:31:00.882 Error, Node006, ERROR: Dropping command, expected response not received after 1 attempt(s)
2019-11-17 12:31:00.882 Detail, Node006, Removing current message
2019-11-17 12:31:00.883 Detail, Node006, Notification: Notification - TimeOut

Start to disconnect now............................
m2019-11-17 12:31:14.902 Info, mgr,     Failed to remove driver for controller dev/ttyACM0
2019-11-17 12:31:14.902 Detail, Notification: DriverRemoved
2019-11-17 12:31:14.903 Always, ***************************************************************************
2019-11-17 12:31:14.903 Always, *********************  Cumulative Network Statistics  *********************
2019-11-17 12:31:14.904 Always, *** General
2019-11-17 12:31:14.904 Always, Driver run time: . .  . 0 days, 0 hours, 0 minutes
2019-11-17 12:31:14.905 Always, Frames processed: . . . . . . . . . . . . . . . . . . . . 48
2019-11-17 12:31:14.905 Always, Total messages successfully received: . . . . . . . . . . 48
2019-11-17 12:31:14.906 Always, Total Messages successfully sent: . . . . . . . . . . . . 27
2019-11-17 12:31:14.907 Always, ACKs received from controller:  . . . . . . . . . . . . . 26
2019-11-17 12:31:14.907 Always, *** Errors
2019-11-17 12:31:14.908 Always, Unsolicited messages received while waiting for ACK:  . . 0
2019-11-17 12:31:14.908 Always, Reads aborted due to timeouts:  . . . . . . . . . . . . . 0
2019-11-17 12:31:14.908 Always, Bad checksum errors:  . . . . . . . . . . . . . . . . . . 0
2019-11-17 12:31:14.909 Always, CANs received from controller:  . . . . . . . . . . . . . 0
2019-11-17 12:31:14.909 Always, NAKs received from controller:  . . . . . . . . . . . . . 0
2019-11-17 12:31:14.910 Always, Out of frame data flow errors:  . . . . . . . . . . . . . 0
2019-11-17 12:31:14.910 Always, Messages retransmitted: . . . . . . . . . . . . . . . . . 0
2019-11-17 12:31:14.910 Always, Messages dropped and not delivered: . . . . . . . . . . . 1
2019-11-17 12:31:14.911 Always, ***************************************************************************
2019-11-17 12:31:14.911 Info, Saving Cache
2019-11-17 12:31:14.913 Info, Node001, Cache Save for Node 1 as its QueryStage_CacheLoad
2019-11-17 12:31:14.915 Info, Node002, Skipping Cache Save for Node 2 as its not past QueryStage_CacheLoad
2019-11-17 12:31:14.916 Info, Node005, Skipping Cache Save for Node 5 as its not past QueryStage_CacheLoad
2019-11-17 12:31:14.922 Info, Node006, Cache Save for Node 6 as its QueryStage_CacheLoad
2019-11-17 12:31:14.950 Info, Stopping DNSThread
ZWAVE disconnect has been run......................

Of course I've scanned a lot of different forums(e.g. iobroker, fhem, zwave, various github repos, ...) to gather any information that might help. Related to the output above I've just found, that the termostat won't respond to the command in any case.

Has anybody an idea why the sendRawData function does not work? How can the command be changed to not expect any response from the device?

Fishwaldo commented 4 years ago

If you get timeouts it usually means the device did not accept it (malformed, incorrect, unsupported etc). There is no way for the protocol to indicate this back to the controller, hence it appears as a timeout.