NEWS
Alexa Sprachausgabe Temperatur und sonstiges
-
Hallo,
ich habe Node Red im IO Broker laufen und möchte gerne Alexa fragen können wie z.B. die Temperatur im Büro ist.Mein Ansatz war jetzt wie folgt:
-
IO Brocker IN als Angabe der tatsächlichen Temperatur.
Unter dem Node wird mir grün angezeigt, dass er verbunden ist
und zusätzlich steht dort die richtige Temperatur. -
vsh-virtual-device Node (dort habe ich die Pro Variante, 12€/Jahr)
Alexa can retrieve device state ist aktiviert
Beide verbunde passiert folgendes:
Alexa, wie ist die Temperatur im Büro?
Antwort von Alexa: Die Temperatur im Büro ist 0 gradPrinzipiell funktioniert es schon mal.
Wenn ich einen Debug an den IO Brocker IN hänge wird mir statt der richtigen Temperatur 1 angezeigt.Habe dann mit einem Change Node versucht den richtigen Wert zu bekommen.
Der Change Node gibt mir nun die richtige Temperatur aus. Wenn ich diesen an den vsh-virtual-device anschließe funktioniert es leider immer noch nicht. Ansage weiterhin 0 grad.
Was muss ich im change angeben, damit der VSH dies lesen und umsetzen kann.IO Broker ist so eingestellt:
vsh ist so eingestellt:
Hier habe ich nur zum schicken schnell meinen Account rausgenommen, der ist natürlich drinnen und funktioniert auch.Herzlichen Dank für Eure Hilfe schon mal.
-
-
-
@heinloth und was kommt bei dem "debug 4" als Ergebnis ?
-
@djmarc75 bei Debug 4 kommt 1 als Ergebnis
-
-
@heinloth ich kann das leider nicht sehen... andere Auflösung bitte - und die Ausgabe vom debug4 ist da nicht zu sehen - oder ich sehe es nicht
-
@heinloth Ja das ist verkehrt - die Node erwartet ein Objekt mit der Temperatur und dort musst Du auch noch angeben, dass es sich um das device rauskommt.
Auch was @DJMarc75 schreibt ist richtig - ist komisch, was da rauskommt.
Schau erst mal das aus der iobroker-IN Node rauskommt. Wenn da nur eine Zahl rauskommt (ich hoffe Du hast Deine Adapterkonfiguration angepasst ) .
Poste doch bitte mal das Debug-Fenster des kompletten Nachrichtenobjektes.
Die Systemkonsole kannst Du von mir aus angehakt lassen.
Im Prinzip musst du die Node aber mit einem Objekt speisen.
Wichtig ist auch - zu posten was aus der Alexa Node rauskommt - also auch mal eine Debug Node reinmachen.
Die Temperatur ist eine Eigenschaft der payload. Du musst der Node auf jedenfall ein Objekt übergeben.
Und wie ich aus den Bilder ersehe, hast Du wohl Deinen Adapterkonfig nicht umgestellt - deshalb musst Du den String vorher noch in Zahl konvertieren.
-
Wichtig ist auch den output der Node.
Eventuell musst Du in das Objekt auch den Sensortyp angeben.
Also setze:
msg.payload.type auf Zeichenkette: Temperature Sensor (weiß aber nicht, ob das notwendig ist - da das in der Node ja festgelegt ist).
Wichtig ist aber die source anzugeben.
Über die source in der Ausgabe der Node ist bei "Nicht Sensoren" für Dich wichtig, die Nachrichten vom Typ device auszufiltern, damit Du erkennst ob die Nachricht von Dir kommt oder von Alexa selbst.
-
@mickym Hallo, bei ioBroker-Werte in Zeichenkette konvertieren war der Haken gesetzt, diesen habe ich jetzt rausgenommen.
Habe jetzt dann deinen Change "erstelle Objekte" erstellt und so eingesetzt und meinen Change rausgeschmissen.
Schon funktioniert es, jetzt sagt mir Alexa wie die Temperatur im Büro ist.Herzlichen Dank an alle Helfer.
Sorry, ich bin hier noch richtiger Anfänger. -
@heinloth sagte in Alexa Sprachausgabe Temperatur und sonstiges:
Hallo, bei ioBroker-Werte in Zeichenkette konvertieren war der Haken gesetzt, diesen habe ich jetzt rausgenommen.
Na nun musst halt bei Deinen anderen Flows noch aufpassen, dass die damit zurecht kommen, wenn nicht mehr in Zeichenkette umgewandelt wird.
Aber je früher du das umgestellt hast, desto geringer ist der Umstellungsaufwand.Freut mich, dass es funktioniert.
-
Ich habe es so gelöst und es läuft sehr gut:
- Verzögerung von 2000ms, damit bei mehreren Amazon Echos der richtige reagiert und nicht alle durcheinander quatschen
- serialNumber, damit der Amazon Echo antwortet, den du angesprochen hast und nicht irgendeiner. Relevant bei mehreren Echos im Haus:
-Lese Temperatur Warmwasser = Ein Wert meines Viessmann Adapters:
- Join, um alle Werte zu einem "Klumpen" zusammenzufassen.
- Dann noch die Function. Ist das Komplizierte von allem:
var device = msg.payload[0] var str = msg.payload[1]; var res = str.substr(0, 5); msg.payload = Math.round(res); msg.payload = "Das Warmwasser ist " + msg.payload + " °C warm"; msg.url = ""; var command = "alexa2.0.Echo-Devices." + device + ".Commands.speak" msg.topic = command; return msg;
- Am Ende noch der "Speak"-Block, fertig
-
@wannseesprinter
Danke!
Könntest du evtl. den ganzen Flow einmal hier einstellen?Im Grund müsste das ja auch so mit einer Haustürklingel funktionieren, oder?
Also wenn ich das Klingelsignal abfange und dann eine Sprachausgabe bekomme wie z.B. "Jemand hat an der Haustür geklingelt!"
Hat das jemand so umgesetzt und hat eine Idee?Danke und Gruß
-
@strobel Hi, wenn du das Klingelsignal im Iobroker hast, ist das kein Problem. Über ne Iobroker In Node den Status des Klingeldatenpunkts überwachen (bei Änderung) dann über nen Switch schauen ob das Signal wahr ist, bzw. was du als Ausgabe hast, dann den passenden Text per Change Node ins payload schreiben und dann per Iobroker Out auf den Speak Command Datenpunkt des Echos geben der es sagen soll, bzw. mehrere anhängen oder ne Gruppe erstellen und den Speak Command nehmen,
So ungefähr.
[ { "id": "4330db7a9b818880", "type": "ioBroker in", "z": "9e1c0edb.e6d2d", "name": "Klingelsignal", "topic": "*", "payloadType": "value", "onlyack": "", "func": "rbe", "gap": "", "fireOnStart": "false", "outFormat": "MQTT", "x": 190, "y": 1480, "wires": [ [ "d5c1511b7b623e08" ] ] }, { "id": "8610433cdd85d9b4", "type": "change", "z": "9e1c0edb.e6d2d", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "Hallo, es ist jemand an der Haustür", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 530, "y": 1480, "wires": [ [ "62bce7f956e61d03" ] ] }, { "id": "d5c1511b7b623e08", "type": "switch", "z": "9e1c0edb.e6d2d", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "true" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 350, "y": 1480, "wires": [ [ "8610433cdd85d9b4" ] ] }, { "id": "62bce7f956e61d03", "type": "ioBroker out", "z": "9e1c0edb.e6d2d", "name": "speak", "topic": "", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 710, "y": 1480, "wires": [] } ]
Edit: Du solltest noch ne Nachrichtenbegrenzung mit einbauen, damit bei Sturmklingeln nicht haufenweise Nachrichten kommen. Geht mit der delay Node.