9 Commits

3 changed files with 25 additions and 18 deletions

1
.gitignore vendored
View File

@@ -144,3 +144,4 @@ credentials*
# emacs # emacs
*~ *~
\#*\#

View File

@@ -10,6 +10,7 @@ If you like to test this repository you are recommended to use one of the follow
* Create a new user (e.g. "fritzab") in your _Fritz!Box_. **Don't use your default admin account!** * Create a new user (e.g. "fritzab") in your _Fritz!Box_. **Don't use your default admin account!**
* This user needs only the privileges regarding voice messages and to read from box's storage. * This user needs only the privileges regarding voice messages and to read from box's storage.
* As you only need to access the _FRITZ/voicebox/rec/_ path you should remove the right to read and write everything and add only this path and only with reading privilege. * As you only need to access the _FRITZ/voicebox/rec/_ path you should remove the right to read and write everything and add only this path and only with reading privilege.
* __Beware!__ If you use a USB device as expanded storage for your _Fritz!Box_ and allowed the TAM to use it for storing more messages you will need another path (e.g. _Storage-01/FRITZ/voicebox/rec/_). You also have to add the FRITZ_VOICEBOX_PATH variable in your _.env_ file (see below) according to that difference.
* You have to activate __Call Monitoring__ on your _Fritz!Box_ by using one of the connected phones and call `#96*5*`. * You have to activate __Call Monitoring__ on your _Fritz!Box_ by using one of the connected phones and call `#96*5*`.
* Call monitoring watches the box and the __FritzAB2Matrix__ is triggered every time a call disconnects. * Call monitoring watches the box and the __FritzAB2Matrix__ is triggered every time a call disconnects.
* If you cannot activate Call Monitoring the only way to use __FritzAB2MAtrix__ will be to have a cron job call it regularly. * If you cannot activate Call Monitoring the only way to use __FritzAB2MAtrix__ will be to have a cron job call it regularly.
@@ -19,12 +20,13 @@ If you like to test this repository you are recommended to use one of the follow
* Make it a virtual environment by `python3 -m venv <new folder>` and `source <new folder>/bin/activate`. * Make it a virtual environment by `python3 -m venv <new folder>` and `source <new folder>/bin/activate`.
* `cd <new folder>` * `cd <new folder>`
* Clone the repo. * Clone the repo.
* Inside the repo run `pip install --update pip && pip install -r requirements.txt` * Inside the repo run `pip install --upgrade pip && pip install -r requirements.txt`
* Create an `.env` file with your favourite editor: * Create an `.env` file with your favourite editor:
``` ```
FRITZ_USERNAME="fritzab" FRITZ_USERNAME="fritzab"
FRITZ_PASSWORD="SomeRand0mPa55word" FRITZ_PASSWORD="SomeRand0mPa55word"
FRITZ_IP="192.168.178.1" FRITZ_IP="192.168.178.1"
FRITZ_VOICEBOX_PATH="fritz.nas/FRITZ/voicebox"
FRITZ_TMP="/tmp" FRITZ_TMP="/tmp"
``` ```
__.env__ __.env__

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python3
from fritzconnection import FritzConnection from fritzconnection import FritzConnection
from dotenv import load_dotenv from dotenv import load_dotenv
@@ -26,7 +26,7 @@ if env_voicebox is None:
if env_tmp is None: if env_tmp is None:
env_tmp = "/tmp" env_tmp = "/tmp"
def main(): def fritzab2matrix():
### CHECK AND GET MESSAGES FROM FRITZBOX ### ### CHECK AND GET MESSAGES FROM FRITZBOX ###
############################################ ############################################
@@ -42,6 +42,7 @@ def main():
message_list_url = message_list['NewURL'] message_list_url = message_list['NewURL']
# Build the url to download the message via smb # Build the url to download the message via smb
def build_download_url(mid, tam=0): def build_download_url(mid, tam=0):
recording = "rec." + str(tam) + r"." + str(mid).zfill(3) recording = "rec." + str(tam) + r"." + str(mid).zfill(3)
@@ -62,12 +63,21 @@ def main():
messages = xmltodict.parse(doc) messages = xmltodict.parse(doc)
return messages return messages
l = get_message_list(message_list_url)
if l['Root'] == None or l['Root']['Message'] == None:
return False
else:
messages = l['Root']['Message']
if type(messages) is not list:
m = []
m.append(messages)
messages = m
for a in get_message_list(message_list_url)['Root']['Message']: for a in messages:
# format the information regarding the message # format the information regarding the message
msg_info = a['Date'] + " - " + a['Number'] msg_info = a['Date'] + " - " + a['Number']
if len(a['Name']) > 1: if a['Name']:
msg_info += " (" + a['Name'] + ") " msg_info += " (" + a['Name'] + ") "
# format the string for sound file's meta information # format the string for sound file's meta information
@@ -115,22 +125,18 @@ def main():
continue continue
continue continue
### Monitor the FritzBox and trigger the main script whenever a call disconnects ###
###################################################################################
endedCall(main, env_ip)
if __name__ == "__main__": if __name__ == "__main__":
try:
print("I enter the main loop ...") fritzab2matrix()
while main(): ### Monitor the FritzBox and trigger the main script whenever a call disconnects ###
pass ###################################################################################
else: endedCall(fritzab2matrix, env_ip)
print("I left the main loop!")
except:
print("An erroneous error happened!")
@@ -139,5 +145,3 @@ if __name__ == "__main__":