Apple Homekit: die Hoffnung stirbt zuletzt

Begonnen von eldrik, 23 Januar 2015, 13:57:07

Vorheriges Thema - Nächstes Thema

littlemoses

#1875
Ich bastel jetzt seit ein paar Tagen mit homebridge + fhem rum und habe mit meinen MAX! thermostaten das gleiche problem wie andere hier (sobald ich ein thermostat oder wandthermostat einbinde geht nichts mehr, werfe ich sie wieder raus geht wieder alles). Jetzt habe ich mir mal den source code angesehen (wollte wissen wie das ding funktioniert und auch mal paar debug ausgaben wegen dem max problem einbauen). Wenn ich das setzen der mappings für das wandthermostat ändere (von den automatisch gefunden werten auf fixe) dann wird das thermostat erkannt und ich kann die temperatur setzen, modus umschalten geht allerdings auch nicht (scheint noch ein anderes "problem" zu sein). Hier mal mein rum gehacke:

      this.mappings.thermostat.min = 0;
      this.mappings.thermostat.max = 30;
      this.mappings.thermostat.step = 1;

Damit gehts .. mit den gefunden werten (5.0 / 30.0 / 0.5) gehts nicht (ich habe bewusst mal keine floats sondern ints verwendet, damit scheint es zu gehen). @justme irgend ne idee wieso homekit mit den anderen werten nix anfangen kann bzw. dann so rumzickt (ich vermute jetzt einfach mal das es an den floats liegt). Anregungen was ich hier sonst noch testen könnte um das Problem weiter einzukreisen?

update:

Jetzt habe ich mal die Werte manuell eingetragen, damit gehts auch (also mit den floats) ... wenn ich den code so ändere:

      this.mappings.thermostat.min = parseFloat(values[0]);
      this.mappings.thermostat.max = parseFloat(values[values.length-2]);
      this.mappings.thermostat.step = parseFloat(values[1] - values[0]);

Gehts auch mit den selbst gefundenen .. sieht also so aus als wären da strings dabei. Jetzt frag ich mich grade wieso das setzen des Modus (Aus / Heizen / Kühlen / Auto) nichts bringt .. ich würde gerne, sobald ich die temperatur mal geändert habe, wieder auf auto stellen können.

justme1968

ich schaue mir das mit den werten noch mal an. aber auch das ging bei mir. welche node version verwendest du?

kannst du mal schauen ob es reicht aus der 0.5 eine 1 zu machen? laut homekit api und auch laut homekit accessory simulator sind sogar 0.1 erlaubt und dort sogar der default.

kannst du mal in reading2homekit schauen ob das Math.round vielleicht seltsame werte liefert und ob ein zusätzliches toFixed(1) hilft?

der mode ist nicht implementiert. es gibt kein 1:1 mapping von den homekit modes auf die max oder homematic modes und noch keine wirklich gute idee wie man das lösen kann.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

littlemoses

#1877
Die nodejs version ist 4.2.2 (hat aber wohl nix damit zu tun, weil ich auch schon andere probiert hatte: 0.12.x / 4.x / 5.x). Nochmal wegen den Werten, vlt. hast du mein update nicht gesehen aber es liegt wohl doch nicht an den floats sondern an der Tatsache das min / max strings sind und der damit vermutlich nicht klar kommt (der debug print sieht aber dann halt trotzdem ok aus). Ich kenn mich javascript jetzt nicht wirklich aus, aber der Step von 0.5 kommt wohl raus weil der die strings implizit in zahlen konvertiert und dann damit rechnet. Das mit den modes finde ich schade .. wenn das jetzt irgendwie noch sinnvoll ginge wäre das super. (Persönlich würde es mir reichen wenn der auto modus in homekit den modus in fhem auf auto setzt und der rest einfach ignoriert wird).

Wenn ich mir den code hier so angucke:

    } else if( reading == 'temperature'
               || reading == 'measured'
               || reading == 'measured-temp'
               || reading == 'desired-temp'
               || reading == 'desired'
               || reading == 'desiredTemperature' ) {
      value = parseFloat( value );

      if( this.mappings.thermostat
          && this.mappings.thermostat.min
          && this.mappings.thermostat.max
          && reading == this.mappings.thermostat.reading ) {
        if( value < this.mappings.thermostat.min )
          value = this.mappings.thermostat.min;
        else if( value > this.mappings.thermostat.max )
          value = this.mappings.thermostat.min;

        if( this.mappings.thermostat.step )
          value = Math.round(value / this.mappings.thermostat.step) * this.mappings.thermostat.step;
      }

Wenn da der vergleich value <> min/max true ist weil floats mit strings verglichen werden, wird value auf den string gesetzt ...
Es sollte doch auch in javascript min / max operatoren geben (Math.max / Math.min) damit kann man das vermutlich ohne die vielen if / else da schreiben:

value = Math.min(Math.max(value, this.mappings.thermostat.min), this.mappings.thermostat.max));

justme1968

ok... ich denke wir haben das problem. da dürfen natürlich keine strings sein. da ist beim kopieren etwas schief gegangen.

in meinen debug ausgaben habe ich genau deshalb immer noch den datentyp mit drin. nur für diese beiden werte nicht ...

ich checke die reparierte version gleich ein.

die 0.5 sind ok.

das problem mit dem mode ist unter anderem das ich in homekit ja auch den aktuellen mode darstellen muss damit du den neuen auswählen kannst. und bei hm und bei max beeinflussen sich temperatur und mode.

du kannst mal probieren in zeile 2097 und 2111 thermostat_modex wieder in thermostat_mode zu ändern. funktioniert es dann wie du es dir vorstellst?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

littlemoses

#1879
Ich hab mich beim code angucken schon gefragt ob das ein typo ist (modex) ... wollte ich grade probieren, jetzt geht grade allerdings gar nix mehr (gerät hinzufügen auf dem iphone bringt nen fehler nachdem ich den code eingegeben habe, auch ohne die max thermostate)  :o

Ich hab mir grade mal den change im github angesehen:

value = (Math.round(value / this.mappings.thermostat.step) * this.mappings.thermostat.step).toFixed(1);

Das toFixed da verstehe ich nicht, laut help:

"Convert a number into a string"

Damit ist dann value doch wieder ein string (wenn ich das toFixed wegnehme gehts wieder)

(Wenn ich dann das modex nach mode ändere funktioniert leider nichts mehr)

justme1968

du warst zu schnell.

da hat noch ein parseFloat gefehlt. der grund für das toFixed ist das es manchmal rundungs fehler auf grund der float genauigkeit gibt.

gruss
  andre

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

littlemoses

#1881
Ich verstehe nicht wieso du das jetzt auf eine stelle abschneidest .. die normierung da sollte schon dafür sorgen dass da keine unpassenden werte rauskommen.

(Ich gehe davon aus das der step keine allzu krummen werte enthält)

Aber gut, das kann man natürlich auch so lassen .. schadet ja nix (sieht nur komisch aus). Hast ne idee wieso das mit dem mode umsetzen gar nicht geht (muss da noch ein filter / umsetzen nur bestimmter werte rein?)

justme1968

es gibt leider beispiele bei denen ohne das abschneiden noch eine hand voll nullen und dann irgend ein unsinn kommt.   auch bei 0.5 oder 0.1.

eigentlich sollte es reichen die x weg zu machen. ich habe es aber nach der umstellung auf das neue api noch nicht wieder getestet. ich schaue es mir morgen an.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

littlemoses

hmm, ok .. finde ich seltsam. Danke schon mal im voraus für deine Hilfe beim mode umsetzen (pressiert auch nicht so sehr) ;)

Calle78

Hey zusammen, bei mir läufts auch mit dem Script von @l2r. Strange ist nur das nach einem Neustart der Status zwar auf Running steht aber erst wirklich in Eve erreichbar ist wenn ich noch einmal stoppe und wieder starte. Kann mir jemand einen Tipp geben wie ich debuggen kann was da schief läuft oder hat sogar jemand eine spontane Idee?

ciao Carlo
6,RPi4,Buster,HMLAN,HMIP,HUE,ZigBee,piVCCU,C868,C433,JEELINK,ESA2000,IRT1500,HMSECSC2,HMCCTC,HMSECSD,HM132030,HMSCI3FM,HMPB2WM55-2,FHT80,FBAHA,WithingsWS50,Jalousien,Siri,HMS100WD,Fritzbox,Harmony,Twilight,Weather,PushBullet,FHT-9998,HM-CC-TC,Trackr,RolloPort

Todo:ZWave(MieleOfen),LEDWIFI

l2r

hi,

schau dir mal die Logs an

tail -f /var/log/homebridge.log
tail -f /var/log/homebridge.err


Da sollte eig alles drin stehen
Wissen ist Macht.
Ich weiß nix.
Macht nix.

CarstenF

Nach dem Update der Bridge laufen jetzt auch die MAX Thermostate und lassen sich auch über SIRI korrekt ansteuern. Vielen Dank an alle klugen Köpfe. !!
Raspberry Pi4
CUL 868, CUL 433, LaCrosse Gateway, Zigbeetomqtt2, HUE, Homematic
Max-Cube umgeflasht
MAX!, FhemtoFhem, Homebridge, FhemConnector, IR_Gateway und sonst auch noch allerlei Spielzeug....

zauberfee

So, nix an der Konfiguration geändert, aber Eve will nicht mehr.
Was habe ich versucht:


  • Homebridge gestoppt
  • persist-Ordner gelöscht
  • in der config.json "name" und "username" geändert
  • unter Einstellungen/Datenschutz/Homekit im Iphone die Homekit Konfiguration zurückgesetzt
  • Homebridge gestartet
  • in EVE (oder ) neues Device hinzufügen und 314-45-154 eingegeben
----> hinzufügen fehlgeschlagen! Verbindung mit Zubehör nicht möglich!

Ich raste aus! Was eine Sch****! Jmd noch nen Tipp?

piet_pit

Hallo,
du hast die Pin in der "config.json" bewusst geändert??
viele Gruesse
Pit
FHEM Latest Revision: 29615
Raspberry Pi 3, Rasbian-Stretch
FRITZ!Box 7690
HM-Mod-RPI-PCB, JeeLink
CUNO 1.47

benkler

wollte mich hier auch nochmal bedanken, für alle die an dem Thema arbeiten.
Ihr seit einfach Spitze.
Ich hätte gerne selbst mehr dazu beigetragen, aber ich bin noch relativ neu in dem Them Fhem.

Bie mir funktioniert die Homebridge nun auch mit meinen Thermostaten.
Wenn ihr das mit dem Mode noch hinbekommt wär es noch richtig genial :)
FHEM (Docker), Homebridge (Docker), Homematic IP, nanoCUL 433 + 868 a-culfw, jeeLink Clone, Diverse IT Sensoren, ems-esp, Netatmo und noch einiges mehr