Rev 1001 | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 969 | runge | 1 | |
| 1001 | runge | 2 | function SensorPrint(type, name, id) |
| 969 | runge | 3 | { |
| 4 | /* We must always call the parent constructor, initialization |
||
| 5 | of variables could be done here, but initialize is a better place */ |
||
| 1001 | runge | 6 | this.Service(type, name, id); |
| 969 | runge | 7 | } |
| 8 | |||
| 9 | /* We inherit from Service with this call, it must always be next |
||
| 10 | after the constructor */ |
||
| 11 | extend(SensorPrint, Service); |
||
| 12 | |||
| 13 | /* Declaration of instance variables, for static variables remove prototype */ |
||
| 14 | SensorPrint.prototype.myLCDService = null; |
||
| 987 | runge | 15 | SensorPrint.prototype.myDTMFService = null; |
| 969 | runge | 16 | SensorPrint.prototype.myTempService = null; |
| 17 | SensorPrint.prototype.myVoltService = null; |
||
| 971 | runge | 18 | SensorPrint.prototype.myInterval = null; |
| 987 | runge | 19 | SensorPrint.prototype.myOnlinePhonebook = null; |
| 969 | runge | 20 | |
| 21 | /* This function must always be declared, this is where all the startup code |
||
| 22 | should be placed. Gets called with arguments like what ids to use etc. */ |
||
| 23 | SensorPrint.prototype.initialize = function(initialArguments) |
||
| 24 | { |
||
| 25 | /* We must always call the parent initialize */ |
||
| 26 | this.Service.prototype.initialize.call(this, initialArguments); |
||
| 27 | |||
| 28 | /* This is used for function decalrations like the callbacks below */ |
||
| 29 | var self = this; |
||
| 30 | |||
| 1001 | runge | 31 | if (!this.myInitialArguments["HD44789"]) |
| 32 | { |
||
| 33 | log(this.myName + ":" + this.myId + "> Failed to initialize, HD44789-config missing from config.\n"); |
||
| 34 | return; |
||
| 35 | } |
||
| 36 | |||
| 37 | if (!this.myInitialArguments["DS18x20"]) |
||
| 38 | { |
||
| 39 | log(this.myName + ":" + this.myId + "> Failed to initialize, DS18x20-config missing from config.\n"); |
||
| 40 | return; |
||
| 41 | } |
||
| 42 | |||
| 43 | if (!this.myInitialArguments["BusVoltage"]) |
||
| 44 | { |
||
| 45 | log(this.myName + ":" + this.myId + "> Failed to initialize, BusVoltage-config missing from config.\n"); |
||
| 46 | return; |
||
| 47 | } |
||
| 48 | |||
| 49 | if (!this.myInitialArguments["SimpleDTMF"]) |
||
| 50 | { |
||
| 51 | log(this.myName + ":" + this.myId + "> Failed to initialize, SimpleDTMF-config missing from config.\n"); |
||
| 52 | return; |
||
| 53 | } |
||
| 54 | |||
| 969 | runge | 55 | /* Get the LCD service that we want from the ServiceManager, it takes type, service name, service id */ |
| 56 | this.myLCDService = ServiceManager.getService("Can", "HD44789", this.myInitialArguments["HD44789"]["Id"]); |
||
| 57 | /* Add a callback for when the service goes online */ |
||
| 58 | this.myLCDService.registerEventCallback("online", function(args) { self.lcdOnline(); }); |
||
| 59 | /* If the service is already online we should call the handler here */ |
||
| 60 | this.lcdOnline(); |
||
| 971 | runge | 61 | /* Add a callback for when the service goes offline */ |
| 62 | this.myLCDService.registerEventCallback("offline", function(args) { self.lcdOffline(); }); |
||
| 1001 | runge | 63 | |
| 969 | runge | 64 | /* Get the LCD service that we want from the ServiceManager, it takes type, service name, service id */ |
| 65 | this.myTempService = ServiceManager.getService("Can", "DS18x20", this.myInitialArguments["DS18x20"]["Id"]); |
||
| 66 | /* Add a callback for when the sensor reports a new value */ |
||
| 67 | this.myTempService.registerEventCallback("newValue", function(args) { self.temperatureUpdate(args); }); |
||
| 68 | /* Add a callback for when the service goes online */ |
||
| 69 | this.myTempService.registerEventCallback("online", function(args) { self.tempOnline(); }); |
||
| 70 | /* If the service is already online we should call the handler here */ |
||
| 71 | this.tempOnline(); |
||
| 1001 | runge | 72 | |
| 969 | runge | 73 | /* Get the LCD service that we want from the ServiceManager, it takes type, service name, service id */ |
| 74 | this.myVoltService = ServiceManager.getService("Can", "BusVoltage", this.myInitialArguments["BusVoltage"]["Id"]); |
||
| 75 | /* Add a callback for when the sensor reports a new value */ |
||
| 76 | this.myVoltService.registerEventCallback("newValue", function(args) { self.voltageUpdate(args); }); |
||
| 77 | /* Add a callback for when the service goes online */ |
||
| 78 | this.myVoltService.registerEventCallback("online", function(args) { self.voltOnline(); }); |
||
| 79 | /* If the service is already online we should call the handler here */ |
||
| 80 | this.voltOnline(); |
||
| 987 | runge | 81 | |
| 82 | |||
| 83 | this.myDTMFService = ServiceManager.getService("Can", "SimpleDTMF", this.myInitialArguments["SimpleDTMF"]["Id"]); |
||
| 84 | this.myDTMFService.registerEventCallback("newPhonenumber", function(args) { self.dtmfUpdate(args); }); |
||
| 85 | //this.myDTMFService.registerEventCallback("online", function(args) { self.dtmfOnline(); }); |
||
| 86 | this.dtmfOnline(); |
||
| 87 | |||
| 88 | this.myOnlinePhonebook = new OnlinePhonebook(function(phonenumber, persons) { self.phonebookLookupCallback(phonenumber, persons); }); |
||
| 969 | runge | 89 | } |
| 90 | |||
| 987 | runge | 91 | SensorPrint.prototype.dtmfOnline = function() |
| 92 | { |
||
| 93 | } |
||
| 94 | |||
| 95 | SensorPrint.prototype.dtmfUpdate = function(args) |
||
| 96 | { |
||
| 97 | this.myOnlinePhonebook.lookup(this.myDTMFService.getLastPhonenumber()); |
||
| 98 | } |
||
| 99 | |||
| 100 | SensorPrint.prototype.phonebookLookupCallback = function(phonenumber, persons) |
||
| 101 | { |
||
| 102 | if (this.myLCDService.isOnline()) |
||
| 103 | { |
||
| 104 | var personString = ""; |
||
| 105 | |||
| 106 | for (var n = 0; n < persons.length; n++) |
||
| 107 | { |
||
| 108 | this.myLCDService.printText(0, n+1, persons[n].pad(18, ' ', 1)); |
||
| 109 | /* Print out what we are doing to the console */ |
||
| 999 | runge | 110 | log(this.myName + ":" + this.myId + "> Trying to print " + persons[n] + " to LCD\n"); |
| 987 | runge | 111 | } |
| 112 | |||
| 113 | for (var c = n+1; c < 4; c++) |
||
| 114 | { |
||
| 115 | var str = " "; |
||
| 116 | this.myLCDService.printText(0, c, str); |
||
| 117 | } |
||
| 118 | } |
||
| 119 | } |
||
| 120 | |||
| 969 | runge | 121 | SensorPrint.prototype.lcdOnline = function() |
| 122 | { |
||
| 123 | /* If service is not online do nothing */ |
||
| 124 | if (this.myLCDService.isOnline()) |
||
| 125 | { |
||
| 126 | /* Clear the LCD screen */ |
||
| 127 | this.myLCDService.clearScreen(); |
||
| 128 | /* Set backlight to max */ |
||
| 129 | this.myLCDService.setBacklight(255); |
||
| 130 | |||
| 131 | /* If we have no interval timer running start it */ |
||
| 971 | runge | 132 | if (this.myInterval == null) |
| 969 | runge | 133 | { |
| 971 | runge | 134 | var self = this; |
| 135 | |||
| 136 | /* Start interval timer for our printout. Arguments are the callback function and time in seconds */ |
||
| 1042 | runge | 137 | this.myInterval = new Interval(function() { self.timerUpdate() }, 1000); |
| 969 | runge | 138 | } |
| 971 | runge | 139 | |
| 1042 | runge | 140 | this.myInterval.start(); |
| 969 | runge | 141 | } |
| 142 | } |
||
| 143 | |||
| 971 | runge | 144 | SensorPrint.prototype.lcdOffline = function() |
| 145 | { |
||
| 146 | /* If we have no interval timer running do nothing */ |
||
| 147 | if (this.myInterval != null) |
||
| 148 | { |
||
| 149 | /* Stop the interval */ |
||
| 150 | this.myInterval.stop(); |
||
| 151 | } |
||
| 152 | } |
||
| 153 | |||
| 969 | runge | 154 | SensorPrint.prototype.tempOnline = function() |
| 155 | { |
||
| 156 | /* If service is not online do nothing */ |
||
| 157 | if (this.myTempService.isOnline()) |
||
| 158 | { |
||
| 159 | /* Set report interval to 5 seconds */ |
||
| 160 | this.myTempService.setReportInterval(5); |
||
| 161 | } |
||
| 162 | } |
||
| 163 | |||
| 164 | SensorPrint.prototype.voltOnline = function() |
||
| 165 | { |
||
| 166 | /* If service is not online do nothing */ |
||
| 167 | if (this.myVoltService.isOnline()) |
||
| 168 | { |
||
| 169 | /* Set report interval to 5 seconds */ |
||
| 170 | this.myVoltService.setReportInterval(5); |
||
| 171 | } |
||
| 172 | } |
||
| 173 | |||
| 174 | SensorPrint.prototype.temperatureUpdate = function(sensorId) |
||
| 175 | { |
||
| 176 | /* If LCD service is not online do nothing */ |
||
| 177 | if (this.myLCDService.isOnline()) |
||
| 178 | { |
||
| 179 | /* Format our data to the right format */ |
||
| 180 | var data = (this.myTempService.getValue(sensorId).toFixed(2).toString() + " C").pad(7, " ", 1); |
||
| 181 | /* Print the text to the LCD */ |
||
| 182 | this.myLCDService.printText(0, 0, data); |
||
| 183 | /* Print out what we are doing to the console */ |
||
| 184 | log(this.myName + ":" + this.myId + "> Trying to print " + data + " value to LCD\n"); |
||
| 185 | } |
||
| 186 | } |
||
| 187 | |||
| 188 | SensorPrint.prototype.voltageUpdate = function(sensorId) |
||
| 189 | { |
||
| 190 | /* If LCD service is not online do nothing */ |
||
| 191 | if (this.myLCDService.isOnline()) |
||
| 192 | { |
||
| 193 | /* Format our data to the right format */ |
||
| 194 | var data = (this.myVoltService.getValue(sensorId).toFixed(2).toString() + " V").pad(7, " ", 1); |
||
| 195 | /* Print the text to the LCD */ |
||
| 196 | this.myLCDService.printText(8, 0, data); |
||
| 197 | /* Print out what we are doing to the console */ |
||
| 198 | log(this.myName + ":" + this.myId + "> Trying to print " + data + " value to LCD\n"); |
||
| 199 | } |
||
| 200 | } |
||
| 201 | |||
| 202 | SensorPrint.prototype.timerUpdate = function() |
||
| 203 | { |
||
| 204 | /* If LCD service is not online do nothing */ |
||
| 205 | if (this.myLCDService.isOnline()) |
||
| 206 | { |
||
| 971 | runge | 207 | var date = new Date(); |
| 969 | runge | 208 | /* Get the current date time on the format YYYY-mm-dd HH.ii.ss */ |
| 971 | runge | 209 | var dateAndTime = date.getDateTimeFormated(); |
| 969 | runge | 210 | /* Print the text to the LCD */ |
| 211 | this.myLCDService.printText(0, 3, dateAndTime); |
||
| 212 | /* Print out what we are doing to the console */ |
||
| 213 | log(this.myName + ":" + this.myId + "> Trying to print " + dateAndTime + " to LCD\n"); |
||
| 214 | } |
||
| 215 | } |