Ankündigung

Einklappen
Keine Ankündigung bisher.

Heizung ebus Raumtemperatur ändern, aber wie

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Heizung ebus Raumtemperatur ändern, aber wie

    Hallo Zusammen,

    ich lese meine Wärmepumpe über ebus aus und kann sie auch steuern.

    Zum Auslesen habe ich folgene Konfiguration:
    Code:
    ########################## BEGIN TempDesired #################################
                     [[[TempDesired]]]
                             type = num
                             sqlite = yes
                             ebus_cmd = "mc TempDesired"
                             ebus_type = "read -c"
                             comment = "Raumsolltemperatur"
    Zum schreiben von werten
    Code:
    ebusctl write -c mc TempDesired 22.0
    done

    Wie müsste ich jetzt das ITEM definieren, damit es Angaben aus der smartVISU annimmt, ich hätte gerne einfach nur PLUS/ Minus, dass die Temperatur ändert und setzt.

    Wie muss ich das mit den Übergabewerten machen?

    Code:
    [WP_RAUMSOLL]
    type = num
    ebus_cmd = "mc TempDesired ????"
    ebus_type = "write mc"
    comment = "Raumsolltemperatur setzen"


    Gruß
    spars

    #2
    Wenn Du dich noch ein paar Tage geduldest habe ich das ebus-Plugin sauber auf die neueste ebusd Version hochgezogen.
    Ich stolpere gerade nur ein paar Bugs und will ein paar (auch alte Fehler meinerseits) sauberer abfangen.
    Danach geht das dann in etwa so:
    Code:
    [ebus]
        [[rt_day]]
            type = num
            knx_dpt = 9
            knx_listen = 8/7/120
            knx_send = 8/6/120
            knx_reply = 8/6/120
            ebus_cmd = "mc TempDesired"
            ebus_type = "write"
            ebus_value_type = "integer"
            comment = Heizkreis Raumsolltemperatur
    Dafür benötige ich aber noch ca. bis zum Wochenende um über diverse Steine zu stolpern.
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Nabend,

      ich wäre auch stark nem aktualisierten ebus-Plugin interessiert.
      Hab das Ebus-Usb Interface nun schon ne weile liegen, vielleicht schaff ich es ja dann auch mal mich damit zu beschäftigen. - Sofern ich das dann mit den richtigen Konfigurationen und so rausgefunden habe


      Grüße,

      Lars

      Kommentar


        #4
        Ich schaffe es momentan zeitlich nicht das sauber in github einzupflegen:

        Code:
        #!/usr/bin/env python3
        # vim: set encoding=utf-8 tabstop=4 softtabstop=4 shiftwidth=4 expandtab
        #
        # Copyright 2012-2013 KNX-User-Forum e.V.       https://knx-user-forum.de/
        #
        #  This file is part of SmartHome.py.    http://mknx.github.io/smarthome/
        #
        #  SmartHome.py 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.
        #
        #  SmartHome.py 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 SmartHome.py. If not, see <http://www.gnu.org/licenses/>.
        #
        
        import logging
        import socket
        import threading
        import time
        
        logger = logging.getLogger('eBus')
        
        
        class eBus():
            _items = []
        
            def __init__(self, smarthome, host, port, cycle=240):
                self._sh = smarthome
                self._cycle = int(cycle)
                self._sock = False
                self.connected = False
                self.host = host
                self.port = int(port)
                self._connection_attempts = 0
                self._connection_errorlog = 60
                smarthome.connections.monitor(self)
                self._lock = threading.Lock()
                self.refresh_cycle = self._cycle
        
            def parse_item(self, item):
                # Attribute und Parameter werden regelmäßig ausgelesen
                if 'ebus_type' in item.conf and 'ebus_cmd' in item.conf:
                    self._items.append(item)
                    return self.update_item
        
            def run(self):
                self.alive = True
                self._sh.scheduler.add('eBusd', self.refresh, prio=5, cycle=self._cycle, offset=2)
        
            def refresh(self):
                for item in self._items:
                    time.sleep(0.5)
                    ebus_type = item.conf['ebus_type']
                    ebus_cmd = item.conf['ebus_cmd']
                    if ebus_type == "broadcast":
                        value = None
                    else:
                        request = "read" + " -c " + ebus_cmd + '\n' # build command
                        value = self.request(request)
                    #if reading fails (i.e. at broadcast-commands) the value will not be updated
                    if 'ERR:' not in str(value) and value is not None:
                        item(value, 'eBus', 'refresh')
                    if not self.alive:
                        break
        
            def request(self, request):
                if not self.connected:
                    logger.info("eBusd not connected")
                    return
                self._lock.acquire()
                try:
                    self._sock.send(request.encode())
                    logger.debug("REQUEST: {0}".format(request))
                except Exception as e:
                    self._lock.release()
                    self.close()
                    logger.warning("error sending request: {0} => {1}".format(request, e))
                    return
                try:
                    answer = self._sock.recv(256).decode()[:-2]
                    logger.debug("ANSWER: {0}".format(answer))
                except socket.timeout:
                    self._lock.release()
                    logger.warning("error receiving answer: timeout")
                    return
                except Exception as e:
                    self._lock.release()
                    self.close()
                    logger.warning("error receiving answer: {0}".format(e))
                    return
                self._lock.release()
                return answer
        
            def connect(self):
                self._lock.acquire()
                try:
                    self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    self._sock.settimeout(2)
                    self._sock.connect((self.host, self.port))
                except Exception as e:
                    self._connection_attempts -= 1
                    if self._connection_attempts <= 0:
                        logger.error('eBus:    could not connect to {0}:{1}: {2}'.format(self.host, self.port, e))
                        self._connection_attempts = self._connection_errorlog
                    self._lock.release()
                    return
                logger.info('Connected to {0}:{1}'.format(self.host, self.port))
                self.connected = True
                self._connection_attempts = 0
                self._lock.release()
        
            def close(self):
                self.connected = False
                try:
                    self._sock.shutdown(socket.SHUT_RDWR)
                except:
                    pass
                try:
                    self._sock.close()
                    self._sock = False
                    logger.info('Connection closed to {0}:{1}'.format(self.host, self.port))
                except:
                    pass
        
            def stop(self):
                self.close()
                self.alive = False
        
            def update_item(self, item, caller=None, source=None, dest=None):
                if caller != 'eBus':
                    try:
                        value_type = item.conf['ebus_value_type']
                        if value_type  == 'float':
                            value = str(float(item()))
                            logger.debug("FLOAT: {0}".format(value))
                        if value_type  == 'string':
                            value = item()
                            logger.debug("STRING: {0}".format(value))
                    except:
                        value = str(int(item()))
                        logger.debug("INTEGER: {0}".format(value))
                    cmd = item.conf['ebus_cmd']
                    request = "write -c " + cmd + " " + value + "\n"
                    set_answer = self.request(request)
                    #just check if set was no broadcast-message
                    if item.conf['ebus_type'] != "broadcast": ###FIXME YUST A WORKAROUND FOR BROADCAST
                        request = "read -c " + cmd + "\n"
                        answer = self.request(request)
                        #transfer value and answer to float for better comparsion
                        if float(answer) != float(value) or answer is None:
                            logger.warning("Failed to set parameter: value: {0} cmd: {1} answer {2}".format(value, request, answer))
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #5
          Code:
          2016-01-23 16:03:58.255 [update notice] update feuerung betrd QQ=10: Brauchwasser_Heizen;Kesselpumpeaus;39.19;-;-;57.0;-
          2016-01-23 16:03:58.710 [update notice] unknown MM cmd: 03f10800080080b30180000039
          2016-01-23 16:03:58.789 [update notice] update broadcast betrd QQ=f1: 1;00;-;25.0;-;50;1
          2016-01-23 16:03:58.955 [update notice] update broadcast betrd QQ=03: 0;40;-;25.5;25;50;1
          2016-01-23 16:04:03.248 [update notice] update feuerung sollw QQ=10: 39.199;1.699;-;01;57.000
          2016-01-23 16:04:03.797 [update notice] update broadcast sollw QQ=f1: 39.199;1.102;0;a0;57.000
          2016-01-23 16:04:05.270 [update notice] update solar regler QQ=30: 03;51.152;13.5;0.0
          Wie bekomme ich denn jetzt die Daten in smarthome.py? Wie lege ich ein Item an: beispielsweise ganz oben bei QQ=10 steht hinten die 57.0 (das ist die eingestellte Warmwasser-Temperatur)
          oder die 39.19 (aktuelle WW Temperatur)

          plugin.conf habe ich angepasst
          Zuletzt geändert von 2Fast4You78; 23.01.2016, 16:38.
          www.knx-Hausblog.de

          Kommentar

          Lädt...
          X