danielwippermann / resol-vbus

A JavaScript library for processing RESOL VBus data
MIT License
67 stars 34 forks source link

Resol MX hat zwei Device Adressen #94

Closed SurfGargano closed 11 months ago

SurfGargano commented 11 months ago

Im IOBroker Resol Adapter (der vom grizzelbee) kann man auch Daten setzen. Das klappt auch gut bei Devices die nur eine Adresse haben.

Der Resol MX hat aber zwei Device Adressen : 0x7E11 und 0x7E21. 0x7E11 ist im Optimizer vorhanden, 0x7E21 jedoch nicht. Dafür gibt es kein Optimizer File. 0x7E21 (32289) ist jedoch für Heizkreis 1 vorgesehen, welches ein User steuern möchte. image

Die Daten sehen so aus : (Auszug aus dem Result vom HeaderSetConsolidator handler)

"deviceId":"007E110010","addressId":32273,"unitId":"DegreesCelsius","unitText":" °C","typeId":"Number_0_1_DegreesCelsius","precision":1,"rootTypeId":"Number","parts":[{"offset":0,"mask":255,"bitPos":0,"isSigned":false,"factor":1},{"offset":1,"mask":255,"bitPos":0,"isSigned":true,"factor":256}]}

"deviceId":"007E210010","addressId":32289,"unitId":"None","unitText":"","typeId":"Number_1_None","precision":0,"rootTypeId":"Number","parts":[{"offset":2,"mask":255,"bitPos":0,"isSigned":false,"factor":1}]}

Wie kann ich da weitermachen, daß ich den Heizkreis setzen kann ? Benötige ich einen Optimizer File für 0x7E21 ?

danielwippermann commented 11 months ago

Hi @SurfGargano !

Wie kann ich da weitermachen, daß ich den Heizkreis setzen kann ? Benötige ich einen Optimizer File für 0x7E21 ?

Nein, die Heizkreis-Parameter sind auch im Optimizer für 0x7E11 enthalten. Ihr Name beginnt dann mit Heizung_Heizkreis1_....

SurfGargano commented 11 months ago

Leider funktioniert das nicht so recht : Dieser Fehler wird ausgeworfen Error : Unable to complete value {"key":0;"value":{"valueId":"Heizung_Heizkreis1_Betriebsart"}} Ich hab die entsprechende Stelle im Code gefunden, aber da weiß ich nicht recht was die Ursache ist.

Ich vermute mal , daß immer noch das File vom V1 genommen wird. Der User hat MX V2. Wie kann ich sicherstellen, daß das File vom MX V2 verwendet wird ? Wie kann ich rausfinden, welche Datei jetzt wirklich genommen wird ?

Hab noch was gefunden : Muß man bei dem Aufruf context.customizer.loadConfiguration(readConfig, options); unter options in dem Falle auch die Version angeben ? Also :options.deviceMajorVersion = 2 ` ?

Sendet der MX Controller die Version mit bei dem Aufruf von ctx.hsc.on('headerSet', () => { const packetFields = spec.getPacketFieldsForHeaders(ctx.headerSet.getSortedHeaders()); const data = _.map(packetFields, function (pf) { return { id: pf.id, name: _.get(pf, ['packetFieldSpec', 'name', language]), rawValue: pf.rawValue, deviceName: pf.packetSpec.sourceDevice.fullName, deviceId: pf.packetSpec.sourceDevice.deviceId.replace(/_/g, ''), addressId: pf.packetSpec.sourceDevice.selfAddress, unitId: pf.packetFieldSpec.type.unit.unitId, unitText: pf.packetFieldSpec.type.unit.unitText, typeId: pf.packetFieldSpec.type.typeId, precision: pf.packetFieldSpec.type.precision, rootTypeId: pf.packetFieldSpec.type.rootTypeId, parts: pf.packetFieldSpec.parts, }; }); ? Wie lautet dann der Name für die Version ? pf.packetSpec.sourceDevice.deviceMajorVersion o.ä. ?

Ich habe packetFields mal als log Ausgabe ausgeben lassen. Da ist kein majorVersion enthalten, nur minorVersion(=0).

Falls Debug Meldungen im Source eingefügt werden müssen, das ist kein Problem.

Das Problem ist bei einem User mit dem MX Resol, bei mir mit dem CS Resol funktioniert dies einwandfrei, da gibt es ja auch keine Versionen.

SurfGargano commented 11 months ago

Habs jetzt selber rausgefunden: Beim createOptimizer muss man die Version mit angeben

const options1 = { deviceAddress : context.deviceAddress, deviceMajorVersion : 2 } const optimizer = await vbus.ConfigurationOptimizerFactory.createOptimizer(options1);