Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Xiaomi air purifier Pro H #3

Closed
Wildbill-Z opened this issue Jan 15, 2021 · 19 comments
Closed

Add support for Xiaomi air purifier Pro H #3

Wildbill-Z opened this issue Jan 15, 2021 · 19 comments
Assignees
Labels
enhancement New feature or request

Comments

@Wildbill-Z
Copy link

Hi,
I have two 3H which work just fine. Now I bought a air purifier Pro H (larger version, HEPA-Filter) an all I get in iobroker via your script is the info line with all data. Model is zhimi.airpurifier.vb2 . I also get the token, so communication seems fine, just no other data like 'air purifier', 'environment', 'filter' and so on.
Is there a possibility to add this new device? Should I add an issue at https://github.com/maxinminax/node-mihome as your script is using node-mihome and probably the device needs to be added there? I would bet it is more or less the same as zhimi.airpurifier.v7 which is the air purifier Pro (without H)

Greetings, Jürgen

@Pittini Pittini self-assigned this Jan 16, 2021
@Pittini Pittini added the enhancement New feature or request label Jan 16, 2021
@Pittini
Copy link
Owner

Pittini commented Jan 16, 2021

Ok, so lets try the following:

  1. Download and install the newest script Version 0.2.3, i have integrated your device for testing.
  2. Go to the node-mihome folder "/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/devices/"
  3. Open there the file zhimi.airpurifier.v7.js with an text editor, edit line 5 to:
    static model = 'zhimi.airpurifier.vb2';
  4. and edit line 6 to:
    static name = 'Mi Air Purifier Pro H';
  5. Save the file as zhimi.airpurifier.vb2.js
  6. Restart the JS Adapter

Now, the device should work (If its really like the v7). Please report.
`

@Wildbill-Z
Copy link
Author

Hi,
thanks for your fast reply. Did all you mentioned but not the success i hoped. This is the log after starting the script, the two 3H jaust work on:
javascript.0 2021-01-16 15:08:39.236 error (19244) at main (script.js.common.Xiaomi_Devices:494:5) javascript.0 2021-01-16 15:08:39.236 error (19244) at CreateDevices (script.js.common.Xiaomi_Devices:564:36) javascript.0 2021-01-16 15:08:39.236 error (19244) at Object.createDevice [as device] (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/device.js:8:11) javascript.0 2021-01-16 15:08:39.236 error (19244) script.js.common.Xiaomi_Devices: Error: Model zhimi.airpurifier.vb2 is not supported javascript.0 2021-01-16 15:08:39.233 info (19244) script.js.common.Xiaomi_Devices: Now creating device for zhimi.airpurifier.vb2 / 3XXXXXXX6 / 192.168.100.87 / c.....2 / 10000 javascript.0 2021-01-16 15:08:39.231 info (19244) script.js.common.Xiaomi_Devices: Init Device# 0 - device="zhimi.airpurifier.mb3" javascript.0 2021-01-16 15:08:38.438 info (19244) script.js.common.Xiaomi_Devices: Created device {"_events":{},"_eventsCount":0,"_maxListeners":100,"id":"2XXXXXXX2","address":"192.168.100.249","token":"e.....2","prot javascript.0 2021-01-16 15:08:38.437 info (19244) script.js.common.Xiaomi_Devices: Now creating device for zhimi.airpurifier.mb3 / 2XXXXXXX2 / 192.168.100.249 / e.....2 / 10000 javascript.0 2021-01-16 15:08:38.004 info (19244) script.js.common.Xiaomi_Devices: Device Luftreiniger Hobbyraum is supported, creating DataPoints javascript.0 2021-01-16 15:08:38.004 info (19244) script.js.common.Xiaomi_Devices: Device Luftreiniger Wohnzimmer is supported, creating DataPoints javascript.0 2021-01-16 15:08:38.004 info (19244) script.js.common.Xiaomi_Devices: Device Luftreiniger Schlafzimmer is supported, creating DataPoints javascript.0 2021-01-16 15:08:38.004 info (19244) script.js.common.Xiaomi_Devices: Now searching for supported Devices...

In iobroker objects I got some datapoint below the device but without any data. And not the structure as the 3H have.
Anything else I could test?
Beside of iobroker I have FHEM working. There it is also possible to connect to Xiaomi-devices. There the adapter has two options "Airpurifier" or "Airpurifer 3H". By using "Airpurifer 3H" I get all data from the Pro H and it is all working, so I think, ther is no huge difference between 3H and Pro H and all commands are the same. So I have the Pro H working in iobroker via FHEM adapter, but it would be nice if it is working without FHEM.

Greetings, Jürgen

@Pittini
Copy link
Owner

Pittini commented Jan 16, 2021

script.js.common.Xiaomi_Devices: Error: Model zhimi.airpurifier.vb2 is not supported
That says node-mihome hasnt recognized the new file. Please control if it really exists and has the right name zhimi.airpurifier.vb2.js and inside control spelling in line 5. If everything is fine, try to reboot the complete system and report again.

@Wildbill-Z
Copy link
Author

Sorry, that was my fault. Ididn't save it with the new filename. 👎
Now I've done it and there are no more errors in logfile. I stopped the script, deleted all datapoints and started. For all 3 air purifiers I get the same messages that it were created and there are triggers set, the two 3H show the correct datapoints with valid data, all I get for the Pro H is this without data at all:
Bildschirmfoto vom 2021-01-16 16-35-12
Seems there is another problem or the Pro H uses some different protocol. But, as I said, in FHEM I get the correct data by using 3H as device type.

Greetings, Jürgen

@Pittini
Copy link
Owner

Pittini commented Jan 16, 2021

You wrote in your first post: I would bet it is more or less the same as zhimi.airpurifier.v7 which is the air purifier Pro (without H)
now, you say its like the 3H, these use different protocols (miio/miot). I have changed the script now according this, please download again, there's no new versionnumber. Then, again, you have to modify the file zhimi.airpurifier.vb2 with a complete new content. Dont forgot to save and restart the js adapter. Then pls report.
Replace all with this:

const Device = require('../device-miio');

module.exports = class extends Device {

  static model = 'zhimi.airpurifier.vb2';
  static name = 'Mi Air Purifier Pro H';
  static image = 'http://static.home.mi.com/app/image/get/file/developer_1543307568u9wu6wij.png';

  constructor(opts) {
    super(opts);

    this._miotSpecType = 'urn:miot-spec-v2:device:air-purifier:0000A007:zhimi-vb2:1';
    this._propertiesToMonitor = [
      'air-purifier:fault',
      'air-purifier:on',
      'air-purifier:fan-level',
      'air-purifier:mode',
      'environment:pm2.5-density',
      'environment:relative-humidity',
      'environment:temperature',
      'filter:filter-life-level',
      'filter:filter-used-time',
      'alarm:alarm',
      'indicator-light:brightness',
      'indicator-light:on',
      'physical-controls-locked:physical-controls-locked'];
  }

  getFilterlife() {
    return this.properties['filter:filter-life-level'];
  }

  getFilterused() {
    return this.properties['filter:filter-used-time'];
  }

  getPower() {
    return this.properties['air-purifier:on'];
  }

  getMode() {
    const mode = this.properties['air-purifier:mode'];
    if (mode === 0) return 'auto';
    if (mode === 1) return 'sleep';
    if (mode === 2) return 'favorite';
    if (mode === 3) return 'none';
    return undefined;
  }

  getFanLevel() { // 1 - 3
    return this.properties['air-purifier:fan-level'];
  }

  getTemperature() {
    return this.properties['environment:temperature'];
  }

  getHumidity() {
    return this.properties['environment:relative-humidity'];
  }

  // eslint-disable-next-line camelcase
  getPM2_5() {
    return this.properties['environment:pm2.5-density'];
  }

  getFilterRemaining() {
    const filterTotal = this.properties['filter:filter-life-level'];
    const filterUsed = this.properties['filter:filter-used-time'];
    if (filterTotal > 0 && filterUsed >= 0) {
      //return Math.max((1 - filterUsed / filterTotal) * 100, 0);
      return Math.max(filterUsed / (100 - filterTotal) * filterTotal/24, 0);
    }
    return undefined;
  }

  getBuzzer() {
    return this.properties['alarm:alarm'];
  }

  getLcdBrightness() {
    return this.properties['indicator-light:brightness'];
  }

  setPower(v) {
    return this.miotSetProperty('air-purifier:on', v);
  }

  setMode(v) {
    if (v === 'auto') v = 0;
    else if (v === 'sleep') v = 1;
    else if (v === 'favorite') v = 2;
    else if (v === 'none') v = 3;
    return this.miotSetProperty('air-purifier:mode', v);
  }

  setFanLevel(v) { // 1-3
    return this.miotSetProperty('air-purifier:fan-level', v);
  }

  setBuzzer(v) {
    return this.miotSetProperty('alarm:alarm', v);
  }

  setLcdBrightness(v) { // 0-brightest, 1-glimmer, 2-led_closed
    return this.miotSetProperty('indicator-light:brightness', v);
  }

  setChildLock(v) {
    return this.miotSetProperty('physical-controls-locked:physical-controls-locked', v);
  }

};

@Wildbill-Z
Copy link
Author

Sorry for the wrong pointing to the airpurifier pro. That was before I tested it with FHEM and found it working as air purifier 3H.
But it was all worth it. Changed the script to newest version, edited zhimi.airpurifier.vb2.js with the content above, restarted JS-Adapter and now all is working just fine. I get all the data and I can control it from iobroker. Perfect. 👍
One little problem. For all my airpurifers (the Pro H and the 3H) I have datapoints filter/filter-remaining and filter/filter-used-time which all show "null d" or "null h". Should I worry about this or are they calculated after some time? I could not say if there where correct values before I started with new script and restarting whole JS-Adapter and deleting all datapoints before.

But it's cosmetic, the script is just working perfect. Many thanks 👍 👍 👍

Greetings, Jürgen

@Wildbill-Z
Copy link
Author

Just saw, thar I get some error messages every now and the, so I#ll reopen the issue:

`

javascript.0 2021-01-16 17:39:06.391 error (27601) script.js.common.Xiaomi_Devices: setForeignState: undefined is not a valid state value
javascript.0 2021-01-16 17:38:56.666 error (27601) script.js.common.Xiaomi_Devices: setForeignState: undefined is not a valid state value
javascript.0 2021-01-16 17:34:16.282 error (27601) script.js.common.Xiaomi_Devices: setForeignState: undefined is not a valid state value
javascript.0 2021-01-16 17:34:15.143 info (27601) script.js.common.Xiaomi_Devices: {}
javascript.0 2021-01-16 17:34:15.142 info (27601) script.js.common.Xiaomi_Devices: Keyvalue=0 key=2
javascript.0 2021-01-16 17:34:08.682 error (27601) script.js.common.Xiaomi_Devices: setForeignState: undefined is not a valid state value
javascript.0 2021-01-16 17:34:07.378 info (27601) script.js.common.Xiaomi_Devices: {}
javascript.0 2021-01-16 17:34:07.377 info (27601) script.js.common.Xiaomi_Devices: Keyvalue=2 key=2
`
Is it a problem which belongs to the Pro H?

Greetings, Jürgen

@Wildbill-Z Wildbill-Z reopened this Jan 16, 2021
@Pittini
Copy link
Owner

Pittini commented Jan 16, 2021

I thought i've captured this, its quasi normal, sometimes node-mihome or the cloud sends a empty datapacket, this causes the error. I'll fix it until tomorrow i think. Look for a new Versionnumber.

@Wildbill-Z
Copy link
Author

Wildbill-Z commented Jan 16, 2021

Thanks. I'll then close this issue here as it seems it has nothing to do with the errors as they come from node-mihome.

Greetings, Jürgen

@Wildbill-Z
Copy link
Author

Hi,

I updated to 0.2.4 as you requested yesterday. All datapoint (including filter-used-time, filter-remaining is completely gone) now seem to have valid data except alarm/alarm at the new Pro H. The 3H show 'false', the Pro H just an empty field.
I also still get the errors with setForeignState. Maybe there is any context?

`

javascript.0 2021-01-17 11:45:00.452 error (27601) script.js.common.Xiaomi_Devices: setForeignState: undefined is not a valid state value
javascript.0 2021-01-17 11:44:40.292 error (27601) script.js.common.Xiaomi_Devices: setForeignState: undefined is not a valid state value
javascript.0 2021-01-17 11:44:09.792 error (27601) script.js.common.Xiaomi_Devices: setForeignState: undefined is not a valid state value

`
What about a Donate-button? I wrote a PM in iobroker-forum but no answer until now. I would like to send some virtual beer to say thanks. 👍

Greetings, Jürgen

@Wildbill-Z Wildbill-Z reopened this Jan 17, 2021
@Pittini
Copy link
Owner

Pittini commented Jan 17, 2021

I've answered you at the forum 2hour ago. Please enable logging in the skript, and send me a complete startlog inkl. first refresh after 10seks.

@Wildbill-Z
Copy link
Author

I stopped the script, enabled logging and then started. This is the log:
javascript.0 2021-01-17 13:44:10.964 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Purifier 3H javascript.0 2021-01-17 13:44:10.964 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':1,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':39 javascript.0 2021-01-17 13:44:07.417 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Purifier 3H javascript.0 2021-01-17 13:44:07.417 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':1,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':39 javascript.0 2021-01-17 13:43:50.833 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Purifier 3H javascript.0 2021-01-17 13:43:50.833 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':1,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':40 javascript.0 2021-01-17 13:43:47.268 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Purifier 3H javascript.0 2021-01-17 13:43:47.268 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':1,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':40 javascript.0 2021-01-17 13:42:50.463 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Purifier 3H javascript.0 2021-01-17 13:42:50.463 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':1,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':39 javascript.0 2021-01-17 13:42:47.604 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Purifier 3H javascript.0 2021-01-17 13:42:47.604 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':1,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':39 javascript.0 2021-01-17 13:42:40.563 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Purifier 3H javascript.0 2021-01-17 13:42:40.563 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':1,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':40 javascript.0 2021-01-17 13:42:39.923 error (1921) script.js.common.Xiaomi_Devices: setForeignState: undefined is not a valid state value javascript.0 2021-01-17 13:42:39.922 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Mi Air Purifier ProH javascript.0 2021-01-17 13:42:39.922 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':0,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':37 javascript.0 2021-01-17 13:42:39.503 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Purifier 3H javascript.0 2021-01-17 13:42:39.503 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':1,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':39 javascript.0 2021-01-17 13:42:30.015 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....0.physical-controls-locked.physical-controls-locked / read=true write=true javascript.0 2021-01-17 13:42:30.015 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for filter.filter-used-time because its readonly. javascript.0 2021-01-17 13:42:30.015 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for filter.filter-life-level because its readonly. javascript.0 2021-01-17 13:42:30.015 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for environment.pm2_5-density because its readonly. javascript.0 2021-01-17 13:42:30.015 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for environment.relative-humidity because its readonly. javascript.0 2021-01-17 13:42:30.015 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for environment.temperature because its readonly. javascript.0 2021-01-17 13:42:30.015 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....0.indicator-light.on / read=true write=true javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....0.indicator-light.brightness / read=true write=true javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....0.alarm.alarm / read=true write=true javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....0.air-purifier.fan-level / read=true write=true javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....0.air-purifier.mode / read=true write=true javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for air-purifier.fault because its readonly. javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....0.air-purifier.on / read=true write=true javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: Setting DataPointTrigger #2 for zhimi.airpurifier.mb3 javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....6.physical-controls-locked.physical-controls-locked / read=true write=true javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for filter.filter-used-time because its readonly. javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for filter.filter-life-level because its readonly. javascript.0 2021-01-17 13:42:30.014 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for environment.pm2_5-density because its readonly. javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for environment.relative-humidity because its readonly. javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for environment.temperature because its readonly. javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....6.indicator-light.on / read=true write=true javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....6.indicator-light.brightness / read=true write=true javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....6.alarm.alarm / read=true write=true javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....6.air-purifier.fan-level / read=true write=true javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....6.air-purifier.mode / read=true write=true javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for air-purifier.fault because its readonly. javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.3.....6.air-purifier.on / read=true write=true javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: Setting DataPointTrigger #1 for zhimi.airpurifier.vb2 javascript.0 2021-01-17 13:42:30.013 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.2.....2.physical-controls-locked.physical-controls-locked / read=true write=true javascript.0 2021-01-17 13:42:30.012 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for filter.filter-used-time because its readonly. javascript.0 2021-01-17 13:42:30.012 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for filter.filter-life-level because its readonly. javascript.0 2021-01-17 13:42:30.012 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for environment.pm2_5-density because its readonly. javascript.0 2021-01-17 13:42:30.012 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for environment.relative-humidity because its readonly. javascript.0 2021-01-17 13:42:30.012 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for environment.temperature because its readonly. javascript.0 2021-01-17 13:42:30.012 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.2.....2.indicator-light.on / read=true write=true javascript.0 2021-01-17 13:42:30.012 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.2.....2.indicator-light.brightness / read=true write=true javascript.0 2021-01-17 13:42:30.011 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.2.....2.alarm.alarm / read=true write=true javascript.0 2021-01-17 13:42:30.011 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.2.....2.air-purifier.fan-level / read=true write=true javascript.0 2021-01-17 13:42:30.011 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.2.....2.air-purifier.mode / read=true write=true javascript.0 2021-01-17 13:42:30.011 info (1921) script.js.common.Xiaomi_Devices: No Datapoint Trigger set for air-purifier.fault because its readonly. javascript.0 2021-01-17 13:42:30.010 info (1921) script.js.common.Xiaomi_Devices: Setting Datapoint Trigger for javascript.0.MiHomeAll.2.....2.air-purifier.on / read=true write=true javascript.0 2021-01-17 13:42:30.010 info (1921) script.js.common.Xiaomi_Devices: Setting DataPointTrigger #0 for zhimi.airpurifier.mb3 javascript.0 2021-01-17 13:42:30.010 info (1921) script.js.common.Xiaomi_Devices: Reaching CreateDpTrigger javascript.0 2021-01-17 13:42:30.010 info (1921) script.js.common.Xiaomi_Devices: Setting trigger #2 for zhimi.airpurifier.mb3 javascript.0 2021-01-17 13:42:30.010 info (1921) script.js.common.Xiaomi_Devices: Setting trigger #1 for zhimi.airpurifier.vb2 javascript.0 2021-01-17 13:42:30.010 info (1921) script.js.common.Xiaomi_Devices: Setting trigger #0 for zhimi.airpurifier.mb3 javascript.0 2021-01-17 13:42:30.009 info (1921) script.js.common.Xiaomi_Devices: Init Device# 2 - device="zhimi.airpurifier.mb3" javascript.0 2021-01-17 13:42:29.435 info (1921) script.js.common.Xiaomi_Devices: Created device {"_events":{},"_eventsCount":0,"_maxListeners":100,"id":"3.....0","address":"192.168.100.86","token":"8.......c","protoc javascript.0 2021-01-17 13:42:29.433 info (1921) script.js.common.Xiaomi_Devices: Now creating device for zhimi.airpurifier.mb3 / 3.....0 / 192.168.100.86 / 8.......c / 10000 javascript.0 2021-01-17 13:42:29.433 info (1921) script.js.common.Xiaomi_Devices: Init Device# 1 - device="zhimi.airpurifier.vb2" javascript.0 2021-01-17 13:42:28.899 info (1921) script.js.common.Xiaomi_Devices: Created device {"_events":{},"_eventsCount":0,"_maxListeners":100,"id":"3.....6","address":"192.168.100.87","token":"c.......2","protoc javascript.0 2021-01-17 13:42:28.899 info (1921) script.js.common.Xiaomi_Devices: Now creating device for zhimi.airpurifier.vb2 / 3.....6 / 192.168.100.87 / c.......2 / 10000 javascript.0 2021-01-17 13:42:28.898 info (1921) script.js.common.Xiaomi_Devices: Init Device# 0 - device="zhimi.airpurifier.mb3" javascript.0 2021-01-17 13:42:28.303 info (1921) script.js.common.Xiaomi_Devices: Created device {"_events":{},"_eventsCount":0,"_maxListeners":100,"id":"2.....2","address":"192.168.100.249","token":"e.......2","proto javascript.0 2021-01-17 13:42:28.302 info (1921) script.js.common.Xiaomi_Devices: Now creating device for zhimi.airpurifier.mb3 / 2.....2 / 192.168.100.249 / e.......2 / 10000 javascript.0 2021-01-17 13:42:28.302 info (1921) script.js.common.Xiaomi_Devices: Reaching CreateDevices javascript.0 2021-01-17 13:42:28.301 info (1921) script.js.common.Xiaomi_Devices: Reaching WriteGenericDpValues() javascript.0 2021-01-17 13:42:28.301 info (1921) script.js.common.Xiaomi_Devices: Reaching main javascript.0 2021-01-17 13:42:28.300 info (1921) script.js.common.Xiaomi_Devices: 60 States created, now setting up channels! javascript.0 2021-01-17 13:42:28.284 info (1921) script.js.common.Xiaomi_Devices: Reaching CreateStates() javascript.0 2021-01-17 13:42:28.284 info (1921) script.js.common.Xiaomi_Devices: Reaching PrepareDeviceDps, did=3.....0 model=zhimi.airpurifier.mb3 javascript.0 2021-01-17 13:42:28.284 info (1921) script.js.common.Xiaomi_Devices: Device Luftreiniger Hobbyraum is supported, creating DataPoints javascript.0 2021-01-17 13:42:28.284 info (1921) script.js.common.Xiaomi_Devices: Reaching PrepareDeviceDps, did=3.....6 model=zhimi.airpurifier.vb2 javascript.0 2021-01-17 13:42:28.284 info (1921) script.js.common.Xiaomi_Devices: Device Luftreiniger Wohnzimmer is supported, creating DataPoints javascript.0 2021-01-17 13:42:28.284 info (1921) script.js.common.Xiaomi_Devices: Reaching PrepareDeviceDps, did=2.....2 model=zhimi.airpurifier.mb3 javascript.0 2021-01-17 13:42:28.284 info (1921) script.js.common.Xiaomi_Devices: Device Luftreiniger Schlafzimmer is supported, creating DataPoints javascript.0 2021-01-17 13:42:28.284 info (1921) script.js.common.Xiaomi_Devices: Now searching for supported Devices... javascript.0 2021-01-17 13:42:28.283 info (1921) script.js.common.Xiaomi_Devices: Luftreiniger Hobbyraum javascript.0 2021-01-17 13:42:28.283 info (1921) script.js.common.Xiaomi_Devices: Luftreiniger Wohnzimmer javascript.0 2021-01-17 13:42:28.283 info (1921) script.js.common.Xiaomi_Devices: Luftreiniger Schlafzimmer javascript.0 2021-01-17 13:42:28.283 info (1921) script.js.common.Xiaomi_Devices: Found 3 MiHome Devices, those are: javascript.0 2021-01-17 13:42:28.194 info (1921) script.js.common.Xiaomi_Devices: Retrieving your in de registered MiHome Devices javascript.0 2021-01-17 13:42:28.194 info (1921) script.js.common.Xiaomi_Devices: You are already logged in, login canceled javascript.0 2021-01-17 13:42:28.194 info (1921) script.js.common.Xiaomi_Devices: registered 0 subscriptions and 0 schedules javascript.0 2021-01-17 13:42:28.193 info (1921) script.js.common.Xiaomi_Devices: Reaching init javascript.0 2021-01-17 13:42:28.193 info (1921) script.js.common.Xiaomi_Devices: Starting AllMyMi V.0.2.4 javascript.0 2021-01-17 13:42:28.190 info (1921) Start javascript script.js.common.Xiaomi_Devices

Anything suspicious? For me it seems to be a problem with the Pro H, as ist allways occurs after this line: script.js.common.Xiaomi_Devices: Reaching RefreshDps at Mi Air Purifier ProH
Maybe ir relates to the empty datapoint alarm as I mentioned above?

Another question. I did a "upgrade self" in iobroker as I thought, there was a new version of JS-Adaper (it wasn't as I am on stable and new version is only in latest, I read wrong in forum), then restarted hole iobroker and after that, I had to copy a new version of file 'zhimi.airpurifier.vb2' into '/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/devices/' as ist was gone. Is it normal, that the file gets deleted when restarting hole iobroker or doing a "upgrade self"?

Greetings, Jürgen

@Pittini
Copy link
Owner

Pittini commented Jan 17, 2021

"upgrade self" upgrades also the node-mihome to the actual version, and there the new file is missing. Iobroker restrart is no problem.
About the error, yeah i also think it has something todo with the missing alarm value. Unfortunately you gave me cuttet logs, i cant see the important values. Maybe you have to download the log to see all. What i need is the second line completely:

javascript.0 2021-01-17 13:42:39.922 info (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Mi Air Purifier ProH 
javascript.0 2021-01-17 13:42:39.922 info (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':0,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':37 

@Wildbill-Z
Copy link
Author

Wildbill-Z commented Jan 17, 2021

Here is the complete log for those two timesteps:
2021-01-17 13:42:39.922 - �[32minfo�[39m: javascript.0 (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':0,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':37,'environment:temperature':21.8,'filter:filter-life-level':99,'filter:filter-used-time':45,'indicator-light:brightness':0,'indicator-light:on':true,'physical-controls-locked:physical-controls-locked':false} 2021-01-17 13:42:39.922 - �[32minfo�[39m: javascript.0 (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Mi Air Purifier ProH

And this the same for a 3H:
2021-01-17 13:42:40.563 - �[32minfo�[39m: javascript.0 (1921) script.js.common.Xiaomi_Devices: {'air-purifier:fault':0,'air-purifier:on':true,'air-purifier:fan-level':1,'air-purifier:mode':0,'environment:pm2.5-density':1,'environment:relative-humidity':40,'environment:temperature':20.799999,'filter:filter-life-level':30,'filter:filter-used-time':2433,'alarm:alarm':false,'indicator-light:brightness':1,'indicator-light:on':true,'physical-controls-locked:physical-controls-locked':false} 2021-01-17 13:42:40.563 - �[32minfo�[39m: javascript.0 (1921) script.js.common.Xiaomi_Devices: Reaching RefreshDps at Purifier 3H

@Pittini
Copy link
Owner

Pittini commented Jan 17, 2021

Ok, thats the proof, there is no alarm property at the pro (dont ask why, i dont know). So, thats the reason for the error. I have removed this property from the skript, pls download again (no new version).

@Wildbill-Z
Copy link
Author

Hi, thanks. New version seems to work better. One funny thing: With the newest version I get no errors, but I've played around a bit in Xiaomi Home App. If I check or uncheck "Benachrichtigungston" for the two 3H, the alarm datapoint in iobroker changes as expected. If I do this with the Pro H I get a warning in the log with newest script:

2021-01-17 15:25:06.811 - warn: javascript.0 (1921) State "javascript.0.MiHomeAll.318862096.alarm.alarm" not found 2021-01-17 15:25:06.812 - warn: javascript.0 (1921) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1358:20) 2021-01-17 15:25:06.812 - warn: javascript.0 (1921) at RefreshDps (script.js.common.Xiaomi_Devices:634:25) 2021-01-17 15:25:06.812 - warn: javascript.0 (1921) at module.exports. (script.js.common.Xiaomi_Devices:585:21) 2021-01-17 15:25:06.812 - warn: javascript.0 (1921) at module.exports.emit (events.js:314:20) 2021-01-17 15:25:06.812 - warn: javascript.0 (1921) at module.exports.EventEmitter.emit (domain.js:483:12) 2021-01-17 15:25:06.812 - warn: javascript.0 (1921) at module.exports.loadProperties (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/device-miio.js:107:12) 2021-01-17 15:25:06.812 - warn: javascript.0 (1921) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/device-miio.js:73:9)
If I try the version before (alarm for Pro H included) I either get the correct data if I change it in the app, but I'll get the known error:
2021-01-17 15:24:06.546 - error: javascript.0 (1921) script.js.common.Xiaomi_Devices: setForeignState: undefined is not a valid state value
The error occurs directly at start and repeats also if I play around in the app, independently if I put "Benachrichtigungston" on or off. So something seems to be weired with the Pro H.
Nevertheless, this is no problem at all for me, as I've set all air purifiers to no alarm (Benachrichtigungston aus) as my dog didn't like them. :-)
I'll close the issue as it is working as hoped: I can control the purifers directly in iobroker and I get the data without going through FHEM. Have many thanks. 👍

Greetings, Jürgen

@Pittini
Copy link
Owner

Pittini commented Jan 17, 2021

You can remove the alarm line (its line 21 i think) also in zhimi.airpurifier.vb2.js, then every connection to alarm is cut. I'll do this also for the pullrequest to node-mihome.

@Pittini
Copy link
Owner

Pittini commented Jan 17, 2021

@Wildbill-Z
Copy link
Author

Yes, thanks, I removed the line with alarm and also the lines with functions setBuzzer and getBuzzer. No mor warnings or errors in log if I change somethin in the app. 👍
Seems, that FHEM also has problems with alarm in the Pro H. I checked with the app and the datapoints in FHEM. The two 3H show a datapoint called "buzzer" which can be switched on and off and the value in the app changes accordingly. The other way around, if I change in the app, FHEM doesn't change its value correct. The Pro H in FHEM has a datapoint called "buzzer-volume" which always shows the value of 50. In FHEM one can't change it, as it only allows to set buzzer on/off, but for buzzer there is no datapoint. As I said, I defined the Pro H as a 3H in FHEM, as there is no Pro H to choose. Everything else is working correct (as in your script now), but alarm/buzzer seems to be a problem. Maybe the Pro H has the ability to change the volume in the future, but in the app until now, I only could switch it on or off, which is working.

Thanks for pullrequest. I expect, that this will then solve the problem of the deleted file after iobroker upgrade, as it will be in the "code" in the future?!
Greetings, Jürgen

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants