NEWS
Ich kann keine Homematic Kaneelen zu Enums addieren, nur States
-
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 -
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
-
-
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.
-
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.
-
Das komplettes Script ist etwas lang. Es mach das Folgendes:
<list type="decimal">4. Such alle Thermostanten für jedes Raum in iobroker-
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
-
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]
-
-
@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.Haben die anderen Geräte, bei denen es funktioniert, auch einen Unterstrich ("_") im Namen?
Gruß,
Eric
-
@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 -
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 -