Skip to the content
2 layers142.2 × 52.1 mmOptolinkDuoBlock, the printed circuit board in 3D

This project was created to have local access to the viessmann heating system to monitor and control and have the vitoconnect still working.

Size
142.2 × 52.1 mm
Copper layers
2
Thickness
1.6 mm
Parts
35
Nets
25
Pads
77
Tracks, vias
84, 10
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
4 Mar 2023
Updated
20 Aug 2024

Overview

OptolinkDuoBlock is an open-source printed circuit board by vich-667, from the vich-667/OptolinkDuoBlock repository on GitHub, published under the MIT licence. It is a 2-layer board of 142.2 × 52.1 mm with 35 parts on 25 nets, routed with 84 tracks and 10 vias.

It is built around the BAT42, BC547 and SFH 309. Its parts include 9 resistors, 6 diodes, 6 transistors, 4 connectors and 2 capacitors.

Main components

3

README

README.md

Optolink Duo Block

This project was created to have local access to the viessmann heating system to monitor and control and have the vitoconnect still working. In OpenV Wiki and it's issue section can be found a lot of information and links to other interesting Projects. But all of them either only monitor the communication between the heating system and the vitoconnect or the directly communicate with the heating system. Therefore, this project was started to control the connection of the vitoconnect from the monitoring pc.

Concept

The basic idea of this project was taken from USB_Duo-Sniffer. I extended the circuit to be able to block the vitoconnect to be able to send read or write commands directly to the heating system.

Finally, the heatpump should be integrated into my OpenHAB installation to monitor the status and control it depending on PV power and weather situation. Due to the reason I'm not very familiar with Java (and the long delay of PR reviews) I wrote the Software with Python and reused a simple HTTP Server from another Project to integrate it into OpenHABs via the http plugin. So this Project can be also reused in other context.

Project

FolderContent
DatasheetDatasheets of used components
PCBSchematic and PCP design. Created with KiCad
PicturesPictures of the Optolink Duo Block
SimulationElectrical Simulation with LTSpice
SoftwareSoftware to monitor and read/write written in Python.

Hardware

Schematic The schematic from USB_Duo-Sniffer was reused and extended in a way that with the DTR Pin of the sniffer PC the Tx as well the Rx from the Vitoconnect can be blocked. In block mode read and write messages can be sent directly to the heating system. In unblock mode the vitoconnect can communicate and the communication can be monitored.

IR PCB IR PCB side The IR PCB was created in a similar way you can find it in OpenV Wiki as well. To fit it exact inside the cover, I simply put some tape around it and filled up the backside with hot glue, that it has nearby the same size as the original.

UART PCB

Housing The circuit was soldered with TH components. And placed into an additional box. The advantage of this hardware solution over a proxy solution is that the vitoconnect can work as long the pc is not connected or the DTR pin is low.

Software

The vito_monitor_ctrl is the basic lib (it can be reused in other applications or projects) what provides the VitocalHandler class. This class factor the whole thing and provides methods to read and write data points.

Class_Diagram Basically there is the VitoDatahandler Interface with its two implementation, for monitoring the vitoconnect and the direct read / write access. To not direct deepened on any hardware there is the OptolinkMAC to abstract them. An implementation for the OptolinkDuoBlock as well as a Dummy for testing without hardware exists. Also a implementation for the Proxy solution was created, but never tested or used.

Configuration

Data point to be read and write need to be configured either statically via value_config.py or you can set the dict during runtime. This dict contains the data point names as key and a parameter dict with fixed names.

"Aussentemperatur": { "address": 0x1234, "unit": "UT", "access": 1 , "description": "anyting, currently unused", "data_bytes": 4 }

KeyInfo
addressAddress of data point
unitUnit to convert data, see vito_data_handler.py
data_bytesNumber of bytes to read / write independent from unit
accessAccess type: MONITOR = 0x01, READOUT = 0x02, WRITE = 0x04 or any and combination
descriptionAny description, currently not used

Applications

  • cmd_line_main.py: This application provides a simple shell for testing

    • press Enter to print out the current values
    • w <data_point_name> <value> to write a data point
    • exit to close
  • http_server_main.py: http server to be accessed from any other tools

    • it simply can be tested with curl localhost:8006 | jq -C
    • GET http://localhost:8006 or http://localhost:8006/getstatus/ a json object with all current values and system status is provided
    • POST http://localhost:8006/set/vito/<data_point_name> to write the data, the value need to be provided as a plain test
    • POST http://localhost:8006/set/vito/configuration to set the config. It needs to be provided as a json object

Parts

35
QtyValueFootprintReferences
5BAT42Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD1, D2, D3, D4, D5
5BC547Package_TO_SOT_THT:TO-92L_Inline_WideQ1, Q2, Q3, Q4, Q5
4Connector_Pin:Pin_D1.0mm_L10.0mm, , ,
4MountingHole:MountingHole_3.2mm_M3, , ,
42k15Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2, R3, R4
2287Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR7, R8
11kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR9
1287RResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR5
12µ2Capacitor_THT:CP_Radial_D5.0mm_P2.50mmC2
147nCapacitor_THT:C_Disc_D7.5mm_W5.0mm_P7.50mmC1
14k64Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR6
1OptolinkConnector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_VerticalJ4
1OptolinkConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ3
1SFH309LED_THT:LED_D3.0mm_ClearQ6
1SFH480Package_TO_SOT_THT:TO-18-2_WindowD6
1USB_Serial_CommunicationConnector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_VerticalJ2
1USB_Serial_SnifferConnector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_VerticalJ1

Similar boards

  • 2 layers99.1 × 99.7 mmRC6502 General Video Adapter, the printed circuit board in 3D

    RC6502 General Video Adapter

    tebl/RC6502-Apple-1-Replica

    An expandable SBC-version of the Apple 1 computer, easy to get started with and lot of cool stuff that can be added to it!

    80 parts193GPL-3.0
  • 2 layers40 × 37.5 mmKezfertotlenito, the printed circuit board in 3D

    Kezfertotlenito

    simonyiszk/kezfertotlenito.sch

    Liftbe szerelhető, alacsony fogyasztású kézfertőtlenítő tervei

    31 parts
  • 2 layers66.7 × 60.3 mmKeyface, the printed circuit board in 3D

    Keyface

    z00m128/pcb-resources

    A set of printed circuit boards created by me.

    41 parts9
  • 2 layers28 × 48 mmE meter hardware, the printed circuit board in 3D

    E meter hardware

    www-ShapeLabs-de/sgm4_to_mqtt

    ESP8266 electricity meter reading head for SGM-C4 meter with homeassistant mqtt-discovery

    34 parts3MIT
  • 2 layers27 × 34.7 mmSmartmeter ir reader, the printed circuit board in 3D

    Smartmeter ir reader

    chof747/smartmeter-ir-reader

    This is an implementation of the smart reader concept created by volkszaehler.org.

    16 partsCC0-1.0
  • 2 layers541 × 25 mmSchematics, the printed circuit board in 3D

    Schematics

    ringedSquid/Cost_Effective_Soil_Moisture_Sensor_SSCS-2024

    SSCS 2024 Contest entry

    17 parts
  • 2 layers136 × 125.3 mmDm pcb batch, the printed circuit board in 3D

    Dm pcb batch

    rlfbckr/workshops

    16 parts
  • 2 layers234 × 117 mmPillDispenser, the printed circuit board in 3D

    PillDispenser

    xPiTi/pillex-main

    Submission files for MSc project - Pillex - pill dispensing device

    364 parts

Questions

How big is the OptolinkDuoBlock PCB?

It measures 142.2 × 52.1 mm and has 2 copper layers, 1.6 mm thick.

What parts does the OptolinkDuoBlock use?

35 parts, built around the BAT42, BC547 and SFH 309. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the OptolinkDuoBlock KiCad files?

From the vich-667/OptolinkDuoBlock repository on GitHub, at the commit this page was made from: the board is PCB/OptolinkDuoBlock/OptolinkDuoBlock.kicad_pcb and its schematic PCB/OptolinkDuoBlock/OptolinkDuoBlock.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the OptolinkDuoBlock design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).