NEWS
[Frage] Alexa versteht Grad C° nicht
-
Hallo alle zusammen,
Was muss ich tun, damit Alexa auch auf das Wort Grad C° reagiert?
Mit Hilfe von Vardraan hab ich nun dieses Skript zum laufen bekommen:
var forecreation = false; // Default: false. true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden) // Pfad der Lampen, Heizung oder Szenen, welche Du schalten möchtest: // ----------------------------------------------------------------------------- var Heizkoerperthermostat1 = "hm-rpc.1.000397098A3EDA.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen. var Heizkoerperthermostat2 = "hm-rpc.1.000397098A3ED9.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen. var Heizkoerperthermostat3 = "hm-rpc.1.000A15699FE877.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen. var Heizkoerperthermostat4 = "hm-rpc.1.000397098A3FCC.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen. var Wandthermostat5 = "hm-rpc.1.000313C99548B8.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen. var Heizkoerperthermostat11 = "hm-rpc.1.000397098A3EDA.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen. var Heizkoerperthermostat21 = "hm-rpc.1.000397098A3ED9.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen. var Heizkoerperthermostat31 = "hm-rpc.1.000A15699FE877.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen. var Heizkoerperthermostat41 = "hm-rpc.1.000397098A3FCC.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen. var Wandthermostat51 = "hm-rpc.1.000313C99548B8.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen. // Datenpunkte anlegen: // ----------------------------------------------------------------------------- var idDatenpunkt = "alexa.Heizung"; // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird createState(idDatenpunkt, 0, forecreation, { // Datenpunkt wird angelegt name: 'Heizung Szenario 1', desc: 'Heizung Szenario 1 an und aus', type: 'number', unit: 'Grad', def: 0, min: 0, max: 100, role: 'value' }); // Funktionen: // ----------------------------------------------------------------------------- // Check ob an, aus oder Zahl // ----------------------------------------------------------------------------- function checking(dp) { dpWert = dp.state.val; if (dpWert == 100) { // <-- Wird ausgeführt wenn AN. setState(Heizkoerperthermostat11, 1 /* dpWert durch gewünschten WERT ersetzen */); setState(Heizkoerperthermostat21, 1 /* dpWert durch gewünschten WERT ersetzen */); setState(Heizkoerperthermostat31, 1 /* dpWert durch gewünschten WERT ersetzen */); setState(Heizkoerperthermostat41, 1 /* dpWert durch gewünschten WERT ersetzen */); setState(Wandthermostat51, 1 /* dpWert durch gewünschten WERT ersetzen */); } else if (dpWert === 0) { // <-- Wird ausgeführt wenn AUS. setState(Heizkoerperthermostat11, 2 /* dpWert durch gewünschten WERT ersetzen */); setState(Heizkoerperthermostat21, 2 /* dpWert durch gewünschten WERT ersetzen */); setState(Heizkoerperthermostat31, 2 /* dpWert durch gewünschten WERT ersetzen */); setState(Heizkoerperthermostat41, 2 /* dpWert durch gewünschten WERT ersetzen */); setState(Wandthermostat51, 2 /* dpWert durch gewünschten WERT ersetzen */); } else { // <-- Wird ausgeführt wenn eine Zahl zwischen 1 und 99 genannt wird und die Zahl ist über "dpWert" abrufbar. setState(Heizkoerperthermostat1 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert); setState(Heizkoerperthermostat2 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert); setState(Heizkoerperthermostat3 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert); setState(Heizkoerperthermostat4 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert); setState(Wandthermostat5 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert); } } // Abfrage des Datenpunkts: // ----------------------------------------------------------------------------- on({id: "javascript.0." + idDatenpunkt, change:'any'}, function (dp) { checking(dp); });
Alexa regaiert nun auf AN und AUS richtig.
Alexa reagiert auf die Ansage schalte die Heizung auf 18 –> Ergebnis Heizung schaltet auf 18 Grad
Alexa reagiert auf die Ansage schalte die Heizung auf 18% --> Ergebnis Heizung schaltet auf 18 Grad
Alexa reagiert aber nicht auf die Ansage schalte die Heizung auf 18 Grad --> Ergebnis Ich kann den befehl für dieses Gerät nicht ausführen.
Wisst ihr, wo der Fehler liegt?
Lieben Gruß, Karim.
-
Seltsam … ich stelle bei mir die Temperaturen mit "Alexa, stelle Wohnzimmer Heizung auf 19 Grad" problemlos ein.
Wozu soll denn das Script gut sein (ich habe es mir NICHT angesehen)?
Ich stelle die Heizung (über die CCU) komplett ohne Script, nur mit Alexa und den Smartnames zu den jeweiligen Datenpunkten.
Gruß,
Eric
Von unterwegs getippert
-
Aber dann musst du für jeden Befehl ein eigenes Skript anlegen, oder?
An und für sich funktioniert auch alles so wie es soll, nur bei dem Wort Grad quittiert sie den Dienst.
Mit dem Skript schalte ich bei An und Aus ein Profil und sonst mit den Zahlen eben die Temperatur.
Lieben Gruß, Karim.
-
Du brauchst für einzelne Aktionen (Temperatur, Licht / Strom über einen Aktor) kein Script.
Lies Die mal diese Anleitung (inkl. der verlinkten Unterseuten) durch ==> http://www.iobroker.net/?page_id=5859&lang=de
Da sollte fast alles erklären.
Gruß,
Eric
Von unterwegs getippert
-
Du brauchst für einzelne Aktionen (Temperatur, Licht / Strom über einen Aktor) kein Script.(…) `
Aber genau das ist der Punkt: Es sind mehrere Aktionen / Geräte gleichzeitig mit einem Befehl…ich stelle bei mir die Temperaturen mit "Alexa, stelle Wohnzimmer Heizung auf 19 Grad" problemlos ein. `
Schreibe mal bitte die raw-Werte des Datenpunkts auf den Du verknüpft hast. -
Aber genau das ist der Punkt: Es sind mehrere Aktionen / Geräte gleichzeitig mit einem Befehl… `
Solche "Gruppen" (Alle Lampen i Wohnzimmer sowie TV & Co) habe ich in unter Alexa definiert - ich schalte z.B. mit "Alexa, schälte Wohnzimmer komplett aus" alles im Wohnzimmer ab.Schreibe mal bitte die raw-Werte des Datenpunkts auf den Du verknüpft hast. `
Ich spreche den Datenpunkt "SET_TEMPERATURE" der Thermostate an.Gruß,
Eric
Von unterwegs getippert
-
Solche "Gruppen" (Alle Lampen i Wohnzimmer sowie TV & Co) habe ich in unter Alexa definiert - ich schalte z.B. mit "Alexa, schälte Wohnzimmer komplett aus" alles im Wohnzimmer ab. `
Genau, und deswegen geht hier nur AUS/AN.Mit dem Wort "Heizung" kann man (ohne Skript) nicht AN/AUS und Temperatur gemeinsam steuern…
Ich spreche den Datenpunkt "SET_TEMPERATURE" der Thermostate an. `
Klick bitte bei dem entsprechenden Datenpunkt am Ende auf den Bleistift und dann auf "raw(nur Experten)" und kopiere das Ergebnis hier rein. -
Ähm ja, ich lese eifrig mit und versuche zu verstehen
Danke für eure Hilfe!
Lieben Gruß, Karim.
-
Klick bitte bei dem entsprechenden Datenpunkt am Ende auf den Bleistift und dann auf "raw(nur Experten)" und kopiere das Ergebnis hier rein. `
Kann ich gern machen, wenn ich nach meinem Urlaub wieder zu Hause bin - aber wozu brauchst Du den RAW-Export eigentlich genau?Gruß,
Eric
Von unterwegs getippert
-
Kann ich gern machen, wenn ich nach meinem Urlaub wieder zu Hause bin - aber wozu brauchst Du den RAW-Export eigentlich genau? `
Super, vielen Dank! Und noch einen schönen und erholsamen Urlaub!Welche Worte Alexa versteht/annimmt, wird unter Anderem von der Definition des Datenpunkts vorgegeben…
-
Welche Worte Alexa versteht/annimmt, wird unter Anderem von der Definition des Datenpunkts vorgegeben… `
Das ist mir schon klar - da ich lediglich den SmartName-Eintrag (über den Cloud-Adapter) angepasst habe, ist meinerseits als Änderung vom Standard nur der SmartName-Eintrag vorhanden. Der Rest wird mit Deinen Daten identisch sein.Gruß,
Eric
Von unterwegs getippert
-
Das ist mir schon klar - da ich lediglich den SmartName-Eintrag (über den Cloud-Adapter) angepasst habe, ist meinerseits als Änderung vom Standard nur der SmartName-Eintrag vorhanden. Der Rest wird mit Deinen Daten identisch sein. `
Leider nicht, da der DP für Alexa selbst definiert wurde, um eben unterschiedliche "Szenen" für an, aus und "Zahl" zu ermöglichen.Aber Du hast mich auf eine Idee gebracht:
@Karim: Gehe mal bitte auf "Objekte" und Poste die raw-Daten des Datenpunkts: "hm-rpc.1.000397098A3EDA.1.SET_POINT_TEMPERATURE".
-
Ideen sind immer gut
Hier ist alles, was da drinne steht.
{ "common": { "name": "Heizkörperthermostat Arbeitszimmer 1.SET_POINT_TEMPERATURE", "type": "number", "unit": "°C", "def": 4.5, "min": 4.5, "max": 30.5, "read": true, "write": true }, "native": { "UNIT": "�C", "CONTROL": "HEATING_CONTROL_HMIP.SETPOINT", "ID": "SET_POINT_TEMPERATURE", "TYPE": "FLOAT", "MAX": 30.5, "MIN": 4.5, "OPERATIONS": 7, "FLAGS": 1, "DEFAULT": 4.5 }, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "hm-rpc.1.000397098A3EDA.1.SET_POINT_TEMPERATURE", "type": "state" }
Lieben Gruß, Karim.
-
jetzt bitte noch die raw-Angaben des selbstangelegten Datenpunkts (also "javascript.0.alexa.Heizung")
-
Du meinst diesen hier, oder?
{ "common": { "name": "Heizung schalten", "engineType": "Javascript/js", "source": "var forecreation = false; // Default: false. true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden)\r\n\r\n// Pfad der Lampen oder Szenen, welche Du schalten möchtest:\r\n// -----------------------------------------------------------------------------\r\nvar Heizkoerperthermostat1 = \"hm-rpc.1.000397098A3EDA.1.SET_POINT_TEMPERATURE\"; // Pfad zwischen Anführungszeichen eintragen.\r\nvar Heizkoerperthermostat2 = \"hm-rpc.1.000397098A3ED9.1.SET_POINT_TEMPERATURE\"; // Pfad zwischen Anführungszeichen eintragen.\r\nvar Heizkoerperthermostat3 = \"hm-rpc.1.000A15699FE877.1.SET_POINT_TEMPERATURE\"; // Pfad zwischen Anführungszeichen eintragen.\r\nvar Heizkoerperthermostat4 = \"hm-rpc.1.000397098A3FCC.1.SET_POINT_TEMPERATURE\"; // Pfad zwischen Anführungszeichen eintragen.\r\nvar Wandthermostat5 = \"hm-rpc.1.000313C99548B8.1.SET_POINT_TEMPERATURE\"; // Pfad zwischen Anführungszeichen eintragen.\r\nvar Heizkoerperthermostat11 = \"hm-rpc.1.000397098A3EDA.1.ACTIVE_PROFILE\"; // Pfad zwischen Anführungszeichen eintragen.\r\nvar Heizkoerperthermostat21 = \"hm-rpc.1.000397098A3ED9.1.ACTIVE_PROFILE\"; // Pfad zwischen Anführungszeichen eintragen.\r\nvar Heizkoerperthermostat31 = \"hm-rpc.1.000A15699FE877.1.ACTIVE_PROFILE\"; // Pfad zwischen Anführungszeichen eintragen.\r\nvar Heizkoerperthermostat41 = \"hm-rpc.1.000397098A3FCC.1.ACTIVE_PROFILE\"; // Pfad zwischen Anführungszeichen eintragen.\r\nvar Wandthermostat51 = \"hm-rpc.1.000313C99548B8.1.ACTIVE_PROFILE\"; // Pfad zwischen Anführungszeichen eintragen.\r\n\r\n// Datenpunkte anlegen:\r\n// -----------------------------------------------------------------------------\r\nvar idDatenpunkt = \"alexa.Heizung\"; // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird\r\ncreateState(idDatenpunkt, 0, forecreation, { // Datenpunkt wird angelegt\r\n name: 'Heizung Szenario 1',\r\n desc: 'Heizung Szenario 1 an und aus',\r\n type: 'number',\r\n unit: '°C',\r\n def: 0,\r\n min: 0,\r\n max: 100,\r\n role: 'value.temperature'\r\n});\r\n\r\n// Funktionen:\r\n// -----------------------------------------------------------------------------\r\n\r\n// Check ob an, aus oder Zahl\r\n// -----------------------------------------------------------------------------\r\nfunction checking(dp) {\r\n dpWert = dp.state.val;\r\n \r\n if (dpWert == 100) { // <-- Wird ausgeführt wenn AN.\r\n setState(Heizkoerperthermostat11, 1 /* dpWert durch gewünschten WERT ersetzen */);\r\n setState(Heizkoerperthermostat21, 1 /* dpWert durch gewünschten WERT ersetzen */);\r\n setState(Heizkoerperthermostat31, 1 /* dpWert durch gewünschten WERT ersetzen */);\r\n setState(Heizkoerperthermostat41, 1 /* dpWert durch gewünschten WERT ersetzen */);\r\n setState(Wandthermostat51, 1 /* dpWert durch gewünschten WERT ersetzen */);\r\n } else if (dpWert === 0) { // <-- Wird ausgeführt wenn AUS.\r\n setState(Heizkoerperthermostat11, 2 /* dpWert durch gewünschten WERT ersetzen */);\r\n setState(Heizkoerperthermostat21, 2 /* dpWert durch gewünschten WERT ersetzen */);\r\n setState(Heizkoerperthermostat31, 2 /* dpWert durch gewünschten WERT ersetzen */);\r\n setState(Heizkoerperthermostat41, 2 /* dpWert durch gewünschten WERT ersetzen */);\r\n setState(Wandthermostat51, 2 /* dpWert durch gewünschten WERT ersetzen */);\r\n } else { // <-- Wird ausgeführt wenn eine Zahl zwischen 1 und 99 genannt wird und die Zahl ist über \"dpWert\" abrufbar.\r\n setState(Heizkoerperthermostat1 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);\r\n setState(Heizkoerperthermostat2 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);\r\n setState(Heizkoerperthermostat3 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);\r\n setState(Heizkoerperthermostat4 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);\r\n setState(Wandthermostat5 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);\r\n }\r\n}\r\n\r\n// Abfrage des Datenpunkts:\r\n// -----------------------------------------------------------------------------\r\non({id: \"javascript.0.\" + idDatenpunkt, change:'any'}, function (dp) {\r\n checking(dp);\r\n});", "enabled": true, "engine": "system.adapter.javascript.0", "debug": false, "verbose": false }, "type": "script", "_id": "script.js.Skripte.Heizung_schalten", "native": {}, "acl": { "object": 1638 } }
Lieben Gruß, Karim.
-
Da stimmt mit dem Datenpunkt etwas nicht.
Mache bitte folgendes:
1. Dein Skript stoppen.
2. Im Cloud-Adapter die Heizung löschen
3. Den Datenpunkt der Heizung manuell löschen.
4. Dein Skript durch dieses ersetzen und Skript starten:
! ` > var forecreation = true; // Default: false. true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden)
// Pfad der Lampen, Heizung oder Szenen, welche Du schalten möchtest:
// –---------------------------------------------------------------------------
var Heizkoerperthermostat1 = "hm-rpc.1.000397098A3EDA.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen.
var Heizkoerperthermostat2 = "hm-rpc.1.000397098A3ED9.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen.
var Heizkoerperthermostat3 = "hm-rpc.1.000A15699FE877.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen.
var Heizkoerperthermostat4 = "hm-rpc.1.000397098A3FCC.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen.
var Wandthermostat5 = "hm-rpc.1.000313C99548B8.1.SET_POINT_TEMPERATURE"; // Pfad zwischen Anführungszeichen eintragen.
var Heizkoerperthermostat11 = "hm-rpc.1.000397098A3EDA.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen.
var Heizkoerperthermostat21 = "hm-rpc.1.000397098A3ED9.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen.
var Heizkoerperthermostat31 = "hm-rpc.1.000A15699FE877.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen.
var Heizkoerperthermostat41 = "hm-rpc.1.000397098A3FCC.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen.
var Wandthermostat51 = "hm-rpc.1.000313C99548B8.1.ACTIVE_PROFILE"; // Pfad zwischen Anführungszeichen eintragen.
// Datenpunkte anlegen:
// -----------------------------------------------------------------------------
var idDatenpunkt = "alexa.Heizung"; // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird
createState(idDatenpunkt, 0, forecreation, { // Datenpunkt wird angelegt
name: 'Heizung Szenario 1',
desc: 'Heizung Szenario 1 an und aus',
type: 'number',
unit: '°C',
def: 4.5,
min: 4.5,
max: 30.5,
read: true,
write: true,
smartName: {
de: 'Heizung'
}
});
// Funktionen:
// -----------------------------------------------------------------------------
// Check ob an, aus oder Zahl
// -----------------------------------------------------------------------------
function checking(dp) {
dpWert = dp.state.val;
if (dpWert == 30.5) { // <-- Wird ausgeführt wenn AN.
setState(Heizkoerperthermostat11, 1 /* dpWert durch gewünschten WERT ersetzen */);
setState(Heizkoerperthermostat21, 1 /* dpWert durch gewünschten WERT ersetzen */);
setState(Heizkoerperthermostat31, 1 /* dpWert durch gewünschten WERT ersetzen */);
setState(Heizkoerperthermostat41, 1 /* dpWert durch gewünschten WERT ersetzen */);
setState(Wandthermostat51, 1 /* dpWert durch gewünschten WERT ersetzen */);
} else if (dpWert == 4.5) { // <-- Wird ausgeführt wenn AUS.
setState(Heizkoerperthermostat11, 2 /* dpWert durch gewünschten WERT ersetzen */);
setState(Heizkoerperthermostat21, 2 /* dpWert durch gewünschten WERT ersetzen */);
setState(Heizkoerperthermostat31, 2 /* dpWert durch gewünschten WERT ersetzen */);
setState(Heizkoerperthermostat41, 2 /* dpWert durch gewünschten WERT ersetzen */);
setState(Wandthermostat51, 2 /* dpWert durch gewünschten WERT ersetzen */);
} else { // <-- Wird ausgeführt wenn eine Zahl zwischen 4.6 und 30.4 genannt wird und die Zahl ist über "dpWert" abrufbar.
setState(Heizkoerperthermostat1 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);
setState(Heizkoerperthermostat2 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);
setState(Heizkoerperthermostat3 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);
setState(Heizkoerperthermostat4 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);
setState(Wandthermostat5 /* Lampe1 durch gewünschten Heizkörper ersetzen */, dpWert);
}
}
// Abfrage des Datenpunkts:
// -----------------------------------------------------------------------------
on({id: "javascript.0." + idDatenpunkt, change:'any'}, function (dp) {
checking(dp);
}); `
5. Prüfen ob im Cloud-Adapter die Heizung vorhanden ist -> ggf. den Datenpunkt manuell wieder eintragen.6. Alexa neue Geräte suchen lassen.
7. Probieren ob an, aus und (z.B.) 22 Grad geht.
8. Hier berichten!
-
Ich habe es genau so gemacht wie du es beschrieben hast.
Der neue Datenpunkt wurde automatisch angelegt und war auch direkt im Cloudadapter hinterlegt.
Die Steuerung über Grad funktioniert jetzt, leider geht nun An und Aus nicht mehr. Sie sagt sie kennt den Befehl nicht :?
-
Ich habe es genau so gemacht wie du es beschrieben hast.
Der neue Datenpunkt wurde automatisch angelegt und war auch direkt im Cloudadapter hinterlegt.
Die Steuerung über Grad funktioniert jetzt, leider geht nun An und Aus nicht mehr. Sie sagt sie kennt den Befehl nicht :? `
Die muss auch immer rumzicken!!Weiß nicht, ob dass eine, dass andere blockiert. Aber für einen Versuch, kannst Du mal den Teil im Skript wo der Datenpunkt erzeugt wird, wie folgt verändern:
! ````
// Datenpunkte anlegen:
// -----------------------------------------------------------------------------
var idDatenpunkt = "alexa.Heizung"; // Pfad und Name, unter dem in der Javascript-Instanz der Datenpunkte angelegt wird
createState(idDatenpunkt, 0, forecreation, { // Datenpunkt wird angelegt
name: 'Heizung Szenario 1',
desc: 'Heizung Szenario 1 an und aus',
type: 'number',
unit: '°C',
def: 4.5,
min: 4.5,
max: 30.5,
role: "value", // <- kommt dazu. Eventuell auch statt "value", "level" versuchen!
read: true,
write: true,
smartName: {
de: 'Heizung'
}
})Skript neu starten und Alexa neu suchen lassen…
-
Nein leider bei beiden Befehlen das selbe Ergebnis:
"Der Befehl funktioniert für das Gerät Heizung nicht".
Habe jeweils immer wieder den Datenpunkt gelöscht und neu anlegen lassen.
Ist es egal ob da nun " " oder ' ' steht?
-
Ist es egal ob da nun " " oder ' ' steht? `
Theoretisch ja, 'xyz' wäre in dem Fall aber wirklich sauberer.Dann habe ich aktuell keine Idee mehr, sorry…