Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Status lesen und Status setzen in unterschiedlichen Objekten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Status lesen und Status setzen in unterschiedlichen Objekten

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      drloksoft last edited by

      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?

      Codierknecht 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @drloksoft last edited by

        @drloksoft
        Bau Dir einen Alias, der beide States zusammenfasst.
        Ist bei Homematic ähnlich.

        b62b7fab-4bef-4c27-ab92-c3d1d02e6a64-image.png

        D 1 Reply Last reply Reply Quote 0
        • D
          drloksoft @Codierknecht last edited by

          @codierknecht super, danke! Ich gucke es mir an!

          1 Reply Last reply Reply Quote 0
          • D
            drloksoft last edited by drloksoft

            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);
                }
            });
            
            Codierknecht 1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @drloksoft last edited by Codierknecht

              @drloksoft
              Das ginge auch ohne Script, indem man im Alias eine passende Konvertierung einrichtet 😉

              Ich persönlich würde eigene States auch unter 0_userdata.0 anlegen. Dieser Namespace ist eigens dafür gemacht.

              D 1 Reply Last reply Reply Quote 0
              • D
                drloksoft @Codierknecht last edited by

                @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. 😑

                Codierknecht 1 Reply Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @drloksoft last edited by Codierknecht

                  @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:

                  2af92fd1-4200-4b72-ad6e-397ed5648d57-grafik.png

                  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 wie JSON.parse(val).temperature.

                  Den Alias kann man dann wunderbar visualisieren:

                  f27af71e-e82a-492a-a3a3-7471ef1ba54c-grafik.png

                  D 1 Reply Last reply Reply Quote 0
                  • D
                    drloksoft @Codierknecht last edited by

                    @codierknecht AAAH! Das ist ja einfacher, als ich dachte. DANKESCHÖÖN!

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    918
                    Online

                    31.9k
                    Users

                    80.2k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    328
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo