Skip to content

Verbindungsabbruch Optolink Splitter #195

@jaegerschnitzel

Description

@jaegerschnitzel

Hallo,
ich frage bei mir ein paar Werte ab. Das funktioniert soweit ganz gut. Jetzt ist es mir allerdings bereits zum dritten Mal passiert, dass ich einen "Verbindungsabruch" hatte und der Splitter keine Werte mehr auslesen kann.
Einen Wert sende ich via MQTT an HomeAssistant. Dort sehe ich, dass der Wert zum letzten Mal um 05:03:37 Uhr heute früh ankam.
Auf meinem Raspberry Pi habe ich beim Optolink Service nachgeschaut, da sieht es folgendermaßen aus:

Jan 20 05:44:59 raspberrypi python[139503]: rx 41 09 01 01 91 34 04 00 00 00 00 d4
Jan 20 05:44:59 raspberrypi python[139503]: rx 06
Jan 20 05:44:59 raspberrypi python[139503]: rx 41 09 01 01 92 68 04 c9 00 00 00 d2
Jan 20 05:44:59 raspberrypi python[139503]: rx 06
Jan 20 05:44:59 raspberrypi python[139503]: rx 41 07 01 01 08 1a 02 87 01 b5
Jan 20 05:44:59 raspberrypi python[139503]: rx 06
Jan 20 05:44:59 raspberrypi python[139503]: rx 41 07 01 01 39 00 02 40 01 85
Jan 20 05:44:59 raspberrypi python[139503]: rx 06
Jan 20 05:44:59 raspberrypi python[139503]: rx 41 07 01 01 35 44 02 3c 01 c1
Jan 20 05:44:59 raspberrypi python[139503]: rx 06
Jan 20 05:44:59 raspberrypi python[139503]: rx 41 06 01 01 39 06 01 01 49
Jan 20 05:44:59 raspberrypi python[139503]: rx 06
Jan 20 05:50:00 raspberrypi python[139503]: rx 20.01.2026 05:50:00 [ERROR]: OL Error do_poll_item 0, Addr 5525, RetCode 255, Data ?
Jan 20 05:50:03 raspberrypi python[139503]: 20.01.2026 05:50:03 [ERROR]: OL Error do_poll_item 2, Addr 0A82, RetCode 255, Data ?
Jan 20 05:50:03 raspberrypi python[139503]: 20.01.2026 05:50:03 [ERROR]: VS2 unknown first byte Error
Jan 20 05:50:03 raspberrypi python[139503]: 20.01.2026 05:50:03 [ERROR]: OL Error do_poll_item 3, Addr 5738, RetCode 32, Data 00
Jan 20 05:50:07 raspberrypi python[139503]: 20.01.2026 05:50:07 [ERROR]: VS2 unknown first byte Error
Jan 20 05:50:07 raspberrypi python[139503]: 20.01.2026 05:50:07 [ERROR]: OL Error do_poll_item 6, Addr A38F, RetCode 32, Data 05
Jan 20 05:50:09 raspberrypi python[139503]: 20.01.2026 05:50:09 [ERROR]: VS2 unknown first byte Error
Jan 20 05:50:09 raspberrypi python[139503]: 20.01.2026 05:50:09 [ERROR]: OL Error do_poll_item 7, Addr 55D3, RetCode 32, Data 05
Jan 20 05:50:11 raspberrypi python[139503]: 20.01.2026 05:50:11 [ERROR]: VS2 unknown first byte Error
Jan 20 05:50:11 raspberrypi python[139503]: 20.01.2026 05:50:11 [ERROR]: OL Error do_poll_item 8, Addr 55DD, RetCode 32, Data 05
Jan 20 05:50:13 raspberrypi python[139503]: 20.01.2026 05:50:13 [ERROR]: VS2 unknown first byte Error
Jan 20 05:50:13 raspberrypi python[139503]: 20.01.2026 05:50:13 [ERROR]: OL Error do_poll_item 9, Addr 55DE, RetCode 32, Data 05

D.h. dort ist erstmals um 05:50 Uhr ein Fehler zu sehen. Seltsam finde ich allerdings, dass dort nur ca. alle 9 Minuten Logeinträge stehen, obwohl ich ja auch bestimmte Werte minütlich abfrage (siehe unten).
Leider kenne ich mich nicht so gut aus und weiß jetzt nicht, wie ich weiter troubleshooten kann. Könntest du mir ggf. behilflich sein?

Der Neustart des Servies behebt das Problem.

Hier noch meine "settings_ini.py":

'''
   Copyright 2024 philippoo66

   Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       https://www.gnu.org/licenses/gpl-3.0.html

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
'''

# Serial Ports +++++++++++++++++++
port_optolink = '/dev/ttyUSB0'     # Serial port for Optolink device (mandatory, default: '/dev/ttyUSB0')
port_vitoconnect = None            # Serial port for Vitoconnect (optional, default: '/dev/ttyAMA0', set None if no Vitoconnect) Pls check https://github.com/philippoo66/optolink-splitter/wiki/520-termios.error:-(22,-'Invalid-argument')
vs2timeout = 120                   # Timeout (seconds) for VS2 protocol detection with Vitoconnect (default: 120)
vs1protocol = False                # if True, VS1/KW protocol used

# MQTT Connection ++++++++++++++++
mqtt = "192.168.180.12:1883"     # MQTT broker address (default: "192.168.0.123:1883", set None to disable MQTT)
mqtt_user = "mqtt:-ywm5yW9LsgUEKagWTYe_idWu2dkJc"                 # MQTT user credentials: "<user>:<pwd>" (default: None for anonymous access)
mqtt_logging = False             # dis/enables logging of paho.mqtt (default: False)

# MQTT Topics ++++++++++++++++++++
# Best practices recommendation: Always use lowercase for consistency and compatibility.
mqtt_topic = "Vito"              # MQTT topic for publishing data (default: "Vito")
mqtt_listen = "Vito/cmnd"        # MQTT topic for incoming commands (default: "Vito/cmnd", set None to disable)
mqtt_respond = "Vito/resp"       # MQTT topic for responses (default: "Vito/resp", set None to disable)
mqtt_fstr = "{dpname}"           # Format string for MQTT messages (default: "{dpname}", alternative e.g.: "{dpaddr:04X}_{dpname}")
mqtt_retain = False              # Publish retained messages. Last message per topic is stored on broker and sent to new/reconnecting subscribers. (default: False)
mqtt_no_redundant = False        # if True, no previously published unchanged messages

# TCP/IP ++++++++++++++++++++++++++
tcpip_port = 65234               # TCP/IP port for communication (default: 65234, used by Viessdata; set None to disable TCP/IP)

# Optolink Communication Timing ++++
fullraw_eot_time = 0.05         # Timeout (seconds) to determine end of telegram (default: 0.05)
fullraw_timeout = 2             # Overall timeout (seconds) for receiving data (default: 2)
olbreath = 0.05                 # Pause (seconds) after a request-response cycle (default: 0.05)

# Optolink Logging ++++++++++++++
log_vitoconnect = False         # Enable logging of Vitoconnect Optolink rx+tx telegram communication (default: False)
show_opto_rx = True             # Display received Optolink data (default: True, no output when run as service)
viconn_to_mqtt = False          # Vitoconnect traffic published on MQTT
no_logger_file = False          # if True the optolinksvs2_switch.log will not get written

# Data Formatting +++++++++++++++
max_decimals = 4                # Max decimal places for float values (default: 4)
data_hex_format = '02x'         # Hexadecimal formatting (set '02X' for uppercase formatting, default: '02x')
resp_addr_format = 'd'          # Format of DP addresses in MQTT/TCPIP request responses ('d' for decimal, e.g. '04X' for 4-digit hex, default: 'x')

# Viessdata Utilities +++++++++++
write_viessdata_csv = False     # Enable writing Viessdata to CSV (default: False)
viessdata_csv_path = ""         # File path for Viessdata CSV output (default: "")
buffer_to_write = 60            # Buffer size before writing to CSV (default: 60)
dec_separator = ","             # Decimal separator for CSV output (default: ",")

# special for wo1c: read daily/weekly energy statistics +++++++++++
wo1c_energy = 0                 # 0:disabled, €N: every n-th cycle

# 1-Wire Sensors +++++++++++++++
# A typical sensor for temperature could be DS18B20; please mind that GPIO must be enabled for 1-Wire sensors (see Optolink-Splitter Wiki)
# Dictionary for 1-Wire sensor configuration (default: empty dictionary)
w1sensors = {
    # Addr: ('<w1_folder/sn>', '<slave_type>'),   # entry format
#     0xFFF4: ('28-3ce1d4438fd4', 'ds18b20'),     # Example sensor (highest known Optolink Address is 0xFF17)
#     0xFFFd: ('28-3ce1d443a4ed', 'ds18b20'),     # Another example sensor
}

# Datapoint Polling List+++++++++
poll_interval = 60              # Polling interval (seconds), 0 for continuous, -1 to disable (default: 30)
poll_items = [                  # Datapoints defined here will be polled; ignored if poll_list.py is found in the working directory
    # ([PollCycle,] Name, DpAddr, Length [, Scale/Type [, Signed]),
       # PollCycle:   Optional entry to allow the item to be polled only every x-th cycle
       # Name:        Datapoint name, published to MQTT as {dpname}; Best practices recommendation: Always use lowercase Names for consistency and compatibility.
       # DpAddr:      Address used to read the datapoint value (hex with '0x' or decimal)
       # Length:      Number of bytes to read
       # Scale/Type:  Optional; if omitted, value returns as a hex byte string without '0x'. See Wiki for details
       # Signed:      Numerical data will interpreted as signed (True) or unsigned (False, default is False if not explicitly set)

# (Name, DpAddr, Len, Scale/Type, Signed)
#("aussentemp", 0x0800, 2, 0.1, True), # Aussentemperatur in °C
#("aussentemp_dmpd", 0x5523, 2, 0.1, True), # Aussentemperatur gedämpft (Gemischte_AT)
#("aussentemp_mixed", 0x5527, 2, 0.1, True), # Aussentemperatur gemittelt (AT gedämpft * 0,7 + AT geglättet * 0,3)
("aussentemp_fltrd", 0x5525, 2, 0.1, True), # Aussentemperatur geglättet (TiefpassTemperaturwert_ATS)
(60, "anlagenzeit", 0x088E, 8, 'vdatetime'), # Datum und Uhrzeit der Anlage
("stoerung", 0x0A82, 1, 1, False), # Status Störung, Sammelstörung (ExtAE_Sammel)
("fehlerstatusbrennersteuergeraet", 0x5738, 1, 1, False), # K38_KonfiFehlerByteGFA
(60, "brennerstarts", 0x088A, 4, 1, False), # Brennerstarts (BrennerstartsGWG)
(60, "brennerbetriebsstunden", 0x08A7, 4, 2.7777778e-4, False),  # Brenner-Betriebsstunden (BetriebsstundenBrennerBedienungGWG)
("brennerleistung", 0xA38F, 1, 0.5, False), # (nvoPWRState_CFDM_value)
("brennermodulation", 0x55D3, 1, 1, False), # Brenner in Prozent (GWG_Flamme)
("flammensignal", 0x55DD, 1, 'raw'),
("flammenstatus", 0x55DE, 1, 'raw'),
#("heizverbrtag", 0x9000, 32, 'raw'), # Energieverbrauch Heizung letzte 8 Tage
("heizverbrtag", 0x9000, 4, 1, False), # Energieverbrauch Heizung aktueller Tag
#("wwverbrtag", 0x9134, 32, 'raw'), # Energieverbrauch Heizung letzte 8 Tage
("wwverbrtag", 0x9134, 4, 1, False), # Energieverbrauch Warmwasser aktueller Tag
#("stromverbrtag", 0x9268, 32, 'raw'), # Stromverbrauch letzte 8 Tage
("stromverbrtag", 0x9268, 4, 1, False), # Stromverbrauch aktueller Tag
("gemvorlauftemp", 0x081A, 2, 0.1, False), # Gemischte Vorlauftemperatur (TiefpassTemperaturwert_VTS)
("fbhvorlauftemp", 0x3900, 2, 0.1, False), # Vorlauftemperatur HK2
("fbhvorlauftempsoll", 0x3544, 2, 0.1, False), # Vorlauftemperatur Soll HK2 (VT_SolltemperaturM2)
("fbhpumpestatus", 0x3906, 1, 1, False), # Status Heizkreispumpe HK2
("speicherladepumpe", 0x6513, 1, 1, False), # (Speicherladepumpe)
("heizkreispumpestatus", 0xA152, 2, 1, False), # Heizkreispumpe; Status der Relais der Regelung
("stellungumschaltventil", 0x0A10, 1, 1, False), # Status Umschaltventil Warmwasser/Heizen 0=undefiniert;1=Heizen;2=Mittelstellung;3=Warmwasser
("kesseltemp", 0x0802, 2, 0.1, False), # Kesseltemperatur
("kesseltemptiefpass", 0x0810, 2, 0.1, False), # Kesseltemperatur (TiefpassTemperaturwert_KTS)
(60, "kesseltempsoll", 0x555A, 2, 0.1, False), # (Kesselsoll_eff)
("speichertemp", 0x0804, 2, 0.1, False),
(60, "speichertempsoll", 0x6500, 2, 0.1, False), # (WW_SolltemperaturAktuell)
(60, "wwsoll", 0x6300, 1, 1, False), # Warmwasser-Solltemperatur-Bereich (K56_KonfiWW_SolltempBereichGWG)
("wwtemp", 0x0812, 2, 0.1, False), # Temperatur Speicher Ladesensor (TiefpassTemperaturwertWW1)
("solarkollektortemp", 0x6564, 2, 0.1, True), # Solar Kollektortemperatur
("solarspeichertemp", 0x6566, 2, 0.1, False), # Solar Speichertemperatur
("solarpumpestatus", 0x6552, 1, 1, False), # Solar Solarpumpe
(10, "solarbetriebsstunden", 0x6568, 2, 1, False), # Solar Betriebsstunden
(10, "solarwaermemenge", 0x6560, 4, 1, False), # Solar Wärmemenge
(10, "solarertragtag", 0xCF30, 4, 1, False), # Solarertrag aktueller Tag
(60, "frostgefahrhk2", 0x3500, 22, 'b:16:16'),
(60, "betriebsarthk2", 0x3500, 1, 1), # 00=Abschalt-Betrieb, 01= Reduzierter Betrieb, 02 = Normalbetrieb, 03 = Dauernd Normalbetrieb
(60, "operatingmodehk2", 0x3323, 1, 1, False), # 0=Abschalt;1=Nur WW;2=Heizen + WW;3=Dauernd Reduziert;4=Dauernd Normal
(1440, "rtsakthk2", 0x3500, 22, 'b:12:13', 0.1, False), # Raumtemperatur Soll (HK_RaumsolltemperaturaktuellM2)
(1440, "solltemptagfbh", 0x3306, 1, 1, False), # Raumtemperatur Soll Normalbetrieb M2 (BedienRTSolltemperaturM2)
#(1440, "solltempredfbh", 0x3307, 1, 1, False), # Raumtemperatur Soll Reduzierter Betrieb M2 (BedienRTSolltemperaturReduziertM2)
(60, "neigungheizkennlinie", 0x37D3, 1, 0.1, False), # Neigung Heizkennlinie M2 (KD3_KonfiNeigungM2)
(60, "niveauheizkennlinie", 0x37D4, 1, 1, True), # Niveau Heizkennlinie M2 (KD4_KonfiNiveauM2)
  ]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions