Changeset b73eae


Ignore:
Timestamp:
09/11/13 14:32:33 (7 years ago)
Author:
Stefan Persson <stefan.persson@…>
Branches:
('master', 'cc326285c5d9e5d35ef50c97ddab57539e602594')
Children:
7c84ee3921fb9c0b2fc776bc0b66d5eaecd4fdb3
Parents:
103eaf05e0c5c849ecfe033aae349642fec4fa31
git-author:
Stefan Persson <stefan.persson@telldus.se>2013-09-11 14:32:33+02:00
git-committer:
Stefan Persson <stefan.persson@telldus.se>2013-09-11 14:32:33+02:00
Message:

Possiblity to add sensors from TelldusCenter to be visible in Telldus Live! This closes #186.

Location:
telldus-gui/Plugins
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • telldus-gui/Plugins/Live/LiveMessageToken.cpp

    r06bf1a rb73eae  
    167167        p_token.dictVal[key] = token; 
    168168} 
     169 
     170void LiveMessageTokenScriptWrapper::set(const QString &key, const QDateTime value) { 
     171        p_token.valueType = LiveMessageToken::Dictionary; 
     172        LiveMessageToken token; 
     173        token.valueType = LiveMessageToken::Int; 
     174        token.intVal = value.toMSecsSinceEpoch(); 
     175        p_token.dictVal[key] = token; 
     176} 
  • telldus-gui/Plugins/Live/LiveMessageToken.h

    r06bf1a rb73eae  
    33 
    44#include <QByteArray> 
     5#include <QDateTime> 
    56#include <QString> 
    67#include <QHash> 
     
    4344        void set(const QString &key, int value); 
    4445        void set(const QString &key, const QString &value); 
     46        void set(const QString &key, const QDateTime value); 
    4547 
    4648private: 
  • telldus-gui/Plugins/Live/__init__.js

    rd3227e rb73eae  
    7070        } 
    7171 
     72        function isRegisteredToLive(){ 
     73                return isRegistered; 
     74        } 
     75 
    7276        function registered(msg) { 
    7377                if (menuId > 0) { 
     
    116120        } 
    117121 
     122        function sendSensorsReport(sensorList) { 
     123                if (!isRegistered) { 
     124                        return; 
     125                } 
     126                msg = new LiveMessage("SensorsReport"); 
     127 
     128                list = new LiveMessageToken(); 
     129                for( i in sensorList ) { 
     130                        sensorFrame = new LiveMessageToken(); 
     131                        sensor = new LiveMessageToken(); 
     132                        sensor.set('name', sensorList[i].name); 
     133                        sensor.set('protocol', sensorList[i].protocol); 
     134                        sensor.set('model', sensorList[i].model); 
     135                        sensor.set('sensor_id', sensorList[i].id); 
     136                        var valueList = new LiveMessageToken(); 
     137                        for( j in sensorList[i].values ){ 
     138                                valueElement = new LiveMessageToken() 
     139                                valueElement.set('type', sensorList[i].values[j].type); 
     140                                valueElement.set('lastUp', sensorList[i].values[j].lastUpdated); 
     141                                valueElement.set('value', sensorList[i].values[j].value); 
     142                                valueList.add(valueElement); 
     143                        } 
     144                        sensorFrame.add(sensor); 
     145                        sensorFrame.add(valueList); 
     146                        list.add(sensorFrame); 
     147                } 
     148                msg.appendToken(list); 
     149                socket.sendMessage(msg); 
     150        } 
     151 
     152        function sendSensorValues(sensor, sensorvalues){ 
     153                if (!isRegistered) { 
     154                        return; 
     155                } 
     156                msg = new LiveMessage("SensorEvent"); 
     157                sensortoken = new LiveMessageToken(); 
     158                sensortoken.set('protocol', sensor.protocol); 
     159                sensortoken.set('model', sensor.model); 
     160                sensortoken.set('sensor_id', sensor.id); 
     161                var valueList = new LiveMessageToken(); 
     162                for( j=0; j<sensorvalues.length; j++ ) { 
     163                        valueElement = new LiveMessageToken() 
     164                        valueElement.set('type', sensorvalues[j].type); 
     165                        valueElement.set('lastUp', sensorvalues[j].lastUpdated); 
     166                        valueElement.set('value', sensorvalues[j].value); 
     167                        valueList.add(valueElement); 
     168                } 
     169                msg.appendToken(sensortoken); 
     170                msg.appendToken(valueList); 
     171                socket.sendMessage(msg); 
     172        } 
     173 
    118174        function errorChanged(msg) { 
    119175                configUI.findChild('errorLabel').text = msg; 
     
    125181 
    126182        return { //Public functions 
    127                 init:init 
     183                init:init, 
     184                sendSensorsReport:sendSensorsReport, 
     185                isRegisteredToLive:isRegisteredToLive, 
     186                sendSensorValues:sendSensorValues 
    128187        } 
    129188}(); 
  • telldus-gui/Plugins/Sensors/SensorList.qml

    r6a944b rb73eae  
    4242                        id: visibleinlistTitle 
    4343                        text: qsTr("Visible in list") 
     44                        anchors.right: sendtoliveTitle.left 
     45                        horizontalAlignment: Text.AlignHCenter 
     46                        visible: main.state == "EDIT" 
     47                        width: 100 
     48                } 
     49                HeaderTitle { 
     50                        id: sendtoliveTitle 
     51                        text: qsTr("Send to Telldus Live!") 
    4452                        anchors.right: sensorinformationTitle.left 
    4553                        horizontalAlignment: Text.AlignHCenter 
    4654                        visible: main.state == "EDIT" 
    47                         width: 100 
     55                        width: 150 
    4856                } 
    4957                HeaderTitle { 
     
    7381                                if(main.state == "VIEW"){ 
    7482                                        main.state = "EDIT" 
     83                                        sendSensorReport.callWith(1); 
    7584                                } 
    7685                                else{ 
    7786                                        main.state = "VIEW" 
     87                                        sendSensorReport.callWith(2); 
    7888                                } 
    7989                        } 
  • telldus-gui/Plugins/Sensors/SensorView.qml

    r103eaf rb73eae  
    8484                        height: 40 
    8585                        width: 100 
    86                         anchors.right: sensorInfo.left 
     86                        anchors.right: sendtolivecheckbox.left 
    8787                        CheckBox { 
    8888                                id: checkBox 
     
    9292                                checked: modelData.showInList 
    9393                                onClicked: modelData.setShowInList(!modelData.showInList) 
     94                        } 
     95                } 
     96                Item  { 
     97                        id: sendtolivecheckbox 
     98                        height: 40 
     99                        width: 150 
     100                        anchors.right: sensorInfo.left 
     101                        CheckBox { 
     102                                id: checkBoxSTL 
     103                                anchors.centerIn: parent 
     104                                width: checkBoxSTL.height 
     105                                visible: sensorViewItem.state == "EDIT" 
     106                                checked: modelData.sendToLive 
     107                                onClicked: modelData.setSendToLive(!modelData.sendToLive) 
    94108                        } 
    95109                } 
  • telldus-gui/Plugins/Sensors/__init__.js

    r103eaf rb73eae  
    1212                sensorList = loadSensorModel(); 
    1313                sensorList.rowsRemoved.connect(function(){saveSensorModel();}); 
    14                 sensorList.rowsInserted.connect(function(){saveSensorModel();}); 
     14                                sensorList.rowsInserted.connect(function(){saveSensorModel(); sendSensorReport();}); 
    1515 
    1616                while(sensorData = com.telldus.core.sensor()) { 
     
    3939                view = new com.telldus.qml.view({ 
    4040                        deleteSensor: deleteSensor, 
    41                         getWindDirection: getWindDirection 
     41                        getWindDirection: getWindDirection, 
     42                        sendSensorReport: sendSensorReport 
    4243                }); 
    4344 
     
    5657        } 
    5758 
    58         function createSensor(protocol, model, id, name, showInList){ 
     59        function allValuesUpdated(sensorValues) { 
     60                var numSensors = sensorValues.length; 
     61                if (numSensors == 0) { 
     62                        //error 
     63                        return false; 
     64                } 
     65 
     66                if (numSensors == 1) { 
     67                        //this sensor has only one sensor, so all values are updated 
     68                        return true; 
     69                } 
     70 
     71                var updatedValue = sensorValues[0]['lastUpdated']; 
     72                for (var i=1; i<numSensors; i++) { 
     73                        if (updatedValue.valueOf() != sensorValues[i]['lastUpdated'].valueOf()) { 
     74                                //not all values updated yet 
     75                                return false; 
     76                        } 
     77                } 
     78                return true; 
     79        } 
     80 
     81        function createSensor(protocol, model, id, name, showInList, sendToLive){ 
    5982                var sensor = new com.telldus.sensors.sensor(); 
    6083                sensor.protocol = protocol; 
     
    6588                sensor.showInList = showInList; 
    6689                sensor.showInListChanged.connect(function() { saveSensorModel(); }); 
     90                sensor.sendToLive = sendToLive; 
     91                sensor.sendToLiveChanged.connect(function() { saveSensorModel(); sendSensorReport(); }); 
    6792                return sensor; 
    6893        } 
     
    134159                if(sensorProperties){ 
    135160                        for (var i = 0; i < sensorProperties.length; i++) { 
    136                                 var sensor = createSensor(sensorProperties[i].protocol, sensorProperties[i].model, sensorProperties[i].id, sensorProperties[i].name, sensorProperties[i].showInList=="true"); 
     161                                var sensor = createSensor(sensorProperties[i].protocol, sensorProperties[i].model, sensorProperties[i].id, sensorProperties[i].name, sensorProperties[i].showInList=="true", sensorProperties[i].sendToLive=="true"); 
    137162                                for (var j = 0; j < sensorProperties[i].values.length; j++) { 
    138163                                        sensor.setValue(sensorProperties[i].values[j].type, sensorProperties[i].values[j].value, sensorProperties[i].values[j].lastUpdated) 
     
    193218                        var allValues = pickSensorValues(sensor); 
    194219 
    195                         var sensorProp = {protocol:sensor.protocol, model:sensor.model, id:sensor.id, values:allValues, name:sensor.name, showInList:sensor.showInList}; 
     220                        var sensorProp = {protocol:sensor.protocol, model:sensor.model, id:sensor.id, values:allValues, name:sensor.name, showInList:sensor.showInList, sendToLive:sensor.sendToLive}; 
    196221                        sensorProperties.push(sensorProp); 
    197222                } 
    198223 
    199224                settings.setValue("sensors", sensorProperties); 
     225        } 
     226 
     227        function sendSensorReport(){ 
     228                //TODO Only show "sendToLive" if Telldus Live! is activated 
     229                if(!com.telldus.live.isRegisteredToLive()){ 
     230                        return; 
     231                } 
     232 
     233                var liveSensors = new Array(); 
     234 
     235                for (var i = 0; i < sensorList.length; ++i) { 
     236                        var sensor = sensorList.get(i); 
     237                        if(sensor.sendToLive){ 
     238                                var allValues = pickSensorValues(sensor); 
     239                                liveSensors.push({protocol:sensor.protocol, model:sensor.model, id:sensor.id, values:allValues, name:sensor.name}); 
     240                        } 
     241                } 
     242 
     243                if(liveSensors.length > 0){ 
     244                        com.telldus.live.sendSensorsReport(liveSensors); 
     245                } 
    200246        } 
    201247 
     
    223269 
    224270                sensor.setValue(dataType, value, timestamp); 
     271                if (sensor.sendToLive){ 
     272                        sensorValues = pickSensorValues(sensor) 
     273                        if (allValuesUpdated(sensorValues)) { 
     274                                com.telldus.live.sendSensorValues(sensor, sensorValues); 
     275                        } 
     276                } 
    225277 
    226278                if(!avoidSave){ 
  • telldus-gui/Plugins/Sensors/sensor.cpp

    r103eaf rb73eae  
    66class Sensor::PrivateData { 
    77public: 
    8         bool hasTemperature, hasHumidity, hasRainRate, hasRainTotal, hasWindDirection, hasWindAverage, hasWindGust, showInList; 
     8        bool hasTemperature, hasHumidity, hasRainRate, hasRainTotal, hasWindDirection, hasWindAverage, hasWindGust, showInList, sendToLive; 
    99        int id; 
    1010        QString model, name, protocol; 
     
    1919        d->id = 0; 
    2020        d->showInList = false; 
     21        d->sendToLive = false; 
    2122} 
    2223 
     
    132133        emit showInListChanged(); 
    133134} 
     135 
     136bool Sensor::sendToLive() const{ 
     137        return d->sendToLive; 
     138} 
     139 
     140void Sensor::setSendToLive(bool send){ 
     141        d->sendToLive = send; 
     142        emit sendToLiveChanged(); 
     143} 
  • telldus-gui/Plugins/Sensors/sensor.h

    r103eaf rb73eae  
    2424        Q_PROPERTY(QString protocol READ protocol WRITE setProtocol NOTIFY protocolChanged) 
    2525        Q_PROPERTY(bool showInList READ showInList WRITE setShowInList NOTIFY showInListChanged) 
     26        Q_PROPERTY(bool sendToLive READ sendToLive WRITE setSendToLive NOTIFY sendToLiveChanged) 
    2627 
    2728public: 
     
    4950        bool hasWindGust() const; 
    5051        bool showInList() const; 
     52        bool sendToLive() const; 
    5153 
    5254        Q_INVOKABLE QObject *sensorValue(int type); 
     
    5456        Q_INVOKABLE void setName(const QString &name); 
    5557        Q_INVOKABLE void setShowInList(bool show); 
     58        Q_INVOKABLE void setSendToLive(bool send); 
    5659 
    5760signals: 
     
    6871        void protocolChanged(); 
    6972        void showInListChanged(); 
     73        void sendToLiveChanged(); 
    7074 
    7175private: 
Note: See TracChangeset for help on using the changeset viewer.