From 402126629c593706da5e8e9e73c88597b011ce19 Mon Sep 17 00:00:00 2001 From: kw123 Date: Mon, 10 Sep 2018 17:42:08 -0500 Subject: [PATCH 1/2] fixed RFXCOM temp sensor RFXCOM temp / humidity sensor type was setup incorrectly. BUT suggest to alwasy use Temperature sensor type instead. It supports SensorValue property whil RFXCOM temp sensor does not. --- RFXCOM.indigoPlugin/Contents/Info.plist | 2 +- .../Contents/Server Plugin/RFXTRX.py | 45 ++++++++++-------- .../Contents/Server Plugin/RFXTRX.pyc | Bin 86869 -> 86980 bytes 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/RFXCOM.indigoPlugin/Contents/Info.plist b/RFXCOM.indigoPlugin/Contents/Info.plist index 7313873..892de40 100755 --- a/RFXCOM.indigoPlugin/Contents/Info.plist +++ b/RFXCOM.indigoPlugin/Contents/Info.plist @@ -3,7 +3,7 @@ PluginVersion - 2.1.14 + 2.1.15 ServerApiVersion 2.0.0 IwsApiVersion diff --git a/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.py b/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.py index 72a30a0..8e8cec7 100755 --- a/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.py +++ b/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.py @@ -89,7 +89,7 @@ def _addToBatchStatesChange(self, dev, key="", value="", decimalPlaces="", uiVal if decimalPlaces ==0: ap["value"] = int(float(value)) # make it integer eg "10" not "10." else: - ap["decimalPlaces"] = decimalPlaces + ap["decimalPlaces"] = int(decimalPlaces) if uiValue != "": ap["uiValue"] = uiValue @@ -1324,7 +1324,9 @@ def handleRFXSensor(self,data): subtype = ord(data[2]) sensor = ord(data[4]) svalue = (ord(data[5])*256)+ord(data[6]) - tUnits = self.plugin.unitsTemperature + humid = 0 + temp = 0 + self.plugin.debugLog(u"RFXSensor %d with subtype %d and value %d" % (sensor,subtype,svalue)) self.plugin.debugLog(u"Data1: %s %s %s %s %s %s %s %s"% (ord(data[0]),ord(data[1]),ord(data[2]),ord(data[3]),ord(data[4]),ord(data[5]),ord(data[6]),ord(data[7 ]))) if sensor in self.devicesCopy.keys(): @@ -1404,18 +1406,21 @@ def handleRFXSensor(self,data): display = "--" displayMode = dev.pluginProps["displayField"] if displayMode == "TempHumid": - display = u"%s °%s / %d%%" % (self.temperatureToString(temp), tUnits, humid) + display = u"%s °%s / %d%%" % (self.temperatureToString(temp), self.plugin.unitsTemperature, humid) elif displayMode == "Temp": - display = u"%s °%s" % (self.temperatureToString(temp), tUnits) + display = u"%s °%s" % (self.temperatureToString(temp), self.plugin.unitsTemperature) elif displayMode == "TempMinMaxHumid": - display = u"%s °%s (%s-%s) %d%%" % ( self.temperatureToString(temp), tUnits, self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"mintemperature")), self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"maxtemperature")), humid) + display = u"%s °%s (%s-%s) %d%%" % ( self.temperatureToString(temp), self.plugin.unitsTemperature, self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"mintemperature")), self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"maxtemperature")), humid) elif displayMode == "TempMinMax": - display = u"%s °%s (%s-%s)" % ( self.temperatureToString(temp), tUnits, self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"mintemperature")), self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"maxtemperature"))) + display = u"%s °%s (%s-%s)" % ( self.temperatureToString(temp), self.plugin.unitsTemperature, self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"mintemperature")), self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"maxtemperature"))) - if self.devicesCopy[sensor].pluginProps["sensorValueType"] == "Humid": - self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=humid, decimalPlaces= 0, uiValue=display) + if "sensorValueType" in self.devicesCopy[sensor].pluginProps["sensorValueType"]: + if "sensorValueType" in self.devicesCopy[sensor].pluginProps and self.devicesCopy[sensor].pluginProps["sensorValueType"] == "Humid": + self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=humid, decimalPlaces= 0, uiValue=display) + else: #Temperature + self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=temp, decimalPlaces= self.plugin.digitsTemperature, uiValue=display) else: #Temperature - self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=temp, decimalPlaces= tDigits, uiValue=display) + self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=temp, decimalPlaces= self.plugin.digitsTemperature, uiValue=display) #self._finalizeStatesChanges() else: @@ -1491,7 +1496,7 @@ def showTemp(self, data): temp+=(temp2*256) temp = temp*vFactor*0.1 - temp = self.convertTemperatureToUnit(temp) + temp = self.convertTemperatureToUnit(temp) humid = 0 humidityStatus = "" batteryAndSignalData = 0 @@ -1535,24 +1540,22 @@ def showTemp(self, data): display = "--" displayMode = self.devicesCopy[sensor].pluginProps["displayField"] - tDigits = str(self.plugin.digitsTemperature) - tUnits = self.plugin.unitsTemperature if displayMode == "TempHumid": - display = u"%s °%s / %d%%" % (self.temperatureToString(temp), tUnits, humid) + display = u"%s °%s / %d%%" % (self.temperatureToString(temp), self.plugin.unitsTemperature, humid) elif displayMode == "Temp": - display = u"%s °%s" % (self.temperatureToString(temp), tUnits) + display = u"%s °%s" % (self.temperatureToString(temp), self.plugin.unitsTemperature) elif displayMode == "TempMinMaxHumid": - display = u"%s °%s (%s-%s) %d%%" % ( self.temperatureToString(temp), tUnits, self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"mintemperature")), self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"maxtemperature")), humid) + display = u"%s °%s (%s-%s) %d%%" % ( self.temperatureToString(temp), self.plugin.unitsTemperature, self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"mintemperature")), self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"maxtemperature")), humid) elif displayMode == "TempMinMax": - display = u"%s °%s (%s-%s)" % ( self.temperatureToString(temp), tUnits, self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"mintemperature")), self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"maxtemperature"))) + display = u"%s °%s (%s-%s)" % ( self.temperatureToString(temp), self.plugin.unitsTemperature, self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"mintemperature")), self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"maxtemperature"))) if "sensorValueType" in self.devicesCopy[sensor].pluginProps["sensorValueType"]: if self.devicesCopy[sensor].pluginProps["sensorValueType"] == "Humid": self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=humid, decimalPlaces= 0, uiValue=display) else: #Temperature - self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=temp, decimalPlaces= tDigits, uiValue=display) + self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=temp, decimalPlaces= self.plugin.digitsTemperature, uiValue=display) else: #Temperature - self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=temp, decimalPlaces= tDigits, uiValue=display) + self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=temp, decimalPlaces= self.plugin.digitsTemperature, uiValue=display) self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"lastUpdated", value=time.strftime('%Y/%m/%d %H:%M:%S')) @@ -2126,7 +2129,7 @@ def getForecast(self, data): return "rain" def temperatureToString(self, xx): - if str(self.plugin.digitsTemperature) == "0": + if self.plugin.digitsTemperature == "0": cstring = u"%d" else: cstring = u"%."+str(self.plugin.digitsTemperature)+"f" @@ -2301,12 +2304,14 @@ def stopComm(self): ######################################## # Device Start / Stop Subs - def deviceStart(self, dev, force = False): + def deviceStart(self, dev, force = True): if not force: self.plugin.debugLog(u"deviceStart called. Adding device %s, type: %s" % (dev.name,dev.deviceTypeId)) if self.pluginState == "init": dev.stateListOrDisplayStateIdChanged() # update from device.xml info if changed + ## always update sensor + force = True needToSavePlugInProps = False localProps = dev.pluginProps diff --git a/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.pyc b/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.pyc index 3ffa1631f36390d125e4a2a6f09bd7f6378fe890..cec0298b5755947e283b313fde2894a997f4ff65 100644 GIT binary patch delta 6139 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 delta 6040 zcmb_g3v86f5#IU#`|o`Ay^PP;=SRTC#t;k`>=4l>P(>uABAuE4zlW`! zXt8DAYIk;a=G)ns+1dZ?pBWeT7%u&v-rV==UfAb4o(Egx$-HwQMBT#7 z6;r!}h#JCli`Ba54#~@&VrY_|dKzI(yw>a0z#DJ&M|S)DLI@B3TJhJ@=91GdOq3t( zt(+DWq7y`?CSp!u_jO^q1S!x-a)&O4ZUxk6G2h@ehDo$}Fr>lz%Q(-2#QSnU+u zb6sgR56MU^MR5)hilJbX;Fh24D})^B+CQf^M?`alX^7yY7#Z zEmuxQ63vmv;-zT0V3AotMhMccxG;uOhKS{{oRpGE-j1KWL?a+*GIW>wF&3`2Y(<7_ z7v_khESqd?zKWFq8|AW2MoD484da23at+9FGw0G~m-`RQC{L}arZu>)IushdBm`a`(YtFY?#%)Ht3B80L89 zFJ)pK6RQn#0u!CWoJgHMxY@~~p46VmziC;|QwI6EWrwDWz^ErT>I?|8L4T`HMP0X8hG<7hdsjTR?PIFpvX^!Y6Ml18& zzorh%GqfSgp)8bS-xd)vr?b*rHa~h!dKZ{OW(adGx)z2xM}#?3M7?;74p{$4HvVMJ ziD3Rovs-DeKyH4cQ67FH?7$o=;+{j#>VY8k!jDm-Q8PvEd~-)Z#D)FH>{TmPMS8+_ zus_N#XMR{NpFEOR?4+srT{KfeU6K`9zV;ik_sCFB#K6(YXV$JV!(DRS*%xH(QFq`+ zND~m?ze@0c{L;~l1;emYhQBBAw@@pA@!I(K-;UmJ!Vl!{e!t9@k4tj#$G5@i_=FSR z0$32=`-gqd8?n-mLFo?vA`?Evl zpA5?PPKUHH26ap7DBaTqQ6i##fgx{uLszW~oGkSAnU)LBR2K~qotVw)Y4e=WENH>_ zi)Z{A6v{n+S`{0^}i-}AK9LJ z1s9#d^X}OoedpTChu}eap#QP*!D_Yf&F41jP#T8|PGG_}>cj-lE z1G-nwViZ^uzjoc z^Td)uDAOUB*i;M#z&N!f1XtAN5R|KE37mljBGjr#DeQ+y)Gtf4mccAAI#5`1;=ASW zDi{&$&sI&taQU9$@C>x5zYc?6LYq2X0ZNrtfZw^FaK!0&j7ivCKvR1%sWGH3A!?y| zyb30&))DY;SgvMNp}Yg?^(r_GYZF_lp$VWz9Uckm;h-8@16N^F!aE8Mfw2h%d^>Sw zG_*JjEV0D%3Ew#QrU54t->HYC0RK`q8sGt#pmH99x%F6}VOii3G0b^ZeV}tJTo)0n zo_NZ{s*A!HO9Q-;q)@{f;elSfps-qdjpGIHazji*N3}{GTIRt@4Fek2V5qr8CuT*g z?_8q$rVpnrBF;`-f791x5Q$0?C#&8FSyYeYA`9hV;iw*LgrE&#R5+F=3S@P+*H*{frR;1s0f^CJbXtw^pqH5p1v+8tTE!cfmQ!BFLE z2Dj~$6^@jX-+yGtT-zy&_zaF`Q@?|i*^#lc34#ybBjjq6f{R)3<3^T!eUaYRGArUs zjX~Jg58d{@LaaW|Nkf;an*t@p7z0=&mkaX&QGt$MWapiPdbJsC{*0WYj z##IcWo-tWRlg%nuS+8Z4YPO0U19t`k&>=n-1Y}i$w=Fgs-NFhCed5aSud z#=I=aY-C;rh|Kzd=>xPxw{Ba)dhmNaSwI}h0D(o=yqQp7AIQbQfN_St( z!I^W+I?9pfhBMngu68bqJrrI1R;~9z4e{uW;PHzGC}M_5Mk@e zKQI^|u$02D%VU)`8%E^wmr=3|J`-r;Zq+y&6f94ioefony8Q^$XyNKa>6f7tii8_q zoFCvzMu1a{(EQ-lo#58gvN=$xo|*$g5?klMd=1`Fm%akq^Zt&U;i2?izO2?g3g@-E z?nLWjum+sFY33z$unj8b(X%Z~?=|aHO>eO?7Q%l3>`TeG From 1505d2fdc3177d17458d66e79e6cc93520e04c5c Mon Sep 17 00:00:00 2001 From: kw123 Date: Wed, 12 Sep 2018 19:55:19 -0500 Subject: [PATCH 2/2] fix sensorValueType KeyError: key sensorValueType not found in dict --- RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.py b/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.py index 8e8cec7..7d426d0 100755 --- a/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.py +++ b/RFXCOM.indigoPlugin/Contents/Server Plugin/RFXTRX.py @@ -1414,7 +1414,7 @@ def handleRFXSensor(self,data): elif displayMode == "TempMinMax": display = u"%s °%s (%s-%s)" % ( self.temperatureToString(temp), self.plugin.unitsTemperature, self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"mintemperature")), self.temperatureToString(self._getCurrentSensorValue(self.devicesCopy[sensor],"maxtemperature"))) - if "sensorValueType" in self.devicesCopy[sensor].pluginProps["sensorValueType"]: + if "sensorValueType" in self.devicesCopy[sensor].pluginProps: if "sensorValueType" in self.devicesCopy[sensor].pluginProps and self.devicesCopy[sensor].pluginProps["sensorValueType"] == "Humid": self._addToBatchStatesChange(self.devicesCopy[sensor], key=u"display", value=humid, decimalPlaces= 0, uiValue=display) else: #Temperature