Hallo,
ich versuche mich an meinem ersten Plugin für shNG.
Entwicklungsumgebung ist der aktuelle Master
Aktuell bekomme ich beim initialisieren des Plugins folgenden Fehler
meine etc/plugin.yaml
das Plugin liegt im Ordner /plugins/viessmann/__init__.py
und die Metadaten /plugins/viessmann/plugin.yaml
Was mache ich falsch?
Danke für die Rückmeldung
ich versuche mich an meinem ersten Plugin für shNG.
Entwicklungsumgebung ist der aktuelle Master
Aktuell bekomme ich beim initialisieren des Plugins folgenden Fehler
Code:
2019-12-19 12:04:06 WARNING __main__ -------------------- Init SmartHomeNG 1.6.master (1dcb4fb5) --------------------
2019-12-19 12:04:06 WARNING __main__ Running in Python interpreter 'v3.7.3 final' (pid=19431) on linux platform
2019-12-19 12:04:09 WARNING plugins.cli CLI: You should set a password for this plugin.
2019-12-19 12:04:10 ERROR lib.plugin Plugin 'viessmann' exception during execution of plugin: module 'plugins.viessmann' has no attribute 'viessmann'
Traceback (most recent call last):
File "/usr/local/smarthome/lib/plugin.py", line 553, in __init__
exec("self.plugin = {0}.{1}.__new__({0}.{1})".format(classpath, classname))
File "<string>", line 1, in <module>
AttributeError: module 'plugins.viessmann' has no attribute 'viessmann'
2019-12-19 12:04:10 ERROR lib.plugin Plugin 'viessmann' from section 'viessmann' exception: 'PluginWrapper' object has no attribute 'plugin'
Traceback (most recent call last):
File "/usr/local/smarthome/lib/plugin.py", line 145, in __init__
plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance, self.meta, self._gtrans)
File "/usr/local/smarthome/lib/plugin.py", line 571, in __init__
if isinstance(self.get_implementation(), SmartPlugin):
File "/usr/local/smarthome/lib/plugin.py", line 715, in get_implementation
return self.plugin
AttributeError: 'PluginWrapper' object has no attribute 'plugin'
Code:
viessmann:
plugin_name: viessmann
#class_name: viessmann
#class_path: plugins.viessmann
serialport: /dev/ttyUSB0
cycle: 3000
heating_type: V200KO1B
protocol: P300
Code:
#!/usr/bin/env python
#########################################################################
# Copyright 2013 Stefan Kals
#########################################################################
# Viessmann-Plugin for SmartHomeNG. https://github.com/smarthomeNG//
#
# This plugin is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This plugin is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this plugin. If not, see <http://www.gnu.org/licenses/>.
#########################################################################
import logging
import socket
import time
import serial
import re
import threading
import binascii
from . import commands
from lib.module import Modules
from lib.model.smartplugin import *
logger = logging.getLogger(__name__)
class Viessmann(SmartPlugin):
ALLOW_MULTIINSTANCE = False
PLUGIN_VERSION = '1.6.2'
def __init__(self, smarthome, serialport='/dev/optolink', cycle=300, heating_type='V200KO1B', protocol='P300'):
from bin.smarthome import VERSION
if '.'.join(VERSION.split('.', 2)[:2]) <= '1.5':
self.logger = logging.getLogger(__name__)
self.logger.info('Initialisierung gestartet')
# Grundwerte festlegen
self.connected = False
self._sh = smarthome
self._params = {}
self._init_cmds = []
self._cyclic_cmds = {}
self._lock = threading.Lock()
self._host = host
self._port = int(port)
self._serialport = serialport
self._connection_attempts = 0
self._connection_errorlog = 60
self._initread = False
self._serial = False
self._cycle = int(cycle)
smarthome.connections.monitor(self)
self._lastbyte = b''
self._lastbytetime = time.time()
# Untersetzung: Aktueller Zähler, 0=Init, 1=bei jedem Zyklus, 2=jeden 2. Zyklus, 3=jeden 3. Zyklus
# Der Zähler ist nur bei Systemstart = 0
# Anschließend zählt dieser immer von 1..maxreduction
self._actreduction = 0
# Untersetzung: Maximaler Wert, der über die Konfig projektiert wurde. Wird dynamisch ermittelt
# Begrenzt auch den actreduction Zähler, dieser wird läuft immer von 1..maxreduction
self._maxreduction = 0
# Load controlset and commandset
if protocol in commands.controlset and heating_type in commands.commandset:
self._controlset = commands.controlset[protocol]
self._commandset = commands.commandset[heating_type]
self.log_info('Loaded commands for Heating type \'{}\''.format(heating_type))
else:
self.log_err('Commands for Heating type \'{}\' could not be found!'.format(heating_type))
return None
# Remember packet config
self._packetstart = self.int2bytes(self._controlset['PacketStart'], 2)
self._packetend = self.int2bytes(self._controlset['PacketEnd'], 2)
self._acknowledge = self.int2bytes(self._controlset['Acknowledge'], 2)
self._specialchar = self.int2bytes(self._controlset['SpecialCharacter'], 1)
self._reponsecommandinc = self._controlset['ResponseCommandIncrement']
self._commandlength = 2
self._checksumlength = 1
Code:
# Metadata for the Smart-Plugin
plugin:
# Global plugin attributes
type: protocol # plugin type (gateway, interface, protocol, system, web)
description:
de: 'Auslesen einer Viessmann Heizung'
en: ''
maintainer: tbd
#keywords: viessmann optolink
state: develop # change to ready when done with development
version: 1.6.2 # Plugin version
sh_minversion: 1.4.2 # minimum shNG version to use this plugin
# sh_maxversion: # maximum shNG version to use this plugin (leave empty if latest)
multi_instance: False # plugin supports multi instance
restartable: unknown
classname: viessmann # class containing the plugin
parameters:
Danke für die Rückmeldung


Kommentar