NEWS
Status lesen und Status setzen in unterschiedlichen Objekten
-
Hallo Ihr lieben,
ich möchte gerne meine Klimaanlage mit Iobroker steuern. Es gibt keinen direkten Adapter für Fujitsu Airstage Geräte, daher nehme ich dne Airstage Adapter für Home Assistant und versuche über den HASS Adapter HA mit Iobroker VIS zu steuern. Grundsätzlich funktioniert das ganz gut. Allerdings gibt es bei der Steuerung der Klimaanlage eine kleine Hürde, über die ich nicht komme, denn das schreiben von Werten funktioniert in einer anderen Variable, als die Statusanzeige der Werte.
Mit dem Widget "Radio button (steps)" kann ich eine Leiste mit buttons erstellen, die in der Iobroker Variable "hass.0.entities.climate.106838462bc1.set_hvac_mode" den Modus der Klimaanlage setzt. Modus sind: "Off, Dry, Cool, Auto, Heat". Der Wert wird dann durch den HASS Adapter and Home Assistant übergeben, wo er dann durch den Airstage Adapter an die Klimaanlage übergeben wird.Die Variable hass.0.entities.climate.106838462bc1.set_hvac_mode dient allerdings nur als trigger. Den aktuellen Status sehe ich in der Variable hass.0.entities.climate.106838462bc1.state.
Soweit funktioniert das ganz gut und solange ich alles mit Iobroker steuere, sehe ich den zuletzt gestzten Wert auch in hass.0.entities.climate.106838462bc1.set_hvac_mode und sehe die Buttons im "richtigen" Zustand. Wenn nun jemand mit einer Funkfernbedienung den Status verändert, bleibt der Zustand in hass.0.entities.climate.106838462bc1.set_hvac_mode noch auf dem von Iobroker gesetzten Wert, obwohl sich der Zustand in hass.0.entities.climate.106838462bc1.state geändert hat.
Nun möchte ich, dass die Radio-Buttons den aktuellen Status aus hass.0.entities.climate.106838462bc1.state anzeigen, aber beim drücken das Objekt hass.0.entities.climate.106838462bc1.set_hvac_mode ändern.
Ach ja, hass.0.entities.climate.106838462bc1.state ist natürlich schreibgeschützt, daher kann ich den aus Iobroker heraus nicht setzen.
Hat dazu jemand eine Idee?
Kann ich die Logik in VIS umsetzen, oder muss ich ein JavaScript schreiben, welches auf Änderungen von hass.0.entities.climate.106838462bc1.state achtet und diesen Zustand dann in hass.0.entities.climate.106838462bc1.set_hvac_mode setzt? -
@drloksoft
Bau Dir einen Alias, der beide States zusammenfasst.
Ist bei Homematic ähnlich. -
@codierknecht super, danke! Ich gucke es mir an!
-
Um den Spaß zu erhöhen benötigt der AirStage Adapter in HASS einen string-json wert. Wenn ich den Wert durch das ioBroker VIS-2 Material Thermostat Widget setze, erhalte ich die Fehlermeldung:"Please make sure to provide a stringified JSON as value to set relevant fields! Please refer to the Readme for details!". Also schreibe ich nun den Wert aus dem Widget in ein anderes Objekt, welches ich manuell erstellt habe "javascript.0.AirConControl.WohnzimmerSetTemp" und greife den Wert mit einem JavaScript ab, um ihn dann als string-json in das Fujitsu Airstage Objekt des HASS zu schreiben.
Falls das mal jemand benötigt, hier das Script:
on({id: 'javascript.0.AirConControl.WohnzimmerSetTemp', change: "any"}, function (obj) { const targetTemperature = obj.state.val; // Prüfen, ob der Wert gültig ist if (typeof targetTemperature === 'number' && !isNaN(targetTemperature)) { const jsonString = JSON.stringify({ temperature: targetTemperature }); // JSON-String in den Home Assistant Datenpunkt schreiben setState('hass.0.entities.climate.106838462bc1.set_temperature', jsonString, (err) => { if (err) { console.error("Fehler beim Schreiben der Temperatur:", err); } else { console.log(`Temperatur erfolgreich auf ${targetTemperature} gesetzt.`); } }); } else { console.warn("Ungültiger Temperaturwert:", targetTemperature); } });
-
@drloksoft
Das ginge auch ohne Script, indem man im Alias eine passende Konvertierung einrichtetIch persönlich würde eigene States auch unter
0_userdata.0
anlegen. Dieser Namespace ist eigens dafür gemacht. -
@codierknecht danke für die Tipps. Hast Du einen Tipp wo ich herausfinden kann, wie ich die Konvertierung zu schreiben habe? Ich finde es nicht.
-
@drloksoft sagte in Status lesen und Status setzen in unterschiedlichen Objekten:
Hast Du einen Tipp wo ich herausfinden kann, wie ich die Konvertierung zu schreiben habe?
Zum Beispiel so:
Ich habe also einen Alias vom Typ "Zahl".
Der guckt im Beispiel auf 2 States. Einer vom Typ "Zahl", der den aktuellen Wert liefert und einen vom Typ "Json", in den beim Schreiben ein Json geschrieben wird.
JSON.stringify({temperature: val})
.Falls beim Lesen auch Json kommt, könnte da statt
val
auch das Json geparst werden. Also sowas wieJSON.parse(val).temperature
.Den Alias kann man dann wunderbar visualisieren:
-
@codierknecht AAAH! Das ist ja einfacher, als ich dachte. DANKESCHÖÖN!