[gelöst] Soundausgabe unter windows, wsl2, debian

Begonnen von the ratman, 01 April 2024, 16:57:04

Vorheriges Thema - Nächstes Thema

the ratman

Fortsetzung von https://forum.fhem.de/index.php?msg=1309425
Zitat von: Otto123 am 01 April 2024, 16:22:24Ich habe das mit tts nicht vergessen, schau ich mir an.
goil! freut mich so richtig und teste dir dumm dämlich alles, was du dann haben willst.
gut, seit ich hier 'ne möchtegern-fhem/wsl2-testumgebung hab, auch alles, was dir so einfallen mag (*). nur sagen ... wenn ich was zum laufen kriege, hast du dann 100% idiotensicher geschrieben *lach*

aber wie g'sagt: tu dir bloß nix an, wenn du nicht selber 'nen mehrwert siehst.
wirklich bringen tuts ja nur was, wenn man recht ähnliche vorgaben hat wie ich. und ich glaub', ich bin da recht einsam unterwegs in der fhem-hardware-struktur *g*.

* meine test-umgebung:
win11home auf intel core i7(gen 12) mit 16gb ram, nvidia rtx3060, 2 monitore (ist 'n hp omen schleppi), wsl2, debian aus dem win-store. alles immer tagesaktuell. für mich ein webmin, weil ich sonst bei linux weine. keine grafischen oberflächen oder sonst was.
→do↑p!dnʇs↓shit←

Otto123

#1
Ich wusste bisher nicht, dass es in Powershell so einfach ist Sprache auszugeben  ;D

Klar das Beispiel aus deinem Link funktioniert: sogar über eine RDP Sitzung auf ein Windows 11 welches auf meinem Linux Host unter KVM/qemu/libvirt läuft  ;D
Du kannst auf deinem Windows ja erstmal bloß in Powershell probieren:
Add-Type -AssemblyName System.speech
$text="Heute ist ein Schöner Tag"
(New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak($text)
Analog im wsl
text="Heute ist ein Schöner Tag"
powershell.exe "Add-Type -AssemblyName System.speech;(New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak(\"$text\")"

Edit: Wobei mir gerade einfällt, diese Sache dann quasi aus FHEM heraus im "Untergrund" zu starten und wirklich einen Sound zu hören wird wahrscheinlich eine komplizierte Nummer.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

the ratman

#2
Zitatsogar über eine RDP Sitzung auf ein Windows 11 welches auf meinem Linux Host unter KVM/qemu/libvirt läuft  ;D
war klar, hätte ich dir um 3 in der früh auch sagen können *totlach*

jetzt kommt der onkel milchmädchen ... bitte nicht lachen.
wäre der befehl "powershell.exe" nicht auch nur ein weiterer consolenbefehl, den man in einem cmdalias wie z.b.

defmod c_dellog cmdalias dellog AS {qx(truncate $currlogfile --size 0);;Log 1, "logfile wurde gelöscht";;}

verwursten könnte?
ich hätts ja sogar probiert, wüsste ich, wie ich den ganzen sermon unfallfrei zw. die {} kriege.

auf jeden fall funzen deine beispiele mal bei mir auch ...
→do↑p!dnʇs↓shit←

Otto123

#3
Moin,

hier spricht der "Verrückte" - nach meinem letzten Post habe ich weiter gesucht und zwei mal aufgegeben - aber wie sagt man? aller guten Dinge sind drei 8)
Ausgangssituation:
Windows 11, wsl ubuntu, fhem installiert (immer noch die Test VM, alles über RDP ;) )

Eine Datei tts.ps1 im Homdedir des Windows Users (bei mir c:\users\heinz) mit diesem Inhalt
Add-Type -AssemblyName System.speech
$text="Heute ist alles ohne Fehler"
$tts=New-Object System.Speech.Synthesis.SpeechSynthesizer
$tts.Speak($text)
In der FHEM Kommandozeile folgendes Kommando einwerfen und es redet  ;D  ;D  ;D
"/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe c:\\\\users\\\\heinz\\\\tts.ps1"oder blockierend
{qx '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe c:\\\\users\\\\heinz\\\\tts.ps1' }Das schräge an dieser Zeile:
  • wsl mag für den Programm Aufruf die \ nicht
  • powershell mag für seine Scriptdatei die / nicht
  • die \ muss man in Linux verdoppeln damit sie bleiben
  • in der FHEM Kommandozeile muss man die \ (nochmal) verdoppeln damit sie bleiben
Was wahrscheinlich auch geht - die Datei im FHEM Directory:
"/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe \\\\\\\\wsl$\\\\ubuntu\\\\opt\\\\fhem\\\\tts.ps1"Das habe ich mal getestet :) das gibt aber nur den Inhalt des Directory aus!!!der Befehl zum Sound steht eine Zeile höher.
{qx '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -command dir \\\\\\\\wsl$\\\\ubuntu\\\\opt\\\\fhem' }
Ich weiß: jetzt willst Du natürlich den Text als Variable übergeben  :))
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

the ratman

#4
ein hellseher *lach*

du meine güte, du gibst ja ordentlich gas.

btw - das übergeben bei meiner jetzigen version funzt eigentlich relativ simpel:
ist auch ein cmdalias mit "say .* AS setreading doif_tts_durchsage text $EVENT"
sprich: sobald ich irgendwo ein say absetze, steht das in meinem doif, das stellt div. zustände fest und jammert dann je nachdem androiden, windosen, tv's usw. voll.
wenn man also sowas hinbekommt ... dann kann ich den ganzen alten kram quasi irgendwann mal einfach übernehmen.

1. versuch:
1) file in fhem legen und dem user/gruppe fhem/dialout übergeben
2) in der commandozeile von fhem
{qx '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -command dir \\\\\\\\wsl$\\\\Debian\\\\opt\\\\fhem' } absetzen
3) nix zu hören

ausgabe in fhem:
    Verzeichnis: \\wsl$\Debian\opt\fhem


Mode                 LastWriteTime         Length Name                                                                
----                 -------------         ------ ----                                                                
d-----        26.03.2024     10:11                www                                                                 
d-----        26.03.2024     10:11                docs                                                                
d-----        26.03.2024     15:37                share                                                               
d-----        03.04.2024     20:24                log                                                                 
d-----        26.03.2024     10:11                lib                                                                 
d-----        26.03.2024     10:11                demolog                                                             
d-----        26.03.2024     10:11                contrib                                                             
d-----        26.03.2024     11:09                FHEM                                                                
d-----        26.03.2024     11:07                restoreDir                                                          
------        03.04.2024     20:26         423278 CHANGED                                                             
------        28.01.2024     10:20          21936 fhem.cfg.demo                                                       
------        26.03.2024     11:07          47276 MAINTAINER.txt                                                      
------        28.01.2024     10:20          46886 configDB.pm                                                         
------        26.03.2024     11:07          18092 GPL_V2.txt                                                          
------        03.04.2024     20:37           4840 fhem.cfg                                                            
------        26.03.2024     11:07         174201 fhem.pl                                                             
------        04.04.2024     12:51            151 tts.ps1                                                             
------        28.01.2024     10:20            935 README_DEMO.txt    

log bleibt leer

in der wsl-console kommt:
root@LittleBastard:/opt/fhem# ./tts.ps1
./tts.ps1: line 1: Add-Type: command not found
./tts.ps1: line 2: $'=Heute ist alles ohne Fehler\r': command not found
./tts.ps1: line 3: =New-Object: command not found
./tts.ps1: line 4: syntax error near unexpected token `$text'
./tts.ps1: line 4: `$tts.Speak($text)'

zur sicherheit das file tts.ps1:
Add-Type -AssemblyName System.speech
$text="Heute ist alles ohne Fehler"
$tts=New-Object System.Speech.Synthesis.SpeechSynthesizer
$tts.Speak($text)
→do↑p!dnʇs↓shit←

the ratman

#5
ach, da fehlt doch genau beim verwendeten der name des files *g*
{qx '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -command dir \\\\\\\\wsl$\\\\Debian\\\\opt\\\\fhem' }

sollte wohl
{qx '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -command dir \\\\\\\\wsl$\\\\Debian\\\\opt\\\\fhem\\\\tts.ps1' }
lauten, oder?

ich probier mal nochmal
nix zu hören, ausgabe in fhem:
Mode                 LastWriteTime         Length Name                                                                
----                 -------------         ------ ----                                                                
------        04.04.2024     12:51            151 tts.ps1  
keine meldung in der console
→do↑p!dnʇs↓shit←

Otto123

#6
Du hast jetzt den Versuch rausgenommen, der nur den Inhalt des Directory ausgibt  :))  :))  :))
So müsste es gehen
"/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe \\\\\\\\wsl$\\\\ubuntu\\\\opt\\\\fhem\\\\tts.ps1"
Oder so:
{qx '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe \\\\\\\\wsl$\\\\Debian\\\\opt\\\\fhem\\\\tts.ps1' }
Zitat von: the ratman am 04 April 2024, 12:50:18in der wsl-console kommt:
Da fehlt aber der komplette Aufruf mit powershell - die datei allein geht nur in der powershell und NICHT in der wsl Konsole!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Jetzt mit Parameter. Der Inhalt von tts.ps1 leicht geändert
param(
      [string]$text="Heute ist alles ohne Fehler"
)
Add-Type -AssemblyName System.speech
$tts=New-Object System.Speech.Synthesis.SpeechSynthesizer
$tts.Speak($text)
Der Aufruf in der FHEM Kommandozeile
"/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe \\\\\\\\wsl$\\\\ubuntu\\\\opt\\\\fhem\\\\tts.ps1 \"Willi ist Lustig\" "
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

the ratman

#8
hehe, na weil ich qx kannte ... *g*

also folgendes in der kommandozeile:
"/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe \\\\\\\\wsl$\\\\Debian\\\\opt\\\\fhem\\\\tts.ps1 \"Willi ist Lustig\" "tts.ps1 hab ich geändert

logfile fhem:
2024.04.04 13:24:08 1: logfile wurde gelöscht
\\\\wsl$\\Debian\\opt\\fhem\\tts.ps1 : Die Datei "\\wsl$\Debian\opt\fhem\tts.ps1" kann nicht geladen werden, da die
Ausf�hrung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter
"about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).
In Zeile:1 Zeichen:1
+ \\\\wsl$\\Debian\\opt\\fhem\\tts.ps1 "Willi ist Lustig"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Sicherheitsfehler: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess



PS C:\Users\the-r> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned
→do↑p!dnʇs↓shit←

Otto123

#9
In der Admin Powershell Konsole:
Set-ExecutionPolicy RemoteSignedDamit tut er es bei mir.

Aber ok Du verwendest jetzt \\wsl$\... - das ist für ihn ev. remote. Ich verwende /mnt/c/...

Dann braucht es bei Dir ev.
Set-ExecutionPolicy Unrestrictednicht schön :(
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

the ratman

jetzt wirds mühsam *g*

also aus dem cheffsesselC:\Windows\System32>Set-ExecutionPolicy RemoteSigned
Der Befehl "Set-ExecutionPolicy" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
→do↑p!dnʇs↓shit←

Otto123

Nicht aus dem Chefsessel sondern in der Admin Powershell Konsole - erkennbar am PS ganz vorne im Prompt ;)
PS C:\Users\heinz> Set-ExecutionPolicy UnrestrictedHier warst Du doch schonmal richtig
PS C:\Users\the-r> Get-ExecutionPolicy -List
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

the ratman

#12
gut, also zur sicherheit direkt aus dem menü die powershell mit rechtsklick als admin starten:
PS C:\Users\the-r> Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy: Access to the path 'C:\Program Files\PowerShell\7\powershell.config.json' is denied.
To change the execution policy for the default (LocalMachine) scope, start PowerShell with the "Run as administrator" option. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".
fux, ich hab als admin gestartet! der fragt mich ja sogar noch, ob ich mir sicher bin, dass ich admin sein will ...habs
im rechtsmenü is also ein unterschied von "als admin starten" oder ps dort nochmal mit rechts und danan "als admin starten" heiliger bimbam!

neuer versuch:
\\\wsl$\\Debian\\opt\\fhem\\tts.ps1 : Die Datei "\\wsl$\Debian\opt\fhem\tts.ps1" kann nicht geladen werden, da die
Ausf�hrung von Skripts auf diesem System deaktiviert ist. Weitere Informationen finden Sie unter
"about_Execution_Policies" (https:/go.microsoft.com/fwlink/?LinkID=135170).
In Zeile:1 Zeichen:1
+ \\\\wsl$\\Debian\\opt\\fhem\\tts.ps1 "Willi ist Lustig"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : Sicherheitsfehler: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
PS C:\Users\the-r> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    Unrestricted
→do↑p!dnʇs↓shit←

Otto123

Aber bei mir funktioniert, das
{qx '/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe \\\\\\\\wsl$\\\\ubuntu\\\\opt\\\\fhem\\\\tts.ps1 \"Willi ist Lustig\" ' }Mit
PS C:\Users\heinz> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned
Aber ich habe nicht Powershell 7 ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

the ratman

#14
ich auch - ohne admin:
PowerShell 7.4.1
PS C:\Users\the-r>
mit admin:
PowerShell 7.4.1
PS C:\Users\the-r>


wem gehört bei dir die .ps1? ich habs fhem/dialout geändert - richtig?

hab jetzt mal auch das tts-file in mein userverzeichnis gelegt und mit
"/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe c:\\\\users\\\\the-r\\\\tts.ps1"
selbe meldung
→do↑p!dnʇs↓shit←