Skip to content

Commit fe4f12c

Browse files
committed
cleanups
1 parent b2197ce commit fe4f12c

File tree

4 files changed

+24
-82
lines changed

4 files changed

+24
-82
lines changed

conf/html/shared/habpanel/js/helper.js

-72
Original file line numberDiff line numberDiff line change
@@ -1382,78 +1382,6 @@ var mvInitializer = function(){
13821382
};
13831383
}
13841384
})();
1385-
1386-
(function() {
1387-
'use strict';
1388-
1389-
app.directive("mvDetailInfoStatus", detailInfoStatusLinker);
1390-
1391-
function detailInfoStatusLinker() {
1392-
return {
1393-
restrict: "A",
1394-
link: function (scope, elem, attrs)
1395-
{
1396-
let stateItemName = "pOutdoor_Watering_Logic_Program_State";
1397-
let circuitItemName = "gOutdoor_Watering_Circuits";
1398-
1399-
function getSVG(icon_name)
1400-
{
1401-
let msg = "<svg style=\"width:16px;height:16px;stroke:var(--sub-icon-color);filter:brightness(150%);\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 64 64\">";
1402-
msg += "<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"/static/shared/habpanel/svg/icons.svg#" + icon_name + "\"></use>";
1403-
msg += "</svg>";
1404-
return msg;
1405-
}
1406-
1407-
function updateValue()
1408-
{
1409-
let msg_r = [];
1410-
1411-
if( scope.itemState(circuitItemName) == 'ON' )
1412-
{
1413-
let programState = scope.itemState(stateItemName);
1414-
1415-
if( programState != "läuft nicht" )
1416-
{
1417-
msg_r.push( "Bewässerung: " + getSVG('self_rain_grayscaled') + " <span class=\"value\">" + programState + "</span>" );
1418-
}
1419-
}
1420-
else
1421-
{
1422-
//msg_r.push( "Bewässerung: " + getSVG('openhab_rain_colored') + " <span class=\"value\">Garten links gleich fertig</span>" );
1423-
}
1424-
1425-
elem[0].innerHTML = "<div>" + msg_r.join("</div><div>") + "</div>";
1426-
}
1427-
1428-
scope.$$postDigest(function()
1429-
{
1430-
// register for item usage
1431-
//scope.getItem(stateItemName);
1432-
//scope.getItem(circuitItemName)
1433-
1434-
scope.addUpdateListener(function( updatedItemName )
1435-
{
1436-
//console.log("gOutdoor_Watering_Circuits initialized");
1437-
if( updatedItemName != null && updatedItemName != stateItemName && updatedItemName != circuitItemName )
1438-
{
1439-
return;
1440-
}
1441-
1442-
updateValue();
1443-
1444-
//elem[0].querySelector(".value").innerHTML = "Bewässerung: Garten links gleich fertig";
1445-
});
1446-
1447-
// getItem triggers a watcher registration process
1448-
//if( scope.getItem(circuitItemName) != null )
1449-
//{
1450-
//updateValue();
1451-
//}
1452-
});
1453-
}
1454-
};
1455-
}
1456-
})();
14571385
};
14581386

14591387
mvInitializer();

python/shared/helper.py

+20-8
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from org.slf4j import LoggerFactory
1717

1818
from org.openhab.core.automation import Rule as SmarthomeRule
19+
#from org.openhab.core.automation.module.script.LifecycleScriptExtensionProvider import LifecycleTracker
1920

2021
from org.openhab.core.types import UnDefType
2122
from org.openhab.core.persistence.extensions import PersistenceExtensions
@@ -45,10 +46,14 @@
4546

4647
scriptExtension.importPreset("RuleSupport")
4748
automationManager = scope.get("automationManager")
49+
lifecycleTracker = scope.get("lifecycleTracker")
4850

4951
scriptExtension.importPreset("RuleSimple")
5052
SimpleRule = scope.get("SimpleRule")
5153

54+
def scriptUnloaded():
55+
log.info("unload")
56+
5257
class rule(object):
5358
def __init__(self, name = None,profile=None):
5459
self.name = name
@@ -68,14 +73,9 @@ def init(self, *args, **kwargs):
6873
self.triggerItems = {}
6974
_triggers = []
7075
for trigger in self.triggers:
71-
try:
72-
self.triggerItems[ trigger.getConfiguration().get("itemName") ] = True
73-
except NotImplementedError:
74-
# openhab 2.4
75-
self.triggerItems[ trigger.trigger.getConfiguration().get("itemName") ] = True
76-
_triggers.append(trigger.trigger)
77-
if len(_triggers) > 0:
78-
self.triggers = _triggers
76+
self.triggerItems[ trigger.trigger.getConfiguration().get("itemName") ] = True
77+
_triggers.append(trigger.trigger)
78+
self.triggers = _triggers
7979

8080
subclass = type(clazz.__name__, (clazz, SimpleRule), dict(__init__=init))
8181
subclass.execute = proxy.executeWrapper(clazz.execute)
@@ -187,6 +187,15 @@ def func_wrapper(self, module, input):
187187
class NotInitialisedException(Exception):
188188
pass
189189

190+
# could also be solved by storing it in a private cache => https://next.openhab.org/docs/configuration/jsr223.html
191+
# because Timer & ScheduledFuture are canceled when a private cache is cleaned on unload or refresh
192+
activeTimer = []
193+
def cleanTimer():
194+
for timer in list(activeTimer):
195+
#log.info("cleanup")
196+
timer.cancel()
197+
lifecycleTracker.addDisposeHook(cleanTimer)
198+
190199
def startTimer(log, duration, callback, args=[], kwargs={}, oldTimer = None, groupCount = 0 ):
191200
if oldTimer != None:
192201
oldTimer.cancel()
@@ -218,6 +227,7 @@ def __init__(self,log, duration, callback, args=[], kwargs={}):
218227
def handler(self):
219228
try:
220229
self.callback(*self.args, **self.kwargs)
230+
activeTimer.remove(self)
221231
except:
222232
self.log.error(u"{}".format(traceback.format_exc()))
223233
raise
@@ -226,6 +236,7 @@ def start(self):
226236
if not self.timer.isAlive():
227237
#log.info("timer started")
228238
self.timer.start()
239+
activeTimer.append(self)
229240
else:
230241
#log.info("timer already started")
231242
pass
@@ -234,6 +245,7 @@ def cancel(self):
234245
if self.timer.isAlive():
235246
#log.info("timer stopped")
236247
self.timer.cancel()
248+
activeTimer.remove(self)
237249
else:
238250
#log.info("timer not alive")
239251
pass

python/shared/semantic/command_processor.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def __init__(self,log,ir):
6363

6464
self.log = log
6565

66-
self.semantic_model = SemanticModel(ir,SemanticConfig)
66+
self.semantic_model = SemanticModel(log, ir,SemanticConfig)
6767
self.semantic_model.test(self.log)
6868

6969
self.full_phrase_map, self.full_phrase_terms = self.buildSearchMap(self.semantic_model.getSemanticItem(SemanticConfig["main"]["phrase_equipment"]).getChildren())

python/shared/semantic/model/semantic_model.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ def test(self,log):
5959
#log.info(u"{}".format(self.semantic_items["pOther_Scene4"].answer))
6060
pass
6161

62-
def __init__(self,item_registry,config):
62+
def __init__(self,log,item_registry,config):
63+
self.log = log
64+
6365
semantic_tags = {}
6466

6567
# maybe it's possible to get the tags from bundle https://github.com/openhab/openhab-core/tree/main/bundles/org.openhab.core.semantics/src/main/resources

0 commit comments

Comments
 (0)