[Altes Modul] GoogleCast (98_GOOGLECAST.pm)

Begonnen von dominik, 10 Dezember 2015, 22:43:49

Vorheriges Thema - Nächstes Thema

Superposchi

Kann man in die Sprachausgabe mit Speak auch den Inhalt von Devices/Readings einbauen?
Habe mal "set Schlafzimmerlautsprecher speak "Morgen wird [Muelltonnen:next_text] abgeholt", set Test off" versucht-

Dabei wird der Inhalt des Readings einfach übersprungen und er spuckt nur "Morgen wird abgeholt" aus.

Gibts da vielleicht eine Lösung?

Caleus

@Superposchi

ich habe das so gelöst

my $ereigniss = ReadingsVal("MyWeather","condition","");

habe das also als Variable gespeichert und dann

my $ereigniss = ReadingsVal("MyWeather","condition","");
my $draussen = ReadingsVal("THR128_0f_1","temperature","");
$draussen =~ s/\./ komma /;
fhem('set Kueche speak "Guten Morgen, Heute ist '.$day.', der '.$today.', wir haben '.$draussen.' Grad draussen und zur Zeit '.$ereigniss.'')}


mit '.$ereigniss.' wird es dann abgefragt.

Superposchi

Hey, kenne mich mit Variable in Fhem noch gar nicht aus.
Sind das dann vier einzelne Befehle die als Command ins Notify, at, DOIF etc. eingeschrieben werden müssen?
Und ich vermute mal, dass geht nur im Perl-Modus im DOIF, richtig?

Caleus

@Superposchi

nein my $ereigniss ist die Variable und ausgehend von deinem Text würde es so lauten

my $ereigniss = ReadingsVal("Muelltonnen","next_text","");

und dann würdest du in deinem speak abgeleitet von meinem script 

'.$ereigniss.' eintragen

Mfg Caleus

Superposchi

Ja, aber müsste ich das my_ereignis als Command nutzen?
Also praktisch so:
define Benachrichtigung DOIF (Trigger_X) fhem(my $ereigniss = ReadingsVal("Muelltonnen","next_text",""); ('set Lautsprecher speak "Heute wird der '.$ereigniss.'' abgeholt')

Caleus

@Superposchi

ja das geht ABER, und da sollte jemand der da etwas tiefer in der materie ist Antworten,  ich weis nur noch das es etwas mit der Performance zu tuhen hat.

MfG Caleus

MadMax-FHEM

#906
Naja ganz so wird es NICHT gehen, weil:

fhem(my $Variable=...) geht so nicht!
EDIT: zumindest denke ich, dass das auch bei DOIF gilt... Wobei: WARUM IMMER DOIF, wenn es eh nur EINEN "Trigger" gibt? Da ist notify doch locker ausreichend... ;) Aber: jeder wie er will... ;)

ABER: das hat NICHTS mit GoogleCast zu tun!

Das ist entweder: fhem Basics oder Perl oder DOIF (oder alles zusammen)!

Daher: eigenen Thread in (wenn es DOIF ist / sein muss) DOIF öffnen mit der Frage wie man ein Reading eines Devices "abfrägt" und dann in einen set einbaut...

Für notify wäre das so:


define nTest notify Device:RegEx {my $Wert=ReadingsVal("Device","Reading","Ersatzwert");fhem("set AnderesDevice $Wert");}

EDIT: je nachdem wo wie usw. man das eingibt auch mal doppelte etc. Strichpunkte... Da ich sowas ja (immer) in eine Sub auslagere bin ich nicht so firm was die Anzahl der Strichpunkte angeht (außerhalb einer Sub ;)  )...

EDIT: bzw. wenn um die Variable noch was drumrum soll

define nTest notify Device:RegEx {my $Wert=ReadingsVal("Device","Reading","Ersatzwert") . 'noch was anderes';fhem("set AnderesDevice $Wert");}


oder


define nTest notify Device:RegEx {my $Wert=ReadingsVal("Device","Reading","Ersatzwert");fhem("set Chromecast \"was davor $Wert und was danach\"");}



Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Caleus

Ich muss erhlich zugeben das ich mir das oben nicht 100% genau angeschaut habe nur überflogen, ich bitte um entschuldigung.

MadMax-FHEM

Zitat von: Caleus am 03 Dezember 2020, 19:36:08
Ich muss erhlich zugeben das ich mir das oben nicht 100% genau angeschaut habe nur überflogen, ich bitte um entschuldigung.

Locker bleiben!

War ja nicht "gegen" dich, wollte es nur (hoffentlich ;) ) "korrigieren"... :)

Jetzt aber genug zu "nicht (wirklich) GoogleCast Themen" hier... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

Wieso nicht GoogleCast-Thema?
Die Frage bezieht sich doch auf GoogleCast und den Subbefehl speak.

Ob es jetzt ein notify oder DOIF wird spielt doch eigentlich keine Rolle, es geht doch darum wie man den Wert eines readings in den Speak Befehl einbaut.

MadMax-FHEM

#910
Falsch!

Weil es nicht am speak liegt, sondern eben wie du bei DOIF/notify/... oder was immer DU nutzt um den speak Befehl abzusetzen und DORT dann eben ein Reading "abfrägst" und an einen set-Befehl "übergibst"...

Und zwar egal ob es sich um einen speak Befehl oder irgendeinen anderen set Befehl handelt...

Und das hat nun mal mit dem Modul zu tun wo eben der speak-Befehl verwendet wird und eben nicht am speak Befehl selbt...

Und: oben stehen 2 Lösungen, die funktionieren mit SPEAK... ;)

Aber (bei dir) halt nicht wie/womit du den speak Befehl absetzt...
Gleiches würde für jeden anderen set Befehl mit Reading-Abfrage/Übergabe genauso gelten...
Ergo: unabhängig vom speak Befehl...

EDIT: und einmal die richtige Frage im passenden Unterforum (wie vorgeschlagen) gestellt (statt hier weiter ab vom Thema zu schreiben) und du hättest vermutlich schon lang die Lösung...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

Bei der Frage geht es mir um das Verständnis der Logik.
Der Speak-Befehl gehört zum GoogleCastModul - richtig?
Der Speak-Befehl wird von einem Trigger (egal ob notify, at, DOIF oder was auch immer) lediglich ausgelöst - richtig?
Ich kann doch auch den Speak-Befehl komplett ohne Trigger von Hand absetzen und dabei Inhalte von fremden Readings benutzen.

Wieso - und das ist eine generelle Frage - soll die Frage in ein Unterforum für DOIF, notify oder was auch immer?
Ich verstehe einfach die Denkweise weise nicht, möchte es aber gerne.

MadMax-FHEM

#912
Wenn du es nicht verstehen willst: lass es!

Einmal noch, dann bin ich hier "raus"...

Zitat von: Superposchi am 04 Dezember 2020, 10:50:52
Der Speak-Befehl wird von einem Trigger (egal ob notify, at, DOIF oder was auch immer) lediglich ausgelöst - richtig?

Ja aber genau das weitere ist der Trugschluss!

Weil das Abfragen von einem Reading (eines anderen Devices) sich eben danach richtet WO man diese Abfrage des Readings macht, also welche "Mittel" DORT zur Verfügung stehen UND wie die SYNTAX DORT eben aussieht!

Weil (nochmal): oben wurde eine Lösung gepostet, die mit DOIF und Perl bzw. mit notify und Perl funktioniert!

Wenn du aber mittels "setMagic" oder anderen Mechanismen (was DOIF ja bietet) "abfrägst", dann hat das eben was mit DOIF zu tun!

Ebenso WIE Variablen bei einem set-Aufruf übergeben werden (und auch der speak-Befehl ist eben auch "nur" ein set Aufruf) liegt eben auch an dem Modul das den Aufruf ABSETZT (also DOIF/notify/...) und eben nicht am Chromecast oder irgendeinem anderen Modul, dessen set Befehl du aufrufst...
(außer, dass es hier beim Googlecast eben der Wert des set eine Zeichenkette sein "muss" -> ergo due Anführungszeichen brauchst)


Zitat von: Superposchi am 04 Dezember 2020, 10:50:52
Bei der Frage geht es mir um das Verständnis der Logik.
Der Speak-Befehl gehört zum GoogleCastModul - richtig?

Ja und?

Andere Devices/Module haben andere set Befehle...

Und auch bei denen (wie schon zuvor MEHRFACH!! erläutert) kommt es eben auf das NUTZENDE Device (notify/DOIF/at/...) an WIE man eben Werte abfrägt und in einen set BEI DOIF/notify/at "einbaut"...


Zitat von: Superposchi am 04 Dezember 2020, 10:50:52
Ich kann doch auch den Speak-Befehl komplett ohne Trigger von Hand absetzen und dabei Inhalte von fremden Readings benutzen.

Ja!
Wenn du den Ausführungs-Teil aus meinem notfy Vorschlag (angepasst an deine Device-Namen) oder auch den Vorschlag von Caleus mit der entsprechenden "Formatierung" (und da sind wir wieder beim Thema: auch bei Eingabe in das FhemWebCmd kommt es eben auf die nutzung DORT an und nicht auf den speak oder den set eines anderen Devices) in FhemWeb eingibst dann hast du wie es eben mit notify oder FhemWeb funktioniert. Muss halt nicht dasselbe sein wie es auch mit at oder DOIF funktioniert weil die u.U. eben eine andere Syntax haben!!
Wie der speak Befehl bei Chromecast funktioniert wurde ja schon ausführlich geschrieben: set ChromecastDevice speak "Zeichenkette" (das geklärt zu haben, also, dass Anführungszeichen helfen ist klar HIER richtig und wurde ja [sofort] erläutert)

Und wie du eben Werte aus Readings in Variablen kriegst und dann die Variablenwerte in "Zeichenkette" landen hängt halt nun mal vom "verwendenden Device(Typ)" ab und NICHT vom "verwendeten Device(Typ").
EDIT: dem Chromecast Device ist es egal "wie" die Zeichenkette gekommen ist, solange sie eben gekommen ist. Und dass sie kommt hängt halt von dort ab wo der set befehl aufgerufen wurde... Damit er eben richtig beim Chromecast ankommt...

EDIT: oder wenn du Perl verwendest eben von der Syntax bei Perl ab. Wenn du es in Bash-Script auf der Console schreibst hängt es eben davon ab was bash bietet. In einem C++ Programm musst du halt sehen wie du den set Befehl mit C++ schreiben musst OBWOHL: der set beim Chromecast immer DERSELBE ist und bleibt (bleiben soll)... Wenn du es jetzt noch nicht verstanden hast/verstehen willst dann weiß ich auch nicht mehr...

Zitat von: Superposchi am 04 Dezember 2020, 10:50:52
Wieso - und das ist eine generelle Frage - soll die Frage in ein Unterforum für DOIF, notify oder was auch immer?
Ich verstehe einfach die Denkweise weise nicht, möchte es aber gerne.

Weil halt die Frage dort am besten aufgehoben ist wo die Helfer mitlesen, die eben zu den jeweiligen Modul-Fragen (und es ist halt [siehe oben bzw. die ganze Diskussion] ein notify/DOIF/at/... "Problem"/Frage) besser beantwortet werden als "wo anders"/"irgendwo"...

Und noch mal: hättest du meinen Rat befolgt hättest du verm. schon lange die Lösung...

Mehr als meine Lösung mit notify kann ich nicht liefern...

Laut deiner Annahme müsste das dann ja auch einfach in DOIF gehen: baue es doch ein...

Wenn es nicht geht: kann ICH nicht helfen, weil ICH KEIN DOIF nutze! Daher auch nicht weiß wie das in DOIF geht!

Viel Spaß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Superposchi

ZitatWenn du es nicht verstehen willst: lass es!
Würde ich nachfragen wenn dem so wäre. Nur weil es ohne wirkliche Erklärung nicht nachvollziehbar ist brauchst du nicht aggressiv zu werden.

ZitatAndere Devices/Module haben andere set Befehle...
Du willst mir also sagen, dass der set Befehl abhängig vom Trigger eine andere Syntex hat. Da muss ich dann wirklich nachfragen wo das steht.
Mag sein, dass wir von der Denkweise aneinander vorbei reden, aber Befehl ist Befehl und Syntex bleibt Syntex. Und die Syntext zum set-Befehl ist:
set <Device>[:<Reding>,<Internal> etc. ] <Commando/Wert>

Also beim Programmieren gibt es da keine Alternative, da ist die Syntex bindend. Darum habe ich da echte Verständnisprobleme mit.

MadMax-FHEM

#914
Ja es gibt Systaxunterschiede.

Habe ich ja erklärt (versucht): in C++ ist die Abfrage von Werten und anlegen von Variablen anders als in Bash Script anders als in fhem-Commandos und anders als in Perl und auch DOIF hat u.a. "eigene" Syntax. Kannst du nachlesen, nämlich bei C++, Perl, fhem Commads und eben auch bei notify, at und DOIF...

EDIT: hier schreibt sogar Rudolf König selbst, dass es eben doch entscheidend ist WO man Befehle nutzt https://forum.fhem.de/index.php/topic,108970.msg1029509.html#msg1029509
Und dabei sind noch nicht mal die "Spezialitäten" von DOIF erwähnt ;)
Hier nur eine kleine "Anekdote": https://forum.fhem.de/index.php/topic,110047.msg1040659.html#msg1040659

EDIT: im Forum nach "fhem perl mischen" liefert noch weitere Dinge... Und fhem und Perl mischen ist genau was hier "passiert". set Device irgendwas -> fhem
Abfrage eines Readings mit ReadingsVal("Dev","Read","Ers") -> Perl dann gibt es noch setMagic und vielleicht (in DOIF) weitere Möglichkeiten. Aber all das hat NICHTS mit Googlecast zu tun... ;) Naja außer dass in dem (bisschen) fhem Teil (also set Befehl) eben das Googlecast angesprochen wird. Die "Problematik" wäre aber bei jedem anderen Device(Typ) genauso...

Was rauskommen muss ist eben ein: set Chromedevice speak "Zeichenkette"

Aber das WIE hängt halt (letzter Versuch) davon ab von WO aus bzw. WOMIT dieser Aufruf eben "zusammengebastelt" wird und "abgeschickt" wird...

Es kann ja sein, dass es (ab und an) keine Unterschiede gibt (oder diese nicht offensichtlich sind) aber sie sind dennoch da.
Alleine Befehlstrenner: in DOIF ist es das Komma aber wohl nicht unbedingt bei DOIF-Perl oder heißt das Perl-DOIF? (soweit ich das mit meinen wenigen DOIF Kenntnissen im Kopf habe) bei fhem ist es der Strichpunkt aber je nachdem wo eingegeben muss der auch mal gedoppelt werden usw. Manchmal gibt es setMagic (oder geht das mittlerweile auch "überall"?) also [Device:Reading] statt ReadingsVal("Device","Reading","Ersatzwert"). Manchmal kann man Perl im Ausführungsteil "einfach" einfügen/mischen: set Device {ReadingsVal("Dev","Re","Er") . "mach was dazu"} und manchmal eben nicht. Und OB das geht oder eben NICHT liegt eben daran WO man das nutzt. Punkt und aus...

EDIT: und wie der commandref zu DOIF und den Beispielen und Wiki zu entnehmen hat DOIF noch weitere "Syntax-Spezialitäten"...

Und jetzt bin ICH auf jeden Fall für dieses "Problem" ruhig.

Ich habe ja einige andere "deiner" Threads überflogen und naja...
Auch hier bin ich jetzt lieber still...

Bevor hier in einem eh schon langen Thread noch mehr unnötiger Blödsinn den Thread ganz "kaputt" macht...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)