Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. Ich kann keine Homematic Kaneelen zu Enums addieren, nur States

    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

    Ich kann keine Homematic Kaneelen zu Enums addieren, nur States

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

      Hallo,

      vor einige Tagen laufe ich ohne CCU: ich verwende das Raspberry HomeMatic Funkmodul und hmcom.

      Bevor meine Migration hatte ich mit dem hm-rega Adaptors alle meine CCU Räumen in iobroker importiert. Die Importiertierte enum.rooms inkludieren "nur" die Channels, nicht die States.

      Jetzt versuche ich in iobroker neue Homematic Geräten zu meine Räumen zu addieren. Leider kann ich dort keine Channels selektieren, nur die States haben Checkboxes. Das mach danach aber mit meinem JavaScript Problemen.

      Zum Beispiel brauche ich hm-rpc.0.xxxxxx:2 zu der Gruppe zu addieren und nicht hm-rpc.0.xxxxxx:2.SETPOINT.
      827_selectionproblem.png

      1 Reply Last reply Reply Quote 0
      • eric2905
        eric2905 last edited by

        Hi,

        moment, verstehe ich Dich richtig:

        Du willst im ioBroker bestimmte Geräte bestimmten Räumen zuordnen?

        Das geht doch, meines Wissens, nur auf der CCU.

        Oder habe ich Dich da jetzt völlig falsch verstanden?

        Gruß,

        Eric

        1 Reply Last reply Reply Quote 0
        • Jey Cee
          Jey Cee Developer last edited by

          @Eric: Ganze Geräte lassen sich nicht unter ioBroker hinzufügen, aber die einzelnen Datenpunkte schon.

          @vegetto: Nein zurzeit geht das nicht, man muss alle Datenpunkte einzeln hinzufügen. Was für ein Problem genau hast du?

          1 Reply Last reply Reply Quote 0
          • V
            vegetto last edited by

            Danke für die schnelle Antwort!

            Wenn ich die States addiere, funktioniert danach das $ - Selector in Javascript nicht:

            $('state[id=.SETPOINT](rooms='livingRoom')').each(function(id, i){
                    log(id);
                    //registerTermostat(roomName, id);
                });
            
            

            Ich habe alle States von meinem Thermostat zu der "LivingRoom" Raum addiert, aber das Selector findet es nicht. Für die andere Enums, die ich vom CCU importiert habe, geht es.

            1 Reply Last reply Reply Quote 0
            • Jey Cee
              Jey Cee Developer last edited by

              Ok, interessant. Ich hab noch nie die Aufzählung in einem Script benutzt.

              Kannst du mir mal den Funktionierenden code posten und etwas erklären damit ich das bei mir nachbauen kann.

              Wäre sehr nett von dir.

              1 Reply Last reply Reply Quote 0
              • V
                vegetto last edited by

                Das komplettes Script ist etwas lang. Es mach das Folgendes:
                <list type="decimal">4. Such alle Thermostanten für jedes Raum in iobroker

                1. Für jedes Thermostat gibt es ein Temperatur abhängig von Haus State (ich habe mein State Machine in anderem Thread gepostet). Setz das SETPOINT für das Thermostat

                2. Findet ob ein Fersternsensor in gleiches Zimmer gibt. Wenn ja, registriere nach Änderungen so das Tempertur gesenkt werden kann, wenn das Fenster auf ist. Ja, dass kann man auch mit eine direkte Verbindung machen aber dann halten die Akus in Thermostat nicht so lang.

                Sag mir bitte, ob Du mehr Info brauchst.

                Danke!

                `var TEMPERATURES_ID="javascript.0.roomTemperatures";
                var STATE_PREVIEW_ID="javascript.0.homeStatePreview"/*homeStatePreview*/;
                var DEFAULT_TEMP=21;
                var OPEN_WINDOW_TEMP=12;
                var ICON="../hm-rpc/icons/42_hm-cc-tc_thumb.png";
                
                //Register all rooms
                rooms = getEnums('rooms');
                for (var i in rooms){
                    var roomName = rooms[i].name;
                    log("ROOM: "+roomName);
                    $('state[id=.SETPOINT](rooms='+roomName+')').each(function(id, i){
                        //log(id);
                        registerTermostat(roomName, id);
                    });
                }
                
                function registerTermostat(roomName, termostatTempId){
                    log("Registering termostat for room "+roomName);
                    //Create grouping states
                    createState(TEMPERATURES_ID, 0 ,true, {role:"roomTemperatures",icon:ICON});
                    var roomTemperatures4Termostat = TEMPERATURES_ID+"."+roomName;
                    createState(roomTemperatures4Termostat, 0, true, {role:"roomTemperatures",icon:ICON});
                
                    //Get the state names from STATE_PREVIEW
                    homeStates = getObject(STATE_PREVIEW_ID).common.states;
                    for (var state in homeStates) {
                        //Create variable to store temperature for this room and state
                        var stateName=TEMPERATURES_ID+"."+roomName+"."+homeStates[state];
                        createState(stateName,
                                    DEFAULT_TEMP,
                                    false,
                                    {role:"roomTemperatures",
                                     unit: "°C",
                                     icon: ICON,
                                     desc: "Temperature for room "+roomName+" and state "+homeStates[state]
                                    });
                        //log("VALUE: "+JSON.stringify(getState(stateName)));
                        //Register for changes in this variable
                        on(stateName, cb(setTemperature));
                    }
                
                    //Register window states
                    var windowIDs = [];
                    $('state[id=.STATE](rooms='+roomName+')').each(function(id, i){
                        var object = getObject(id);
                        if(object.native.CONTROL == "DOOR_SENSOR.STATE") {
                            log("Detected window ("+roomName+"):"+getObject(id).common.name+" - "+id);
                            windowIDs.push(id);
                            on(id, cb(setTemperature));
                        }
                    });
                
                    //Register for changes in home state
                    on(STATE_PREVIEW_ID, cb(setTemperature));
                
                    //Set current temperature for this room
                    setTemperature();
                
                    //Function that sets the temperature for this room
                    function setTemperature(){
                        //Are windows open?
                        var windowsOpen = false;
                        for (var i in windowIDs){
                            windowsOpen |= getState(windowIDs[i]).val;
                        }
                
                        if ( windowsOpen) {
                            log ("Target temp for "+roomName+": "+OPEN_WINDOW_TEMP+" (OPEN WINDOW)");
                            setStateIfChanged(termostatTempId,OPEN_WINDOW_TEMP);
                        } else {
                            //Retrieve target temperature for this state
                            var previewState = getState(STATE_PREVIEW_ID).val;
                            var previewStateName = homeStates[previewState];
                            var targetTemperateState = getState(roomTemperatures4Termostat+"."+previewStateName);
                            //If we just create the state, then it might still not be available -> use DEFAULT_TEMP
                            var targetTemperate = targetTemperateState ? targetTemperateState.val  : DEFAULT_TEMP ;
                
                            //Convert to float
                            targetTemperate = parseFloat(targetTemperate);
                
                            //Set temperature
                            log ("Target temperature for "+roomName+" and previewState "+previewStateName+" is "+targetTemperate);
                            setStateIfChanged(termostatTempId,targetTemperate);
                        }
                
                    }
                
                }` [/i][/i]
                
                1 Reply Last reply Reply Quote 0
                • eric2905
                  eric2905 last edited by

                  @Jey Cee:

                  @Eric: Ganze Geräte lassen sich nicht unter ioBroker hinzufügen, aber die einzelnen Datenpunkte schon. `
                  Das ist mir schon klar, ich hatte nur gefragt, ob ich das erste Posting richtig verstanden habe.

                  @vegetto:

                  Haben die anderen Geräte, bei denen es funktioniert, auch einen Unterstrich ("_") im Namen?

                  Gruß,

                  Eric

                  1 Reply Last reply Reply Quote 0
                  • V
                    vegetto last edited by

                    @eric2905:

                    @Jey Cee:

                    @Eric: Ganze Geräte lassen sich nicht unter ioBroker hinzufügen, aber die einzelnen Datenpunkte schon. `
                    @vegetto:

                    Haben die anderen Geräte, bei denen es funktioniert, auch einen Unterstrich ("_") im Namen?

                    Eric `

                    Ja, haben sie: bei mir heissen sie alle thermostat_ <room name="">Z.B. dieses Raum (von CCU importiert) funktioniert: da sind alle Teilen type="channel".</room>
                    827_enum_works.png

                    1 Reply Last reply Reply Quote 0
                    • V
                      vegetto last edited by

                      Ok, ich habe es gefunden: es hat nicht mit Stated oder Kannelen zu tun sondern mit dem Raum ID. Das Problem ist im iobroker admin UI:

                      • das id wird bei Raum addieren/editieren immer zu Kleinschrift geändert. Z.B. mein "Livingroom" würde zu "livingroom" verändert.

                      • der Raum "Name" kann nicht editiert werden: bei mir heisst "Livingroom" und damit passt es nicht mit dem ID. Dann habe ich versucht es zu "livingroom" zu ändern aber das geht nicht: es bleibt "Livingroom".

                      Ich habe iobroker gestoppt, die Räumen in /opt/iobroker/iobroker-data/objects.json editiert, dort die Räumen ID und Nammen in sync gebracht, iobroker gestartet und jetzt läuft alles wieder.

                      Könnte jemand bitte verifizieren, ob das Problem reproduziert werden kann? Dann würde ich ein Defekt aufmachen und vielleicht schauen, ob ich ein Pull Request schaffe.

                      Danke!
                      3476_log.txt

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      854
                      Online

                      31.9k
                      Users

                      80.2k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      1363
                      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