2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-28 11:01:59 +00:00

39_Talk2Fhem.pm: Time idendification fixes

git-svn-id: https://svn.fhem.de/fhem/trunk@16428 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Phill 2018-03-17 18:52:44 +00:00
parent c30613cc97
commit 3891daec94

View File

@ -113,6 +113,8 @@
# && Regexp removes match from Command # && Regexp removes match from Command
# Time identification added # Time identification added
# Newlines in configuration now replaced by space # Newlines in configuration now replaced by space
# 18.03.2018 0.5.3
# Time identification fixes
################################################################ ################################################################
# TODO: # TODO:
# #
@ -128,17 +130,17 @@
package main; package main;
use strict; use strict;
use warnings; #use warnings;
use POSIX; use POSIX;
use Data::Dumper; use Data::Dumper;
use Time::Local; use Time::Local;
use Text::ParseWords; use Text::ParseWords;
use Text::Balanced qw(extract_multiple extract_bracketed); use Text::Balanced qw(extract_multiple extract_bracketed);
use Encode qw(decode encode); #use Encode qw(decode encode);
my %Talk2Fhem_globals; my %Talk2Fhem_globals;
$Talk2Fhem_globals{version}="0.5.2"; $Talk2Fhem_globals{version}="0.5.3";
$Talk2Fhem_globals{EN}{erase} = ['\bplease\b', '\balso\b', '^msgtext:']; $Talk2Fhem_globals{EN}{erase} = ['\bplease\b', '\balso\b', '^msgtext:'];
$Talk2Fhem_globals{EN}{numbers} = { $Talk2Fhem_globals{EN}{numbers} = {
@ -262,11 +264,17 @@ $Talk2Fhem_globals{DE}{dtspec} = [
{phr=>'gestern', dtmod=>{days=>-1}}, {phr=>'gestern', dtmod=>{days=>-1}},
{phr=>'vorgestern', dtmod=>{days=>-2}}, {phr=>'vorgestern', dtmod=>{days=>-2}},
{phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') wochen?', {phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') wochen?',
dtmod=>{days=>'(7*$1)'}}, dtmod=>{days=>'(7*$2)'}},
{phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') monat(en)?', {phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') monat(en)?',
dtmod=>{month=>'"$1"'}}, dtmod=>{month=>'"$2"'}},
{phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') jahr(en)?', {phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') jahr(en)?',
dtmod=>{year=>'"$1"'}}, dtmod=>{year=>'"$2"'}},
{phr=>'(in|und|nach) einem halben? jahr',
dtmod=>{month=>6}},
{phr=>'(in|und|nach) einem viertel jahr',
dtmod=>{month=>3}},
{phr=>'(in|und|nach) einem dreiviertel jahr',
dtmod=>{month=>9}},
{phr=>'nächste.? woche', dtmod=>{days=>7}}, {phr=>'nächste.? woche', dtmod=>{days=>7}},
{phr=>'nächste.? monat', dtmod=>{month=>1}}, {phr=>'nächste.? monat', dtmod=>{month=>1}},
{phr=>'nächste.? jahr', dtmod=>{year=>1}}, {phr=>'nächste.? jahr', dtmod=>{year=>1}},
@ -283,6 +291,15 @@ $Talk2Fhem_globals{DE}{dtspec} = [
# ---------------------------------- ZEITPHRASEN ----------------------------------------- # ---------------------------------- ZEITPHRASEN -----------------------------------------
{phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') stunden?', {phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') stunden?',
dtmod=>{hour=>'"$2"'}}, dtmod=>{hour=>'"$2"'}},
{phr=>'(in|und|nach) einer (halben?|viertel|dreiviertel) ?stunde',
dtmod=>{fc=>sub () {
my $res = $_[0];
if ($2=~/halbe/) {$res += 1800}
elsif ($2=~/^viertel$/) {$res += 900}
elsif ($2=~/^dreiviertel$/) {$res += 2700}
return $res;
}
}},
{phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') minuten?', {phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') minuten?',
dtmod=>{min=>'"$2"'}}, dtmod=>{min=>'"$2"'}},
{phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') sekunden?', {phr=>'(in|und|nach) ('.$Talk2Fhem_globals{DE}{numberre}.') sekunden?',
@ -290,14 +307,13 @@ $Talk2Fhem_globals{DE}{dtspec} = [
{phr=>'gleich', dtmod=>{min=>3}}, {phr=>'gleich', dtmod=>{min=>3}},
{phr=>'nachher', dtmod=>{min=>30}}, {phr=>'nachher', dtmod=>{min=>30}},
{phr=>'später', dtmod=>{hour=>1}}, {phr=>'später', dtmod=>{hour=>1}},
{phr=>'heute', dtmod=>{notime=>'"12:00"'}}, {phr=>'heute', dtmod=>{notime=>'"12:00"',time=>'"00:00"'}},
{phr=>'nachts?', dtmod=>{notime=>'"03:00"',pm=>0}}, {phr=>'nachts?', dtmod=>{notime=>'"03:00"',pm=>0}},
{phr=>'früh', dtmod=>{notime=>'"09:00"',pm=>0}}, {phr=>'früh', dtmod=>{notime=>'"09:00"',pm=>0}},
{phr=>'vormittags?', dtmod=>{notime=>'"10:30"',pm=>0}}, {phr=>'vormittags?', dtmod=>{notime=>'"10:30"',pm=>0}},
{phr=>'abends?', dtmod=>{notime=>'"18:00"',pm=>1}}, {phr=>'abends?', dtmod=>{notime=>'"18:00"',pm=>1}},
{phr=>'nachmittags?', dtmod=>{notime=>'"16:00"',pm=>1}}, {phr=>'nachmittags?', dtmod=>{notime=>'"16:00"',pm=>1}},
{phr=>'mittags?', dtmod=>{notime=>'"12:00"',pm=>1}}, {phr=>'mittags?', dtmod=>{notime=>'"12:00"',pm=>1}},
#!!!!!!!!!! heute nachmittag geht nicht bei den ersten 3
# fc modify time. $_[0] = ermittelte zeit. Zugriff auf $1 $2 !unmodifiert! $_[1] = zeit der vorherigen erkennung $_[2] = phr $_[3] = dtmod !evaled! $_[4] = $pm # fc modify time. $_[0] = ermittelte zeit. Zugriff auf $1 $2 !unmodifiert! $_[1] = zeit der vorherigen erkennung $_[2] = phr $_[3] = dtmod !evaled! $_[4] = $pm
# um 8:30 uhr um 8 : 30 uhr # um 8:30 uhr um 8 : 30 uhr
{phr=>'um (\d+\s?\:\s?\d+)( uhr)?', {phr=>'um (\d+\s?\:\s?\d+)( uhr)?',
@ -338,6 +354,11 @@ $Talk2Fhem_globals{DE}{dtspec} = [
dtmod=>{ dtmod=>{
time=>'"$2"', time=>'"$2"',
fc=>sub () { my $res=$_[0]; fc=>sub () { my $res=$_[0];
# Log 1, "0 ".localtime($_[0]);
# Log 1, "1 ".localtime($_[1]);
# Log 1, "2 ".$_[2];
# Log 1, "3 ".$_[3];
# Log 1, "4 ".$_[4];
my @evt = localtime($_[0]); my @evt = localtime($_[0]);
if ($evt[2] < 13) { if ($evt[2] < 13) {
my @now = localtime($_[1]); my @now = localtime($_[1]);
@ -1315,7 +1336,8 @@ my $pm; my $timeset;
$tf{$datemod} =~ s/\$\d+/$v/; $tf{$datemod} =~ s/\$\d+/$v/;
} }
$tf{$datemod} = eval($tf{$datemod}); # Kalkulationen $tf{$datemod} = eval($tf{$datemod}); # Kalkulationen
T2FL($myname, 5, "TIMEPHRASEDATA mod: '$datemod' raw: '$dmstore' result: '$tf{$datemod}' opt: '@opt' pm: '$pm'" ); T2FL($myname, 5, "TIMEPHRASEDATA mod: '$datemod' raw: '$dmstore' result: '$tf{$datemod}' opt: '@opt' pm: '".($pm // "")."'" );
if ($datemod eq "days") { if ($datemod eq "days") {
$evt = POSIX::mktime(0,0,0,($lt[3]+$tf{days}),$lt[4],$lt[5]) || 0; $evt = POSIX::mktime(0,0,0,($lt[3]+$tf{days}),$lt[4],$lt[5]) || 0;
$timeset = "12:00"; $timeset = "12:00";