ich verwende nur database init und habe super charts und habe keinen cronjob laufen, der shng alle paar minuten restartet
. (also nein. es ist wie yes nur mit initialisierung - im Übrigen wird 'yes' garnicht abgefragt sondern hier könnte auch "database = schnitzenpitz" stehen... beliebige strings reichen derzeit, solange das database attribut da ist.)
und: schau doch auch mal selber in den code bei so fragen, wenn Dich was stört oder Du mir nicht glaubst.
ich hab den gleichen aufwand wie du, wenn ich das mache, da der Code auch nicht von mir stammt... und ich habe auch 2 kinder und ein leben... aber ist klar, ist halt einfacher so
Und wenn einen was stört und der Code das nachweislich auch nicht bereits umsetzt, bieten sich im Open Source Bereich ganz wunderbar Pull Requests an
Die Antwort ist auf jdn. Fall gar nicht schwer, siehe meine Kommentare im Quelltext unten:
--> https://github.com/smarthomeNG/plugi...se/__init__.py

und: schau doch auch mal selber in den code bei so fragen, wenn Dich was stört oder Du mir nicht glaubst.
ich hab den gleichen aufwand wie du, wenn ich das mache, da der Code auch nicht von mir stammt... und ich habe auch 2 kinder und ein leben... aber ist klar, ist halt einfacher so

Und wenn einen was stört und der Code das nachweislich auch nicht bereits umsetzt, bieten sich im Open Source Bereich ganz wunderbar Pull Requests an

Die Antwort ist auf jdn. Fall gar nicht schwer, siehe meine Kommentare im Quelltext unten:
--> https://github.com/smarthomeNG/plugi...se/__init__.py
Code:
def parse_item(self, item): if self.has_iattr(item.conf, 'database'): #ALLE Items die database = <irgendwas> stehen haben schreiben raus. self._buffer_insert(item, []) item.series = functools.partial(self._series, item=item.id()) item.db = functools.partial(self._single, item=item.id()) item.dbplugin = self if self._initialized and self.get_iattr_value(item.conf, 'database') == 'init': # ... try: # ... hier wird das item intalisiert .... cache = self.readItem(str(item.id()), cur=cur) if cache is not None: value = self._item_value_tuple_rev(item.type(), cache[COL_ITEM_VAL_STR:COL_ITEM_VAL_BOOL+1]) last_change = self._datetime(cache[COL_ITEM_TIME]) last_change_ts = self._timestamp(last_change) prev_change = self._fetchone('SELECT MAX(time) from {log} WHERE item_id = :id', {'id':cache[COL_ITEM_ID]}, cur=cur) if value is not None and prev_change is not None: item.set(value, 'Database', prev_change=self._datetime(prev_change[0]), last_change=last_change) self._buffer_insert(item, [(last_change_ts, None, value)]) except Exception as e: self.logger.error("Reading cache value from database for {} failed: {}".format(item.id(), e)) cur.close() self._db.release() return self.update_item # hier geht es zum update, also dem rausschreiben von daten, das gilt für ALLE items die database = <beliebigerstring> # in der yaml datei haben, in der update_item methode werden alle zum update freigegebenen items in ein array aufgenommen. else: return None
Code:
# Aufnahme der Items in ein buffer Array: def update_item(self, item, caller=None, source=None, dest=None): acl = 'rw' if not self.has_iattr(item.conf, 'database_acl') else self.get_iattr_value(item.conf, 'database_acl') if acl is 'rw': start = self._timestamp(item.prev_change()) end = self._timestamp(item.last_change()) last = None if len(self._buffer[item]) == 0 or self._buffer[item][-1][1] is not None else self._buffer[item][-1] if last: # update current value with duration self._buffer[item][-1] = (last[0], end - start, last[2]) else: # append new value with none duration self._buffer[item].append((start, end - start, item.prev_value())) # add current value with None duration self._buffer[item].append((end, None, item()))
Kommentar