Sprachausgabe auf Google Home

Einmal muss ich noch stören, sorry :grinning_face_with_smiling_eyes:

Hast du eine Ahnung wie ich die SysVar bei Node Red bei Funktion einfüge?

return {
  payload: {
type: "MEDIA",
contentType: "audio/vnd.wav",
streamType: "BUFFERED",
    media: [
      { url: "http://192.168.178.169/addons/sounds/1.wav" },
      { url: "http://192.168.178.169/addons/sounds/0,2.wav" },
      { url: "msgid: 'adb342a0.ba026'" },
    ]
}
}

Viel einfacher. Das Ereignis in Symcon muss nicht auf ‚Änderung‘, sondern auf ‚Aktualisieren‘ stehen :slight_smile: Michael

Stimmt, da ist der Zustand vom virtuellen Taster egal. :smiley:

Bräuchte nur noch Hilfe, wie ich die Variable unter Node Red be Functions einfüge.

return {
  payload: {
type: "MEDIA",
contentType: "audio/vnd.wav",
streamType: "BUFFERED",
    media: [
      { url: "http://192.168.178.169/addons/sounds/1.wav" },
      { url: "http://192.168.178.169/addons/sounds/0.2.wav" },
      { url: "cfa727f.45462d8" },
    ]
}
}

Idee?

warum sollte man in NodeRed einen Virtuellen HM-Taster (das du einen HM-Taster meinst, wäre hilfreich gewesen) schalten, statt direkt mit IPS zu kommunizieren, das ist doch total von hinten durch die Brust ins Auge

Mir ist nichts besseres eingefallen, bin erst seit ein paar Tagen mit NodeRed vertraut.

So ist aktuell mein Flow

[{"id":"ebb5044e.043068","type":"tab","label":"ComingHome neu","disabled":false,"info":""},{"id":"3bab1946.de4706","type":"ccu-value","z":"ebb5044e.043068","name":"","iface":"BidCos-RF","channel":"BidCoS-RF:3 HM-RCV-50 BidCoS-RF:3","datapoint":"PRESS_SHORT","mode":"","start":true,"change":true,"cache":true,"queue":false,"on":0,"onType":"undefined","ramp":0,"rampType":"undefined","working":false,"ccuConfig":"38263145.35ea0e","topic":"${CCU}/${Interface}/${channel}/${datapoint}","x":280,"y":120,"wires":[["c3724351.eb6f6"]]},{"id":"500e1f00.d0c5f","type":"castv2-sender","z":"ebb5044e.043068","name":"Google Wohnzimmer","connection":"83aa6f2a.da5fd","x":1390,"y":500,"wires":[[]],"outputLabels":["msg.payload"]},{"id":"c3724351.eb6f6","type":"delay","z":"ebb5044e.043068","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":630,"y":160,"wires":[["cf4630b8.a5049"]]},{"id":"cf4630b8.a5049","type":"function","z":"ebb5044e.043068","name":"Volume auf 40","func":" return {\n  payload: {\n    app: \"DefaultMediaReceiver\", \n    type: \"VOLUME\",\n    volume: 40 // 0 to 100\n  }\n }","outputs":1,"noerr":0,"initialize":"","finalize":"","x":830,"y":160,"wires":[["500e1f00.d0c5f","3a83d66e.34c37a"]]},{"id":"3a83d66e.34c37a","type":"delay","z":"ebb5044e.043068","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":630,"y":220,"wires":[["c42c6e64.0fb84"]]},{"id":"c42c6e64.0fb84","type":"function","z":"ebb5044e.043068","name":"Willkommen zu Hause","func":"\nreturn {\n  payload: {\ntype: \"MEDIA\",\n    media: {\n      url: \"http://192.168.178.169/addons/usb1/sounds/willkommen.wav\",\n      contentType: \"audio/vnd.wav\", // optional if type can be infered from url file type\n      streamType: \"BUFFERED\", // optional unless you want to send LIVE instead\n  \n    }\n \n  }\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":850,"y":220,"wires":[["500e1f00.d0c5f","883d8624.210e38"]]},{"id":"5dc50147.77c75","type":"function","z":"ebb5044e.043068","name":"Volume auf 30","func":" return {\n  payload: {\n      app: \"DefaultMediaReceiver\", \n    type: \"VOLUME\",\n    volume: 30 // 0 to 100\n  }\n }","outputs":1,"noerr":0,"initialize":"","finalize":"","x":830,"y":280,"wires":[["500e1f00.d0c5f","ef089075.f1f3"]]},{"id":"883d8624.210e38","type":"delay","z":"ebb5044e.043068","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":630,"y":280,"wires":[["5dc50147.77c75"]]},{"id":"ef089075.f1f3","type":"ccu-switch","z":"ebb5044e.043068","name":"Dachfenster","ccuConfig":"38263145.35ea0e","iface":"ReGaHSS","channel":"","sysvar":"Status Dachfenster","sysvarProperty":"value","datapoint":"","datapointProperty":"value","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":620,"y":380,"wires":[["6d1f5214.e7d06c"],["2b50ff53.63a74"],["1fd8c0b4.0ec4ef"]]},{"id":"6d1f5214.e7d06c","type":"function","z":"ebb5044e.043068","name":"Dachfenster offen","func":"\nreturn {\n  payload: {\ntype: \"MEDIA\",\n    media: {\n      url: \"http://192.168.178.169/addons/usb1/sounds/dachfenster-offen.wav\",\n      contentType: \"audio/vnd.wav\", // optional if type can be infered from url file type\n      streamType: \"BUFFERED\", // optional unless you want to send LIVE instead\n  \n    }\n \n  }\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":840,"y":360,"wires":[["500e1f00.d0c5f","dff0c285.1a1b9"]]},{"id":"2b50ff53.63a74","type":"function","z":"ebb5044e.043068","name":"Dachfenster halboffen","func":"\nreturn {\n  payload: {\ntype: \"MEDIA\",\n    media: {\n      url: \"http://192.168.178.169/addons/sounds/usb1/dachfenster-halboffen.wav\",\n      contentType: \"audio/vnd.wav\", // optional if type can be infered from url file type\n      streamType: \"BUFFERED\", // optional unless you want to send LIVE instead\n  \n    }\n \n  }\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":850,"y":400,"wires":[["500e1f00.d0c5f","dff0c285.1a1b9"]]},{"id":"1fd8c0b4.0ec4ef","type":"function","z":"ebb5044e.043068","name":"Dachfenster geschlossen","func":"\nreturn {\n  payload: {\ntype: \"MEDIA\",\n    media: {\n      url: \"http://192.168.178.169/addons/sounds/usb1/dachfenster-geschlossen.wav\",\n      contentType: \"audio/vnd.wav\", // optional if type can be infered from url file type\n      streamType: \"BUFFERED\", // optional unless you want to send LIVE instead\n  \n    }\n \n  }\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":860,"y":440,"wires":[["500e1f00.d0c5f","dff0c285.1a1b9"]]},{"id":"dba5a7de.7f5f48","type":"inject","z":"ebb5044e.043068","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"topic","payload":"payload","payloadType":"msg","x":350,"y":380,"wires":[["c3724351.eb6f6"]]},{"id":"faa3e47d.c31e48","type":"ccu-switch","z":"ebb5044e.043068","name":"Rollo","ccuConfig":"38263145.35ea0e","iface":"ReGaHSS","channel":"","sysvar":"Status Rollo","sysvarProperty":"value","datapoint":"","datapointProperty":"value","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":610,"y":560,"wires":[["97464b6c.e8ea98"],["490f984a.8af378"],["d4821215.c2d9f"]]},{"id":"97464b6c.e8ea98","type":"function","z":"ebb5044e.043068","name":"Rollo offen","func":"\nreturn {\n  payload: {\ntype: \"MEDIA\",\n    media: {\n      url: \"http://192.168.178.169/addons/usb1/sounds/rollo-offen.wav\",\n      contentType: \"audio/vnd.wav\", // optional if type can be infered from url file type\n      streamType: \"BUFFERED\", // optional unless you want to send LIVE instead\n  \n    }\n \n  }\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":820,"y":540,"wires":[["500e1f00.d0c5f","b4bb3cc.b344bc"]]},{"id":"490f984a.8af378","type":"function","z":"ebb5044e.043068","name":"Rollo halboffen","func":"\nreturn {\n  payload: {\ntype: \"MEDIA\",\n    media: {\n      url: \"http://192.168.178.169/addons/usb1/sounds/rollo-halboffen.wav\",\n      contentType: \"audio/vnd.wav\", // optional if type can be infered from url file type\n      streamType: \"BUFFERED\", // optional unless you want to send LIVE instead\n  \n    }\n \n  }\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":830,"y":580,"wires":[["500e1f00.d0c5f","b4bb3cc.b344bc"]]},{"id":"d4821215.c2d9f","type":"function","z":"ebb5044e.043068","name":"Rollo geschlossen","func":"\nreturn {\n  payload: {\ntype: \"MEDIA\",\n    media: {\n      url: \"http://192.168.178.169/addons/sounds/usb1/rollo-geschlossen.wav\",\n      contentType: \"audio/vnd.wav\", // optional if type can be infered from url file type\n      streamType: \"BUFFERED\", // optional unless you want to send LIVE instead\n  \n    }\n \n  }\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","x":840,"y":620,"wires":[["500e1f00.d0c5f","b4bb3cc.b344bc"]]},{"id":"dff0c285.1a1b9","type":"delay","z":"ebb5044e.043068","name":"","pauseType":"delay","timeout":"3","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":630,"y":480,"wires":[["faa3e47d.c31e48"]]},{"id":"452fe29d.753f1c","type":"function","z":"ebb5044e.043068","name":"Volume auf 10","func":" return {\n  payload: {\n      app: \"DefaultMediaReceiver\", \n    type: \"VOLUME\",\n    volume: 10 // 0 to 100\n  }\n }","outputs":1,"noerr":0,"initialize":"","finalize":"","x":830,"y":760,"wires":[["be88e9d.81fa418","500e1f00.d0c5f"]]},{"id":"3f27933.563626c","type":"function","z":"ebb5044e.043068","name":"Close","func":" return {\n  payload: {\n      app: \"DefaultMediaReceiver\", \n    type: \"CLOSE\"\n  }\n }","outputs":1,"noerr":0,"initialize":"","finalize":"","x":810,"y":800,"wires":[["500e1f00.d0c5f"]]},{"id":"465c2401.bcdd5c","type":"delay","z":"ebb5044e.043068","name":"","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":640,"y":760,"wires":[["452fe29d.753f1c"]]},{"id":"be88e9d.81fa418","type":"delay","z":"ebb5044e.043068","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":630,"y":800,"wires":[["3f27933.563626c"]]},{"id":"1a752dcb.de8602","type":"inject","z":"ebb5044e.043068","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"payload","payload":"payload","payloadType":"msg","x":230,"y":920,"wires":[[]]},{"id":"b4bb3cc.b344bc","type":"delay","z":"ebb5044e.043068","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":630,"y":700,"wires":[["8b0accc5.13133"]]},{"id":"c6742eca.8ec49","type":"ccu-sysvar","z":"ebb5044e.043068","name":"URLVariable","ccuConfig":"38263145.35ea0e","topic":"ReGaHSS/${Name}","change":true,"cache":true,"x":520,"y":980,"wires":[["e12a7618.a63408"]]},{"id":"5be02830.9582e8","type":"debug","z":"ebb5044e.043068","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1170,"y":920,"wires":[]},{"id":"db236e8d.9329f","type":"ui_toast","z":"ebb5044e.043068","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"","raw":false,"className":"","topic":"","name":"","x":1180,"y":1020,"wires":[]},{"id":"364ac16d.dd446e","type":"ui_button","z":"ebb5044e.043068","name":"","group":"46fbe67a.90cd18","order":3,"width":0,"height":0,"passthru":false,"label":"button","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"URLVariable","payloadType":"global","topic":"Geht?","topicType":"str","x":990,"y":980,"wires":[["db236e8d.9329f","5be02830.9582e8"]]},{"id":"e12a7618.a63408","type":"change","z":"ebb5044e.043068","name":"","rules":[{"t":"set","p":"URLVariable","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":760,"y":980,"wires":[["364ac16d.dd446e"]]},{"id":"1297058c.dd1bda","type":"inject","z":"ebb5044e.043068","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"topic","payload":"payload","payloadType":"msg","x":270,"y":180,"wires":[["c3724351.eb6f6"]]},{"id":"8b0accc5.13133","type":"function","z":"ebb5044e.043068","name":"Willkommen zu Hause","func":"var URLVariable = URLVariable;\n\nreturn {\n  payload: {\ntype: \"MEDIA\",\ncontentType: \"audio/vnd.wav\",\n//streamType: \"BUFFERED\",\n    media: [\n        { url: \"http://192.168.178.169/addons/usb1/sounds/im-wohnzimmer.wav\" },\n        { url: global.get(\"URLVariable\") }, \n\n\n    ]\n}\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":850,"y":700,"wires":[["465c2401.bcdd5c","500e1f00.d0c5f"]]},{"id":"38263145.35ea0e","type":"ccu-connection","name":"localhost","host":"localhost","regaEnabled":true,"bcrfEnabled":true,"iprfEnabled":true,"virtEnabled":true,"bcwiEnabled":false,"cuxdEnabled":false,"regaPoll":true,"regaInterval":"30","rpcPingTimeout":"60","rpcInitAddress":"127.0.0.1","rpcServerHost":"127.0.0.1","rpcBinPort":"2047","rpcXmlPort":"2048","tls":false,"inSecure":false,"authentication":false,"username":"","password":"","queueTimeout":"5000","queuePause":"250","contextStore":""},{"id":"83aa6f2a.da5fd","type":"castv2-connection","name":"","target":"Google Wohnzimmer","host":"","port":"8009"},{"id":"46fbe67a.90cd18","type":"ui_group","name":"Variablen","tab":"36fb2145.947dee","order":2,"disp":true,"width":"6","collapse":false},{"id":"36fb2145.947dee","type":"ui_tab","name":"Variablen","icon":"dashboard","order":2}]

Per IPS sende ich bei Änderung ner Temperatur die aktuelle URL an die CCU3.

<?php

//Skript hier einfügen

$Temperatur = getValue(50943);  // hier die ID deiner Integer-Variable eintragen 

$URL1 = 'http://192.168.178.169/addons/usb1/sounds/temp/';
$URL2 = getValue(50943);
$URL3 = '.wav';
$URLVariable = $URL1 . $URL2 . $URL3 ;

Auslöser der Flows ist IPS per Ereignis.

Was kann ich deiner Meinung nach optimieren? Bin für alle Ideen offen.

Ist das ganze auch irgendwie ohne NodeRed möglich?
Wollte ungerne für so eine Sache extra NodeRed installieren.
Funktioniert dieses Castnow noch auf dem Raspberry oder ist das überholt ?

Hallo,

wie kann ich denn im NodeRed direkt mit IPS kommunizieren? Also anstatt einen HM-Taster im IPS auslösen., um den Flow auszuführen, den Flow über IPS aktivieren?

Zuerst erzeugst Du ein TTS File mit dem Modul Text to Speech (AWS Polly) auf dem Symcon Server.
Danach verschiebst Du das erzeugte File in das Symcon/webfront/user Verzeichnis und gibts ihm immer denselben Namen, Bsp:

$filepath = IPS_GetKernelDir() . ‚webfront‘ . DIRECTORY_SEPARATOR . ‚user‘ . DIRECTORY_SEPARATOR . „tts.mp3“;
$text_message = „Hello“;
$file = TTSAWSPOLLY_GenerateFile(12345, $text_message);
rename($file, $filepath); // move file and rename to be always the same

Setz jetzt den Pfad für den Node-Red Aufruf, Bsp:
$filename = „http://192.168.1.1:1880/tts“;

Sende alles an den Node-Red Server:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $filename);
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
curl_exec($ch);
curl_close($ch);

In Node-Red verwendest Du einen „http in“ Node als Trigger mit „get /tts.mp3“ und rufst den Node via curl aus Symcon auf.
Parse die Payload mit „json string & object“ und sende alles an die Google Assistant IP Adresse mit „cast“
Cast ist ein Pluging welches Du zusätzlich in Node-Red installieren musst.
image

Tom

Also ich bräuchte nur den Teil mit dem Trigger :smiley:

[{"id":"fd61dc92f510b816","type":"function","z":"ac6eaeb7e2291a12","name":"Hier deinen Flow anhängen und diesen Node weg","func":"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":180,"wires":[[]]},{"id":"5d177343a2bf811c","type":"http in","z":"ac6eaeb7e2291a12","name":"","url":"/sprachausgabe","method":"get","upload":false,"swaggerDoc":"","x":240,"y":160,"wires":[["51562f84d246ab83","fd61dc92f510b816"]]},{"id":"51562f84d246ab83","type":"http response","z":"ac6eaeb7e2291a12","name":"","statusCode":"","headers":{},"x":400,"y":300,"wires":[]}]

den Teil importieren, statt dem letzten Node deinen Flow anhängen und aufrufen mit


$filename = "http://192.168.178.169:1880/sprachausgabe";
$contents = Sys_GetURLContent($filename);

Damit startet er nur den Flow, wenn du Parameter wie eine Datei oder Text übergeben willst, musst du es hinten an die Sprachausgabe als Parameter anhängen

@TomF bei deinem Flow fehlt auf jeden Fall http-Response, sonst geht es nur 1X und wartet auf Timeout
Und für eine Sprachausgabe musst du bei NodeRed es nicht von IPS im TTS machen, das kann NodeRed selber besser.

Den Teil rufe ich PHP in Symcon auf? Erhalte da leider eine Fehlermeldung.

Aufruf über

$filename = "http://192.168.178.169/addons/red/sprachausgabe";

geht. Danke dir, wieder eine super Hilfe von dir. :slightly_smiling_face:

Bei dir ist die Basis-Adresse für die Web-Request wohl anders als der Node-Red-Standard, deswegen musst du statt über Port 1880 wohl über den URL-Part/addons/red/ gehen.

Das scheint so bei „Redmatic“ zu sein, hatte gesehen das du es auf der CCU3 laufen hast bzw. als Addon, du hättest es auch nativ installieren können.

1 „Gefällt mir“