mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
mqtt2.template: add some OMG templates
git-svn-id: https://svn.fhem.de/fhem/trunk@25763 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
8f6d761e8c
commit
6f06a5e031
@ -4479,7 +4479,6 @@ desc:use this with an OpenMQTTGateway for temp/hum sensors like LYWSD03MMC and L
|
|||||||
order:X_02d
|
order:X_02d
|
||||||
par:BT_ID;Pls. enter your bluetooth device ID; {undef}
|
par:BT_ID;Pls. enter your bluetooth device ID; {undef}
|
||||||
par:BASE_ID;BASE_ID typically is home;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)[/]O[^/]*M[^/]*G[^/]*[/].*:, ? $1 : undef }
|
par:BASE_ID;BASE_ID typically is home;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)[/]O[^/]*M[^/]*G[^/]*[/].*:, ? $1 : undef }
|
||||||
#par:READINGLISTOLD;copy readingList to new device for later resolving parameters;{ AttrVal("DEVICE","readingList","")}
|
|
||||||
par:NEWDEVROOM;Room of the calling device; {AttrVal("DEVICE","room","MQTT2_\DEVICE" )}
|
par:NEWDEVROOM;Room of the calling device; {AttrVal("DEVICE","room","MQTT2_\DEVICE" )}
|
||||||
defmod OMG_BT_ID MQTT2_\DEVICE BT_ID
|
defmod OMG_BT_ID MQTT2_\DEVICE BT_ID
|
||||||
deletereading -q OMG_BT_ID (?!associatedWith|IODev).*
|
deletereading -q OMG_BT_ID (?!associatedWith|IODev).*
|
||||||
@ -4497,6 +4496,51 @@ attr OMG_BT_ID model OpenMQTTGateway_BT_temp_hum_sensor
|
|||||||
set DEVICE attrTemplate set_IODev_in_channels SUBCHANNELS=OMG_BT_ID
|
set DEVICE attrTemplate set_IODev_in_channels SUBCHANNELS=OMG_BT_ID
|
||||||
setreading OMG_BT_ID attrTemplateVersion 20220220
|
setreading OMG_BT_ID attrTemplateVersion 20220220
|
||||||
|
|
||||||
|
name:OpenMQTTGateway_BT_scale
|
||||||
|
prereq:{my @devices=devspec2array("model=OpenMQTTGateway_MCU");return 1 if $devices[0];return 0}
|
||||||
|
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*/O[^/]*M[^/]*G[^/]*/.*
|
||||||
|
desc:use this with an OpenMQTTGateway for scales like Xiaomi Mi Scale. For further details visit https://github.com/1technophile/OpenMQTTGateway/wiki<br>Recommended structure of the topic pattern home/OpenMQTTGateway/.*.<br>NOTE: You'll be asked to provide the HEX address of your scale. Best start with looking at what "OpenMQTTGateway_BT_scanner" povides, e.g. if you have a reading name like "6C697244245E_id", "6C697244245E" (without quotes) is what you want to enter...<br>NOTE: this will create a new device!
|
||||||
|
order:X_02e
|
||||||
|
par:BT_ID;Pls. enter your bluetooth device ID; {undef}
|
||||||
|
par:BASE_ID;BASE_ID typically is home;{ AttrVal('DEVICE','readingList','') =~ m,([^:]+)[/]O[^/]*M[^/]*G[^/]*[/].*:, ? $1 : undef }
|
||||||
|
par:NEWDEVROOM;Room of the calling device; {AttrVal('DEVICE','room','MQTT2_\DEVICE')}
|
||||||
|
defmod OMG_BT_ID MQTT2_\DEVICE BT_ID
|
||||||
|
deletereading -q OMG_BT_ID (?!associatedWith|IODev).*
|
||||||
|
attr OMG_BT_ID autocreate 0
|
||||||
|
attr OMG_BT_ID readingList\
|
||||||
|
BASE_ID/O[^/]*M[^/]*G[^/]*/BTtoMQTT/BT_ID:.* { json2nameValue($EVENT,'',$JSONMAP) }
|
||||||
|
attr OMG_BT_ID event-min-interval batteryPercent:7200,weight:1800
|
||||||
|
attr OMG_BT_ID event-on-change-reading batteryPercent,weight:0.1,distance:5,impedance
|
||||||
|
attr OMG_BT_ID icon message_medicine
|
||||||
|
attr OMG_BT_ID jsonMap batt:batteryPercent tempc:temperature tem:0 tempf:0 hum:humidity servicedatauuid:0 servicedata:0
|
||||||
|
attr OMG_BT_ID stateFormat weight kg
|
||||||
|
attr OMG_BT_ID room NEWDEVROOM
|
||||||
|
{ fhem "trigger $FW_wname JS:location.href='$FW_ME?detail=OMG_BT_ID'" if($cl && $cl->{TYPE} eq "FHEMWEB") }
|
||||||
|
attr OMG_BT_ID model OpenMQTTGateway_BT_temp_hum_sensor
|
||||||
|
set DEVICE attrTemplate set_IODev_in_channels SUBCHANNELS=OMG_BT_ID
|
||||||
|
setreading OMG_BT_ID attrTemplateVersion 20220302
|
||||||
|
|
||||||
|
name:OpenMQTTGateway_BT_unknown_gadget
|
||||||
|
prereq:{my @devices=devspec2array("model=OpenMQTTGateway_MCU");return 1 if $devices[0];return 0}
|
||||||
|
filter:TYPE=MQTT2_DEVICE:FILTER=readingList=.*/O[^/]*M[^/]*G[^/]*/.*
|
||||||
|
desc:use this with an OpenMQTTGateway to get an "empty" device for further adoptions to your needs. For further details visit https://github.com/1technophile/OpenMQTTGateway/wiki<br>NOTE: You'll be asked to provide the HEX address of your gadget. Best start with looking at what "OpenMQTTGateway_BT_scanner" povides, e.g. if you have a reading name like "6C697244245E_id", "6C697244245E" (without quotes) is what you want to enter...<br>NOTE: this will create a new device!
|
||||||
|
order:X_02x
|
||||||
|
par:BT_ID;Pls. enter your bluetooth device ID; {undef}
|
||||||
|
par:BASE_ID;BASE_ID typically is home;{ AttrVal('DEVICE','readingList','') =~ m,([^:]+)[/]O[^/]*M[^/]*G[^/]*[/].*:, ? $1 : undef }
|
||||||
|
par:NEWDEVROOM;Room of the calling device; {AttrVal('DEVICE','room','MQTT2_\DEVICE')}
|
||||||
|
defmod OMG_BT_ID MQTT2_\DEVICE BT_ID
|
||||||
|
deletereading -q OMG_BT_ID (?!associatedWith|IODev).*
|
||||||
|
attr OMG_BT_ID autocreate 0
|
||||||
|
attr OMG_BT_ID readingList\
|
||||||
|
BASE_ID/O[^/]*M[^/]*G[^/]*/BTtoMQTT/BT_ID:.* { json2nameValue($EVENT,'',$JSONMAP) }
|
||||||
|
attr OMG_BT_ID icon bluetooth
|
||||||
|
attr OMG_BT_ID jsonMap batt:batteryPercent tempc:temperature tem:0 tempf:0 hum:humidity servicedatauuid:0 servicedata:0
|
||||||
|
attr OMG_BT_ID room NEWDEVROOM
|
||||||
|
{ fhem "trigger $FW_wname JS:location.href='$FW_ME?detail=OMG_BT_ID'" if($cl && $cl->{TYPE} eq "FHEMWEB") }
|
||||||
|
attr OMG_BT_ID model OpenMQTTGateway_BT_temp_hum_sensor
|
||||||
|
set DEVICE attrTemplate set_IODev_in_channels SUBCHANNELS=OMG_BT_ID
|
||||||
|
setreading OMG_BT_ID attrTemplateVersion 20220302
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
#OwnTracks
|
#OwnTracks
|
||||||
|
@ -320,7 +320,7 @@ sub Define {
|
|||||||
|
|
||||||
$hash->{defaultRoom} = $defaultRoom;
|
$hash->{defaultRoom} = $defaultRoom;
|
||||||
my $language = $h->{language} // shift @{$anon} // lc AttrVal('global','language','en');
|
my $language = $h->{language} // shift @{$anon} // lc AttrVal('global','language','en');
|
||||||
$hash->{MODULE_VERSION} = '0.5.16';
|
$hash->{MODULE_VERSION} = '0.5.18';
|
||||||
$hash->{baseUrl} = $Rhasspy;
|
$hash->{baseUrl} = $Rhasspy;
|
||||||
initialize_Language($hash, $language) if !defined $hash->{LANGUAGE} || $hash->{LANGUAGE} ne $language;
|
initialize_Language($hash, $language) if !defined $hash->{LANGUAGE} || $hash->{LANGUAGE} ne $language;
|
||||||
$hash->{LANGUAGE} = $language;
|
$hash->{LANGUAGE} = $language;
|
||||||
@ -473,39 +473,10 @@ sub Undefine {
|
|||||||
|
|
||||||
sub Delete {
|
sub Delete {
|
||||||
my $hash = shift // return;
|
my $hash = shift // return;
|
||||||
#my $prefix = $hash->{prefix} // return;
|
|
||||||
|
|
||||||
deleteAllRegIntTimer($hash);
|
deleteAllRegIntTimer($hash);
|
||||||
RemoveInternalTimer($hash);
|
RemoveInternalTimer($hash);
|
||||||
|
|
||||||
# DELETE POD AFTER TESTS ARE COMPLETED
|
|
||||||
#Beta-User: Most likely removing attributes isn't a good idea; additionally: if, then attributes should be removed from global
|
|
||||||
=begin comment
|
|
||||||
|
|
||||||
#Beta-User: globale Attribute löschen
|
|
||||||
for (devspec2array("${prefix}Mapping=.+")) {
|
|
||||||
delFromDevAttrList($_,"${prefix}Mapping:textField-long");
|
|
||||||
}
|
|
||||||
for (devspec2array("${prefix}Name=.+")) {
|
|
||||||
delFromDevAttrList($_,"${prefix}Name");
|
|
||||||
}
|
|
||||||
for (devspec2array("${prefix}Room=.+")) {
|
|
||||||
delFromDevAttrList($_,"${prefix}Room");
|
|
||||||
}
|
|
||||||
for (devspec2array("${prefix}Channels=.+")) {
|
|
||||||
delFromDevAttrList($_,"${prefix}Channels");
|
|
||||||
}
|
|
||||||
for (devspec2array("${prefix}Colors=.+")) {
|
|
||||||
delFromDevAttrList($_,"${prefix}Colors");
|
|
||||||
}
|
|
||||||
for (devspec2array("${prefix}Specials=.+")) {
|
|
||||||
delFromDevAttrList($_,"${prefix}Specials");
|
|
||||||
}
|
|
||||||
for (devspec2array("${prefix}Group=.+")) {
|
|
||||||
delFromDevAttrList($_,"${prefix}Group");
|
|
||||||
}
|
|
||||||
=end comment
|
|
||||||
=cut
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -846,8 +817,6 @@ hermes/dialogueManager/configure (JSON)
|
|||||||
https://rhasspy-hermes-app.readthedocs.io/en/latest/usage.html#continuing-a-session
|
https://rhasspy-hermes-app.readthedocs.io/en/latest/usage.html#continuing-a-session
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
my $sId = $siteId eq 'null' ? 'null' : qq("$siteId");
|
|
||||||
|
|
||||||
my @disabled;
|
my @disabled;
|
||||||
my $matches = join q{|}, @{$toDisable};
|
my $matches = join q{|}, @{$toDisable};
|
||||||
for (@intents) {
|
for (@intents) {
|
||||||
@ -905,7 +874,6 @@ sub init_custom_intents {
|
|||||||
my $err = perlSyntaxCheck( $perlcommand );
|
my $err = perlSyntaxCheck( $perlcommand );
|
||||||
return "$err in $line" if $err && $init_done;
|
return "$err in $line" if $err && $init_done;
|
||||||
|
|
||||||
#$hash->{helper}{custom}{$+{intent}}{perl} = $perlcommand; #Beta-User: delete after testing!
|
|
||||||
$hash->{helper}{custom}{$intent}{function} = $function;
|
$hash->{helper}{custom}{$intent}{function} = $function;
|
||||||
|
|
||||||
my $args = trim($+{arg});
|
my $args = trim($+{arg});
|
||||||
@ -916,7 +884,7 @@ sub init_custom_intents {
|
|||||||
push @params, $ar;
|
push @params, $ar;
|
||||||
}
|
}
|
||||||
|
|
||||||
$hash->{helper}{custom}{$+{intent}}{args} = \@params;
|
$hash->{helper}{custom}{$intent}{args} = \@params;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1519,9 +1487,9 @@ sub initialize_msgDialog {
|
|||||||
sub disable_msgDialog {
|
sub disable_msgDialog {
|
||||||
my $hash = shift // return;
|
my $hash = shift // return;
|
||||||
my $enable = shift // 0;
|
my $enable = shift // 0;
|
||||||
my $fromSST = shift;
|
my $fromSTT = shift;
|
||||||
readingsSingleUpdate($hash,'enableMsgDialog',$enable,1) if !$fromSST;
|
readingsSingleUpdate($hash,'enableMsgDialog',$enable,1) if !$fromSTT;
|
||||||
return initialize_msgDialog($hash) if $enable && !$fromSST;
|
return initialize_msgDialog($hash) if $enable && !$fromSTT;
|
||||||
|
|
||||||
my $devsp;
|
my $devsp;
|
||||||
if ( defined $hash->{helper}->{STT}
|
if ( defined $hash->{helper}->{STT}
|
||||||
@ -2555,7 +2523,7 @@ sub notifySTT {
|
|||||||
return AnalyzePerlCommand( undef, Babble_DoIt($hash->{Babble},$msgtext) ) if $msgtext !~ m{\A[\b]*$tocheck[\b]*\z}i;
|
return AnalyzePerlCommand( undef, Babble_DoIt($hash->{Babble},$msgtext) ) if $msgtext !~ m{\A[\b]*$tocheck[\b]*\z}i;
|
||||||
$msgtext =~ s{\A[\b]*$tocheck}{}i;
|
$msgtext =~ s{\A[\b]*$tocheck}{}i;
|
||||||
}
|
}
|
||||||
return msgDialog_open($hash, $client, $msgtext);
|
return ttsDialog_open($hash, $client, $msgtext);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -2678,7 +2646,7 @@ sub msgDialog_progress {
|
|||||||
#This is the place to add additional logics and decission making...
|
#This is the place to add additional logics and decission making...
|
||||||
#my $data = $hash->{helper}->{msgDialog}->{$device}->{data}; # // msgDialog_close($hash, $device);
|
#my $data = $hash->{helper}->{msgDialog}->{$device}->{data}; # // msgDialog_close($hash, $device);
|
||||||
Log3($hash, 5, "msgDialog_progress called with $device and text $msgtext");
|
Log3($hash, 5, "msgDialog_progress called with $device and text $msgtext");
|
||||||
Log3($hash, 5, 'msgDialog_progress called without DATA') if !defined $data;
|
#Log3($hash, 5, 'msgDialog_progress called without DATA') if !defined $data;
|
||||||
|
|
||||||
return if !defined $data;
|
return if !defined $data;
|
||||||
|
|
||||||
@ -2740,7 +2708,7 @@ sub handleTtsMsgDialog {
|
|||||||
&& defined $hash->{helper}->{msgDialog}->{$recipient} ) {
|
&& defined $hash->{helper}->{msgDialog}->{$recipient} ) {
|
||||||
msgDialog_respond($hash,$recipient,$message);
|
msgDialog_respond($hash,$recipient,$message);
|
||||||
sayFinished($hash, $data->{id}, $hash->{siteId});
|
sayFinished($hash, $data->{id}, $hash->{siteId});
|
||||||
} elsif (defined $hash->{helper}->{STT}
|
} elsif ( defined $hash->{helper}->{STT}
|
||||||
&& defined $hash->{helper}->{STT}->{config}->{$recipient} ) {
|
&& defined $hash->{helper}->{STT}->{config}->{$recipient} ) {
|
||||||
ttsDialog_respond($hash,$recipient,$message,0);
|
ttsDialog_respond($hash,$recipient,$message,0);
|
||||||
sayFinished($hash, $data->{id}, $hash->{siteId}); #Beta-User: may be moved to response logic later with timeout...?
|
sayFinished($hash, $data->{id}, $hash->{siteId}); #Beta-User: may be moved to response logic later with timeout...?
|
||||||
@ -2777,6 +2745,7 @@ sub ttsDialog_close {
|
|||||||
Log3($hash, 5, "ttsDialog_close called with $device");
|
Log3($hash, 5, "ttsDialog_close called with $device");
|
||||||
|
|
||||||
deleteSingleRegIntTimer($device, $hash);
|
deleteSingleRegIntTimer($device, $hash);
|
||||||
|
readingsSingleUpdate($defs{$device}, 'rhasspy_dialogue', 'closed', 1);
|
||||||
|
|
||||||
delete $hash->{helper}{ttsDialog}->{$device};
|
delete $hash->{helper}{ttsDialog}->{$device};
|
||||||
return;
|
return;
|
||||||
@ -2797,7 +2766,8 @@ sub ttsDialog_open {
|
|||||||
customData => $device
|
customData => $device
|
||||||
};
|
};
|
||||||
|
|
||||||
setTtsDialogTimeout($hash, $sendData, $hash->{helper}->{TTS}->{config}->{$device}->{sessionTimeout});
|
my $tout = $hash->{helper}->{TTS}->{config}->{$device}->{sessionTimeout} // $hash->{sessionTimeout};
|
||||||
|
setTtsDialogTimeout($hash, $sendData, $tout);
|
||||||
return ttsDialog_progress($hash, $device, $msgtext, $sendData);
|
return ttsDialog_progress($hash, $device, $msgtext, $sendData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2832,20 +2802,32 @@ sub ttsDialog_progress {
|
|||||||
|
|
||||||
sub ttsDialog_respond {
|
sub ttsDialog_respond {
|
||||||
my $hash = shift // return;
|
my $hash = shift // return;
|
||||||
my $DEVICE = shift // return;
|
my $device = shift // return;
|
||||||
my $message = shift // return;
|
my $message = shift // return;
|
||||||
my $keepopen = shift // 1;
|
my $keepopen = shift // 1;
|
||||||
|
|
||||||
Log3($hash, 5, "ttsDialog_respond called with $DEVICE and text $message");
|
Log3($hash, 5, "ttsDialog_respond called with $device and text $message");
|
||||||
trim($message);
|
trim($message);
|
||||||
return if !$message; # empty?
|
return if !$message; # empty?
|
||||||
|
|
||||||
my $msgCommand = $hash->{helper}->{TTS}->{config}->{$DEVICE}->{ttsCommand} // return;
|
my $msgCommand = $hash->{helper}->{TTS}->{config}->{$device}->{ttsCommand} // return;
|
||||||
$msgCommand =~ s{\\[\@]}{@}x;
|
my %specials = (
|
||||||
$msgCommand =~ s{(\$\w+)}{$1}eegx;
|
'$DEVICE' => $device,
|
||||||
AnalyzeCommand($hash, $msgCommand);
|
'$message' => $message,
|
||||||
resetRegIntTimer( $DEVICE, time + $hash->{helper}->{TTS}->{config}->{$DEVICE}->{sessionTimeout}, \&RHASSPY_msgDialogTimeout, $hash, 0) if $keepopen;
|
'$NAME' => $hash->{NAME}
|
||||||
return $DEVICE;
|
);
|
||||||
|
$msgCommand = EvalSpecials($msgCommand, %specials);
|
||||||
|
AnalyzeCommandChain($hash, $msgCommand);
|
||||||
|
if ( $keepopen ) {
|
||||||
|
my $tout = $hash->{helper}->{TTS}->{config}->{$device}->{sessionTimeout} // $hash->{sessionTimeout};
|
||||||
|
resetRegIntTimer( $device, time + $tout, \&RHASSPY_ttsDialogTimeout, $hash, 0);
|
||||||
|
readingsSingleUpdate($defs{$device}, 'rhasspy_dialogue', 'open', 1);
|
||||||
|
} else {
|
||||||
|
deleteSingleRegIntTimer($device, $hash);
|
||||||
|
delete $hash->{helper}->{ttsDialog}->{$device};
|
||||||
|
readingsSingleUpdate($defs{$device}, 'rhasspy_dialogue', 'closed', 1);
|
||||||
|
}
|
||||||
|
return $device;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Update the readings lastIntentPayload and lastIntentTopic
|
# Update the readings lastIntentPayload and lastIntentTopic
|
||||||
@ -3083,12 +3065,23 @@ sub respond {
|
|||||||
readingsEndUpdate($hash,1);
|
readingsEndUpdate($hash,1);
|
||||||
Log3($hash->{NAME}, 5, "Response is: $response");
|
Log3($hash->{NAME}, 5, "Response is: $response");
|
||||||
|
|
||||||
#check for msgDialog session
|
#check for msgDialog or ttsDialog sessions
|
||||||
my $identity = (split m{_$hash->{siteId}_}, $data->{sessionId},3)[0];
|
my $identity = (split m{_$hash->{siteId}_}xms, $data->{sessionId},3)[0];
|
||||||
if ( defined $hash->{helper}->{msgDialog}
|
if ( defined $hash->{helper}->{msgDialog}
|
||||||
&& defined $hash->{helper}->{msgDialog}->{$identity} ){
|
&& defined $hash->{helper}->{msgDialog}->{$identity} ){
|
||||||
Log3($hash, 5, "respond deviated to msgDialog_respond for $identity.");
|
Log3($hash, 5, "respond deviated to msgDialog_respond for $identity.");
|
||||||
return msgDialog_respond($hash, $identity, $response);
|
return msgDialog_respond($hash, $identity, $response);
|
||||||
|
} elsif (defined $hash->{helper}->{TTS}
|
||||||
|
&& defined $hash->{helper}->{TTS}->{config}->{$identity} ) {
|
||||||
|
Log3($hash, 5, "respond deviated to ttsDialog_respond for $identity.");
|
||||||
|
$hash->{helper}->{ttsDialog}->{$identity}->{data} = $data if $topic eq 'continueSession';
|
||||||
|
return ttsDialog_respond($hash,$identity,$response,$topic eq 'continueSession');
|
||||||
|
} elsif (defined $hash->{helper}->{TTS}
|
||||||
|
&& defined $hash->{helper}->{TTS}->{$identity} ) {
|
||||||
|
$identity = $hash->{helper}->{TTS}->{$identity};
|
||||||
|
Log3($hash, 5, "respond deviated to ttsDialog_respond for $identity by siteId.");
|
||||||
|
$hash->{helper}->{ttsDialog}->{$identity}->{data} = $data if $topic eq 'continueSession';
|
||||||
|
return ttsDialog_respond($hash,$identity,$response,$topic eq 'continueSession');
|
||||||
}
|
}
|
||||||
|
|
||||||
IOWrite($hash, 'publish', qq{hermes/dialogueManager/$topic $json});
|
IOWrite($hash, 'publish', qq{hermes/dialogueManager/$topic $json});
|
||||||
@ -3096,13 +3089,12 @@ sub respond {
|
|||||||
#setDialogTimeout( $hash, $data, $delay, getResponse( $hash, 'SilentCancelConfirmation' ) ) if $delay;
|
#setDialogTimeout( $hash, $data, $delay, getResponse( $hash, 'SilentCancelConfirmation' ) ) if $delay;
|
||||||
|
|
||||||
#no audio output in msgDialog session
|
#no audio output in msgDialog session
|
||||||
return if defined $hash->{helper}->{msgDialog}
|
#return if defined $hash->{helper}->{msgDialog}
|
||||||
&& defined $hash->{helper}->{msgDialog}->{(split m{_$hash->{siteId}_}, $data->{sessionId},3)[0]};
|
# && defined $hash->{helper}->{msgDialog}->{(split m{_$hash->{siteId}_}, $data->{sessionId},3)[0]};
|
||||||
my $secondAudio = ReadingsVal($hash->{NAME}, "siteId2doubleSpeak_$data->{siteId}",0);
|
my $secondAudio = ReadingsVal($hash->{NAME}, "siteId2doubleSpeak_$data->{siteId}",undef) // return;
|
||||||
sendSpeakCommand( $hash, {
|
sendSpeakCommand( $hash, {
|
||||||
siteId => $secondAudio,
|
siteId => $secondAudio,
|
||||||
text => $response} )
|
text => $response} );
|
||||||
if $secondAudio;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5614,7 +5606,7 @@ i="i am hungry" f="set Stove on" d="Stove" c="would you like roast pork"</code><
|
|||||||
<li>
|
<li>
|
||||||
<a id="RHASSPY-attr-rhasspyHotwords"></a><b>rhasspyHotwords</b>
|
<a id="RHASSPY-attr-rhasspyHotwords"></a><b>rhasspyHotwords</b>
|
||||||
<p>Define custom reactions as soon as a specific hotword is detected (or with "global": a toggle command is detected). This does not require any specific configuration on any other FHEM device.<br>
|
<p>Define custom reactions as soon as a specific hotword is detected (or with "global": a toggle command is detected). This does not require any specific configuration on any other FHEM device.<br>
|
||||||
One hotword per line, syntax is either a simple and an extended version. The "hotword" <i>global</i> will be treated specially and can be used to also execute custom commands when a <toggle> event is indicated.</p>
|
One hotword per line, syntax is either a simple and an extended version. The "hotword" <i>global</i> will be treated specially and can be used to also execute custom commands when a <i>toggle</i> event is indicated.</p>
|
||||||
Examples:<br>
|
Examples:<br>
|
||||||
<p><code>bumblebee_linux = set amplifier2 mute on<br>
|
<p><code>bumblebee_linux = set amplifier2 mute on<br>
|
||||||
porcupine_linux = livingroom="set amplifier mute on" default={Log3($DEVICE,3,"device $DEVICE - room $ROOM - value $VALUE")}<br>
|
porcupine_linux = livingroom="set amplifier mute on" default={Log3($DEVICE,3,"device $DEVICE - room $ROOM - value $VALUE")}<br>
|
||||||
@ -5662,7 +5654,7 @@ i="i am hungry" f="set Stove on" d="Stove" c="would you like roast pork"</code><
|
|||||||
<li>
|
<li>
|
||||||
<a id="RHASSPY-attr-rhasspyTTS"></a><b>rhasspyTTS</b>
|
<a id="RHASSPY-attr-rhasspyTTS"></a><b>rhasspyTTS</b>
|
||||||
<a href="#RHASSPY-experimental"><b>experimental!</b></a>
|
<a href="#RHASSPY-experimental"><b>experimental!</b></a>
|
||||||
<p>In addition to <a href="#RHASSPY-attr-rhasspySTT">rhasspySTT</a>, this attributes adds some options to manipulate the text-to-speech processing. Any AMADDevice to be adressed for own TTS processing has to be listed here with it's link to it's siteId. If RHASSPY detects a link between a siteId and an AMADDevice type FHEM device, it will not forward any text to be spoken to Rhasspy but use other synthetisation methods instead (defaulting to <code>set <AMADDevice> ttsMsg $message</code>).
|
<p>In addition to <a href="#RHASSPY-attr-rhasspySTT">rhasspySTT</a>, this attributes adds some options to manipulate the text-to-speech processing. Any AMADDevice to be adressed for own TTS processing has to be listed here with it's link to it's siteId (development remark: this is missleading atm!). If RHASSPY detects a link between a siteId and an AMADDevice type FHEM device, it will not forward any text to be spoken to Rhasspy but use other synthetisation methods instead (defaulting to <code>set <AMADDevice> ttsMsg $message</code>).
|
||||||
Example:<br>
|
Example:<br>
|
||||||
<p><code>AMADDev_A=siteId=android_livingroom ttsCommand={fhem("set $DEVICE ttsMsg $message")}</code><br>Notes:
|
<p><code>AMADDev_A=siteId=android_livingroom ttsCommand={fhem("set $DEVICE ttsMsg $message")}</code><br>Notes:
|
||||||
<ul>
|
<ul>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user