NEWS
Yet another HomeKit adapter
-
@oberfragger sagte in Yet another HomeKit adapter:
@tdcropower Es gibt den Punkt "in use" bei Outlets.
Da könntest du via Script mitgeben " Wenn Verbrauch > 0 dann 1... Leider ändert sich das Icon nicht und in den Einstellungen ändert sich dann das "in Benutzung" auf "ja"Dank des Wikis kann ich Fernseher nun mit dem richtigen Symbol an/ausmachen. Hat jemand ne Idee wie man die LGs inkl. Quellen abgebildet bekommt bzw. das mal mit seinem TV gemäß Wiki gemacht?
Ich habs bei meinem Samsung von 2016 mit meiner VU umgesetzt. Mit der VU kann man HDMI CEC commands via SSH senden. Benutze die VU quasi als "bridge".
Ist ja alles beschrieben. Wenn du deinen LG über den ioBroker steuern kannst, kannst die Datenpunkte ja miteinander "verskripten". -
@el_malto said in Yet another HomeKit adapter:
Wenn du deinen LG über
Kannst du mal bitte den Screenshot zur Einstellung der VU -> Samsung posten. Das Thema habe ich in einem anderen Zimmer. Dann Bekomme ich den Samsung nun auch vielleicht an (der hat kein WOL).
-
@oberfragger also den "TV" (sind ja nur Datenpunkte) habe ich ganz normal nach der Anleitung im Wiki eingerichtet:
https://github.com/jensweigele/ioBroker.yahka/wiki/Fernseher-mit-YAHKA-simulierenAls Image auf der VU habe ich OpenATV. Da gibt es eine Möglichkeit HDMI-CEC Commands per SSH zu senden. Das ist hier beschrieben:
https://www.opena.tv/skripte/49116-ehdmicec-via-command-line.html
Einfach mal damit beschäftigen und irgendwann weißt du welche commands für deinen TV sind und welcher command welchen HDMI Eingang schaltet.Habe mir dann jeweils ein Skript für einen HDMI Eingang geschrieben die ich dann immer einschalte. Ist zwar nicht die schönste Lösung Java Skripte ein und aus zu schalten. Man kann es ja auch über die JS Funktion in Blockly machen. Aber ich schalte von verschiedenen Stellen in ioBroker die HDMI Eingänge vom TV. So muss ich einfach immer nur die Skripte einschalten und nicht jedes mal die JS Funktion im Blockly einsetzen. Kann ja jeder so machen wie er will. Hier ein Beispielskript für HDMI 1 (in der JS Adapter Instanz muss dann unter "Zusätzliche Module" noch
node-ssh
hinzugefügt werden damit du eine SSH Verbindung aufbauen kannst und die commands zur VU senden kannst):const {NodeSSH} = require('node-ssh') const ssh = new NodeSSH() ssh.connect({ host: '192.168.0.23', username: 'root', password: 'password' }).then(() => { ssh.execCommand("echo 0F:82:10:00 > /tmp/hdmicec_cmd"); }) setStateDelayed('javascript.0.scriptEnabled.common.HDMI_1_SZ', false, 3000);
Danach habe ich mir einfach ein Blockly gebastelt welches auf den
0_userdata.0.tv.varActiveIdentifier
triggert und dementsprechend dann die Skripte für die HDMI Eingänge einschaltet.
Das ganze geht aber nur in eine Richtung. Also von der Homekit App zum TV. Rückmeldung bzw. wenn du mit der Fernbedienung die HDMI Eingänge am TV änderst, wird das in Homekit (bzw. ioBroker) nicht angezeigt.
Wenn die Adapter für die verschiedenen TVs auch den aktiven HDMI Eingang auslesen können, hat man natürlich in Homekit den richtigen Eingang. Mein TV ist dafür leider zu alt und funktioniert leider nicht mit den Samsung Adapter.Ist zwar eine "quick and dirty" Lösung, aber funktioniert bei mir super.
-
@el_malto Ahh. Alles klar was du da gemacht hast. Ich hab VTI. Schaue ich mir mal an.
Man kann in Yakha ja kleine Scripte zur Steuerung hinterlegen, dachte du hättest das gemacht. -
@oberfragger achso, weiß nicht ob VTI das auch drin hat.
Um eine Rückmeldung bzw. den richtigen Eingang in der Homekit app zu bekommen wenn man den TV mit der Fernbedienung auf einen anderen HDMI Eingang geschaltet hat, könnte man versuchen den HDMI-CEC log auszulesen und auf bestimmte Einträge zu überprüfen. Da wird alles rein geschrieben was über HDMI-CEC so reingeflogen kommt. Bei mir wird das auch wenn der TV mit der Fernbedienung auf einen anderen HDMI Eingang geschaltet wird angezeigt. Zu finden ist das Log unter\home\root\logs\Enigma2-hdmicec-<date>.log
-
Hat jemand eine Idee, wie ich den Stellwert des Heizungsventils (in %) sinnvoll in Homekit anzeigen kann?
Hab im Moment den Weg über "Current relative humidity" gewählt, aber das ist nicht so schön, wie es vielleicht sein könnte:
-
Hi in die Runde,
hat jemand eine Ahnung wie ich foilgende Thematik direkt im Yakha-Adapter ohne extra Script (das läuft aber vielleicht gehts ja ohne) umsetzen kann?
Auf einem Datenpunkt steht "enabled" oder "disabled". Dieser DP ist NICHT beschreibbar sondern nur eine Statusanzeige.
Zum schalten an sich muss ich "Ausschaltknopf" oder "Asusschaltknopf" drücken. -
@oberfragger das müsste eigentlich mit "multi-state" gehen.
-
Hallo zusammen,
kann mir jemand sagen, wie ich diese zwei Schalter / Doppelschalter erstellen kann?
Vielen Dank.
noch eine andere Frage:
Dieser Thread ist sehr lang und übersichtlich aber mit sehr vielen guten Informationen gefüllt. Ist es denn möglich einen eigenen YAHKA-Forum zu eröffnen? -
@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.