NEWS
Temperaturen über Node RED und Alexa abfragen!
-
@Fenian
Vielen, Vielen danke, es funktioniert! Für das xxxxxxx in alexa2.0.Echo-Devices.XXXXXXX.Commands.speak habe ich die Alexa ID Nummer eingesetzt.
Jetzt habe ich nur noch eine Frage. Gibt es eine Möglichkeit sich nur von der angesprochenen Alexa die Antwort nach der Temperatur geben zu lassen? -
@LaBamba Den Flow dafür hatte ostseereiter oben schon gepostet
-
@Apropo
Denn habe ich ja verwendet. Jedoch spricht immer nur eine Alexa zu mir. Also immer die Gleiche. Egal wo ich es abfrage. -
@Fenian
Wie kann ich in deiner Programmierung
var device = msg.payload[0]
var str = msg.payload[1];
var res = str.substr(0,5);
msg.payload = Math.round(res);
msg.payload = "Es sind " + msg.payload + " Grad in der Küche";
msg.url = "";
var command = "alexa2.0.Echo-Devices." + device + ".Commands.speak"
msg.topic = command;
return msg;Die Genauigkeit mit einer Nachkommastelle aufrufen?
-
@LaBamba Bei mir antwortet damit die Alexa die ich auch anspreche. Habe eine Verzögerung von 1000 eingestellt.
-
@Apropo
Ich habe es schon mit verschiedenen Verzögerungen probiert. Jedoch antwortet immer nur eine Alexa. -
@LaBamba
Nachkommastellen: Die Zeile mit Math.round löschen und mit "msg.payload = msg.payload.replace('.', ',');" ersetzen. -
Wenn du wirklich die ID fest eingetragen hast, kann ja auch nur dieses Gerät antworten.
Vielen, Vielen danke, es funktioniert! Für das xxxxxxx in alexa2.0.Echo-Devices.XXXXXXX.Commands.speak habe ich die Alexa ID Nummer eingesetzt.
@TorbenNW sagte in Temperaturen über Node RED und Alexa abfragen!:
@LaBamba
Nachkommastellen: Die Zeile mit Math.round löschen und mit "msg.payload = msg.payload.replace('.', ',');" ersetzen.@LaBamba sagte in Temperaturen über Node RED und Alexa abfragen!:
Die Genauigkeit mit einer Nachkommastelle aufrufen?
Ich verstehe das eher so, dass er nur eine Nachkommastelle möchte.
Hier ist ein aktualisierter Flow, die Temperatur wird auf eine Nachkommastelle gerundet, In der Funktion "Temperatur auslesen" kannst die Nachkommastellen ändern, in dem du den Wert in den Klammern von "toFixed" änderst.
[ { "id": "ec7f4314.1eedc8", "type": "tab", "label": "Temperaturansagen", "disabled": false, "info": "" }, { "id": "65deed5.6cc5594", "type": "amazon-echo-hub", "z": "ec7f4314.1eedc8", "port": "80", "enableinput": false, "x": 101, "y": 32, "wires": [ [ "80bb9b8e.7a2f" ] ] }, { "id": "80bb9b8e.7a2f", "type": "amazon-echo-device", "z": "ec7f4314.1eedc8", "name": "Temperatur Schlafzimmer", "topic": "", "x": 317, "y": 32, "wires": [ [ "bdf3fc4.797e08" ] ] }, { "id": "bdf3fc4.797e08", "type": "delay", "z": "ec7f4314.1eedc8", "name": "", "pauseType": "delay", "timeout": "1000", "timeoutUnits": "milliseconds", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 544, "y": 32, "wires": [ [ "d2824f5f.c71228", "6c8128bc.8f56f" ] ] }, { "id": "d2824f5f.c71228", "type": "ioBroker get", "z": "ec7f4314.1eedc8", "name": "serialNumber", "topic": "alexa2.0.History.serialNumber", "attrname": "payload", "payloadType": "value", "x": 765, "y": 33, "wires": [ [ "e6f6d7b0.3c86d8" ] ] }, { "id": "6c8128bc.8f56f", "type": "ioBroker get", "z": "ec7f4314.1eedc8", "name": "temperature", "topic": "deconz.0.Sensors.39.temperature", "attrname": "payload", "payloadType": "value", "x": 753.5, "y": 80, "wires": [ [ "e6f6d7b0.3c86d8" ] ] }, { "id": "e6f6d7b0.3c86d8", "type": "join", "z": "ec7f4314.1eedc8", "name": "", "mode": "custom", "build": "array", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": false, "timeout": "", "count": "2", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 1097, "y": 34, "wires": [ [ "dcda6519.e5d8" ] ] }, { "id": "dcda6519.e5d8", "type": "function", "z": "ec7f4314.1eedc8", "name": "Temperatur auslesen", "func": "var device = msg.payload[0]\nvar str = msg.payload[1];\ntemperature = parseFloat(str).toFixed(1);\nmsg.payload = \"Es sind \" + temperature + \" Grad im Schlafzimmer\";\nmsg.url = \"\";\nvar command = \"alexa2.0.Echo-Devices.\" + device + \".Commands.speak\"\nmsg.topic = command;\nreturn msg;\n", "outputs": 1, "noerr": 0, "x": 1270, "y": 34, "wires": [ [ "e004e70b.81ef58", "3618a2a9.f1e2a6" ] ] }, { "id": "e004e70b.81ef58", "type": "ioBroker out", "z": "ec7f4314.1eedc8", "name": "speak", "topic": "", "ack": "false", "autoCreate": "false", "x": 1441.5, "y": 34, "wires": [] }, { "id": "3618a2a9.f1e2a6", "type": "debug", "z": "ec7f4314.1eedc8", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "x": 1425, "y": 138, "wires": [] } ]
-
Danke, es hat ein paar Tage gedauert aber nun läuft es. Irgendwie habe ich aber anscheinend immer wieder Aussetzer mit der DB Verbindung bei Node-Red.
Darf ich dich mal Fragen wie du deine Schaltvorgänge in Node RED verknüpfst.
Ich hatte ca. 250 mit Alexa Local Node gemacht.
Es funktioniert generell. Jedoch seit einiger Zeit findet die Gerätesuche auf Alexa keine neuen Geräte mehr. Das ist echt nervig! -
@LaBamba
Wenn du in Node Red was an Alexa übergeben willst am besten erst den Adapter neu starten und dann die Geräte suchen lassen. -
So der Flow zum abfragen läuft schon mal 1a, könnte ich hier kombinieren ? Wenn ich Frage, Alexa wie ist die Temperatur das sie dann die Temp sagt und anschließen die Luftfeuchte ? Hab den Code von @Fenian
[ { "id": "3ff22dd8.7fec9a", "type": "tab", "label": "Temperaturansagen", "disabled": false, "info": "" }, { "id": "ffc59ffe.a9a58", "type": "amazon-echo-hub", "z": "3ff22dd8.7fec9a", "port": "80", "enableinput": false, "x": 100, "y": 64, "wires": [ [ "60cd043e.a012ec" ] ] }, { "id": "60cd043e.a012ec", "type": "amazon-echo-device", "z": "3ff22dd8.7fec9a", "name": "Temperatur Schlafzimmer", "topic": "", "x": 330, "y": 64, "wires": [ [ "880ed474.c7dfb8", "7cb2ff99.6c53d" ] ] }, { "id": "880ed474.c7dfb8", "type": "ioBroker get", "z": "3ff22dd8.7fec9a", "name": "serialNumber", "topic": "alexa2.0.History.serialNumber", "attrname": "payload", "payloadType": "value", "x": 565, "y": 64, "wires": [ [ "af872fed.2e36d" ] ] }, { "id": "7cb2ff99.6c53d", "type": "ioBroker get", "z": "3ff22dd8.7fec9a", "name": "Raumklima Schlafzimmer temperature", "topic": "deconz.0.Sensors.39.temperature", "attrname": "payload", "payloadType": "value", "x": 633.5, "y": 111, "wires": [ [ "af872fed.2e36d" ] ] }, { "id": "af872fed.2e36d", "type": "join", "z": "3ff22dd8.7fec9a", "name": "", "mode": "custom", "build": "array", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": false, "timeout": "", "count": "2", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 880, "y": 65, "wires": [ [ "5517ab3.6b2e7d4" ] ] }, { "id": "5517ab3.6b2e7d4", "type": "function", "z": "3ff22dd8.7fec9a", "name": "Temperatur auslesen", "func": "var device = msg.payload[0]\nvar str = msg.payload[1];\nvar res = str.substr(0, 5);\nmsg.payload = Math.round(res);\nmsg.payload = \"Es sind \" + msg.payload + \" Grad im Schlafzimmer\";\nmsg.url = \"\";\nvar command = \"alexa2.0.Echo-Devices.\" + device + \".Commands.speak\"\nmsg.topic = command;\nreturn msg;\n", "outputs": 1, "noerr": 0, "x": 1053, "y": 65, "wires": [ [ "90bca55d.0d3348" ] ] }, { "id": "90bca55d.0d3348", "type": "ioBroker out", "z": "3ff22dd8.7fec9a", "name": "speak", "topic": "", "ack": "false", "autoCreate": "false", "x": 1224.5, "y": 65, "wires": [] } ]
-
@D3ltoroxp
Ja, das geht, einfach noch mit ner Get Node die Luftfeuchte abfragen, dann aber bei Atribute was anderes als payload eintragen und das dann als Variable mit in den Text eintragen.
Meine Lösung sieht so aus.[ { "id": "a4b2c539.1cc178", "type": "ioBroker get", "z": "f4971799.ec9a88", "name": "Temperatur Schalfen", "topic": "0_userdata.0.Korrektur.Temperatur_Schlafen", "attrname": "payload", "payloadType": "value", "x": 220, "y": 420, "wires": [ [ "355a80e9.515da" ] ] }, { "id": "e5ab3971.1bd0d8", "type": "function", "z": "f4971799.ec9a88", "name": "speak", "func": "msg.payload = Math.round(msg.payload * 10) / 10;\nmsg.hue = Math.round(msg.hue);\nvar temp = msg.payload;\nvar hue = msg.hue\nmsg.payload = ' Die Temperatur im Schlafzimmer beträgt ' + temp + ' Grad;' + ' Die Luftfeuchtigkeit liegt bei' + hue + ' Prozent';\nreturn msg;", "outputs": 1, "noerr": 0, "x": 630, "y": 420, "wires": [ [ "a23ad8e5.f3d738" ] ] }, { "id": "355a80e9.515da", "type": "ioBroker get", "z": "f4971799.ec9a88", "name": "Feuchte Schlafen", "topic": "deconz.0.Sensors.22.humidity", "attrname": "hue", "payloadType": "value", "x": 450, "y": 420, "wires": [ [ "e5ab3971.1bd0d8" ] ] }, { "id": "a23ad8e5.f3d738", "type": "ioBroker get", "z": "f4971799.ec9a88", "name": "serialNumber", "topic": "alexa2.0.History.serialNumber", "attrname": "topic", "payloadType": "value", "x": 800, "y": 420, "wires": [ [ "efbeb8f1.cd9808" ] ] }, { "id": "efbeb8f1.cd9808", "type": "function", "z": "f4971799.ec9a88", "name": "Echo Ausgabe", "func": "\n\nmsg.topic = 'alexa2.0.Echo-Devices.' + \n\n msg.topic + '.Commands.speak';\n\nreturn msg;\n", "outputs": 1, "noerr": 0, "x": 980, "y": 420, "wires": [ [ "3e5d48e8.73bec8" ] ] }, { "id": "3e5d48e8.73bec8", "type": "ioBroker out", "z": "f4971799.ec9a88", "name": "", "topic": "", "ack": "false", "autoCreate": "false", "x": 1140, "y": 420, "wires": [] } ]
-
Vielen Dank,
ich hatte das jetzt über ioBroker und Alexa gelöst, mit NodeRed als Trigger. Das klappt soweit auch wunderbar. Dennoch vielen Dank. -
@d3ltoroxp Ich hänge gerade auch bei node red. Wie muss ich das Programmieren wenn ich Frage wie hoch ist die Temperatur und sie sagt 23Grad zum Beispiel.
-
@basti97 Na Du hast einen Trigger - der DEinen Flow startet - wohl eine Alexa Node.
Dann fragst Du Deinen Datenpunkt ab und schickst es an den DAtenpunkt als Text der die Sprachausgabe macht. So was ähnliches habe ich gerade in dem Thread gemacht. Allerdings weiß ich ja nicht, ob ihr hier die gleichen Nodes verwendet. -
@mickym Mhh ich wollte das auch über Blockly machen aber dort sagt Alexa "das weiß ich leider nicht".
-
@basti97 Du musst dazu noch in Alexa eine Routine erstellen mit Aktion 5 Sekunden warten. Dann sollte die Meldung nicht kommen.
-
@apropo okay da muss ich mal gucken. Daher dachte ich wenn ich das über node red mache das es einfacher ist.
-
@mickym So hier
In der mitte ist die Temperatur
-
@basti97 Ja das ist es doch schon fast - oder weist Du nicht, wie Du den Text erstellst den Du in die textCommand schicken willst?
Falls es das ist - dann nimm eine Template Node, schreibe den Text da rein, den Du ausgeben willst und für die geholte Temperatur gibtst {{payload}} an der entsprechenden Stelle ein. Das wars.