NEWS
Yet another HomeKit adapter
-
@berti_sto den Doppelschalter bekommst du hin, wenn du einem Schalter zwei Subtypes hinzufügst. Also quasi 2 Schalter in einem Schalter.
Ein eigenes YAHKA Forum halte ich für überflüssig.
Wenn du hier etwas nicht findest kannst du ja einfach ein neues Thema eröffnen. -
-
@theariba said in Yet another HomeKit adapter:
@loverz ich muss manchmal ein Gerät zweimal antippen bis es reagiert.
Also bspw. Licht an, aus und dann beim nächsten an geht es an.Kann mir hier denn jemand von den Profis helfen?
-
@theariba welchen Status haben die Lampen, wenn sie nicht reagieren?
Bei mir ist es oft so, dass eine Lampe als „an“ angezeigt wird, obwohl diese in Wirklichkeit „aus“ ist. Wenn ich die Home App über den Task-switcher komplett beende und anschließend neu öffnen, dann ist die Lampe in der Home App plötzlich „aus“.
-
Hallo zusammen,
leider habe ich über die Suche nix gefunden und hoffe jemand hat die Info, die ich suche.
Ich möchte bei meinen HomematicIP Thermostaten (Accesspoint) den HeatingCoolingState verwenden. Da es diesen Datenpunkt nicht gibt, möchte ich diesen per Script anhand der aktuellen und zieltemperatur an HomeKit übergeben.
Die IDE ist, dass ich mir die Werte über iobroker.MultiState hole, per ConversionScript vergleiche und den entsprechenden Status per return value ausgebe.
Allerdings habe ich keine Ahnung, wie ich im Script auf die zwei Values aus iobroker.MultiState zugreifen kann.
Jemand ne Idee, in welchen Variablen die Werte zu finden sind?
-
@loverz Status bleibt dann unverändert. Also es wird nicht geschalten, aber angezeigt.
Bsp. möchte ein Licht anschalten, betätige den Button, Button leuchtet, Lampe wird nicht geschalten. Beim nächsten Versuch funktioniert es dann. -
@w00dst0ck hab da eine Lösung für, bin aber erst in einigen Tagen wieder an meinem iobroker. Melde mich.
-
@theariba das kommt mir komisch vor.
Was macht das zugehörige iobroker Objekt? Nichts oder?
Was passiert wenn du die Home-App killst? -
@loverz Dann sag ich jetzt schon mal Danke ️
-
@w00dst0ck so hier bin ich mit der Einbindung von HomematicIP in Homekit:
Homekit Betriebsart:
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id="%m[LZ#HLD{N$0KpC;u^z" x="87" y="62"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="St|MNIqw-nvgF}z=xyov"> <field name="oid">knx.0.EG.Heizung.Bad_Temperatur_Soll</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="#V[!^zrOJR#jhht-)_hL"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="CJW^#tmBPbnTNIy];zF:"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="FRsC6ghriAIg-%CePkK#"> <field name="ATTR">val</field> <field name="OID">knx.0.EG.Heizung.Bad_Temperatur_Soll</field> </block> </value> <value name="B"> <block type="math_number" id="a2o+`ypo^?Z6hJ^7`}AW"> <field name="NUM">7</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="2WE_$Bl.hYW0f{ggWpM:"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Variablen.Heizung.Betriebsart.Bad</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="_K/{M.{RTL}_BjyufF2`"> <field name="NUM">0</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="controls_if" id="%V2PHY@vfAj1kKzZZ4J-"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="XhWnw198nH$0FYbiM#.L"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="cn%-*=qL+Zr(|ucA^GXm"> <field name="ATTR">val</field> <field name="OID">knx.0.EG.Heizung.Bad_Temperatur_Soll</field> </block> </value> <value name="B"> <block type="get_value" id="o4dyP@+k!XCPPWb*$7!M"> <field name="ATTR">val</field> <field name="OID">knx.0.EG.Heizung.Bad_Temperatur_Ist</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="3w|0ka2mD5[pLZl!*=,$"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Variablen.Heizung.Betriebsart.Bad</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="=bADj4AaPZ5}lMrJ:1J}"> <field name="NUM">1</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="control" id="eCn#jXxtKS|F^V8Ptl.M"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Variablen.Heizung.Betriebsart.Bad</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="LULQ0Y5gs.[:^IXryvJi"> <field name="NUM">3</field> </block> </value> </block> </statement> </block> </statement> </block> </statement> <next> <block type="on_ext" id="fxl%fTISCSz5hZgV4e8Z"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="p=z-GndO5XZW5Mx^*AlQ"> <field name="oid">knx.0.EG.Heizung.Bad_Temperatur_Ist</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="|@z4v,oR0{A`dmLRghg`"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="yqmxN|0(8.E$4k[?EfB."> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="My]s0U,U}l0$Mzfus([["> <field name="ATTR">val</field> <field name="OID">knx.0.EG.Heizung.Bad_Temperatur_Soll</field> </block> </value> <value name="B"> <block type="math_number" id=",su;S8!dI7e}J3XWB^m|"> <field name="NUM">7</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="_n]Ak|m5e4;~Cr-.4rY8"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Variablen.Heizung.Betriebsart.Bad</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="oJLm0pLQN~J|.UT#{fX0"> <field name="NUM">0</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="controls_if" id="7u~D+LuPft!C)q-$;g`E"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="y@8ZU=~Bomlwc]}T?Gw)"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="Q7`*JQz[-?-b#U13+(Xt"> <field name="ATTR">val</field> <field name="OID">knx.0.EG.Heizung.Bad_Temperatur_Soll</field> </block> </value> <value name="B"> <block type="get_value" id="HSjBgx[_B!.PVME#ZPex"> <field name="ATTR">val</field> <field name="OID">knx.0.EG.Heizung.Bad_Temperatur_Ist</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="r9mfEjKgK:8:~Qmhdc@g"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Variablen.Heizung.Betriebsart.Bad</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="jw,*ar|t@Jnc,Z+GP2Zy"> <field name="NUM">1</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="control" id="kCwrXR*,OU~g0T68H~15"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Variablen.Heizung.Betriebsart.Bad</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="yPE?xZJ9WzoSg_^UXtI0"> <field name="NUM">3</field> </block> </value> </block> </statement> </block> </statement> </block> </statement> </block> </next> </block> </xml>
Homekit Ventilposition [hier habe ich den Wert "humidity" zweckentfremdet]:
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id="VY.r@5H22S4GM3vLjI^n" x="62" y="62"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="G|nKQ0g`Idp!Q@_JwdX9"> <field name="oid">hmip.0.devices.3014F711A0000393C99C0F1B.channels.1.valvePosition</field> </shadow> </value> <statement name="STATEMENT"> <block type="control" id="?m`R+/MONWtx]s#A5@`/"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Variablen.Heizung.Ventilposition.Bad</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_arithmetic" id="HYIFAeaozz[mj|b[iT~4"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="(gx=Qi~lo,9Y0BVdewCd"> <field name="NUM">1</field> </shadow> <block type="get_value" id="3|^f}}bXu42XN7T;~08["> <field name="ATTR">val</field> <field name="OID">hmip.0.devices.3014F711A0000393C99C0F1B.channels.1.valvePosition</field> </block> </value> <value name="B"> <shadow type="math_number" id="Wr{z2Lo7+f/!#[OD-N??"> <field name="NUM">100</field> </shadow> </value> </block> </value> </block> </statement> </block> </xml>
Homekit Ventilstatus:
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id="tv$0!4E1vlk;3tyK$Y[]" x="62" y="62"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="|=N|6wW){`jH_91_.X#5"> <field name="oid">hmip.0.devices.3014F711A0000393C99C0F1B.channels.1.valvePosition</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="-O=vEQDY(ShEs}gc*e2@"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="D_9|1EP!/6xvq]~C5-/}"> <field name="OP">GT</field> <value name="A"> <block type="get_value" id="^-EOpyE*nG,n)[tD_hOl"> <field name="ATTR">val</field> <field name="OID">hmip.0.devices.3014F711A0000393C99C0F1B.channels.1.valvePosition</field> </block> </value> <value name="B"> <block type="math_number" id="lav{cSqb[v8=!xFGfNmB"> <field name="NUM">0.01</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="aDLF]S`5zxhPU$Zp4OCw"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Variablen.Heizung.Ventilstatus.Bad</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="okwUy9r)4[OJv6[85uEV"> <field name="NUM">1</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="control" id="kkXj$;AarM8/SSb)f`A,"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">javascript.0.Variablen.Heizung.Ventilstatus.Bad</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="IWKFK~-m#5/DzNO=RY.K"> <field name="NUM">0</field> </block> </value> </block> </statement> </block> </statement> </block> </xml>
Hier die benötigten Variablen:
-
@loverz das Objekt macht nichts. Wenn ich die Home App kille dann wird nichts angezeigt. Also Home springt dann auch zurück.
-
@loverz Vielen Dank für den Input.
Der Lösungsansatz ist sicher funktional, sorgt aber dafür, dass ich hier 2 Stellen berücksichtigen muss.
Am liebsten wäre mir ja eine Script Lösung direkt im YAHKA Adapter. Aber vermutlich geht das nicht.Werde dann übergangsweise ersmal Deine Blocky Lösung adaptieren.
-
@w00dst0ck sagte in Yet another HomeKit adapter:
Am liebsten wäre mir ja eine Script Lösung direkt im YAHKA Adapter. Aber vermutlich geht das nicht.
I'm not sure Yahka is the right place to solve this. If I understand what you need to achieve is it a "virtual" data point where the state/value is based on values from other data points (Off = 0; Heat = 1; Cool = 2).
In the long-term, you maybe also want to use this virtual DP in other ioBroker adapters, like for history and visualisation?
If yes, then it would probably be better if it was available as an Object in ioBroker. But I'm not sure if it can be realized based on an Alias with a script calculating what you want, or if it has to be stored in a User object.
I see the similar needs to calculate for example a second colour space for lights and have this available as a virtual data point/object for ioBroker Adapters to use when they don't support the native colour space used by the light device (RGB <-> HUE). To do this calculation in each Adapter is not effective.
-
I've found a solution to solve it in the YAHKA adapter.
I add it as a comment to my initial post.
-
I've found a solution to solve it in the YAHKA adapter.
if (value) { if (value.length == 2) { if (value[0] == value[1]) {return 0;} if (value[0] > value[1]) {return 1;} if (value[0] < value[1]) {return 2;} } }
-
@w00dst0ck Kannst du uns kurz erklären was genau diese Zeilen machen?
-
@loverz Sehr gerne.
In meinem Fall geht es darum, dass ich für HomeMaticIP Thermostate keinen direkten Datenpunkt für CurrentHeatingCoolingState habe, der anzeigt, ob gerade geheizt wird oder nicht.
Daher greife ich auf die zur Verfügung stehenden Datenpunkte setPointTemperature & valveActualTemperature zu, vergleiche diese per ConversionScript und gebe abhängig von der Differenz einen gültigen Wert an Homekit aus. Gültige Werte habe ich hier gefunden.
Wenn man per iobroker.Multistate mehrere Daten holt, werden diese als Array in "value" gespeichert und können so ausgewertet werden.
-
@w00dst0ck sagte in Yet another HomeKit adapter:
setPointTemperature & valveActualTemperature
Also sind die beiden in/out-Werte setPointTemperature & valveActualTemperature
Und dein Script vergleicht beide miteinander? -
@loverz eigentlich ganz simpel..
Wenn die eingestellte Temperatur höher als die am Ventil gemessene Temperatur ist, wird geheizt.
Wenn die eingestellte Temperatur niedriger als die am Ventil gemessene ist, wird abgekühlt.
-
@w00dst0ck Nice work!
So value[0] is the first value in the array and value[1] is the second? (I'm not a developer...)