2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2024-11-22 02:59:49 +00:00

voip2fhem added to conrib/

git-svn-id: https://svn.fhem.de/fhem/trunk@126 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
martinhaas 2007-12-21 12:43:45 +00:00
parent 09c5edb703
commit 12db6bfe8f
9 changed files with 358 additions and 0 deletions

View File

@ -0,0 +1,3 @@
- 2007-12-18
- Initial Version

View File

@ -0,0 +1,3 @@
- martin, Di Dez 18 21:04:13 CET 2007
- initial version

View File

@ -0,0 +1,56 @@
****** VoIP2FHEM or HOWTO control the FHEM with Asterisk ******
Description
* This is a HOWTO about the use of a VoIP-DECT-Telephone as a remote
controller for the FHEM-Devices.
The provided scripts are under the GPL.
The Goal is
-- Switching the FS20-Devices
-- text2speach, the Telephone reads e.g. the measured-temp
-- Possibility to start scripts with the Remote Telephone
-- AND EVERYTHING MUST RUN ON THE NSLU2 :-)
Technical Overview
* On the NLSU2 (or every other Linux Box) runs an Asterisk. This machine
must not be the machine with the FHEM. I bought the Voip-DECT-Telephone
Siemens Gigaset C470 IP (80.-EUR). It has a nice Webinterface and it is
possible to read in a self made telephone book.
The Asterisk calls depending on the dialed number a bash skript. After
that Asterisk plays two soundfiles < text >< value > in a loop.
The NSLU2 is a weak machine. It always only creates a soundfile 1x and
then stores it on the harddisk. A set of prebuild voices (e.g. digits
from -20 to 90) are included. Some scripts for creating soundfiles and
automatically the telephone book are provided too.
Installation
* Go to http://fhem.dnsalias.net/voip2fhem and download the files.
-- Install with your package manager asterisk, sox, espeak. On the NLSU2:
"apt-get install asterisk sox espeak".
-- Debian: activate asterisk in the /etc/default/asterisk
-- copy the scripts voip2fhem voip2fhem_create_telefonlist
voip2fhem_create_txt2gsm to /usr/local/bin/ and be shure that they are
executable (chmod +x /usr/local/bin/voip2fhem*)
-- You can find on http://fhem.dnsalias.net/voip2fhem prepared voices:
"tar -xvzf voip2fhem_voices.tar.gz -C /" and give the correct rights
"chown -R asterisk.asterisk /var/tmp/voip2fhem"
-- cp extensions.conf and sip.conf to /etc/asterisk/ and edit these files
and the bash script /usr/local/bin/voip2fhem
-- restart/reload asterisk (/etc/init.d/asterisk restart or asterisk -
r and then "extensions reload" and "sip reload")
Hints
* -- if there isn't the required soundfile then the NSLU2 creates it. This
needs minutes (example: the word "asterisk" needs 3 min). voip2fhem
stores this file and the next time it will be used.
-- Use the script voip2fhem_create_txt2gsm on a faster machine to create
the sounds. Usage: voip2fhem_create_txt2gsm "I love FHEM". The soundfile
is then automatically copied to /var/tmp/voip2fhem/
-- it is also possible to connect the ASTERISK with the rest of the world
(e.g. Sipgate, 1und1) :-)
-- for debug asterisk: "asterisk -r", "sip debug"
Have fun and success :-)
Martin Haas
fhem@martin-haas.de

View File

@ -0,0 +1,55 @@
<html>
<head>
</head>
<body>
<h1> VoIP2FHEM or HOWTO control the FHEM with Asterisk</h1><br>
<b>Description</b><br>
<ul>This is a HOWTO about the use of a VoIP-DECT-Telephone as a remote controller for the <a href='http://fhem.de'>FHEM-Devices.</a><br>The provided scripts are under the GPL.<br>
<br>
The Goal is<br>
-- Switching the FS20-Devices <br>
-- text2speach, the Telephone reads e.g. the measured-temp <br>
-- Possibility to start scripts with the Remote Telephone<br>
-- AND EVERYTHING MUST RUN ON THE NSLU2 :-)<br>
<br>
</ul>
<b>Technical Overview</b><br>
<ul>
On the NLSU2 (or every other Linux Box) runs an Asterisk. This machine must not be the machine with the FHEM. I bought the Voip-DECT-Telephone Siemens Gigaset C470 IP (80.-EUR). It has a nice Webinterface and it is possible to read in a self made telephone book.<br>
The Asterisk calls depending on the dialed number a bash skript. After that Asterisk plays two soundfiles < text >< value > in a loop.<br>
<br>
The NSLU2 is a weak machine. It always only creates a soundfile 1x and then stores it on the harddisk. A set of prebuild voices (e.g. digits from -20 to 90) are included. Some scripts for creating soundfiles and automatically the telephone book are provided too.
</ul>
<b>Installation</b><br>
<ul>
Go to http://fhem.dnsalias.net/voip2fhem and download the files.<br>
-- Install with your package manager asterisk, sox, espeak. On the NLSU2: "apt-get install asterisk sox espeak".<br>
-- Debian: activate asterisk in the /etc/default/asterisk<br>
-- copy the scripts voip2fhem voip2fhem_create_telefonlist voip2fhem_create_txt2gsm to /usr/local/bin/ and be shure that they are executable (chmod +x /usr/local/bin/voip2fhem*)<br>
-- You can find on http://fhem.dnsalias.net/voip2fhem prepared voices: "tar -xvzf voip2fhem_voices.tar.gz -C /" and give the correct rights "chown -R asterisk.asterisk /var/tmp/voip2fhem" <br>
-- cp extensions.conf and sip.conf to /etc/asterisk/ and edit these files and the bash script /usr/local/bin/voip2fhem<br>
-- restart/reload asterisk (/etc/init.d/asterisk restart or asterisk -r and then "extensions reload" and "sip reload")
</ul>
<b>Hints</b><br>
<ul>
-- if there isn't the required soundfile then the NSLU2 creates it. This needs minutes (example: the word "asterisk" needs 3 min). voip2fhem stores this file and the next time it will be used.<br>
-- Use the script voip2fhem_create_txt2gsm on a faster machine to create the sounds. Usage: voip2fhem_create_txt2gsm "I love FHEM". The soundfile is then automatically copied to /var/tmp/voip2fhem/<br>
-- it is also possible to connect the ASTERISK with the rest of the world (e.g. Sipgate, 1und1) :-)<br>
-- for debug asterisk: "asterisk -r", "sip debug"<br>
</ul>
<br><br>
Have fun and success :-)<br>
Martin Haas<br>
fhem@martin-haas.de<br>
<br>
</body>
</html>

View File

@ -0,0 +1,47 @@
[FHEM]
; Important for voip2fhem: System(PATH_TO_voip2fhem NAME_FHEM_DEV "TEXT FOR TELEPHONBOOK and espeak" FHEM_TYPE)
; after every change of this file make "asterisk -r" and then "extensions reload"
exten => 3001,1,Answer()
exten => 3001,2,System(/usr/local/bin/voip2fhem ks300 "Aussentemperatur ." KS300)
exten => 3001,3,Playback(/tmp/asterisk1)
exten => 3001,n,Playback(/tmp/asterisk2)
exten => 3001,n,Wait(3)
exten => 3001,n,Goto(3)
exten => 3002,1,Answer()
exten => 3002,2,System(/usr/local/bin/voip2fhem kesselu "Kesseltemperatur kesselu ." HMS100)
exten => 3002,3,Playback(/tmp/asterisk1)
exten => 3002,4,Playback(/tmp/asterisk2)
exten => 3002,n,Wait(3)
exten => 3002,n,Goto(3)
exten => 3003,1,Answer()
exten => 3003,2,System(/usr/local/bin/voip2fhem wz "Wohnzimmertemperatur ." FHT)
exten => 3003,3,Playback(/tmp/asterisk1)
exten => 3003,4,Playback(/tmp/asterisk2)
exten => 3003,n,Wait(3)
exten => 3003,n,Goto(3)
exten => 3004,1,Answer()
exten => 3004,2,System(/usr/local/bin/voip2fhem nachto "Nachtlicht oben" FS20)
exten => 3004,3,Playback(/tmp/asterisk1)
exten => 3004,n,Wait(3)
exten => 3004,n,Goto(3)
exten => 3005,1,Answer()
exten => 3005,2,System(/usr/local/bin/voip2fhem stuwz1 "Fernsehlicht" FS20)
exten => 3005,3,Playback(/tmp/asterisk1)
exten => 3005,n,Wait(3)
exten => 3005,n,Goto(3)
exten => 3006,1,Answer()
exten => 3006,2,System(/usr/local/bin/voip2fhem ofen "Status Ofen ." FS20STATE)
exten => 3006,3,Playback(/tmp/asterisk1)
exten => 3006,n,Playback(/tmp/asterisk2)
exten => 3006,n,Wait(3)
exten => 3006,n,Goto(3)

View File

@ -0,0 +1,13 @@
[general]
context=FHEM
port=5060
bindaddr=0.0.0.0
; FHEM: VoIP-Telephone with the Name/Number 2000 and the password 1234
[2000]
type=friend
context=FHEM
secret=1234
host=dynamic

View File

@ -0,0 +1,72 @@
#!/bin/bash
# Interface from Asterisk to fhem
# this file is called from /etc/asterisk/extensions.conf
# Martin Haas 071214
# if you want to use the english spoken espeak then change "espeak -v de" to "espeak"
FHEM=localhost # if not localhost then set the port inside of FHEM to global
FHEMport=7072
location=/var/tmp/voip2fhem # later the owner must be asterisk.asterisk!
[[ ! -d $location ]] && mkdir $location
####################################################
##
providesound()
{
lvoice="$location/$(echo $voice | sed -e 's/-//g' -e 's/[ .:]/_/g').gsm"
echo $lvoice
if [ ! -f $lvoice ]
then
espeak -v de -s 120 -w /tmp/asterisk.wav "$voice"
sox /tmp/asterisk.wav -r 8000 -c 1 $lvoice resample -ql
fi
cp $lvoice /tmp/asterisk$type.gsm
}
###################################
##
case "$3" in
######################################
KS300)
temperature=$(echo "list $1" | netcat -w1 $FHEM $FHEMport | grep temperature | awk '{print $4}')
[[ ${temperature:0:1} == - ]] && temperature="minus $temperature" ## negativ temperature
voice=$2; type=1; providesound "$voice" $type
voice=$temperature; type=2; providesound "$voice" $type
;;
######################################
FHT)
temperature=$(echo "list $1" | netcat -w1 $FHEM $FHEMport | grep measured-temp | awk '{print $4}')
voice=$2; type=1; providesound "$voice" $type
voice=$temperature; type=2; providesound "$voice" $type
;;
######################################
FS20STATE)
state=$(echo "list $1" | netcat -w1 $FHEM $FHEMport | grep STATE | awk '{print $2}')
voice=$2; type=1; providesound "$voice" $type
voice=$state; type=2; providesound "$voice" $type
;;
#####################################
HMS100)
temperature=$(echo "list $1" | netcat -w1 $FHEM $FHEMport | grep STATE | awk '{print $3}')
voice=$2; type=1; providesound "$voice" $type
voice=$temperature; type=2; providesound "$voice" $type
;;
######################################
FS20)
echo "set $1 toggle" | netcat -w1 $FHEM $FHEMport
voice=$2; type=1; providesound "$voice" $type
;;
esac

View File

@ -0,0 +1,30 @@
#!/bin/bash
# this skript creates for e.g. the Siemens C470 IP a telephone book which can be read in by the webinterface of the telephone
# The script reads the /etc/asterisk/extensions.conf and creates the /tmp/teledir.vcf
# Martin Haas 071216
#
# you need the tool unix2dos :-( It is depending on your Distribution included in unix2dos or tofrodos
telefonbook=/tmp/teledir.vcf
rm -f $telefonbook
grep System /etc/asterisk/extensions.conf | grep -v '^;' | \
while read fhemdev
do
number=$(echo $fhemdev | cut -d, -f1 | awk '{print $3}')
name=$(echo $fhemdev | cut -d\" -f2 | sed 's/\./ /g')
echo "BEGIN:VCARD" >>$telefonbook
echo "VERSION:2.1" >>$telefonbook
echo "FN:$name" >>$telefonbook
echo "N:$name" >>$telefonbook
echo "TEL;HOME:$number" >>$telefonbook
echo "END:VCARD" >>$telefonbook
echo >>$telefonbook
done
unix2dos $telefonbook

View File

@ -0,0 +1,79 @@
#!/bin/bash
# weak machines need a long time to create a gsm-Voicefile.
# this script searches for an existing voice and if not it will create it
# Martin Haas 071217
# The NSLU2 needs e.g. 5min to convert the word "Aussentemperatur"
# Call this file (on a faster machine :-) ) with the words to convert
# e-g voip2fhem_create_txt2gsm "This is a test"
# otherwise this script creates number from -20 to +90
# hint: cat examplefile | while read line; do ./voip2fhem_create_txt2gsm "$line"; done
location=/var/tmp/voip2fhem # later the owner must be asterisk.asterisk
[[ ! -d $location ]] && { mkdir $location; chown asterisk.asterisk $location; }
###################################################
###
CreateVoices()
{
lvoice="$location/$(echo $voice | sed 's/[ ,.:]/_/g').gsm"
echo $lvoice
if [ ! -f $lvoice ]
then
espeak -v de -s 120 -w /tmp/asterisk.wav "$voice"
sox /tmp/asterisk.wav -r 8000 -c 1 $lvoice resample -ql
fi
}
###################################################
## main
if [[ $1 ]]
then
voice=$1
CreateVoices "$voice"
else
for i in `seq -20 90 ` -0
do
if [ ${i:0:1} == - ]
then
m="minus $i" ## negativ temperature
voice=$(echo $m | sed -e 's/-//g' -e 's/\./,/g') # English people: change , against .
else
voice=$(echo $i | sed 's/\./,/g') # English people: change , against .
fi
CreateVoices "$voice"
origvoice=$voice
for k in `seq 0 9`
do
voice="$origvoice,$k" # English people: change , against .
CreateVoices "$voice"
voice=$origvoice
done
done
fi