NEWS
Zigbee Adapter, Expert Mode, json (TS011F, EM8SW1)
-
Moin,
ich habe eine China-Zigbee-Smart-Plug (TS011F) mit der FW von pvvx-TlsrSmartSwitch (EM8SW1) geflashed. Das Gerät hat den bekannten Fehler, dass es sich immer selbstständig ausgeschaltet hat.
Die Einbindung in den Zigbee-Adapter mit externem Converter hat soweit geklappt, Leistung wird ausgegeben, nur Spannung und Strom sind immer 0; d. h. die FW hat die Strom und Spannungswerte.
Ich habe nun im Adapter im Entwickler-Tab mir den befehl zum Auslesen der Leistung zusammen-ge-klickt und das funktioniert auch. Meine Idee ist die Calibrierung und Keoffizienten auszulesen um zu sehen ob da irgenswas nicht richtig initialisiert oder auf 0 steht. Diese mit Attribut ID z. B. 0xF008 bietet die Auswahl nicht an. Der Weg über den Expert-Mode geht mit der Angabe ActivePower, aber wie ersetze ich das mit der ID für ActivePower=2191?{ "devId": "a4c138e8e97a04ee", "ep": "1", "cid": "haElectricalMeasurement", "cmd": "read", "cmdType": "foundation", "zclData": { "activePower": {} }, "cfg": null }Externer Converter:
const fz = require('zigbee-herdsman-converters/converters/fromZigbee'); const tz = require('zigbee-herdsman-converters/converters/toZigbee'); const exposes = require('zigbee-herdsman-converters/lib/exposes'); const reporting = require('zigbee-herdsman-converters/lib/reporting'); const utils = require('zigbee-herdsman-converters/lib/utils'); const e = exposes.presets; const ea = exposes.access; const attrRelayKeyLock = 0xf001; const attrRelayLedCtrl = 0xf002; const definition = { zigbeeModel: ['EM8SW1_z', 'EM0SW2_z', 'EW8SW1'], model: 'EM8SW1_z', vendor: 'Telink-pvvx', description: 'Custom Smart Switch with BL0937 (ioBroker Core Fix)', fromZigbee: [ fz.on_off, { cluster: 'haElectricalMeasurement', type: ['attributeReport', 'readResponse'], convert: (model, msg, publish, options, meta) => { if (utils.hasAlreadyProcessedMessage(msg, model)) return; const result = {}; const data = msg.data; // BL0937 Leistung (W) -> Durch 10 teilen if (data.hasOwnProperty('activePower')) { result.power = data['activePower'] / 10; } // BL0937 Spannung (V) -> Direkt ausgeben oder Fallback prüfen if (data.hasOwnProperty('rmsVoltage')) { result.voltage = data['rmsVoltage']; } else if (data.hasOwnProperty('rmsVoltagePhB')) { result.voltage = data['rmsVoltagePhB']; } // BL0937 Strom (A) -> Durch 1000 teilen (mA zu A) if (data.hasOwnProperty('rmsCurrent')) { result.current = data['rmsCurrent'] / 1000; } else if (data.hasOwnProperty('rmsCurrentPhB')) { result.current = data['rmsCurrentPhB'] / 1000; } return result; }, }, { cluster: 'seMetering', type: ['attributeReport', 'readResponse'], convert: (model, msg, publish, options, meta) => { if (utils.hasAlreadyProcessedMessage(msg, model)) return; const result = {}; const data = msg.data; // Verbrauch (kWh) -> Wh durch 1000 teilen if (data.hasOwnProperty('currentSummDelivered')) { result.energy = data['currentSummDelivered'] / 1000; } return result; }, } ], toZigbee: [ tz.on_off, { key: ['key_lock'], convertSet: async (entity, key, value, meta) => { const val = value === 'LOCK' || value === 1 ? 1 : 0; await entity.write('genOnOff', { [attrRelayKeyLock]: { value: val, type: 0x10 } }); return { state: { [key]: value } }; }, }, { key: ['led_control'], convertSet: async (entity, key, value, meta) => { const lookup = { 'off': 0, 'on': 1, 'on/off': 2 }; await entity.write('genOnOff', { [attrRelayLedCtrl]: { value: lookup[value], type: 0x30 } }); return { state: { [key]: value } }; }, } ], exposes: [ e.switch(), e.power().withUnit('W'), e.current().withUnit('A'), e.voltage().withUnit('V'), e.energy().withUnit('kWh'), exposes.binary('key_lock', ea.ALL, 'LOCK', 'UNLOCK').withDescription('Key lock enable/disable'), exposes.enum('led_control', ea.ALL, ['off', 'on', 'on/off']).withDescription('Led control') ], configure: async (device, coordinatorEndpoint) => { const endpoint = device.getEndpoint(1); await reporting.bind(endpoint, coordinatorEndpoint, ['genOnOff', 'haElectricalMeasurement', 'seMetering']); await reporting.onOff(endpoint); }, }; module.exports = definition; -
Beschreib doch mal im Detail welches Attribut du von welchem Cluster genau auslesen willst. So richtig werde ich aus deiner Frage nicht schlau.
Solange es sich bei dem Attribut um eines der Standard Attribute vom gewünschten Cluster handelt (und es sich um einen Standard-Cluster) handelt ist alles ok. Wenn das nicht so ist musst du den Cluster selber definieren und hinzufügen.
A.
-
Cluster 0x0b04: Electrical Measurement:
Attribute 0xF007 : Coefficient for calculating current
Attribute 0xF008 : Coefficient for calculating voltageDer Cluster ist definiert, darin stehen z.B. die Werte rmsvoltage und rmscurrent, die ich mit Wert 0 auslese. Die findet man auch in der Auswahl im Expert Mode. Die o. g. Coefficienten nicht. Weil das Leseergebnis 0 ist war meine Idee zu schauen, ob die Coefficienten richtig initialisiert sind.
Ich gehe davon aus, dass die HW funktioniert, da das Lesen von activepower und Verbrauch einen sinnvollen Wert gibt; d.h. Strom und Spannung der FW bekannt sind.
Vielleicht liegt es auch an dem externen Converter.
Bin da auch nicht so tief in dem Thema drin, aber lernbegierig :-)
Da Hauptproblem des Plugs ist ja gelöst, er funktioniert wieder.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden