root/StormSiren/MythtvAlertDevice.py

Revision 183:1e15754ebd2a, 4.3 KB (checked in by cfreeze@…, 3 years ago)

add area in mythtv alerts

  • Property exe set to *
Line 
1#!/usr/bin/env python
2
3"""
4StormSiren
5Copyright (C) 2008  Chris Freeze <cfreeze/cfreeze_com\>
6
7Redistribution and use in source and binary forms, with or without
8modification, are permitted provided that the following conditions
9are met:
10
111. Redistributions of source code must retain the above copyright
12   notice, this list of conditions and the following disclaimer.
132. Redistributions in binary form must reproduce the above copyright
14   notice, this list of conditions and the following disclaimer in the
15   documentation and/or other materials provided with the distribution.
16
17THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27"""
28
29"""
30This is StormSiren a program inspired by the StormSiren application
31written by Roy McManus <slorf/users_sourceforge_net>.  Much like the
32original StormSiren written by Roy McManus <slorf/users_sourceforge_net>,
33this program is a simple script capable of scanning and providing
34notifications of weather bulletins issued by the National
35Weather Service.  StormSiren supports a wide range of paging devices
36and filtering of alert types per alert device.  While inspired by
37StormSiren, StormSiren is a complete rewrite that is capable of using
38the new CAP/XML feeds provided at http://www.weather.gov/alerts/.
39
40For more information there is see the README.TXT file located in the root
41of this directory.
42"""
43
44from socket import *
45from time import sleep
46
47from AlertDevice import *
48
49DEFAULT_MYTH_WAIT_TIME = 10
50DEFAULT_MYTH_PORT = 6948
51
52class MythtvAlertDevice(AlertDevice):
53        def __init__(self,mythtvInfo,alerts,areas):
54                super(MythtvAlertDevice,self).__init__(alerts,areas)
55                self.__mythtvInfo = mythtvInfo
56
57        def display(self):
58                super(MythtvAlertDevice,self).display()
59
60        def __str__(self):
61                str = "MythtvAlertDevice\n" + \
62                                self.__mythtvInfo.__str__() + \
63                                super(MythtvAlertDevice,self).__str__()
64                return str
65
66        def __trim(self,str):
67                if(str):
68                        str = str.strip()
69                        str = str.replace("\n"," ")
70                return str
71
72        def send(self,alert):
73                alert_text = self.__trim(alert.headline + " issued at " + alert.issued + " for " + alert.getAreas() + " in " + alert.state + "........" + alert.description + "..." + " Alert expires at " + alert.expires)
74                #print "SENDING: %s" % alert_text
75                msg = "<?xml version=\"1.0\"?>\n<mythnotify version=\"1\" displaytime=\"-1\">" + \
76                                        "<container name=\"news_scroller\">\n" + \
77                                                "<textarea name=\"text_scroll\"><value>" + alert_text + "</value></textarea>\n" + \
78                                        "</container>" + \
79                                        "</mythnotify>\n";
80                UdpSocket = socket(AF_INET,SOCK_DGRAM)
81                UdpSocket.sendto(msg,(self.__mythtvInfo.host,int(self.__mythtvInfo.port)))
82                sleep(self.__mythtvInfo.wait_time * 1.0)
83
84class MythtvAlertDeviceInfo(object):
85        def __init__(self, mythbox, wait_time = DEFAULT_MYTH_WAIT_TIME):
86                self.__mbox = mythbox.split(':')
87                self.__wait_time = wait_time
88                self.__port = DEFAULT_MYTH_PORT
89
90                if len(self.__mbox) == 2:
91                        self.host = self.__mbox[0]
92                        self.port = int(self.__mbox[1])
93                elif len(self.__mbox) == 1:
94                        self.host = self.__mbox[0]
95                else:
96                        print "Incorrect MythTv specification: " + self.__mbox
97                        sys.exit(1)
98
99        def display(self):
100                print self.__str__()
101
102        def __str__(self):
103                str = "MythtvAlertDeviceInfo\n"
104                str += "\tWaitTime: %i\n" % self.wait_time
105                str += "\t    Host: %s\n" % self.host
106                str += "\t    Port: %i\n" % self.port
107                return str
108
109        def getHost(self):
110                return self.__host
111
112        def setHost(self, host):
113                self.__host = host
114
115        def getPort(self):
116                return self.__port
117
118        def setPort(self, port):
119                self.__port = port
120
121        def getWaitTime(self):
122                return self.__wait_time
123
124        def setWaitTime(self, wait_time):
125                self.__wait_time = wait_time
126
127        host = property(getHost,setHost,None)
128        port = property(getPort,setPort,None)
129        wait_time = property(getWaitTime,setWaitTime,None)
Note: See TracBrowser for help on using the browser.