homebridge-homematic
homebridge-homematic copied to clipboard
HMIP BROLL - keine Prozentanzeige Behang
Hallo Zusammen,
Ich besitze seit neuestem 3 HMIP BROLL Rolladenaktoren, welche ich mit einer CCU2 (neueste Software) betreibe.
Mir ist jedoch aufgefallen, dass die Prozentanzeige für den Behang nur dann aus der CCU2 von der Homebridge ausgelesen wird, wenn die Aktoren über die CCU2 selbst Bzw eine App bedient werden.
Sobald ich den Wandschalter manuell drücke erhalte ich in der Homebridge lediglich den Status „offen“ oder „geschlossen“. Im CCU2 GUI hingegen wird der Behang in Prozent nach wie vor kontinuierlich angezeigt.
Ich habe das Thema nun identifiziert:
Wenn der Aktor über den Schalter betätigt und nur ein Stück heruntergefahren wird, dann erscheint in Kanal 4 direkt 0 anstatt der Prozentsatz des aktuellen Behangs.
Der Behang wird in Kanal 3 geschrieben.
Wenn ich direkt im Script einen Prozentsatz definiere, auf welchen der Rolladen fahren soll, dann wird dieser Wert in Kanal 4 als auch in Kanal 3 hinterlegt.
Kann das Thema bei der nächsten Homebridge Version berücksichtigt werden?
Hi, wie hast du den Aktor einbinden können? Bei mir kommt kein Service. Schönen Gruß
Ist ein HmIP-BBL Jalousienaktor
BROLL wird von ‚Homebridge-Homematic‘ ohne Probleme erkannt. Ich hatte zunächst das Problem, dass zunächst nur bei manuellem Start der homebridge der Status in der Apple ‚Home‘ App korrekt aktualisiert war und dann auch seltsamerweise nur das erste Mal. Ich habe dann in der Firewall der CCU2 (raspberrymatic) dem Homebridge Raspi direkt Zugriff gegeben und dann noch einmal sichergestellt, dass ich tatsächlich alle Files der letzten homebridge-homematic Version installiert habe, einschließlich der Autostart-Datei für Homebridge vom ‚Homebridge-Homematic‘ Projekt (wahrscheinlich lag es an letzterer, aber ich kann andere Ursachen nicht völlig ausschließen).
Sorry. Ich habe es eben noch einmal getestet. Tatsächlich erscheint für HmIP-BROLL, kein Prozentwert , wenn man die Rollladenposition per Taster am Rollladen selbst ändert. Wenn man die Home-App verwendet, und den Prozentwert per App einstellt, ist es jedoch korrekt.
Habe die HmIP-FROLL hier im Einsatz. Mir ist das "Problem" noch garnicht aufgefallen - konnte es aber nachstellen.
Öffnet man über Homematic oder per Taster den bisher geschlossen Rollladen zu, beispielsweise, 41%, dann wird dies in der Homematic WebUI angezeigt. In Home springt die Kachel direkt von "Geschlossen" auf "Geöffnet" (vollständig).
@thkl Kannst du hier nachbessern? Müsste HmIP-RF.0123456789:3.LEVEL
sein, der steht auf 41%.
<device name="Rollladen Terrassentür WZ" ise_id="1679" unreach="false" config_pending="false">
<channel name="Rollladen Terrassentür WZ:0" ise_id="1680" visible="true" operate="true">
<datapoint name="HmIP-RF.0123456789:0.ACTUAL_TEMPERATURE" type="ACTUAL_TEMPERATURE" ise_id="1681" value="28.000000" valuetype="4" valueunit="" timestamp="1521063623" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.CONFIG_PENDING" type="CONFIG_PENDING" ise_id="1682" value="false" valuetype="2" valueunit="" timestamp="1520274612" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.DUTY_CYCLE" type="DUTY_CYCLE" ise_id="1686" value="false" valuetype="2" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.ERROR_CODE" type="ERROR_CODE" ise_id="1687" value="0" valuetype="8" valueunit="" timestamp="1521063623" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.ERROR_OVERHEAT" type="ERROR_OVERHEAT" ise_id="1688" value="false" valuetype="2" valueunit="" timestamp="1521063623" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.ERROR_OVERLOAD" type="ERROR_OVERLOAD" ise_id="1692" value="false" valuetype="2" valueunit="" timestamp="0" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.ERROR_UPDATE" type="ERROR_UPDATE" ise_id="1693" value="false" valuetype="2" valueunit="" timestamp="0" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.OPERATING_VOLTAGE" type="OPERATING_VOLTAGE" ise_id="1694" value="0.000000" valuetype="4" valueunit="" timestamp="0" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.RSSI_DEVICE" type="RSSI_DEVICE" ise_id="1695" value="200" valuetype="8" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.RSSI_PEER" type="RSSI_PEER" ise_id="1696" value="189" valuetype="8" valueunit="" timestamp="1521006719" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.UNREACH" type="UNREACH" ise_id="1697" value="false" valuetype="2" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:0.UPDATE_PENDING" type="UPDATE_PENDING" ise_id="1701" value="false" valuetype="2" valueunit="" timestamp="1520274612" operations="5"/>
</channel>
<channel name="Rollladen Terrassentür WZ 1" ise_id="1705" visible="true" operate="true">
<datapoint name="HmIP-RF.0123456789:1.PRESS_LONG" type="PRESS_LONG" ise_id="1706" value="" valuetype="2" valueunit="" timestamp="0" operations="4"/>
<datapoint name="HmIP-RF.0123456789:1.PRESS_SHORT" type="PRESS_SHORT" ise_id="1707" value="" valuetype="2" valueunit="" timestamp="0" operations="4"/>
</channel>
<channel name="Rollladen Terrassentür WZ 2" ise_id="1708" visible="true" operate="true">
<datapoint name="HmIP-RF.0123456789:2.PRESS_LONG" type="PRESS_LONG" ise_id="1709" value="" valuetype="2" valueunit="" timestamp="0" operations="4"/>
<datapoint name="HmIP-RF.0123456789:2.PRESS_SHORT" type="PRESS_SHORT" ise_id="1710" value="" valuetype="2" valueunit="" timestamp="0" operations="4"/>
</channel>
<channel name="Rollladen Terrassentür WZ 3" ise_id="1711" visible="true" operate="true">
<datapoint name="HmIP-RF.0123456789:3.LEVEL" type="LEVEL" ise_id="1712" value="0.410000" valuetype="4" valueunit="100%" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:3.PROCESS" type="PROCESS" ise_id="1713" value="0" valuetype="16" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:3.SECTION" type="SECTION" ise_id="1714" value="15" valuetype="16" valueunit="" timestamp="1521064942" operations="5"/>
</channel>
<channel name="Rollladen Terrassentür WZ" ise_id="1715" visible="true" operate="true">
<datapoint name="HmIP-RF.0123456789:4.LEVEL" type="LEVEL" ise_id="1716" value="1.000000" valuetype="4" valueunit="100%" timestamp="1521064942" operations="7"/>
<datapoint name="HmIP-RF.0123456789:4.PROCESS" type="PROCESS" ise_id="1717" value="0" valuetype="16" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:4.SECTION" type="SECTION" ise_id="1718" value="4" valuetype="16" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:4.STOP" type="STOP" ise_id="1719" value="" valuetype="2" valueunit="" timestamp="0" operations="2"/>
</channel>
<channel name="HmIP-FROLL 0123456789:5" ise_id="1720" visible="true" operate="true">
<datapoint name="HmIP-RF.0123456789:5.LEVEL" type="LEVEL" ise_id="1721" value="0.000000" valuetype="4" valueunit="100%" timestamp="1521064942" operations="7"/>
<datapoint name="HmIP-RF.0123456789:5.PROCESS" type="PROCESS" ise_id="1722" value="0" valuetype="16" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:5.SECTION" type="SECTION" ise_id="1723" value="0" valuetype="16" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:5.STOP" type="STOP" ise_id="1724" value="" valuetype="2" valueunit="" timestamp="0" operations="2"/>
</channel>
<channel name="HmIP-FROLL 0123456789:6" ise_id="1725" visible="true" operate="true">
<datapoint name="HmIP-RF.0123456789:6.LEVEL" type="LEVEL" ise_id="1726" value="0.000000" valuetype="4" valueunit="100%" timestamp="1521064942" operations="7"/>
<datapoint name="HmIP-RF.0123456789:6.PROCESS" type="PROCESS" ise_id="1727" value="0" valuetype="16" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:6.SECTION" type="SECTION" ise_id="1728" value="0" valuetype="16" valueunit="" timestamp="1521064942" operations="5"/>
<datapoint name="HmIP-RF.0123456789:6.STOP" type="STOP" ise_id="1729" value="" valuetype="2" valueunit="" timestamp="0" operations="2"/>
</channel>
<channel name="Rollladen Terrassentür WZ 7" ise_id="1730" visible="true" operate="true">
<datapoint name="HmIP-RF.0123456789:7.WEEK_PROGRAM_CHANNEL_LOCKS" type="WEEK_PROGRAM_CHANNEL_LOCKS" ise_id="1731" value="0" valuetype="16" valueunit="" timestamp="1521063623" operations="5"/>
<datapoint name="HmIP-RF.0123456789:7.WEEK_PROGRAM_TARGET_CHANNEL_LOCK" type="WEEK_PROGRAM_TARGET_CHANNEL_LOCK" ise_id="1732" value="" valuetype="16" valueunit="" timestamp="0" operations="2"/>
<datapoint name="HmIP-RF.0123456789:7.WEEK_PROGRAM_TARGET_CHANNEL_LOCKS" type="WEEK_PROGRAM_TARGET_CHANNEL_LOCKS" ise_id="1733" value="" valuetype="16" valueunit="" timestamp="0" operations="2"/>
</channel>
</device>
Hallo zusammen,
bei mir das gleiche "Problem" würde mich beim Request anschließen. Gerade wenn man mit HK und Szenen arbeiten möchte, "wie alle Rollos im EG auf 50%" ist es problematisch wenn der Wert nicht mehr stimmt.
Hallo, ich habe leider auch wieder das gleiche Problem. Sobald ich das über die HomeApp bediene wird alles richtig angezeigt, aber über den Taster oder die WebUI wird nur geöffnet oder geschlossen angezeigt, die Prozentzahl steht nicht drauf. Komischerweise hat das schon mal einwandfrei funktioniert. Ich weiss jetzt nicht ob das in der Version 0.0.104 schon Probleme gemacht hat, allerdings habe ich jetzt die 0.0.106 drauf und habe es erst jetzt wieder bemerkt.
Danke im Voraus.
Auch mit der Version 0.0.108 geht das noch nicht. Was auch auffällig ist, wenn man einen Rollo verstellt sagen wir auf 30% wude in vorherigen Versionen in der HomeKit App ein Lade-Indikator angezeigt und die ausgewählte Prozentanzeige. Jetzt (108) wählt man einen Wert, es taucht kurz der Indikator auf, dann wechselt die Ansicht in der HomeApp wieder auf den alten Wert. Dieser wird dann erst aktualisiert wenn der “Schaltvorgang” beendet ist bzw. Die App auf und zu gemacht wurde.
@thkl Kannst du das mit 0.0.110 für den HmIP-FROLL und HmIP-BROLL umsetzen? Danke
Also der HmIP-BROLL funktioniert bei mir .. Wenn ich zb im CCU WebUI einen Wert für die Höhe auf 50% stelle dann switcht auch der Wert in der HomeApp auf 50%
@thkl ja das stimmt, das Problem taucht auf wenn man den Rollladen über die Tasten bedient anstatt der WebUI und Home App
Hallo zusammen, kann das Problem eigentlich gelöst werden? Was ich irgendwie nicht vestehe warum es einen Unterschied macht ob der Rollladen per Taster oder WebUI bedient wird.
Der Status des Rollladens müsste doch immer im selben Feld/datapoint aktualliert werden? Wäre super wenn der Status unabhängig von der Bedienung aktuell in der HomeApp dargestellt würde.
Hallo zusammen,
ich hab jetzt mal die Zeit gefunden und etwas an dem Service geschraubt. (HomeMaticHomeKitBlindServiceIP.js)
Also ich habe wie von @nicoh88 beschrieben alle Datapoints die ein GET-Event auslösen mit dem 3:LEVEL DP ersetzt. Den SET-Event muss man auf 4:LEVEL lassen ansonsten funktioniert die Steuerung via HomeBridge nicht mehr.
Ich habe HMIP-BROLL Aktoren und jetzt funktioniert es auch mit dem Update der Position egal ob mit Schalter oder via. Software. Wenn Interesse besteht kann ich auch die geänderte File posten. Aber da es eher ein gefrikel mit Try & Error war würde ich eher davon abraten :) Ich teste mal weiter ob es noch irgendwelche anderen Nebeneffekte hat. @thkl wäre super wenn du das in der nächsten Version berücksichtigen könntest.
Grüße Stefan
Hallo Stefan,
also von meiner Seite besteht auf jeden Fall Interesse.
Gruß Christian
Klar gerne aber auf eigene Gefahr ;)
also einfach unter /usr/local/lib/node_modules/homebridge-homematic/ChannelServices/HomeMaticHomeKitBlindServiceIP.js
(ggf. bei dir ein anderer Pfad)
Die Datei mit folgenden Inhalt ersetzen (zuvor umbedingt das Original wegsichern ;) ):
(Datei::: Siehe letzter Post Anhang)
@Stefan774 möchtest Du vielleicht einfach einen Pull Request machen und ich kipp das dann hier ein ?
@thkl Hm ich glaube soweit bin ich noch nicht mit meiner Kunst ;)
Gerade mit Git bin ich noch nicht so fit. Werd es mir aber ansehen.
Die Datei ist nochmal im Anhang da ich gerade gesehen hab das die Git-Syntax etwas verschluckt hat.
@Stefan774 ok ich ändere das mal hier ...
@Stefan774 hmm die Klasse fällt beim Unit Test durch. Wenn auf Kanal 4 des Gerätes ein Event für LEVEL Change kommt, dann wird dieser nicht beachtet. Ist das ok so ? Du hast da auch was rauskommentiert:
/*if (dp == "4:LEVEL") {
that.currentPos.updateValue(newValue,null);
that.targetPos.updateValue(newValue,null);
}*/
Guter Unit Test Respekt!
Genau das ist mir auch aufgefallen. D.h. normalerweise sieht man ja wenn gerade der BROLL fährt mit dem Status "wird Geschlossen" oder "wird Geöffnet". Das funktioniert nach meiner Änderung nicht mehr. Der Status wird nach der "Fahrt" auf den korrekten Wert aktualisiert, aber während der Fahrt passiert nichts.
Ich kann aber den Fehler leider auch nicht finden. Das müsste etwas mit dem Wert aus TargetPostion zu tun haben.
Setze ich dort aber wieder den DP aus LEVEL 4 dann steht immer "wird geschlossen" oder "wird geöffnet" wenn man per Schalter Bedient.
Für einen Tipp wäre ich dankbar.
Mit welchem Tool arbeitet Ihr eigentlich um die Response von der CCU2 auszuwerten d.h. der Out-Put den @nicoh88 gepostet hat? XML-API?
Hmm ggf kannst Du für das Problem mit dem PROCESS Datenpunkt arbeiten. Der kennt Stable und Not_Stable .. Achja und Wird geschlossen / Wird geöffnet wird immer angezeigt wenn die targetPos in Homekit != der currentPos ist ...
Wenn Du homebridge mit -D startest, siehst Du ja welche Events von der CCU reinkommen ...
Hmm hab es gerade nochmal versucht. Aber ich dreh mich im Kreis wenn der Status anscheinend stimmt dann funktioniert die Position nicht mehr richtig.
Das übersteigt leider im Moment noch meine Skills. Aber wenn man den Fahrt-Status nicht umbedingt braucht funktioniert alles gut. Ist halt ein Trade-Off entweder "Fahrt-Status" korrekt oder End-Position ;)
Hallo @Stefan774, ich habe das bei mir so jetzt umgesetzt und jetzt wird der Status über die Taste auch angezeigt. Natürlich wäre beides gut, also Status und die Anzeige das es gerade hoch oder runter fährt, allerdings ist das jetzt mir so wichtiger, als die andere Anzeige. Danke dir für die Mühe.
Gruß Christian
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
Hallo @Stefan774 , hast du dir die neuste Version 0.0.205 schon installiert? Soweit ich sehen kann, ist das Problem mit der Prozentanzeige leider immer noch präsent. Hast du hier wieder die Get-Events auf 3 gesetzt? Christian
Ich schau da mal drüber
@thkl Danke dir
@thkl Hallo Thomas, gibt es hierzu schon Neuigkeiten? LG Christian
Hmm mein ich habe den Code einmal komplett über den Haufen geworfen. Die aktuelle Gihub Version hat so ziemlich nichts mehr mit dem letzten npm zu tun. Aber ich werde bei Gelegenheit noch mal nachschauen.
Hmm mein ich habe den Code einmal komplett über den Haufen geworfen. Die aktuelle Gihub Version hat so ziemlich nichts mehr mit dem letzten npm zu tun. Aber ich werde bei Gelegenheit noch mal nachschauen.
Kannst du mir kurz erklären was das genau bedeutet? Gibt es keinen Support mehr dafür? Kann ich dann nicht einfach den neuen Code benutzen?
Danke im voraus Christian
Ja klar aber das ist noch nicht 💯 fertig. Die Anpassung auf die dynamische Verwaltung durch Homebridge dauert halt noch.
Verstehe, danke für deine Rückmeldung,
Ich habe eine kleine Änderung am Code vorgenommen. Jetzt zeigt er wieder an wie der Stand des Behanges ist.
@thkl Wäre das so ok für Dich?
HomeMaticHomeKitBlindServiceIP.prototype.datapointEvent = function (dp, newValue) { let that = this
if ((dp === '3.PROCESS') && (newValue === 0)) { this.remoteGetValue('3.LEVEL', function (value) { that.currentPos.updateValue(value, null) that.targetPos.updateValue(value, null) }) }
if (dp === '3.LEVEL') { that.currentPos.updateValue(newValue, null) that.targetPos.updateValue(newValue, null) } }
Ok danke 😊
Ich habe eine kleine Änderung am Code vorgenommen. Jetzt zeigt er wieder an wie der Stand des Behanges ist.
@thkl Wäre das so ok für Dich?
HomeMaticHomeKitBlindServiceIP.prototype.datapointEvent = function (dp, newValue) { let that = this
if ((dp === '3.PROCESS') && (newValue === 0)) { this.remoteGetValue('3.LEVEL', function (value) { that.currentPos.updateValue(value, null) that.targetPos.updateValue(value, null) }) }
if (dp === '3.LEVEL') { that.currentPos.updateValue(newValue, null) that.targetPos.updateValue(newValue, null) } }
Vielen Dank, ich werde das heute gleich einpflegen.
LG Christian
Hallo @mahrens61 ,
wenn ich das richtig verstanden habe ist aber nur folgender Code neu if ((dp === '3.PROCESS') && (newValue === 0)) { this.remoteGetValue('3.LEVEL', function (value) { that.currentPos.updateValue(value, null) that.targetPos.updateValue(value, null) }) }
Diesen Code gab es ja schon if (dp === '3.LEVEL') { that.currentPos.updateValue(newValue, null) that.targetPos.updateValue(newValue, null) }
VG Christian
Hallo,
ja, das ist richtig verstanden. Die 4.er Channel habe ich aus der function komplett entfernt.
Gruß / Best regards Michael
Am 04.05.2020 um 12:44 schrieb CyberChris79 [email protected]:
Hallo @mahrens61 https://github.com/mahrens61 ,
wenn ich das richtig verstanden habe ist aber nur folgender Code neu if ((dp === '3.PROCESS') && (newValue === 0)) { this.remoteGetValue('3.LEVEL', function (value) { that.currentPos.updateValue(value, null) that.targetPos.updateValue(value, null) }) }
Diesen Code gab es ja schon if (dp === '3.LEVEL') { that.currentPos.updateValue(newValue, null) that.targetPos.updateValue(newValue, null) }
VG Christian
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/thkl/homebridge-homematic/issues/181#issuecomment-623391165, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADEMFUOZZVK25QS2WU6L2LTRP2MA5ANCNFSM4EE3TJPQ.
Hallo, ja, das ist richtig verstanden. Die 4.er Channel habe ich aus der function komplett entfernt. Gruß / Best regards Michael
Ah, d.h. in dieser Funktion gibt es dann nur noch den 3. Channel und den 2 Abfragen.
Hallo Christian,
ich habe das Modul nochmals überarbeitet. Was mir noch nicht gefiel, ist, dass, wenn ich die Aussenjalousie über den Schalter betätigt habe, dann wurde die Behanghöhe auch nur mit 0 oder 100% angezeigt, auch wenn sie bei 50% stand.
Wenn der Aktor über den Schalter betätigt und nur ein Stück heruntergefahren wird, dann erscheint in Kanal 4 direkt 0 anstatt der Prozentsatz des aktuellen Behangs. Der Behang wird in Kanal 3 geschrieben. Wenn ich direkt im Script einen Prozentsatz definiere, auf welchen der Rolladen fahren soll, dann wird dieser Wert in Kanal 4 als auch in Kanal 3 hinterlegt. D.h. zum auslesen und darstellen des Behanges ist nur der Kanal 3 relevant. Ich habe also alle Auslesefunktionen auf den Kanal 3 gelegt.
Damit kann ich BROLL sowohl in der App bedienen, als auch am Schalter, es wird immer der richtige Behanghöhe dargestellt.
Gruß Michael
Mit freundlichen Grüßen / Best regards Michael Ahrens
Dr. h.c. Dipl.-Ing.(FH) Michael Ahrens Rupertiweg 2 83435 Bad Reichenhall Phone: +49 (0) 8651 9963169 Fax: +49 (0) 8651 9963170 Mobile: +49 (0)171 4932753
'use strict'
var HomeKitGenericService = require('./HomeKitGenericService.js').HomeKitGenericService var util = require('util')
function HomeMaticHomeKitBlindServiceIP (log, platform, id, name, type, adress, special, cfg, Service, Characteristic) { HomeMaticHomeKitBlindServiceIP.super_.apply(this, arguments) }
util.inherits(HomeMaticHomeKitBlindServiceIP, HomeKitGenericService)
HomeMaticHomeKitBlindServiceIP.prototype.createDeviceService = function (Service, Characteristic) { var that = this var blind = new Service.WindowCovering(this.name) this.delayOnSet = 750 this.services.push(blind) this.minValueForClose = this.getClazzConfigValue('minValueForClose', 0) this.maxValueForOpen = this.getClazzConfigValue('maxValueForOpen', 100) if (this.minValueForClose > 0) { this.log.debug('there is a custom closed level of %s', this.minValueForClose) }
if (this.maxValueForOpen < 100) { this.log.debug('there is a custom open level of %s', this.maxValueForOpen) }
this.currentPos = blind.getCharacteristic(Characteristic.CurrentPosition) .on('get', function (callback) { that.query('3.LEVEL', function (value) { if (value < that.minValueForClose) { value = 0 } if (value > that.maxValueForOpen) { value = 100 } if (callback) callback(null, value) }) })
this.currentPos.eventEnabled = true
this.targetPos = blind.getCharacteristic(Characteristic.TargetPosition)
.on('get', function (callback) {
that.query('3.LEVEL', function (value) {
if (callback) {
if (value < that.minValueForClose) {
value = 0
}
if (value > that.maxValueForOpen) {
value = 100
}
callback(null, value)
}
})
})
.on('set', function (value, callback) {
that.delayed('set', '4.LEVEL', value, that.delayOnSet)
if (callback !== undefined) {
callback()
}
})
var pstate = blind.getCharacteristic(Characteristic.PositionState)
.on('get', function (callback) {
that.query('DIRECTION', function (value) {
if (callback) {
if (value !== undefined) {
callback(null, value)
} else {
callback(null, '0')
}
}
})
})
this.setCurrentStateCharacteristic('DIRECTION', pstate) pstate.eventEnabled = true
/** Parameter DIRECTION 0 = NONE (Standard) 1=UP 2=DOWN 3=UNDEFINED */
/* Characteristic.PositionState.DECREASING = 0; Characteristic.PositionState.INCREASING = 1; Characteristic.PositionState.STOPPED = 2; */
this.addValueMapping('DIRECTION', 0, 2) this.addValueMapping('DIRECTION', 1, 0) this.addValueMapping('DIRECTION', 2, 1) this.addValueMapping('DIRECTION', 3, 2)
this.remoteGetValue('3.LEVEL', function (newValue) { that.processBlindLevel(newValue) })
this.deviceAdress = this.adress.slice(0, this.adress.indexOf(':'))
this.platform.registerAdressForEventProcessingAtAccessory(this.deviceAdress + ':3.LEVEL', this, function (newValue) { that.processBlindLevel(newValue) }) this.platform.registerAdressForEventProcessingAtAccessory(this.deviceAdress + ':3.LEVEL', this, function (newValue) { that.processBlindLevel(newValue) })
this.platform.registerAdressForEventProcessingAtAccessory(this.deviceAdress + ':4:PROCESS', this, function (newValue) { if (newValue === 0) { that.remoteGetValue('3.LEVEL', function (value) { that.processBlindLevel(value) }) } }) }
HomeMaticHomeKitBlindServiceIP.prototype.endWorking = function () { let that = this this.remoteGetValue('3.LEVEL', function (newValue) { that.processBlindLevel(newValue) }) }
HomeMaticHomeKitBlindServiceIP.prototype.datapointEvent = function (dp, newValue) { let that = this
if ((dp === '3.PROCESS') && (newValue === 0)) { this.remoteGetValue('3.LEVEL', function (value) { that.currentPos.updateValue(value, null) that.targetPos.updateValue(value, null) }) }
if (dp === '3.LEVEL') { that.currentPos.updateValue(newValue, null) that.targetPos.updateValue(newValue, null) } }
// https://github.com/thkl/homebridge-homematic/issues/208 // if there is a custom close level and the real level is below homekit will get the 0% ... and visevera for max level HomeMaticHomeKitBlindServiceIP.prototype.processBlindLevel = function (newValue) { if (newValue <= this.minValueForClose) { newValue = 0 } if (newValue >= this.maxValueForOpen) { newValue = 100 }
this.currentPos.updateValue(newValue, null) this.targetPos.updateValue(newValue, null) }
module.exports = HomeMaticHomeKitBlindServiceIP
Guten Morgen Michael,
vielen Dank das du dir so viel Arbeit damit machst. Ich habe den Code soeben bei mir eingefügt, werde es testen und dir Feedback dazu geben.
Viele Grüße Christian
Hy Chris, sag mir mal war das einfügen des Codes bei dir Erfolgreich? Habe die letzten 2 Tage alles in Betrieb genommen und bin nun an dem Punkt das mir die Prozentanzeige des Rolladens nicht angezeigt bekomme bzw. so angezeigt bekomme "??". ich kann ebenso keine Prozentwerte anfahren nur ein komplettes öffnen und schließen ist möglich. Gib mir mal Feedback bitte!
Hy Chris, sag mir mal war das einfügen des Codes bei dir Erfolgreich? Habe die letzten 2 Tage alles in Betrieb genommen und bin nun an dem Punkt das mir die Prozentanzeige des Rolladens nicht angezeigt bekomme bzw. so angezeigt bekomme "??". ich kann ebenso keine Prozentwerte anfahren nur ein komplettes öffnen und schließen ist möglich. Gib mir mal Feedback bitte!
Hallo Rocky, die Prozentanzeige ging bei mir von Anfang an, jedoch gab es Probleme wenn man den Taster dafür betätigt hat. Über die verbesserte Version von @mahrens61 konnte ich das Problem aber in den Griff bekommen. Du bekommst statt der Prozentzahl ein "??" Das ist merkwürdig. Dies sollte auch über die Version von @thkl ohne weiteres richtig angezeigt werden.
Hi Rocky,
was meinst Du mit Einfügen des Codes ? Hast Du die Datei von thkl editiert o. hast Du die Datei von thkl durch meine Datei ersetzt?
Gruß
Von meinem iPhone gesendet
Am 11.08.2020 um 15:56 schrieb Rocky2806 [email protected]:
Hy Chris, sag mir mal war das einfügen des Codes bei dir Erfolgreich? Habe die letzten 2 Tage alles in Betrieb genommen und bin nun an dem Punkt das mir die Prozentanzeige des Rolladens nicht angezeigt bekomme bzw. so angezeigt bekomme "??". ich kann ebenso keine Prozentwerte anfahren nur ein komplettes öffnen und schließen ist möglich. Gib mir mal Feedback bitte!
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.
Hallo @mahrens61,
bei mir bleibt die Anzeige auf "opening/closing" stehen, egal ob ich Sie jetzt per App oder Taster die Behanghöhe verändere. Könntest Du mir aushelfen? Anbei mein File:
'use strict'
var HomeKitGenericService = require('./HomeKitGenericService.js').HomeKitGenericService var util = require('util')
function HomeMaticHomeKitBlindServiceIP (log, platform, id, name, type, adress, special, cfg, Service, Characteristic) { HomeMaticHomeKitBlindServiceIP.super_.apply(this, arguments) }
util.inherits(HomeMaticHomeKitBlindServiceIP, HomeKitGenericService)
HomeMaticHomeKitBlindServiceIP.prototype.createDeviceService = function (Service, Characteristic) { var that = this var blind = new Service.WindowCovering(this.name) this.delayOnSet = 750 this.services.push(blind) this.minValueForClose = this.getClazzConfigValue('minValueForClose', 0) this.maxValueForOpen = this.getClazzConfigValue('maxValueForOpen', 100) if (this.minValueForClose > 0) { this.log.debug('there is a custom closed level of %s', this.minValueForClose) }
if (this.maxValueForOpen < 100) { this.log.debug('there is a custom open level of %s', this.maxValueForOpen) }
this.currentPos = blind.getCharacteristic(Characteristic.CurrentPosition) .on('get', function (callback) { that.query('3.LEVEL', function (value) { if (value < that.minValueForClose) { value = 0 } if (value > that.maxValueForOpen) { value = 100 } if (callback) callback(null, value) }) })
this.currentPos.eventEnabled = true
this.targetPos = blind.getCharacteristic(Characteristic.TargetPosition)
.on('get', function (callback) {
that.query('3.LEVEL', function (value) {
if (callback) {
if (value < that.minValueForClose) {
value = 0
}
if (value > that.maxValueForOpen) {
value = 100
}
callback(null, value)
}
})
})
.on('set', function (value, callback) {
that.delayed('set', '4.LEVEL', value, that.delayOnSet)
if (callback !== undefined) {
callback()
}
})
var pstate = blind.getCharacteristic(Characteristic.PositionState)
.on('get', function (callback) {
that.query('DIRECTION', function (value) {
if (callback) {
if (value !== undefined) {
callback(null, value)
} else {
callback(null, '0')
}
}
})
})
this.setCurrentStateCharacteristic('DIRECTION', pstate) pstate.eventEnabled = true
/** Parameter DIRECTION 0 = NONE (Standard) 1=UP 2=DOWN 3=UNDEFINED */
/* Characteristic.PositionState.DECREASING = 0; Characteristic.PositionState.INCREASING = 1; Characteristic.PositionState.STOPPED = 2; */
this.addValueMapping('DIRECTION', 0, 2) this.addValueMapping('DIRECTION', 1, 0) this.addValueMapping('DIRECTION', 2, 1) this.addValueMapping('DIRECTION', 3, 2)
this.remoteGetValue('3.LEVEL', function (newValue) { that.processBlindLevel(newValue) })
this.deviceAdress = this.adress.slice(0, this.adress.indexOf(':'))
this.platform.registerAdressForEventProcessingAtAccessory(this.deviceAdress + ':3.LEVEL', this, function (newValue) { that.processBlindLevel(newValue) }) this.platform.registerAdressForEventProcessingAtAccessory(this.deviceAdress + ':3.LEVEL', this, function (newValue) { that.processBlindLevel(newValue) })
this.platform.registerAdressForEventProcessingAtAccessory(this.deviceAdress + ':4:PROCESS', this, function (newValue) { if (newValue === 0) { that.remoteGetValue('3.LEVEL', function (value) { that.processBlindLevel(value) }) } }) }
HomeMaticHomeKitBlindServiceIP.prototype.endWorking = function () { let that = this this.remoteGetValue('3.LEVEL', function (newValue) { that.processBlindLevel(newValue) }) }
HomeMaticHomeKitBlindServiceIP.prototype.datapointEvent = function (dp, newValue) { let that = this
if ((dp === '3.PROCESS') && (newValue === 0)) { this.remoteGetValue('3.LEVEL', function (value) { that.currentPos.updateValue(value, null) that.targetPos.updateValue(value, null) }) }
if (dp === '3.LEVEL') { that.currentPos.updateValue(newValue, null) that.targetPos.updateValue(newValue, null) } }
// #208 // if there is a custom close level and the real level is below homekit will get the 0% ... and visevera for max level HomeMaticHomeKitBlindServiceIP.prototype.processBlindLevel = function (newValue) { if (newValue <= this.minValueForClose) { newValue = 0 } if (newValue >= this.maxValueForOpen) { newValue = 100 }
this.currentPos.updateValue(newValue, null) this.targetPos.updateValue(newValue, null) }
module.exports = HomeMaticHomeKitBlindServiceIP
Gibt es zu diesem Thema bereits eine komplette Lösung? Habe nun den Code von Michael übernommen aber der HMIP Broll funktioniert nicht zu 100%. Wenn ich manuell am Taster z.B. den Behang von 24% auf 0% fahre dann bleibt in der Home App der Wert 24% stehen. Sonst aktualisiert sich der Wert der Home App aber mit dem reellen Wert. Nur der Fall, wenn Behang kleiner ca 50% und ich schließe mit dem Taster wird nicht der neue aktuelle Wert übernommen.