vault backup: 2025-05-03 14:46:27

This commit is contained in:
Miguel 2025-05-03 14:46:27 +02:00
parent bb3fad6e39
commit 507781d314
76 changed files with 11039 additions and 285 deletions

4
.obsidian/app.json vendored
View File

@ -1,9 +1,9 @@
{ {
"pdfExportSettings": { "pdfExportSettings": {
"includeName": true, "includeName": true,
"pageSize": "A4", "pageSize": "A3",
"landscape": false, "landscape": false,
"margin": "2", "margin": "0",
"downscalePercent": 68 "downscalePercent": 68
}, },
"attachmentFolderPath": "./adjuntos", "attachmentFolderPath": "./adjuntos",

3
.obsidian/backlink.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"backlinkInDocument": true
}

View File

@ -24,5 +24,7 @@
"obsidian-auto-link-title", "obsidian-auto-link-title",
"advanced-canvas", "advanced-canvas",
"obsidian-minimal-settings", "obsidian-minimal-settings",
"shiki-highlighter" "shiki-highlighter",
"obsidian-mindmap-nextgen",
"obsidian-plantuml"
] ]

View File

@ -54,8 +54,8 @@
"env": {}, "env": {},
"showExportProgressBar": true, "showExportProgressBar": true,
"lastExportDirectory": { "lastExportDirectory": {
"win32": "C:\\Trabajo\\VM\\Per Tody" "win32": "C:\\Users\\migue\\Downloads"
}, },
"lastExportType": "Markdown", "lastExportType": "Word (.docx)",
"showOverwriteConfirmation": true "showOverwriteConfirmation": true
} }

View File

@ -0,0 +1,39 @@
{
"version": "2.0",
"layout": [
null,
null,
null,
null,
null,
null
],
"settings": {
"splitDirection": "horizontal",
"nodeMinHeight": 16,
"lineHeight": "1em",
"spacingVertical": 5,
"spacingHorizontal": 80,
"paddingX": 8,
"initialExpandLevel": -1,
"colorFreezeLevel": 0,
"animationDuration": 500,
"maxWidth": 0,
"highlight": true,
"coloring": "depth",
"depth1Color": "#cb4b16",
"depth1Thickness": "3",
"depth2Color": "#6c71c4",
"depth2Thickness": "1.5",
"depth3Color": "#859900",
"depth3Thickness": "1",
"defaultColor": "#b58900",
"defaultThickness": "1",
"screenshotBgColor": "#002b36",
"screenshotBgStyle": "color",
"screenshotTextColor": "#fdf6e3",
"screenshotTextColorEnabled": false,
"titleAsRootNode": true,
"useThemeFont": false
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,8 @@
{
"id": "obsidian-mindmap-nextgen",
"name": "Mindmap NextGen",
"version": "1.13.2",
"description": "View your Markdown as a mindmap",
"isDesktopOnly": false,
"minAppVersion": "1.0.0"
}

View File

@ -0,0 +1,213 @@
/* General */
:root {
--mm-color-text: #fff;
}
[hidden] {
display: none !important;
}
.mmng-coloring-approach-description {
border-top: none;
padding-top: 0;
}
.mmng-coloring-approach-description .setting-item-description { padding-top: 0 }
/* Mindmaps */
.markmap {
width: 100%;
height: 100%;
display: block;
}
.markmap div { line-height: var(--mm-line-height, 1em) }
.katex-html { display: none }
/* Code blocks inside mindmaps */
/* Remove markmap's code block style */
.markmap-foreign.markmap-foreign code {
color: inherit;
background-color: inherit;
}
/* Hide language tag shown by some themes */
.markmap-foreign pre[class*='language-']::after {
display: none;
}
/* Checkboxes */
.mm-ng-checkbox {
font-weight: bold;
}
.mm-ng-checkbox-checked {
color: green;
}
.mm-ng-checkbox-unchecked {
color: red;
}
/* Inline mindmaps */
.block-language-markmap { border-radius: 5px }
.block-language-markmap svg { border-radius: 5px }
.block-language-markmap { letter-spacing: normal }
.mmng-highlight-inline .block-language-markmap {
background-color: var(--code-background);
padding: 3px;
}
.markdown-source-view.mod-cm6 .cm-embed-block:has(.block-language-markmap):hover {
box-shadow: none;
cursor: auto;
}
.block-language-markmap .workspace-leaf-resize-handle {
bottom: 0;
left: 0;
border-bottom-style: solid;
border-bottom-width: var(--divider-width);
height: var(--divider-width-hover);
width: 100%;
cursor: row-resize;
}
/* display inline mindmap resize handle */
/* override a rule in the obsidian stylesheet which hides workspace-leaf-resize-handle */
.workspace-split.mod-root
.workspace-leaf:last-child
.workspace-leaf-content
.block-language-markmap
.workspace-leaf-resize-handle
{ display: block }
/* keep resize handle inside block in reading mode */
.block-language-markmap { position: relative }
/* reset button style: begin */
.markdown-source-view.mod-cm6 .edit-block-button.codeblock-settings-button {
--reset-button-style: true;
box-shadow: none;
background-color: inherit;
height: inherit;
}
/* reset button style: end */
.markdown-source-view.mod-cm6 .edit-block-button.codeblock-settings-button {
--icon-width: 18px;
--padding-width: calc(var(--size-2-3) * 2);
--margin-width: var(--size-2-2);
right: calc(var(--icon-width) + var(--padding-width) + var(--margin-width));
}
.mmng-settings-modal .modal {
padding: 0
}
.mmng-settings-modal .modal-content {
overflow-y: auto;
}
.mmng-settings-modal .modal {
height: var(--dialog-max-height)
}
.mmng-settings-modal .modal-content :first-child { border-top: 0 }
.modal-close-button { z-index: 2 }
.mmng-settings-tab {
padding: 0
}
.mmng-level-selector {
position: sticky;
top: 0;
background-color: var(--background-primary);
z-index: 1;
padding-top: var(--size-4-8);
padding-left: var(--size-4-12);
padding-right: var(--size-4-12);
}
.mmng-level-selector button.mmng-active {
background-color: var(--interactive-accent);
color: var(--text-on-accent);
}
.mmng-level-selector .setting-item {
border-bottom: 1px solid var(--background-modifier-border);
}
.mmng-main {
padding-left: var(--size-4-12);
padding-right: var(--size-4-12);
padding-bottom: var(--size-4-16);
}
.mmng-main .setting-item:first-child {
padding-top: 0.75em
}
.setting-item.mmng-faded {
opacity: 40%
}
.setting-item-info.mmng-reset {
flex: none;
}
.mmng-settings-level-explanation {
padding-top: var(--size-4-16);
padding-left: var(--size-4-8);
padding-right: var(--size-4-8);
}
.mmng-settings-level-explanation .clickable-icon { display: inline-block }
/* Toolbars */
.mm-toolbar {
position: absolute;
bottom: 2rem;
right: 1rem;
background-color: white;
border-radius: 0.5rem;
padding: 0.2rem;
box-shadow: 0 0 0.4rem 0 white;
z-index: 1;
border: 1px solid #ccc;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.mm-toolbar .mm-toolbar-brand {
display: none;
}
.mm-toolbar .mm-toolbar-item {
height: 20px;
color: black;
}
.mm-toolbar .mm-toolbar-item.active,
.mm-toolbar .mm-toolbar-item:hover {
color: brown;
}

View File

@ -0,0 +1,11 @@
{
"server_url": "http://192.168.88.26:8881",
"header": "",
"debounce": 3,
"localJar": "",
"javaPath": "java",
"dotPath": "dot",
"defaultProcessor": "png",
"cache": 60,
"exportPath": ""
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
{
"id": "obsidian-plantuml",
"name": "PlantUML",
"version": "1.8.0",
"minAppVersion": "1.5.7",
"description": "Render PlantUML Diagrams",
"author": "Johannes Theiner",
"authorUrl": "https://github.com/joethei/",
"isDesktopOnly": false
}

View File

@ -0,0 +1,38 @@
.puml-settings-area {
margin-left: 5px;
margin-right: 5px;
font-size: 14px;
width: 100%;
}
.plantuml-source-view .cm-activeLine {
background-color: unset !important;
}
.plantuml-source-view .cm-gutters {
background-color: unset !important;
}
.plantuml-source-view .cm-cursor {
border-left: 1.2px solid var(--text-muted);
}
.plantuml-source-view .cm-selectionBackground {
background-color: var(--text-selection) !important;
}
.puml-loading {
color: var(--text-accent);
}
.internal-embed.file-embed[src$=".puml"] {
display: none;
}
.internal-embed.file-embed[src$=".pu"] {
display: none;
}
.puml-error {
color: var(--text-error);
}

View File

@ -1,13 +1,169 @@
{ {
"recentFiles": [ "recentFiles": [
{ {
"basename": "Radarr - Lidarr", "basename": "SAE196 - IO Adapted",
"path": "01-Documentation/Lidarr - Radarr/Radarr - Lidarr.md" "path": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md"
},
{
"basename": "Python Notes",
"path": "01-Documentation/Python/Python Notes.md"
},
{
"basename": "Script para obtener las ultimas versiones",
"path": "01-Documentation/Python/Scripts Python/Script para obtener las ultimas versiones.md"
},
{
"basename": "Group Scripts Manager",
"path": "01-Documentation/Python/Scripts Python/Group Scripts Manager.md"
},
{
"basename": "Conda - Anaconda - miniconda",
"path": "01-Documentation/Python/Scripts Python/Conda - Anaconda - miniconda.md"
},
{
"basename": "Miniconda Como hacer un backup completo de un entorno creado con Miniconda",
"path": "01-Documentation/Python/Scripts Python/Miniconda Como hacer un backup completo de un entorno creado con Miniconda.md"
},
{
"basename": "API Google Translate",
"path": "01-Documentation/Python/Scripts Python/API Google Translate.md"
},
{
"basename": "Allen Bradley HMI Translate - Python - LLM - Google Translate",
"path": "01-Documentation/Python/Scripts Python/Allen Bradley HMI Translate - Python - LLM - Google Translate.md"
},
{
"basename": "E5.007600 - SAE469 - FDM",
"path": "04-SIDEL/07 - E5.007600 - SAE469/E5.007600 - SAE469 - FDM.md"
},
{
"basename": "Docker Basics - Essential Commands and Usage Guide",
"path": "01-Documentation/Dockers/Docker Basics - Essential Commands and Usage Guide.md"
},
{
"basename": "Radarr - Lidarr - Sonarr - QBittorrent - Prowlarr - Unmanic",
"path": "01-Documentation/Dockers/Radarr - Lidarr - Sonarr - QBittorrent - Prowlarr - Unmanic.md"
},
{
"basename": "FB1751 - BlenderPID_PIDSPCalc Documentation",
"path": "04-SIDEL/00 - MASTER/MIXER/Documentacion/FB1751 - BlenderPID_PIDSPCalc Documentation.md"
},
{
"basename": "94102 - ALPLA- USA - Notes for technician on site",
"path": "03-VM/39 - 94102 - Alpla - Usa/94102 - ALPLA- USA - Notes for technician on site.md"
},
{
"basename": "OPC UA",
"path": "01-Documentation/Siemens/TIA Portal/OPC UA.md"
},
{
"basename": "Backups - Mikrotik",
"path": "01-Documentation/Routers/Mikrotik - Network Redes/Backups - Mikrotik.md"
},
{
"basename": "Radarr - Lidarr - Sonarr - QBittorrent - Prowlarr - Unmanic",
"path": "01-Documentation/Lidarr - Radarr/Radarr - Lidarr - Sonarr - QBittorrent - Prowlarr - Unmanic.md"
},
{
"basename": "Configurazione ZeroTier con Home Assistant - Riccardo",
"path": "01-Documentation/VPN - Zerotier - Wireguard/Configurazione ZeroTier con Home Assistant - Riccardo.md"
},
{
"basename": "Mikrotik - Zerotier - zero_work network",
"path": "01-Documentation/Routers/Mikrotik - Network Redes/Mikrotik - Zerotier - zero_work network.md"
},
{
"basename": "S7 Software Calls",
"path": "04-SIDEL/00 - MASTER/MIXER/S7 Software Calls.md"
},
{
"basename": "Análisis Detallado OBs",
"path": "04-SIDEL/00 - MASTER/MIXER/Documentacion/Análisis Detallado OBs.md"
},
{
"basename": "Análisis del Software PLC Mixer",
"path": "04-SIDEL/00 - MASTER/MIXER/Documentacion/Análisis del Software PLC Mixer.md"
},
{
"basename": "94102 - Alpla - Usa",
"path": "03-VM/39 - 94102 - Alpla - Usa/94102 - Alpla - Usa.md"
},
{
"basename": "FB1751 - BlenderPID_PIDSPCalc Map",
"path": "04-SIDEL/00 - MASTER/MIXER/Documentacion/FB1751 - BlenderPID_PIDSPCalc Map.md"
},
{
"basename": "FB1751 - BlenderPID_PIDSPCalc Diagrams",
"path": "04-SIDEL/00 - MASTER/MIXER/Documentacion/FB1751 - BlenderPID_PIDSPCalc Diagrams.md"
},
{
"basename": "BlenderCtrl__Main",
"path": "04-SIDEL/00 - MASTER/MIXER/Documentacion/BlenderCtrl__Main.md"
},
{
"basename": "Zero-Tier ONE - Lan NAT",
"path": "01-Documentation/Routers/Zero-Tier ONE - Lan NAT.md"
},
{
"basename": "SIDEL - Master - IPs",
"path": "04-SIDEL/00 - MASTER/SIDEL - Master - IPs.md"
},
{
"basename": "Endress+Hauser WEB Access",
"path": "01-Documentation/Endress+Houser/Endress+Hauser WEB Access.md"
},
{
"basename": "Secomea Layer 2 Setup",
"path": "01-Documentation/Vetromeccanica/Sacomea/Secomea Layer 2 Setup.md"
},
{
"basename": "Sacomea Help",
"path": "01-Documentation/Vetromeccanica/Sacomea/Sacomea Help.md"
},
{
"basename": "SAE196 - IO",
"path": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md"
},
{
"basename": "SIDEL - Mixer - Equivalences",
"path": "04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md"
},
{
"basename": "SIDEL - Passwords",
"path": "01-Documentation/SIDEL/SIDEL - Passwords.md"
},
{
"basename": "Activate License on Zenon 10 HMI - B&R PC",
"path": "04-SIDEL/00 - MASTER/MIXER/HMI/B&R Zenon 10/Activate License on Zenon 10 HMI - B&R PC.md"
},
{
"basename": "Blender - Video - Editing",
"path": "01-Documentation/Blender Software/Video Editing/Blender - Video - Editing.md"
},
{
"basename": "Update to PROMASS 300",
"path": "04-SIDEL/00 - MASTER/MIXER/PLC/S7 Software/Update to PROMASS 300.md"
},
{
"basename": "Start new PC B&R from image",
"path": "04-SIDEL/00 - MASTER/MIXER/HMI/B&R Zenon 10/Start new PC B&R from image.md"
},
{
"basename": "AI Prompts useful",
"path": "01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md"
}, },
{ {
"basename": "Shiki Plugin - Highlither - Syntax - Editor", "basename": "Shiki Plugin - Highlither - Syntax - Editor",
"path": "01-Documentation/Obsidean/Shiki Plugin - Highlither - Syntax - Editor.md" "path": "01-Documentation/Obsidean/Shiki Plugin - Highlither - Syntax - Editor.md"
}, },
{
"basename": "Jellyfin en Synology DS220+",
"path": "01-Documentation/Synology/DS220+/Jellyfin en Synology DS220+.md"
},
{
"basename": "Siemens HMI Translate - Python - LLM - Google Translate",
"path": "01-Documentation/Python/Scripts Python/Siemens HMI Translate - Python - LLM - Google Translate.md"
},
{ {
"basename": "60034 - Motor trifasico - Chingioli", "basename": "60034 - Motor trifasico - Chingioli",
"path": "01-Documentation/Motors/Lenze/60034 - Motor trifasico - Chingioli.md" "path": "01-Documentation/Motors/Lenze/60034 - Motor trifasico - Chingioli.md"
@ -16,14 +172,6 @@
"basename": "Pasted image 20250426010944", "basename": "Pasted image 20250426010944",
"path": "01-Documentation/Lidarr - Radarr/adjuntos/Pasted image 20250426010944.png" "path": "01-Documentation/Lidarr - Radarr/adjuntos/Pasted image 20250426010944.png"
}, },
{
"basename": "Jellyfin en Synology DS220+",
"path": "01-Documentation/Synology/DS220+/Jellyfin en Synology DS220+.md"
},
{
"basename": "Backups - Mikrotik",
"path": "01-Documentation/Routers/Mikrotik - Network Redes/Backups - Mikrotik.md"
},
{ {
"basename": "Análisis Comparativo de Routers MikroTik", "basename": "Análisis Comparativo de Routers MikroTik",
"path": "01-Documentation/Routers/Mikrotik - Network Redes/Análisis Comparativo de Routers MikroTik.md" "path": "01-Documentation/Routers/Mikrotik - Network Redes/Análisis Comparativo de Routers MikroTik.md"
@ -51,154 +199,6 @@
{ {
"basename": "EOip Vetromeccanica", "basename": "EOip Vetromeccanica",
"path": "01-Documentation/Routers/Mikrotik - Network Redes/EOip Vetromeccanica.md" "path": "01-Documentation/Routers/Mikrotik - Network Redes/EOip Vetromeccanica.md"
},
{
"basename": "CAPsMAN",
"path": "01-Documentation/Routers/Mikrotik - Network Redes/CAPsMAN.md"
},
{
"basename": "Bandwith control - Queues",
"path": "01-Documentation/Routers/Mikrotik - Network Redes/Bandwith control - Queues.md"
},
{
"basename": "SAE196 - IO",
"path": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md"
},
{
"basename": "SIDEL - Mixer - Equivalences",
"path": "04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md"
},
{
"basename": "AI Prompts useful",
"path": "01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md"
},
{
"basename": "Zero-Tier ONE - Lan NAT",
"path": "01-Documentation/Routers/Zero-Tier ONE - Lan NAT.md"
},
{
"basename": "SAE196_c0.2.XML_CAx_Export_Obsidian_Summary",
"path": "04-SIDEL/00 - MASTER/Source/SAE196_c0.2.XML_CAx_Export_Obsidian_Summary.md"
},
{
"basename": "S7 Software Calls",
"path": "04-SIDEL/00 - MASTER/MIXER/S7 Software Calls.md"
},
{
"basename": "COMPLETE_RESTART",
"path": "04-SIDEL/00 - MASTER/Source/source/COMPLETE_RESTART.md"
},
{
"basename": "xref_calls_tree",
"path": "04-SIDEL/00 - MASTER/Source/xref_calls_tree.md"
},
{
"basename": "_CYCL_EXC",
"path": "04-SIDEL/00 - MASTER/Source/source/_CYCL_EXC.md"
},
{
"basename": "Blender_Variables",
"path": "04-SIDEL/00 - MASTER/Source/source/Blender_Variables.md"
},
{
"basename": "Blender_Variables_Pers",
"path": "04-SIDEL/00 - MASTER/Source/source/Blender_Variables_Pers.md"
},
{
"basename": "BlenderCtrl_ResetSPWord",
"path": "04-SIDEL/00 - MASTER/Source/source/BlenderCtrl_ResetSPWord.md"
},
{
"basename": "BlenderCtrl_ProdModeInit",
"path": "04-SIDEL/00 - MASTER/Source/source/BlenderCtrl_ProdModeInit.md"
},
{
"basename": "Mixer - Notes",
"path": "01-Documentation/SIDEL/Master Mixer/Mixer - Notes.md"
},
{
"basename": "Python Notes",
"path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Python Notes.md"
},
{
"basename": "SACOMEA - Default password",
"path": "01-Documentation/Vetromeccanica/Sacomea/SACOMEA - Default password.md"
},
{
"basename": "Sacomea",
"path": "01-Documentation/Vetromeccanica/Sacomea/Sacomea.md"
},
{
"basename": "Sacomea 9.4022 - Shibuya",
"path": "01-Documentation/Vetromeccanica/Sacomea/Sacomea 9.4022 - Shibuya.md"
},
{
"basename": "Sacomea Help",
"path": "01-Documentation/Vetromeccanica/Sacomea/Sacomea Help.md"
},
{
"basename": "Análisis Detallado OBs",
"path": "04-SIDEL/00 - MASTER/MIXER/Documentacion/Análisis Detallado OBs.md"
},
{
"basename": "BlenderCtrl__Main",
"path": "04-SIDEL/00 - MASTER/MIXER/Documentacion/BlenderCtrl__Main.md"
},
{
"basename": "Análisis del Software PLC Mixer",
"path": "04-SIDEL/00 - MASTER/MIXER/Documentacion/Análisis del Software PLC Mixer.md"
},
{
"basename": "Conversión LAD a SCL Siemens",
"path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Conversión LAD a SCL Siemens.md"
},
{
"basename": "Script Python DB to Excel",
"path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Proyectos en Python/Script Python DB to Excel.md"
},
{
"basename": "Visual Studio Notes",
"path": "07 - Desarrolo de Proyectos - Scripts - Visual Studio/Visual Studio Notes.md"
},
{
"basename": "SAE196 - IO Adapted",
"path": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md"
},
{
"basename": "SIDEL - Mixer - Master - IO Tags",
"path": "04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Master - IO Tags.md"
},
{
"basename": "Heartbeat Technology Implementation",
"path": "01-Documentation/Endress+Houser/Heartbeat Technology Implementation.md"
},
{
"basename": "Endress+Hauser Software",
"path": "01-Documentation/Endress+Houser/Endress+Hauser Software.md"
},
{
"basename": "SIDEL - FLD",
"path": "01-Documentation/SIDEL/SIDEL - FLD.md"
},
{
"basename": "MCP",
"path": "01-Documentation/AI - IA - LLM - Artificial Intelligence/MCP.md"
},
{
"basename": "SAE346 - Software adaptation from Master - Notes",
"path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Software adaptation from Master - Notes.md"
},
{
"basename": "SAE346 - Process diagram",
"path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Process diagram.md"
},
{
"basename": "SAE346 - Master adaptation to compile",
"path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - Master adaptation to compile.md"
},
{
"basename": "SAE346 - IO from Electrical Diagram",
"path": "04-SIDEL/05 - E5.007161 - Modifica O&U - SAE346/SAE346 - IO from Electrical Diagram.md"
} }
], ],
"omittedPaths": [], "omittedPaths": [],

View File

@ -36,35 +36,21 @@
} }
}, },
{ {
"id": "1518daf4545292c1", "id": "b44a0fb4ad99b202",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md", "file": "04-SIDEL/07 - E5.007600 - SAE469/E5.007600 - SAE469 - FDM.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "AI Prompts useful" "title": "E5.007600 - SAE469 - FDM"
} }
}, },
{ {
"id": "f9aff123c3b9238e", "id": "c3eb7a4ad13c9617",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "01-Documentation/Routers/Zero-Tier ONE - Lan NAT.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Zero-Tier ONE - Lan NAT"
}
},
{
"id": "3541e5b49347ea9f",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
@ -78,49 +64,36 @@
} }
}, },
{ {
"id": "0ed41719d7b4a30f", "id": "71b347c5a00c61de",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "01-Documentation/Synology/DS220+/Jellyfin en Synology DS220+.md", "file": "01-Documentation/Routers/Zero-Tier ONE - Lan NAT.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "Jellyfin en Synology DS220+" "title": "Zero-Tier ONE - Lan NAT"
} }
}, },
{ {
"id": "c22862d453c5da16", "id": "04a27eed4746bbe4",
"type": "leaf", "type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "01-Documentation/Lidarr - Radarr/Radarr - Lidarr.md", "file": "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md",
"mode": "source", "mode": "source",
"source": false "source": false,
"backlinks": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "Radarr - Lidarr" "title": "SAE196 - IO Adapted"
}
},
{
"id": "cef542b5bca9a368",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "01-Documentation/Obsidean/Shiki Plugin - Highlither - Syntax - Editor.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Shiki Plugin - Highlither - Syntax - Editor"
} }
} }
], ],
"currentTab": 6 "currentTab": 5
} }
], ],
"direction": "vertical" "direction": "vertical"
@ -203,7 +176,7 @@
"state": { "state": {
"type": "backlink", "type": "backlink",
"state": { "state": {
"file": "31 - 9.3953 - Omega - Mexico - (ABradley)/Reporte/9.3953 - Omega - Mexico - (Allen Bradley) Notes.md", "file": "01-Documentation/Dockers/Docker Basics - Essential Commands and Usage Guide.md",
"collapseAll": false, "collapseAll": false,
"extraContext": false, "extraContext": false,
"sortOrder": "alphabetical", "sortOrder": "alphabetical",
@ -213,7 +186,7 @@
"unlinkedCollapsed": true "unlinkedCollapsed": true
}, },
"icon": "links-coming-in", "icon": "links-coming-in",
"title": "Backlinks for 9.3953 - Omega - Mexico - (Allen Bradley) Notes" "title": "Backlinks for Docker Basics - Essential Commands and Usage Guide"
} }
}, },
{ {
@ -285,8 +258,7 @@
"title": "Copilot" "title": "Copilot"
} }
} }
], ]
"currentTab": 4
} }
], ],
"direction": "horizontal", "direction": "horizontal",
@ -315,54 +287,54 @@
"obsidian-importer:Open Importer": false "obsidian-importer:Open Importer": false
} }
}, },
"active": "c22862d453c5da16", "active": "04a27eed4746bbe4",
"lastOpenFiles": [ "lastOpenFiles": [
"01-Documentation/Obsidean/Shiki Plugin - Highlither - Syntax - Editor.md", "01-Documentation/Python/Python Notes.md",
"01-Documentation/Lidarr - Radarr/Radarr - Lidarr.md", "01-Documentation/Python/Scripts Python/Script para obtener las ultimas versiones.md",
"01-Documentation/Motors/Lenze/60034 - Motor trifasico - Chingioli.md", "01-Documentation/Python/Scripts Python/Group Scripts Manager.md",
"01-Documentation/Lidarr - Radarr/adjuntos/Pasted image 20250426010944.png", "01-Documentation/Python/Scripts Python/Conda - Anaconda - miniconda.md",
"01-Documentation/Lidarr - Radarr/adjuntos/Pasted image 20250426011027.png", "01-Documentation/Python/Scripts Python/Miniconda Como hacer un backup completo de un entorno creado con Miniconda.md",
"01-Documentation/Lidarr - Radarr/adjuntos/Pasted image 20250426011003.png", "01-Documentation/Python/Scripts Python/API Google Translate.md",
"01-Documentation/Lidarr - Radarr/adjuntos", "01-Documentation/Python/Scripts Python/Allen Bradley HMI Translate - Python - LLM - Google Translate.md",
"01-Documentation/Synology/DS220+/Jellyfin en Synology DS220+.md", "04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO Adapted.md",
"04-SIDEL/07 - E5.007600 - SAE469/E5.007600 - SAE469 - FDM.md",
"01-Documentation/Dockers/Docker Basics - Essential Commands and Usage Guide.md",
"01-Documentation/Dockers/Docker - Prometheus.md",
"01-Documentation/Dockers/Radarr - Lidarr - Sonarr - QBittorrent - Prowlarr - Unmanic.md",
"04-SIDEL/00 - MASTER/MIXER/Documentacion/FB1751 - BlenderPID_PIDSPCalc Documentation.md",
"Untitled Diagram 1.svg",
"Untitled Diagram.svg",
"Untitled Diagram 2.svg",
"03-VM/39 - 94102 - Alpla - Usa/94102 - ALPLA- USA - Notes for technician on site.md",
"01-Documentation/Dockers/Untitled Diagram.svg",
"01-Documentation/Siemens/TIA Portal/OPC UA.md",
"01-Documentation/Routers/Mikrotik - Network Redes/Backups - Mikrotik.md", "01-Documentation/Routers/Mikrotik - Network Redes/Backups - Mikrotik.md",
"01-Documentation/Synology/DS220+", "01-Documentation/Lidarr - Radarr/Radarr - Lidarr - Sonarr - QBittorrent - Prowlarr - Unmanic.md",
"01-Documentation/Synology", "01-Documentation/Dockers",
"01-Documentation/Routers/Mikrotik - Network Redes/Análisis Comparativo de Routers MikroTik.md", "01-Documentation/VPN - Zerotier - Wireguard/Configurazione ZeroTier con Home Assistant - Riccardo.md",
"01-Documentation/Routers/Mikrotik - Network Redes/NAT Mikrotik.md", "01-Documentation/VPN - Zerotier - Wireguard/adjuntos/Pasted image 20250501184305.png",
"01-Documentation/CAx AutomationML/Estructura XML Detallada para Topología de Red en Exportaciones AML de TIA Portal.md", "01-Documentation/VPN - Zerotier - Wireguard/adjuntos/Pasted image 20250501184158.png",
"01-Documentation/CAx AutomationML/Especificación Formal del Formato CAx (AML).md", "01-Documentation/VPN - Zerotier - Wireguard/adjuntos",
"01-Documentation/Routers/Mikrotik - Network Redes/Mikrotik Scripts.md", "01-Documentation/Routers/Mikrotik - Network Redes/Mikrotik - Zerotier - zero_work network.md",
"01-Documentation/Routers/Mikrotik - Network Redes/Mikrotik - Setup Commands for Layer 2 Wi-Fi Bridge.md", "01-Documentation/VPN - Zerotier - Wireguard",
"01-Documentation/Routers/Mikrotik - Network Redes/EOip Vetromeccanica.md", "Untitled.md",
"01-Documentation/Routers/Mikrotik - Network Redes/CAPsMAN.md", "Untitled 1.md",
"01-Documentation/Routers/Mikrotik - Network Redes/Bandwith control - Queues.md", "adjuntos/Promag300_500DP_verificationreport_2025-04-14_1243.pdf",
"01-Documentation/Lidarr - Radarr", "adjuntos/presente_indicativo_completo.pdf",
"04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/SAE196 - IO.md", "adjuntos",
"04-SIDEL/00 - MASTER/MIXER/SIDEL - Mixer - Equivalences.md",
"01-Documentation/AI - IA - LLM - Artificial Intelligence/AI Prompts useful.md",
"01-Documentation/Routers/Zero-Tier ONE - Lan NAT.md",
"04-SIDEL/00 - MASTER/Source/SAE196_c0.2.XML_CAx_Export_Obsidian_Summary.md",
"01-Documentation/CAx AutomationML",
"04-SIDEL/00 - MASTER/MIXER/S7 Software Calls.md", "04-SIDEL/00 - MASTER/MIXER/S7 Software Calls.md",
"04-SIDEL/00 - MASTER/Source/SAE196_c0.2.XML_CAx_Summary.md", "04-SIDEL/00 - MASTER/MIXER/Documentacion/Análisis Detallado OBs.md",
"04-SIDEL/00 - MASTER/Source/source/COMPLETE_RESTART.md", "04-SIDEL/00 - MASTER/MIXER/Documentacion/Análisis del Software PLC Mixer.md",
"04-SIDEL/00 - MASTER/Source/xref_calls_tree.md", "03-VM/39 - 94102 - Alpla - Usa/94102 - Alpla - Usa.md",
"04-SIDEL/00 - MASTER/Source/source/_CYCL_EXC.md", "04-SIDEL/00 - MASTER/MIXER/Documentacion/FB1751 - BlenderPID_PIDSPCalc Map.md",
"04-SIDEL/00 - MASTER/Source/source/Blender_Variables.md", "04-SIDEL/00 - MASTER/MIXER/Documentacion/adjuntos/Pasted image 20250429213121.png",
"04-SIDEL/00 - MASTER/Source/source/Blender_Variables_Pers.md", "04-SIDEL/00 - MASTER/MIXER/Documentacion/adjuntos",
"DB/Shiki/vscode-scl.json", "01-Documentation/Routers/Mikrotik - Network Redes/adjuntos/Pasted image 20250429124724.png",
"DB/Shiki/vscode-scl.json.opdownload", "01-Documentation/Vetromeccanica/Sacomea/adjuntos/Pasted image 20250428204503.png",
"DB/Shiki", "04-SIDEL/07 - E5.007600 - SAE469/adjuntos/Pasted image 20250428173456.png",
"DB/Nueva carpeta", "01-Documentation/Blender Software/Video Editing/adjuntos",
"04-SIDEL/00 - MASTER/Source/source", "01-Documentation/Blender Software/Video Editing",
"01-Documentation/SIDEL/adjuntos/Pasted image 20250417164020.png", "01-Documentation/Blender Software",
"01-Documentation/Endress+Houser/adjuntos/Pasted image 20250414150025.png",
"01-Documentation/Endress+Houser/adjuntos/Pasted image 20250411154541.png",
"01-Documentation/Endress+Houser/adjuntos/Pasted image 20250411154441.png",
"04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/post_login.png",
"04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/initial_page.png",
"04-SIDEL/06 - E5.007363 - Modifica O&U - SAE196 (cip integrato)/resultados/screenshots/before_click_xpath_Menu.png",
"03-Revised/93789 Sipa Italia - Tinny - HSCounters - Piattaforma/Divider/Untitled.canvas", "03-Revised/93789 Sipa Italia - Tinny - HSCounters - Piattaforma/Divider/Untitled.canvas",
"04-InLavoro/9..... MASTER Transport/Standard Transport/FB500 Logic.canvas", "04-InLavoro/9..... MASTER Transport/Standard Transport/FB500 Logic.canvas",
"04-InLavoro/HENKEL/93040 - HENKEL - BowlingGreen/TL22-L25/Synoptic Change/Q3.canvas", "04-InLavoro/HENKEL/93040 - HENKEL - BowlingGreen/TL22-L25/Synoptic Change/Q3.canvas",

View File

@ -0,0 +1,16 @@
***
![[Pasted image 20250428152847.png]]
* To separate Audio from Video
![[Pasted image 20250428152938.png]]
* To eliminate All gaps
* Go to a Gap position (1)
* Click Strip Menu (2)
* Transform -> Remove Gaps ( All ) (3)

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -0,0 +1,467 @@
***
#### Ports:
---
```bash
-p {outside}:{inside}
```
```bash
NAMES PORTS
portainer 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 9443/tcp
sonarr 0.0.0.0:8989->8989/tcp, :::8989->8989/tcp
radarr 0.0.0.0:7878->7878/tcp, :::7878->7878/tcp
jackett 0.0.0.0:9117->9117/tcp, :::9117->9117/tcp
prowlarr 0.0.0.0:9696->9696/tcp, :::9696->9696/tcp
uglyfeed 0.0.0.0:8001->8001/tcp, :::8001->8001/tcp, 0.0.0.0:8501->8501/tcp, :::8501->8501/tcp
bazarr 0.0.0.0:6767->6767/tcp, :::6767->6767/tcp
Gitea-DB 3306/tcp, 33060/tcp
plantuml 0.0.0.0:8881->8080/tcp, :::8881->8080/tcp
lidarr 0.0.0.0:8686->8686/tcp, :::8686->8686/tcp
jellyfin
unmanic 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp
whisper 0.0.0.0:9005->9000/tcp, :::9005->9000/tcp
qbittorrent 0.0.0.0:6881->6881/tcp, :::6881->6881/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:6881->6881/udp, :::8080->8080/tcp, :::6881->6881/udp
searx-searx 8080/tcp
gitea 0.0.0.0:2222->22/tcp, :::2222->22/tcp, 0.0.0.0:3052->3000/tcp, :::3052->3000/tcp
watchtower 8080/tcp
```
### Managing Ports in Docker on Synology
When setting up multiple containers, it's important to avoid port conflicts. Here are several methods to check which ports are already in use:
#### Using Docker Commands
bash
```bash
# List all running containers with their port mappings
docker ps --format "{{.Names}}: {{.Ports}}"
# For a more detailed view of all port bindings
docker container ls --format "table {{.Names}}\t{{.Ports}}"
# Get only the host ports that are currently mapped
docker ps -q | xargs -n 1 docker port | grep -o '[0-9]*:[0-9]*' | cut -d: -f1 | sort -nu
```
#### Using Synology Tools
1. **Synology Docker UI**:
- Open Docker package in DSM
- Go to "Container" tab
- View the "Port Settings" column
2. **Using Portainer**:
- Open Portainer web interface
- Go to "Containers" section
- View the "Published Ports" column
3. **From Synology DSM**:
- Go to Control Panel → Network → Network Interface
- Click "Network Port Status" to see all used ports
#### Check System-Wide Port Usage
To see all ports in use on the system (not just Docker):
bash
```bash
# Requires SSH access with admin privileges
sudo netstat -tulpn | grep LISTEN
```
#### Creating a Port Inventory Script
You can create a simple script in Task Scheduler to maintain a port inventory:
bash
```bash
#!/bin/bash
# Save as port_inventory.sh in Task Scheduler
echo "Docker Port Inventory - $(date)" > /volume1/docker/port_inventory.txt
echo "----------------------------------------" >> /volume1/docker/port_inventory.txt
docker ps --format "{{.Names}}: {{.Ports}}" >> /volume1/docker/port_inventory.txt
echo "" >> /volume1/docker/port_inventory.txt
echo "System-wide ports:" >> /volume1/docker/port_inventory.txt
netstat -tulpn | grep LISTEN >> /volume1/docker/port_inventory.txt
```
Run this script periodically or before creating new containers to maintain an up-to-date list of used ports, helping you avoid conflicts when configuring new containers.
## Docker on Synology NAS
Synology NAS provides a Docker package that offers both GUI and command-line interfaces for managing containers. However, for more complex container configurations, using custom scripts is often more efficient.
### Best Practices for Synology Docker Deployments
1. **Standard Directory Structure**:
- Use `/volume1/docker/[container_name]/` for container configurations
- This organization makes backups and migrations easier
2. **User Permissions**:
- Synology has a predefined `docker` user which should be used for container directories
- Typical PUID/PGID values in Synology: PUID=1033 (docker user), PGID=100 (users group)
3. **Script-Based Management**:
- Create container deployment scripts in the Synology Task Scheduler
- Run scripts as root to ensure proper permissions
- For modifications, either:
- Update the script and recreate the container
- Make minor adjustments via Portainer
4. **Using Portainer**:
- Install Portainer for easy container management through a web interface
- Useful for monitoring, restarting containers, and making minor configuration changes
- For major changes, modify the original script and redeploy
### Example Script for Synology Task Scheduler
```bash
#!/bin/bash
# Script to deploy Jellyfin container
# Save in Synology Task Scheduler and run as root
# Stop and remove existing container if it exists
docker stop jellyfin
docker rm jellyfin
# Create the container
docker run -d --name=jellyfin \
-v /volume2/Media/Peliculas:/movies \
-v /volume1/docker/jellyfin/config:/config \
-v /volume2/Media/Musica:/music \
-v /volume1/docker/jellyfin/cache:/cache \
-v /volume2/Media/Series:/series \
-e PUID=1033 \
-e PGID=100 \
--group-add 937 \
--net=host \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
--device /dev/dri/card0:/dev/dri/card0 \
--restart always \
jellyfin/jellyfin
echo "Jellyfin container deployed successfully."
```
## Example Containers
### Media Server (Jellyfin)
```bash
docker run -d --name=jellyfin \
-v /volume2/Media/Peliculas:/movies \
-v /volume1/docker/jellyfin/config:/config \
-v /volume2/Media/Musica:/music \
-v /volume1/docker/jellyfin/cache:/cache \
-v /volume2/Media/Series:/series \
-e PUID=1033 \
-e PGID=100 \
--group-add 937 \
--net=host \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
--device /dev/dri/card0:/dev/dri/card0 \
--restart always \
jellyfin/jellyfin
```
This container:
- Runs in detached mode (`-d`)
- Mounts multiple volumes for media and configuration
- Sets user/group IDs for permissions
- Uses host networking for optimal performance
- Passes through GPU devices for hardware acceleration
- Automatically restarts if it crashes or on system boot
### Media Processing (Unmanic)
```bash
docker run -d --name=unmanic \
-p 8888:8888 \
-v /volume1/docker/unmanic/config:/config \
-v /volume1/docker/unmanic/library:/library \
-v /volume1/docker/unmanic/cache:/tmp/unmanic \
-v /volume2/Media/Peliculas:/movies \
-v /volume2/Media/Musica:/music \
-v /volume2/Media/Series:/series \
-e TZ=Europe/Roma \
-e PUID=1033 \
-e PGID=100 \
--group-add 937 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
--device /dev/dri/card0:/dev/dri/card0 \
--restart always \
josh5/unmanic:latest
```
This container:
- Exposes port 8888 for web UI access
- Mounts volumes for configuration, processing, and media
- Sets timezone and user/group IDs
- Passes through GPU devices for hardware acceleration
- Automatically restarts if it crashes or on system boot
### Important Container Options Explained
- `-d`: Run in detached (background) mode
- `--name=NAME`: Assign a name to the container
- `-p HOST:CONTAINER`: Port mapping
- `-v HOST:CONTAINER`: Volume mapping
- `-e KEY=VALUE`: Environment variable
- `--restart always`: Automatically restart the container
- `--net=host`: Use host networking
- `--device SRC:DST`: Add a device to the container
- `--group-add GID`: Add additional groups to the container
- `-w PATH`: Set working directory inside the container
- `--user USER`: Set the user running the container
- `--memory LIMIT`: Set memory limit
- `--cpus LIMIT`: Set CPU limit
- `--privileged`: Give extended privileges to the container (use with caution)
## Installation
Docker installation varies by operating system:
- **Linux**:
```bash
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
```
- **macOS and Windows**: Download Docker Desktop from the [official website](https://www.docker.com/products/docker-desktop).
After installation, verify Docker is running:
```bash
docker --version
docker run hello-world
```
## Basic Docker Commands
### System Information
```bash
# View Docker system information
docker info
# Check Docker version
docker version
# Display system-wide information
docker system info
# Show disk usage
docker system df
```
### Help
```bash
# Get help on any command
docker [COMMAND] --help
```
## Working with Docker Images
Images are the blueprints for containers.
```bash
# List downloaded images
docker images
# Search for images on Docker Hub
docker search [IMAGE_NAME]
# Pull an image from a registry
docker pull [IMAGE_NAME]:[TAG]
# Build an image from a Dockerfile
docker build -t [IMAGE_NAME]:[TAG] [PATH_TO_DOCKERFILE]
# Remove an image
docker rmi [IMAGE_NAME]:[TAG]
# Remove all unused images
docker image prune
```
## Creating and Managing Containers
### Running Containers
```bash
# Run a container in interactive mode
docker run -it [IMAGE_NAME]:[TAG]
# Run a container in detached mode (background)
docker run -d [IMAGE_NAME]:[TAG]
# Run a container with a specific name
docker run --name [CONTAINER_NAME] [IMAGE_NAME]:[TAG]
# Run a container and automatically remove it when it exits
docker run --rm [IMAGE_NAME]:[TAG]
# Run a container with port mapping (host_port:container_port)
docker run -p 8080:80 [IMAGE_NAME]:[TAG]
# Run a container with environment variables
docker run -e VARIABLE_NAME=value [IMAGE_NAME]:[TAG]
# Run a container with a mounted volume
docker run -v /host/path:/container/path [IMAGE_NAME]:[TAG]
```
### Container Management
```bash
# List running containers
docker ps
# List all containers (including stopped)
docker ps -a
# Start a stopped container
docker start [CONTAINER_NAME or ID]
# Stop a running container
docker stop [CONTAINER_NAME or ID]
# Restart a container
docker restart [CONTAINER_NAME or ID]
# Pause a container
docker pause [CONTAINER_NAME or ID]
# Unpause a container
docker unpause [CONTAINER_NAME or ID]
# Remove a container
docker rm [CONTAINER_NAME or ID]
# Remove all stopped containers
docker container prune
# View container logs
docker logs [CONTAINER_NAME or ID]
# Follow container logs (stream)
docker logs -f [CONTAINER_NAME or ID]
# Execute a command in a running container
docker exec -it [CONTAINER_NAME or ID] [COMMAND]
# Open a shell inside a running container
docker exec -it [CONTAINER_NAME or ID] /bin/bash
```
## Docker Networking
```bash
# List networks
docker network ls
# Create a network
docker network create [NETWORK_NAME]
# Connect a container to a network
docker network connect [NETWORK_NAME] [CONTAINER_NAME]
# Disconnect a container from a network
docker network disconnect [NETWORK_NAME] [CONTAINER_NAME]
# Inspect a network
docker network inspect [NETWORK_NAME]
# Remove a network
docker network rm [NETWORK_NAME]
```
### Network Options
- `--net=host`: Uses the host's networking directly
- `--net=bridge`: Default network mode
- `--net=none`: No networking
- `--net=[NETWORK_NAME]`: Connect to a custom network
## Docker Volumes
Volumes are used for persistent data storage.
```bash
# List volumes
docker volume ls
# Create a volume
docker volume create [VOLUME_NAME]
# Inspect a volume
docker volume inspect [VOLUME_NAME]
# Remove a volume
docker volume rm [VOLUME_NAME]
# Remove all unused volumes
docker volume prune
```
### Volume Mounting Options
- `-v /host/path:/container/path`: Bind mount
- `-v [VOLUME_NAME]:/container/path`: Named volume
- `--mount type=bind,source=/host/path,target=/container/path`: Bind mount (alternative syntax)
- `--mount type=volume,source=[VOLUME_NAME],target=/container/path`: Named volume (alternative syntax)
## Docker Compose
Docker Compose is a tool for defining and running multi-container applications.
### Basic Commands
```bash
# Start services defined in docker-compose.yml
docker-compose up
# Start services in detached mode
docker-compose up -d
# Stop services
docker-compose down
# Stop services and remove volumes
docker-compose down -v
# View logs
docker-compose logs
# View running services
docker-compose ps
```
## Best Practices
1. **Use specific image tags** instead of `latest` for reproducibility
2. **Implement health checks** to ensure containers are functioning properly
3. **Use volumes for persistent data** to prevent data loss
4. **Minimize image size** by using multi-stage builds and alpine-based images
5. **Set resource limits** to prevent container resource exhaustion
6. **Use Docker Compose** for multi-container applications
7. **Follow least privilege principle** for security
8. **Regular cleanup** of unused containers, images, and volumes

View File

@ -0,0 +1,25 @@
[[01-Documentation/Lidarr - Radarr/Radarr - Lidarr - Sonarr - QBittorrent - Prowlarr - Unmanic]]
### Uglyfeed
***
```bash
docker run -d --name=uglyfeed \
-v /volume1/docker/uglyfeed/config/config.yaml:/app/config.yaml \
-v /volume2/Media/RSS/feeds.txt:/app/input/feeds.txt \
-e PUID=1033 \
-e PGID=100 \
-p 8001:8001 \
-p 8501:8501 \
--restart always \
fabriziosalmi/uglyfeed:latest
```

View File

@ -2,6 +2,7 @@
### qbittorrent - Descargas ### qbittorrent - Descargas
*** ***
Gestor de Torrents
| /volume2/data/torrents | /data/torrents | | /volume2/data/torrents | /data/torrents |
| ------------------------ | -------------- | | ------------------------ | -------------- |
@ -11,18 +12,35 @@
### downloadstation - Descargas ### downloadstation - Descargas
*** ***
Parte de Synology NAS
/volume2/data/torrents /volume2/data/torrents
### lidarr - Musica
### Lidarr - Musica
*** ***
Permite gestionar la descarga de las musicas
| Source Path | Destination Path | | Source Path | Destination Path |
| ---------------------- | ---------------- | | ---------------------- | ---------------- |
| /volume2/data/torrents | /data/torrents | | /volume2/data/torrents | /data/torrents |
| /volume2/Media/Musica | /music | | /volume2/Media/Musica | /music |
```bash
### radarr - Peliculas : 7878 docker run -d --name=lidarr \
-p 8686:8686 \
-e PUID=1033 \
-e PGID=100 \
-e TZ=Europe/Rome \
-v /volume1/docker/lidarr:/config \
-v /volume1/docker/lidarr/music:/music \
-v /volume2/data/torrents/music:/musictorrent \
-v /volume1/docker/lidarr/downloads:/downloads \
--restart always \
ghcr.io/linuxserver/lidarr
```
### Radarr - Peliculas : 7878
*** ***
Permite buscar y gestionar las descargas de las Peliculas
| Source Path | Destination Path | | Source Path | Destination Path |
| -------------------------------------------------------------- | -------------------------------- | | -------------------------------------------------------------- | -------------------------------- |
@ -30,24 +48,60 @@
| /volume2/Media/Peliculas | /movies | | /volume2/Media/Peliculas | /movies |
| API | 0896fe49dbb646a8b3b6e8ed0b747095 | | API | 0896fe49dbb646a8b3b6e8ed0b747095 |
| [Radarr](https://radarr.casaparma.dscloud.me/settings/general) | | | [Radarr](https://radarr.casaparma.dscloud.me/settings/general) | |
```bash
docker run -d \
--name=radarr \
-e PUID=1033 \
-e PGID=100 \
-e TZ=Europe/Rome \
-p 7878:7878 \
-v /volume1/docker/appdata/radarr:/config \
-v /volume2/data:/movies `#optional` \
-v /volume2/data/torrents:/downloads `#optional` \
--restart unless-stopped \
lscr.io/linuxserver/radarr:latest
```
### Whisper : 9005 - Audio a Texto ### Whisper : 9005 - Audio a Texto
*** ***
Permite generar los subtitulos de las peliculas
| Source Path | Destination Path | | Source Path | Destination Path |
| ----------------------------- | ---------------- | | ----------------------------- | ---------------- |
| /volume1/docker/whisper/cache | /root/.cache/ | | /volume1/docker/whisper/cache | /root/.cache/ |
```bash
docker run -d --name=whisper \
-p 9005:9000 \
-e PUID=1026 \
-e PGID=100 \
-e TZ=Europe/Rome \
-e ASR_MODEL=base \
-e ASR_ENGINE=openai_whisper \
-v /volume1/docker/whisper/cache:/root/.cache/ \
onerahmet/openai-whisper-asr-webservice:latest
```
### Bazarr : 6767 - Subtitulos ### Bazarr : 6767 - Subtitulos
*** ***
Permite descargar los Subtitulos de las peliculas
| Source Path | Destination Path | | Source Path | Destination Path |
| ----------------------------- | ---------------- | | ----------------------------- | ---------------- |
| /volume2/Media/Peliculas | /movies | | /volume2/Media/Peliculas | /movies |
| /volume1/docker/bazarr/config | /config | | /volume1/docker/bazarr/config | /config |
```bash
docker run -d --name=bazarr \
-p 6767:6767 \
-e PUID=1033 \
-e PGID=100 \
-e TZ=Europe/Rome \
-v /volume1/docker/bazarr/config:/config \
-v /volume2/data:/movies \
-v /volume2/Media/Series:/series \
--restart=always \
ghcr.io/linuxserver/bazarr
```
### Sonarr : 8989 - Series de Tv ### Sonarr : 8989 - Series de Tv
*** ***
Permite descargar las Series
| Source Path | Destination Path | | Source Path | Destination Path |
| -------------------------------------------------------------------- | -------------------------------- | | -------------------------------------------------------------------- | -------------------------------- |
@ -56,32 +110,52 @@
| /volume1/docker/sonarr/config | /config | | /volume1/docker/sonarr/config | /config |
| API | 98f6f62c667946beb60d1f11b20e7fc8 | | API | 98f6f62c667946beb60d1f11b20e7fc8 |
| [sonarr.casaparma.dscloud.me/](https://sonarr.casaparma.dscloud.me/) | | | [sonarr.casaparma.dscloud.me/](https://sonarr.casaparma.dscloud.me/) | |
```bash
docker run -d --name=sonarr \
-p 8989:8989 \
-e PUID=1033 \
-e PGID=100 \
-e TZ=Europe/Roma \
-v /volume1/docker/sonarr/config:/config \
-v /volume2/Series:/series \
-v /volume2/data/torrents:/data/torrents \
--restart always \
ghcr.io/linuxserver/sonarr
```
### Prowlarr - Gestor de indices ### Prowlarr - Gestor de indices
*** ***
[Login - Prowlarr](https://prowlarr.casaparma.dscloud.me) [Login - Prowlarr](https://prowlarr.casaparma.dscloud.me)
Permiter gestionar los buscadores de torrents
### jellyfin - Media Server ```bash
docker run -d --name=prowlarr \
-p 9696:9696 \
-e PUID=1033 \
-e PGID=100 \
-e TZ=Europe/Rome \
-v /volume1/docker/prowlarr:/config \
--restart always \
ghcr.io/linuxserver/prowlarr:develop
```
### Jellyfin - Media Server
*** ***
```bash ```bash
docker run -d --name=tdarr \ docker run -d --name=jellyfin \
-p 8265:8265 \
-p 8266:8266 \
-v /volume2/Media/Peliculas:/movies \ -v /volume2/Media/Peliculas:/movies \
-v /volume1/docker/tdarr/config:/config \ -v /volume1/docker/jellyfin/config:/config \
-v /volume2/Media/Musica:/music \ -v /volume2/Media/Musica:/music \
-v /volume1/docker/jellyfin/cache:/cache \ -v /volume1/docker/jellyfin/cache:/cache \
-v /volume2/Media/Series:/series \ -v /volume2/Media/Series:/series \
-e TZ=Europe/Roma \
-e PUID=1033 \ -e PUID=1033 \
-e PGID=100 \ -e PGID=100 \
--group-add 937 \ --group-add 937 \
--net=host \
--device /dev/dri/renderD128:/dev/dri/renderD128 \ --device /dev/dri/renderD128:/dev/dri/renderD128 \
--device /dev/dri/card0:/dev/dri/card0 \ --device /dev/dri/card0:/dev/dri/card0 \
--restart always \ --restart always \
ghcr.io/haveagitgat/tdarr:latest jellyfin/jellyfin
``` ```
@ -98,6 +172,7 @@ ghcr.io/haveagitgat/tdarr:latest
### Tdarr ### Tdarr
*** ***
Sistema para recodificar las peliculas muy complicado de usar - ==DESINSITALADO==
```bash ```bash
docker run -d --name=tdarr \ docker run -d --name=tdarr \
@ -123,3 +198,57 @@ ghcr.io/haveagitgat/tdarr:latest
| /volume2/Media/Peliculas | /movies | | /volume2/Media/Peliculas | /movies |
| /volume2/Media/Musica | /music | | /volume2/Media/Musica | /music |
| /volume2/Media/Series | /series | | /volume2/Media/Series | /series |
| | |
### Unmanic
***
Permite recodificar las peliculas y cambiar la resolucion
```bash
docker run -d --name=unmanic \
-p 8888:8888 \
-v /volume1/docker/unmanic/config:/config \
-v /volume1/docker/unmanic/library:/library \
-v /volume1/docker/unmanic/cache:/tmp/unmanic \
-v /volume2/Media/Peliculas:/movies \
-v /volume2/Media/Musica:/music \
-v /volume2/Media/Series:/series \
-e TZ=Europe/Roma \
-e PUID=1033 \
-e PGID=100 \
--group-add 937 \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
--device /dev/dri/card0:/dev/dri/card0 \
--restart always \
josh5/unmanic:latest
```
### mnamer
***
Software python para buscar los mejores nombres de las peliculas
```bash
conda activate basico
(basico) Y:\>mnamer --language=es Peliculas
```
### tinyMediaManager
***
Permite administrar las peliculas y series con sus metadatos
[tinyMediaManager.lnk](file:///C:%5CUsers%5Cmigue%5CAppData%5CRoaming%5CMicrosoft%5CWindows%5CStart%20Menu%5CPrograms%5CtinyMediaManager.lnk)
### MusicBrainz Picard
***
Permite administrar los nombres de los archivos de musica y las carpetas idenatificando la huella de cada cancion
[MusicBrainz Picard.lnk](file:///C:%5CProgramData%5CMicrosoft%5CWindows%5CStart%20Menu%5CPrograms%5CMusicBrainz%20Picard.lnk)

View File

@ -0,0 +1,204 @@
***
## Shrocuts
***
* `Ctrl+K Ctrl + 0` : para minimizar o colapsar todas las funciones de una sola vez
* `Shift + Ctrp + P` : Add ignore -> Python : antes de crear el repositorio
# Python Package Management: pip and pipreqs Commands Reference
## pip - Python Package Installer
### Basic Commands
- **Install a package**:
```
pip install package_name
```
- **Install specific version**:
```
pip install package_name==1.2.3
```
- **Install multiple packages**:
```
pip install package1 package2
```
- **Install from requirements file**:
```bash
pip install -r requirements.txt
```
- **Upgrade a package**:
```
pip install --upgrade package_name
```
- **Uninstall a package**:
```
pip uninstall package_name
```
### Package Information
- **List installed packages**:
```
pip list
```
- **Show package details**:
```
pip show package_name
```
- **Search for packages**:
```
pip search query
```
- **Check for outdated packages**:
```
pip list --outdated
```
### Requirements Files
- **Generate requirements file from installed packages**:
```
pip freeze > requirements.txt
```
### Environment Options
- **Install to user directory**:
```
pip install --user package_name
```
- **Install without dependencies**:
```
pip install --no-deps package_name
```
- **Install from alternative index**:
```
pip install --index-url URL package_name
```
- **Install in development mode**:
```
pip install -e .
```
### Cache Management
- **Clear pip cache**:
```
pip cache purge
```
- **Show pip cache info**:
```
pip cache info
```
## pipreqs - Generate Requirements Files
Pipreqs automatically generates requirements.txt files based on imports in your project.
### Installation
```
pip install pipreqs
```
### Basic Usage
- **Generate requirements.txt in current directory**:
```
pipreqs .
```
- **Generate for specific project path**:
```
pipreqs /path/to/project
```
### Additional Options
- **Force overwrite existing requirements.txt**:
```
pipreqs --force .
```
- **Print dependencies without creating a file**:
```
pipreqs --print .
```
- **Use different filename**:
```
pipreqs --savepath requirements-dev.txt .
```
- **Exclude specific directories**:
```
pipreqs --ignore tests,docs .
```
- **Use different PyPI server**:
```
pipreqs --pypi-server URL .
```
- **Use proxy**:
```
pipreqs --proxy URL .
```
- **Debug mode**:
```
pipreqs --debug .
```
- **Get help**:
```
pipreqs --help
```

View File

@ -1,6 +0,0 @@
### Commands:
***
conda create -n test-env
conda activate test-env

View File

@ -0,0 +1,218 @@
### Verificar la instalación
```bash
conda --version
```
### Actualizar Conda
```bash
conda update conda
```
## Gestión de Entornos
### Crear un nuevo entorno
```bash
# Sintaxis básica
conda create --name miEntorno
# Crear entorno con versión específica de Python
conda create --name miEntorno python=3.9
# Crear entorno con paquetes específicos
conda create --name miEntorno python=3.9 numpy pandas matplotlib
```
### Activar un entorno
```bash
# En Windows
conda activate miEntorno
# En Linux/macOS (versiones antiguas de conda)
source activate miEntorno
```
### Desactivar el entorno actual
```bash
conda deactivate
```
### Listar todos los entornos
```bash
conda env list
# o
conda info --envs
```
### Eliminar un entorno
```bash
conda remove --name miEntorno --all
```
### Clonar un entorno
```bash
conda create --name nuevoEntorno --clone entornoExistente
```
## Gestión de Paquetes
### Instalar paquetes
```bash
# En el entorno actual
conda install numpy
# En un entorno específico
conda install --name miEntorno numpy
# Instalar una versión específica
conda install numpy=1.20.3
# Instalar múltiples paquetes
conda install numpy pandas matplotlib
```
### Buscar paquetes disponibles
```bash
conda search numpy
```
### Listar paquetes instalados
```bash
# En el entorno actual
conda list
# En un entorno específico
conda list --name miEntorno
```
### Actualizar paquetes
```bash
# Actualizar un paquete específico
conda update numpy
# Actualizar todos los paquetes
conda update --all
```
### Eliminar paquetes
```bash
conda remove numpy
```
## Exportar e Importar Entornos
### Exportar entorno a un archivo
```bash
# Exportar el entorno actual
conda env export > environment.yml
# Exportar un entorno específico
conda env export --name miEntorno > environment.yml
```
### Crear entorno desde un archivo
```bash
conda env create -f environment.yml
```
## Canales de Instalación
### Agregar canales
```bash
# Agregar canal
conda config --add channels conda-forge
# Listar canales configurados
conda config --show channels
```
### Instalar desde un canal específico
```bash
conda install --channel conda-forge matplotlib
```
## Información del Sistema
### Ver información de conda
```bash
conda info
```
### Limpiar caché de conda (archivos temporales)
```bash
conda clean --all
```
## Solución de Problemas
### Revisar posibles conflictos
```bash
conda update --all --dry-run
```
### Forzar reinstalación de paquetes
```bash
conda install --force-reinstall numpy
```
### Verificar integridad del entorno
```bash
conda verify
```
## Ejemplos de Flujo de Trabajo
### Crear y configurar un entorno para ciencia de datos
```bash
# Crear el entorno
conda create --name dataScience python=3.9
# Activar el entorno
conda activate dataScience
# Instalar paquetes esenciales
conda install numpy pandas matplotlib scikit-learn jupyter
# Ejecutar Jupyter Notebook
jupyter notebook
```
### Crear un entorno para desarrollo web
```bash
# Crear el entorno
conda create --name webDev python=3.9
# Activar el entorno
conda activate webDev
# Instalar paquetes
conda install flask requests
pip install flask-sqlalchemy
# Ejecutar la aplicación
python app.py
```

View File

@ -6,9 +6,12 @@ Backups: [Setups](file:///C:%5CTrabajo%5CManuales%5CMikrotik%5CSetups)
### Para hacer backup de texto: ### Para hacer backup de texto:
`/export show-sensitive file=text_backup.rsc` ```bash
o /export show-sensitive file=text_backup.rsc
``` ```
```bash
/export file=myconfig /export file=myconfig
``` ```

View File

@ -0,0 +1,208 @@
***
## For enable more nodes:
***
* Go to [Zerotier Central](https://my.zerotier.com/network/233ccaac2781a07b)
![[Pasted image 20250429124724.png]]
* Authorize
* (1) can change the name
## For the first Setup - the steps needed on the Router are:
***
Based on your current configuration and what you need to do, here are the necessary steps:
1. **Add the ZeroTier interface to the LAN list**:
```
/interface list member add interface=ap2 list=LAN
```
2. **Assign the ZeroTier IP address to the router** (I don't see this address assigned in the configuration):
```
/ip address add address=192.168.193.62/24 interface=ap2
```
3. **Configure routes on the router for correct routing from ZeroTier to local subnets**:
```
/ip route add dst-address=10.1.20.0/24 gateway=bridge
/ip route add dst-address=10.1.33.0/24 gateway=bridge
```
4. **Add NAT rules to mask traffic between networks** (similar to what you already have for the VPN network):
```
/ip firewall nat add action=masquerade chain=srcnat src-address=192.168.193.0/24 dst-address=10.1.20.0/24
/ip firewall nat add action=masquerade chain=srcnat src-address=192.168.193.0/24 dst-address=10.1.33.0/24
```
5. **Ensure firewall rules allow ZeroTier traffic to internal networks**:
```
/ip firewall filter add action=accept chain=forward place-before=12 src-address=192.168.193.0/24 dst-address=10.1.20.0/24
/ip firewall filter add action=accept chain=forward place-before=12 src-address=192.168.193.0/24 dst-address=10.1.33.0/24
```
## Layer 2 - Setup on the Router
***
Para habilitar el acceso a nivel de capa 2 (Layer 2) a través de ZeroTier en su router MikroTik, necesitará configurar un puente entre su interfaz ZeroTier y su red local. Esto permitirá que el tráfico de Ethernet (capa 2) pase a través de ZeroTier, permitiendo cosas como descubrimiento de dispositivos, broadcast, multicast, etc.
Aquí está la configuración que necesita para habilitar la funcionalidad de capa 2 en su router MikroTik con ZeroTier:
1. **Primero, asegúrese de que su red ZeroTier tenga habilitada la función de Ethernet bridging en el panel de control ZeroTier Central**
2. **Configure la interfaz ZeroTier para permitir el bridge:**
```
/zerotier interface set ap2 allow-ethernet=yes
```
3. **Añada la interfaz ZeroTier al bridge existente:**
```
/interface bridge port add bridge=bridge interface=ap2
```
4. **Configure las funciones de bridge apropiadas para permitir el tráfico de broadcast y multicast:**
```
/interface bridge settings set use-ip-firewall=yes use-ip-firewall-for-pppoe=yes use-ip-firewall-for-vlan=yes
```
5. **Asegúrese de que la interfaz ZeroTier esté en la lista LAN (como ya habíamos discutido):**
```
/interface list member add interface=ap2 list=LAN
```
6. **Configure el firewall para permitir el tráfico de bridge:**
```
/ip firewall filter add action=accept chain=forward place-before=12 in-interface=ap2 out-interface=bridge
/ip firewall filter add action=accept chain=forward place-before=12 in-interface=bridge out-interface=ap2
```
7. **Es posible que necesite ajustar o crear reglas DHCP para permitir que los dispositivos en la red ZeroTier obtengan direcciones IP:**
```
/ip dhcp-server set defconf disabled=no
```
Esta configuración permite que:
1. El tráfico de capa 2 (como broadcast y multicast) pase entre su red ZeroTier y su red local
2. Los dispositivos conectados a través de ZeroTier aparezcan como si estuvieran físicamente en su LAN
3. Se permita el descubrimiento de dispositivos y servicios que utilizan protocolos de capa 2
**Consideraciones importantes:**
- El bridging a nivel de capa 2 aumenta significativamente el tráfico en la red ZeroTier, ya que todo el tráfico de broadcast se transmitirá a través de ella
- Si tiene muchos dispositivos en su LAN, puede experimentar cierta latencia o degradación del rendimiento
- La seguridad es una consideración importante: al habilitar el bridging de capa 2, está extendiendo su red local a todos los dispositivos ZeroTier, así que asegúrese de que todos los dispositivos conectados sean confiables
Esta configuración debería permitirle acceder a su red local a nivel de capa 2 a través de ZeroTier, lo que le proporcionará una experiencia de red más integrada y completa, como si estuviera físicamente conectado a su LAN.
## Enable - Disable Layer 2
***
### Opción 1: Utilizando comandos directos para activar/desactivar
**Para activar el bridging de Layer 2:**
```
/interface bridge port add bridge=bridge interface=ap2
```
**Para desactivar el bridging de Layer 2:**
```
/interface bridge port remove [find interface=ap2]
```
### Use a port with a different IP range - Port5 with 192.168.1.x
***
```bash
# Quitar ether5 del bridge actual
/interface bridge port remove [find interface=ether5]
# Crear nuevo bridge para ether5
/interface bridge add name=bridge_ether5 protocol-mode=none
/interface bridge port add bridge=bridge_ether5 interface=ether5
# Asignar IP al nuevo bridge
/ip address add address=192.168.1.1/24 interface=bridge_ether5
# Configurar NAT
/ip firewall nat add action=masquerade chain=srcnat src-address=192.168.1.0/24
/ip firewall nat add action=masquerade chain=srcnat dst-address=192.168.1.0/24 src-address=192.168.193.0/24
# Agregar reglas de firewall para permitir tráfico entre interfaces
/ip firewall filter add action=accept chain=forward in-interface=bridge_ether5 out-interface=bridge
/ip firewall filter add action=accept chain=forward in-interface=bridge out-interface=bridge_ether5
# Agregar ruta
/ip route add dst-address=192.168.1.0/24 gateway=bridge_ether5
```
## IP4 - Layer 3 - Rules on Zero-Tier server
```bash
#
# This is a default rule set that allows IPv4 and IPv6 traffic but otherwise
# behaves like a standard Ethernet switch:
drop
not ethertype ipv4
and not ethertype arp
and not ethertype ipv6
;
# Accept anything else. This is required since default is 'drop':
accept;
# For more information on how rules work visit: https://docs.zerotier.com/rules/
```
### Layer 2 - Rules on Zero-Tier server
```bash
# Permitir PROFINET (ethertype 0x8892)
accept ethertype 0x8892;
accept ethertype 0x0806;
# Permitir LLDP (ethertype 0x88CC)
accept ethertype 0x88CC;
# Permitir direcciones multicast específicas para LLDP
accept macdest 01:80:C2:00:00:0E; # Multicast principal para LLDP
accept macdest 01:80:C2:00:00:00; # Multicast alternativa que algunos dispositivos usan
accept macdest 01:80:C2:00:00:03; # Otra multicast alternativa
# Permitir protocolos básicos necesarios
accept ethertype arp; # ARP (necesario para IPv4)
accept ethertype ipv4; # IPv4 (probablemente necesario para configuración)
accept ethertype 0x800; # IPv4 (forma alternativa)
# Opcional: permitir multicast PROFINET
accept macdest 01:0E:CF:00:00:00; # PROFINET DCP multicast
# Opcional: permitir tráfico de descubrimiento PROFINET (multicast)
accept chr multicast;
# Rechazar todo lo demás
#drop;
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -6,6 +6,8 @@
administrator : 9-3urKW* administrator : 9-3urKW*
sidel : _Ymk47h2&M sidel : _Ymk47h2&M
Customer: sidel Customer: sidel
Operator: operator
## ULTRA VNC ## ULTRA VNC
@ -31,3 +33,83 @@ SAFETY Filler Utilizzata per RVE045 e REV128
![[Pasted image 20250401162219.png]] ![[Pasted image 20250401162219.png]]
Password Maintenance 4685 Password Maintenance 4685
## OLD
***
Passwords:
#### ALFA:
***
46100
140863
3441
3760
358
100
CMZ: 1412 o 1000 o 2000 o 3441
#### SIG/SIDEL:
***
100
9991
#### Paneles uniOP Grlosch
***
Admin
SA
9991
Supervisor
DIR
DIR
Bohrer GROLSH 9393
ARIES GRLOSH 9906
ZENON:
========================================================
NIVEL USERID PASSWORD LEVEL
OPERATOR op 200 0
INSPECTOR ins 8888 0,1
SUPERVISOR dir dir 0,1,2,3,4
SIG sa 9991 0-31
Krones Labellers and CAN Inspector:
OP password: 12321
Heuft Inspectors:
password for electrical maintainance: 5678
password for system manager: 8991
Logopack:
“operator”: 3339
superuser: 1066
Bortolin:
OP password: 808
Prisma:
password: KARIN
Bohrer:
OP HMI: 9393
Bottle Washer:
OP (HMI application) password: 123 or 456
All SIG Siemens Touch PCs (system):
User name: administrator
Password: sysop
Aries:
OP password: 9906

View File

@ -0,0 +1,144 @@
***
## Configurazione Attuale in ZeroTier Central
- **Rete ZeroTier**: Configurata con routing
- **Rotta configurata**: 172.16.0.0/16 via 10.147.18.24
- **Home Assistant**: IP ZeroTier 10.147.18.24
- **Impostazioni nodo Home Assistant**: "Allow Ethernet Bridging" abilitato
![[Pasted image 20250501184158.png]]
Aggiungere questa ruta o due o tre tipo 172.16.==1==.0/24 via 10.147.18.24 + 172.16.==17==.0/24 via 10.147.18.24
![[Pasted image 20250501184305.png]]
## Considerazioni sulle Subnet
La subnet 172.16.0.0/16 è molto ampia (65.536 indirizzi IP). Per una rete domestica, questo potrebbe essere eccessivo e presenta alcuni svantaggi:
- **Sicurezza**: Espone potenzialmente un intervallo molto più ampio di indirizzi rispetto a quelli necessari
- **Prestazioni**: Le tabelle di routing con subnet più specifiche funzionano in modo più efficiente
- **Organizzazione**: È più difficile gestire uno spazio di indirizzi così grande
### Alternative consigliate:
- **172.16.x.0/24**: Dove "x" sarebbe un numero specifico per la rete locale (come 172.16.1.0/24). Questo fornirebbe 256 indirizzi, sufficienti per la maggior parte delle reti domestiche.
- **172.16.0.0/20**: Se sono realmente necessari più indirizzi, questo fornirebbe 4.096 IP, che è comunque molto più specifico di /16.
- Aggiungere questa ruta o due o tre tipo 172.16.==1==.0/24 via 10.147.18.24 + 172.16.==17==.0/24 via 10.147.18.24
## Configurazione Necessaria su Home Assistant
### 1. Abilitare l'IP Forwarding
```bash
echo 1 > /proc/sys/net/ipv4/ip_forward
```
* Questo nel tuo caso già e aposto.
Per renderlo permanente, modificare `/etc/sysctl.conf` e aggiungere:
```
net.ipv4.ip_forward=1
```
### 2. Identificare le Interfacce di Rete
Prima di configurare le regole NAT e firewall, è necessario identificare le interfacce di rete corrette:
```bash
# Mostra tutte le interfacce di rete
ip addr show
```
In questo output:
- L'interfaccia ZeroTier avrà un nome come `zt0`, `zt1` o `ztxxxxx` (dove xxxxx è parte dell'ID di rete)
- L'interfaccia di rete locale potrebbe NON essere `eth0`. Nei sistemi moderni, potrebbe essere chiamata:
- `enp3s0`, `enp0s25`, `ens33` o simili (per Ethernet cablata)
- `wlan0` o `wlp3s0` (per WiFi)
- `br0` o `hassio` (se c'è un bridge di rete configurato)
- `docker0` (se Docker è installato)
È importante identificare correttamente l'interfaccia che connette Home Assistant alla rete locale (quella che ha l'indirizzo IP della rete locale, es. 172.16.x.x).
### 3. Regole NAT
```bash
# Attivare MASQUERADE per consentire ai pacchetti dalla rete ZeroTier di uscire verso la rete locale
iptables -t nat -A POSTROUTING -s 10.147.18.0/24 -d 172.16.0.0/16 -j MASQUERADE
# Se si desidera anche l'accesso a Internet, aggiungere (sostituire enp3s0 con l'interfaccia di rete locale reale):
iptables -t nat -A POSTROUTING -s 10.147.18.0/24 -o enp3s0 -j MASQUERADE
# Per essere più specifici con l'interfaccia ZeroTier (sostituire zt0 con l'interfaccia ZeroTier reale):
iptables -t nat -A POSTROUTING -i zt0 -o enp3s0 -j MASQUERADE
```
**non me ricordo se era enp3s0 pero me ricordo che non era eth0**
### 4. Regole Firewall
```bash
# Consentire il traffico di inoltro dalla rete ZeroTier alla rete locale
# (sostituire zt0 con l'interfaccia ZeroTier reale, enp3s0 con l'interfaccia di rete locale)
iptables -A FORWARD -i zt0 -o enp3s0 -s 10.147.18.0/24 -d 172.16.0.0/16 -j ACCEPT
# Consentire il traffico di ritorno
# (sostituire enp3s0 con l'interfaccia di rete locale, zt0 con l'interfaccia ZeroTier)
iptables -A FORWARD -i enp3s0 -o zt0 -s 172.16.0.0/16 -d 10.147.18.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
```
### 5. Salvare le Regole per la Persistenza dopo il Riavvio
```bash
# Su sistemi basati su Debian
iptables-save > /etc/iptables/rules.v4
# Oppure per Home Assistant OS, potrebbe essere necessario:
iptables-save > /config/scripts/iptables-rules
```
Per rendere queste regole permanenti in Home Assistant, puoi creare un file in `/config/scripts/apply-iptables.sh`:
```bash
#!/bin/bash
# Script per applicare le regole iptables all'avvio
# Abilitare l'IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# Ripristinare le regole salvate
iptables-restore < /config/scripts/iptables-rules
exit 0
```
Quindi rendilo eseguibile:
```bash
chmod +x /config/scripts/apply-iptables.sh
```
E configuralo per l'esecuzione all'avvio in Home Assistant aggiungendo in `configuration.yaml`:
```yaml
shell_command:
apply_iptables: bash /config/scripts/apply-iptables.sh
automation:
- alias: Apply iptables at startup
trigger:
platform: homeassistant
event: start
action:
service: shell_command.apply_iptables
```
### 5. Script di Avvio
Creare uno script per applicare queste regole dopo il riavvio. Può essere aggiunto alla configurazione di Home Assistant per l'esecuzione automatica.
## Note Importanti:
- Regolare `10.147.18.0/24` in base alla subnet effettiva della rete ZeroTier
- Modificare `eth0` con l'interfaccia di rete reale che Home Assistant utilizza per connettersi alla rete locale
- Si consiglia di utilizzare una subnet più specifica per la rete locale (ad esempio 172.16.1.0/24 invece di 172.16.0.0/16)
- Potrebbe essere necessario adattare le regole in base alla configurazione specifica della rete

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,4 @@
![[Pasted image 20250428204503.png]]

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,375 @@
## Estates
***
```plantuml
@startuml BlenderOperationalStates
skinparam state {
BackgroundColor<<Production>> LightGreen
BackgroundColor<<CIP>> LightBlue
BackgroundColor<<Rinse>> LightYellow
BackgroundColor<<Startup>> LightPink
}
[*] --> Idle
state Idle
state "Production Mode" as Production <<Production>> {
state "First Production" as FirstProd
state "Normal Production" as NormalProd
state "Production Runout" as RunOut
FirstProd --> NormalProd : First production\ncompleted
NormalProd --> RunOut : End production\nrequested
RunOut --> FirstProd : New recipe
}
state "CIP Mode" as CIP <<CIP>> {
state "Tank Cleaning" as TankCIP
state "Line Cleaning" as LineCIP
TankCIP --> LineCIP
}
state "Rinse Mode" as Rinse <<Rinse>> {
state "Cold Rinse" as ColdRinse
state "Hot Rinse" as HotRinse
ColdRinse --> HotRinse
}
state "Startup Sequence" as Startup <<Startup>> {
state "Deaerator Startup" as DeaerStartup
state "Syrup Startup" as SyrupStartup
state "Blend/Fill Startup" as BlendStartup
DeaerStartup --> SyrupStartup
SyrupStartup --> BlendStartup
}
Idle --> Startup : Start system
Startup --> FirstProd : Startup complete
Production --> Rinse : Production complete
Rinse --> CIP : Rinse complete
CIP --> Idle : CIP complete
Production --> CIP : Emergency CIP
Rinse --> Idle : Emergency stop
@enduml
```
## Calculations
***
```plantuml
@startuml BlenderPIDCalculationFlow
skinparam activity {
BackgroundColor<<Recipe>> PaleGreen
BackgroundColor<<Calculation>> LightBlue
BackgroundColor<<Decision>> LightYellow
BackgroundColor<<Output>> Pink
BorderColor Black
}
start
:Initialize variables;
partition "Recipe Parameters" {
:Determine beverage type;
if (Sugar beverage?) then (yes)
:Calculate syrup percentage based on Brix;
note right: gActualSyrupPerc = (ProductBrix + ProdBrixOffset) / gActualSyrupBrix
else (no)
:Calculate syrup percentage based on ratio;
note right: gActualSyrupPerc = 1 / (Ratio + 1)
endif
:Calculate water percentage;
note right: gActualWaterPerc = 1 - gActualSyrupPerc
:Calculate mixing ratio;
note right: gActualRatioM = gActualWaterPerc / gActualSyrupPerc
}
partition "Flow Setpoint Calculations" {
if (Production mode?) then (yes)
:Calculate CO2 equilibrium pressure;
:Set tank pressure setpoint based on mode;
:Calculate target production rate;
:Apply slew rate limiting;
:Calculate water flow setpoint;
note right: gSP_H2O = gActual_Prod_SP / (gActualSP_RatioVol + 1.0) * gActualSP_RatioVol
:Check for critical blending conditions;
:Calculate syrup flow setpoint;
note right: gSP_SYR = (gSyrSPRef + gSyrSPTemp) * gActualSyrupDens
:Calculate CO2 setpoint;
if (Second gas injection enabled?) then (yes)
:Calculate second gas setpoint;
else (no)
:Set second gas setpoint to zero;
endif
else (no)
:Set all flow setpoints to zero;
endif
}
partition "Tank Level Controls" {
:Calculate syrup tank level setpoint;
:Calculate deaeration tank level setpoint;
:Calculate storage tank level setpoint;
}
partition "Temperature Controls" {
:Calculate water and product temperature setpoints;
}
stop
@enduml
```
## Components
***
```plantuml
@startuml BlenderSystemComponents
skinparam component {
BackgroundColor LightCyan
BorderColor Black
}
package "Blender System" {
[Syrup Flow Control] as SyrupControl
[Water Flow Control] as WaterControl
[CO2 Injection] as CO2Control
[Second Gas Injection] as Gas2Control
[Deaeration System] as DeaerSystem
[Temperature Control] as TempControl
[Tank Level Control] as LevelControl
[Pressure Control] as PressControl
}
package "BlenderPID_PIDSPCalc" as PIDCalc {
[Ratio Calculator] as RatioCalc
[Water SP Calculator] as WaterSPCalc
[Syrup SP Calculator] as SyrupSPCalc
[CO2 SP Calculator] as CO2SPCalc
[Level SP Calculator] as LevelSPCalc
[Temperature SP Calculator] as TempSPCalc
[Critical Condition Detection] as CritDetect
}
package "Input Parameters" {
[Recipe Parameters] as Recipe
[Production Settings] as ProdSettings
[System Constants] as Constants
}
package "PID Controllers" {
[RMM301 PID] as WaterPID
[RMP302 PID] as SyrupPID
[RVM301 PID] as PressurePID
[RVN304 PID] as DeaerPID
}
Recipe --> RatioCalc
ProdSettings --> WaterSPCalc
Constants --> RatioCalc
RatioCalc --> WaterSPCalc
RatioCalc --> SyrupSPCalc
RatioCalc --> CO2SPCalc
WaterSPCalc --> WaterPID
SyrupSPCalc --> SyrupPID
CO2SPCalc --> CO2Control
LevelSPCalc --> LevelControl
TempSPCalc --> TempControl
WaterPID --> WaterControl
SyrupPID --> SyrupControl
PressurePID --> PressControl
DeaerPID --> DeaerSystem
WaterControl --> CritDetect
SyrupControl --> CritDetect
CritDetect --> SyrupSPCalc : Correction feedback
@enduml
```
### Sequence
***
```plantuml
@startuml BlenderSequence
skinparam sequence {
LifeLineBackgroundColor LightYellow
ParticipantBackgroundColor LightCyan
}
participant "BlenderPID_PIDSPCalc" as Calc
participant "Water Flow Controller" as Water
participant "Syrup Flow Controller" as Syrup
participant "CO2 Controller" as CO2
participant "Tank Level Controller" as Level
participant "Temperature Controller" as Temp
activate Calc
== Startup Phase ==
Calc -> Level : Set deaerator tank level setpoint
activate Level
Level -> Calc : Level feedback
deactivate Level
Calc -> Temp : Set target water temperature
activate Temp
Temp -> Calc : Temperature feedback
deactivate Temp
== First Production Phase ==
Calc -> Water : Set initial water flow
activate Water
Water -> Calc : Flow measurement
deactivate Water
Calc -> Syrup : Set initial syrup flow (with extra syrup)
activate Syrup
Syrup -> Calc : Flow measurement
deactivate Syrup
Calc -> CO2 : Set CO2 injection (with extra CO2)
activate CO2
CO2 -> Calc : CO2 measurement
deactivate CO2
== Normal Production Phase ==
loop While in production mode
Calc -> Water : Adjust water flow setpoint
activate Water
Water -> Calc : Flow measurement
deactivate Water
Calc -> Syrup : Adjust syrup flow setpoint
activate Syrup
Syrup -> Calc : Flow measurement
alt Critical blending detected
Calc -> Syrup : Apply correction factor
end
deactivate Syrup
Calc -> CO2 : Adjust CO2 setpoint
activate CO2
CO2 -> Calc : CO2 measurement
deactivate CO2
Calc -> Level : Monitor and maintain target levels
activate Level
Level -> Calc : Level feedback
deactivate Level
end
== Runout Phase ==
Calc -> Water : Ramp down water flow
Calc -> Syrup : Ramp down syrup flow
Calc -> CO2 : Reduce CO2 injection
Calc -> Level : Adjust tank levels for end of production
deactivate Calc
@enduml
```
## Clases
***
```plantuml
@startuml BlenderClassDiagram
skinparam class {
BackgroundColor LightCyan
BorderColor Black
}
class BlenderPID_PIDSPCalc {
+Execute()
}
class RecipeParameters {
+ProductBrix: REAL
+ProdBrixOffset: REAL
+SyrupBrix: REAL
+Ratio: REAL
+CO2Vols: REAL
+CO2Fact: REAL
+GAS2Vols: REAL
+SP_ProdTemp: REAL
+ProdTankPress: REAL
}
class SystemVariables {
+gActualSyrupPerc: REAL
+gActualWaterPerc: REAL
+gActual_RatioM: REAL
+gActual_Prod_SP: REAL
+gActual_Prod_Flow: REAL
+gSP_H2O: REAL
+gSP_SYR: REAL
+gSP_CO2: REAL
+gSP_GAS2: REAL
+gCriticalBlending: BOOL
}
class PIDControllers {
+RMM301: PID
+RMP302: PID
+RVM301: PID
+RVN304: PID
}
class OperationModes {
+gBlenderProdMode: BOOL
+gBlenderRinseMode: BOOL
+gBlenderCIPMode: BOOL
+gBlenderStableFlow: BOOL
+First_Production: BOOL
}
class TankSetpoints {
+gSP_SYR_Level: REAL
+gSP_DEAIR_Level: REAL
+gSP_STORAGE_Level: REAL
+gSP_H2O_Temperature: REAL
+gSP_Prod_Temperature: REAL
}
BlenderPID_PIDSPCalc -- RecipeParameters
BlenderPID_PIDSPCalc -- SystemVariables
BlenderPID_PIDSPCalc -- PIDControllers
BlenderPID_PIDSPCalc -- OperationModes
BlenderPID_PIDSPCalc -- TankSetpoints
@enduml
```

View File

@ -0,0 +1,653 @@
***
%%
Obsidean Requirements
obsidian://show-plugin?id=obsidian-plantuml
obsidian://show-plugin?id=obsidian-mindmap-nextgen
%%
## Overview
`BlenderPID_PIDSPCalc` is a function block that calculates setpoints for PID controllers in a beverage blending system. It handles calculations related to syrup and water flows, CO2 injection, tank levels, and temperature control in beverage production.
## Temporary Variables
- `ValBinTmr131`: WORD variable for timer
- `ValBcdTmr131`: S5TIME variable for timer
## Main Variables
- `mCriticalBlending`: Critical blending state (BOOL)
- Timer conversion variables: `TimerConvDINT`, `TimerConvTIME`, `TimerConvS5TIME`
- Slew rate variables: `mTargetRatioSlewOut`, `mTargetProdSlwd`, `mTargetFillerProdSlwd`, etc.
- `mBevBrixDelta`: Brix delta for beverage
```plantuml
@startuml BlenderClassDiagram
skinparam class {
BackgroundColor LightCyan
BorderColor Black
}
class BlenderPID_PIDSPCalc {
+Execute()
}
class RecipeParameters {
+ProductBrix: REAL
+ProdBrixOffset: REAL
+SyrupBrix: REAL
+Ratio: REAL
+CO2Vols: REAL
+CO2Fact: REAL
+GAS2Vols: REAL
+SP_ProdTemp: REAL
+ProdTankPress: REAL
}
class SystemVariables {
+gActualSyrupPerc: REAL
+gActualWaterPerc: REAL
+gActual_RatioM: REAL
+gActual_Prod_SP: REAL
+gActual_Prod_Flow: REAL
+gSP_H2O: REAL
+gSP_SYR: REAL
+gSP_CO2: REAL
+gSP_GAS2: REAL
+gCriticalBlending: BOOL
}
class PIDControllers {
+RMM301: PID
+RMP302: PID
+RVM301: PID
+RVN304: PID
}
class OperationModes {
+gBlenderProdMode: BOOL
+gBlenderRinseMode: BOOL
+gBlenderCIPMode: BOOL
+gBlenderStableFlow: BOOL
+First_Production: BOOL
}
class TankSetpoints {
+gSP_SYR_Level: REAL
+gSP_DEAIR_Level: REAL
+gSP_STORAGE_Level: REAL
+gSP_H2O_Temperature: REAL
+gSP_Prod_Temperature: REAL
}
BlenderPID_PIDSPCalc -- RecipeParameters
BlenderPID_PIDSPCalc -- SystemVariables
BlenderPID_PIDSPCalc -- PIDControllers
BlenderPID_PIDSPCalc -- OperationModes
BlenderPID_PIDSPCalc -- TankSetpoints
@enduml
```
## Main Calculations
***
```plantuml
@startuml BlenderPIDCalculationFlow
skinparam activity {
BackgroundColor<<Recipe>> PaleGreen
BackgroundColor<<Calculation>> LightBlue
BackgroundColor<<Decision>> LightYellow
BackgroundColor<<Output>> Pink
BorderColor Black
}
start
:Initialize variables;
partition "Recipe Parameters" {
:Determine beverage type;
if (Sugar beverage?) then (yes)
:Calculate syrup percentage based on Brix;
note right: gActualSyrupPerc = (ProductBrix + ProdBrixOffset) / gActualSyrupBrix
else (no)
:Calculate syrup percentage based on ratio;
note right: gActualSyrupPerc = 1 / (Ratio + 1)
endif
:Calculate water percentage;
note right: gActualWaterPerc = 1 - gActualSyrupPerc
:Calculate mixing ratio;
note right: gActualRatioM = gActualWaterPerc / gActualSyrupPerc
}
partition "Flow Setpoint Calculations" {
if (Production mode?) then (yes)
:Calculate CO2 equilibrium pressure;
:Set tank pressure setpoint based on mode;
:Calculate target production rate;
:Apply slew rate limiting;
:Calculate water flow setpoint;
note right: gSP_H2O = gActual_Prod_SP / (gActualSP_RatioVol + 1.0) * gActualSP_RatioVol
:Check for critical blending conditions;
:Calculate syrup flow setpoint;
note right: gSP_SYR = (gSyrSPRef + gSyrSPTemp) * gActualSyrupDens
:Calculate CO2 setpoint;
if (Second gas injection enabled?) then (yes)
:Calculate second gas setpoint;
else (no)
:Set second gas setpoint to zero;
endif
else (no)
:Set all flow setpoints to zero;
endif
}
partition "Tank Level Controls" {
:Calculate syrup tank level setpoint;
:Calculate deaeration tank level setpoint;
:Calculate storage tank level setpoint;
}
partition "Temperature Controls" {
:Calculate water and product temperature setpoints;
}
stop
@enduml
```
### 1. Brix Delta Calculation
For systems with Brix meter:
$$mBevBrixDelta = \frac{ProdMeterHighBrix - ProductBrix}{2.0}$$
For systems without Brix meter:
$$mBevBrixDelta = 0.06$$
### 2. Syrup Percentage Calculation
For sugar beverages during first production:
$$gActualSyrupPerc = \frac{ProductBrix + ProdBrixOffset + gFirstProdExtraBrix}{gActualSyrupBrix}$$
For sugar beverages in normal production:
$$gActualSyrupPerc = \frac{ProductBrix + ProdBrixOffset + gBrixTrackingCorr}{gActualSyrupBrix}$$
For diet beverages during first production:
$$gActualSyrupPerc = \frac{1}{Ratio + 1} + gFirstProdDietExtraSyr$$
For diet beverages in normal production:
$$gActualSyrupPerc = \frac{1}{Ratio + 1}$$
### 3. Water Percentage Calculation
$$gActualWaterPerc = 1 - gActualSyrupPerc$$
### 4. Mixing Ratio Calculation
For syrup with density > 0.99 and non-sugar beverage:
$$gActualRatioM = \frac{gActualWaterPerc}{(gActualSyrupPerc \times gActualSyrupDens)}$$
For other cases:
$$gActualRatioM = \frac{gActualWaterPerc}{gActualSyrupPerc}$$
### 5. Volumetric Ratio Calculation
$$gActualSPRatioVol = \frac{gActualRatioM \times gActualSyrupDens}{gH2ODensity}$$
### 6. CO2 Equilibrium Pressure Calculation
$$gCO2EqPressure = CO2EqPress(iCO2Vol, iTemp) + 0.3$$
Where:
- $iCO2Vol = CO2Vols \times gFirstProdExtraCO2Fact \times CO2Fact$
- $iTemp = SPProdTemp$
### 7. Water Flow Setpoint Calculation
$$gSPH2O = \frac{gActualProdSP}{(gActualSPRatioVol + 1.0)} \times gActualSPRatioVol$$
### 8. Syrup Flow Setpoint Calculation
$$gSPSYR = (gSyrSPRef + gSyrSPTemp) \times gActualSyrupDens$$
Where:
- $gSyrSPRef = \frac{gActualProdSP}{(gActualSPRatioVol + 1.0)}$ or $\frac{gH2OFlowMeas}{gActualSPRatioVol}$
- $gSyrSPTemp = LIMIT(-1.0 \times gSyrSPRef \times gSyrupSPRecFact, gBlendError \times gKRecBlendError, gSyrSPRef \times gSyrupSPRecFact)$
### 9. CO2 Setpoint Calculation
$$gActualSPCO2 = (CO2Vols - gDeairCO2Comp + gCO2TrackingCorr) \times CO2Fact \times (1 - \frac{ProductBrix}{100.0})$$
$$gSPCO2 = gCO2SPRef + gCO2SPTemp$$
Where:
- $gCO2SPRef = gActualSPCO2 \times gActualProdFlow$
- $gCO2SPTemp = LIMIT(-1.0 \times gCO2SPRef \times gCO2SPRecFact, gCO2SPTemp2, gCO2SPRef \times gCO2SPRecFact)$
- $gCO2SPTemp2 = gCarboCO2Error \times gKRecCarboCO2Error$
## Tank Level Control
### Syrup Tank Level
The syrup tank level setpoint (`gSP_SYR_Level`) is calculated based on operation mode:
- In CIP mode: `CIPTP301MinLevel`
- During first production: `gTP301FirstProdLvl` with ramp to `gTP301ProdLvl`
- During normal production: `gTP301ProdLvl`
### Deaeration Tank Level
The deaeration tank level setpoint (`gSP_DEAIR_Level`) is calculated:
- In CIP mode: `CIPTN301MinLevel`
- During first production: ramp to `gTN301ProdLvl`
- During normal production: `gTN301ProdLvl`
## Temperature Control
Temperature is controlled based on cooling mode:
For product chiller: $$gSPH2OTemperature = SPProdTemp$$
For water chiller: $$gSPH2OTemperature = SPProdTemp - \left(\frac{gCpSyrup \times (gMeterSyrTemp - SPProdTemp) \times gActualSyrupDens}{gCpH2O}\right)$$
## Critical Blending Detection
Blending is considered critical when: $$|gBlendError| > 0.5 \text{ AND } \left|\frac{RMM301.SP - RMM301.PV}{RMM301.SP}\right| > 0.2$$
And when: $$gActualProdSP > (0.6 \times gBlenderNomSpeed)$$
## Additional Features
- The block implements slew rate control for various setpoints to prevent abrupt changes
- Includes CO2 compensation based on temperature
- Handles different recipes (sugar, diet, water)
- Controls multiple valves and pumps to maintain precise ratios
## Process Modes
The function block handles multiple operating modes:
1. Production mode
2. CIP (Clean-In-Place) mode
3. Rinse mode
4. First production mode
5. Water line mode
Each mode has specific setpoints and control parameters for optimal process control.
```plantuml
@startuml BlenderOperationalStates
skinparam state {
BackgroundColor<<Production>> LightGreen
BackgroundColor<<CIP>> LightBlue
BackgroundColor<<Rinse>> LightYellow
BackgroundColor<<Startup>> LightPink
}
[*] --> Idle
state Idle
state "Production Mode" as Production <<Production>> {
state "First Production" as FirstProd
state "Normal Production" as NormalProd
state "Production Runout" as RunOut
FirstProd --> NormalProd : First production\ncompleted
NormalProd --> RunOut : End production\nrequested
RunOut --> FirstProd : New recipe
}
state "CIP Mode" as CIP <<CIP>> {
state "Tank Cleaning" as TankCIP
state "Line Cleaning" as LineCIP
TankCIP --> LineCIP
}
state "Rinse Mode" as Rinse <<Rinse>> {
state "Cold Rinse" as ColdRinse
state "Hot Rinse" as HotRinse
ColdRinse --> HotRinse
}
state "Startup Sequence" as Startup <<Startup>> {
state "Deaerator Startup" as DeaerStartup
state "Syrup Startup" as SyrupStartup
state "Blend/Fill Startup" as BlendStartup
DeaerStartup --> SyrupStartup
SyrupStartup --> BlendStartup
}
Idle --> Startup : Start system
Startup --> FirstProd : Startup complete
Production --> Rinse : Production complete
Rinse --> CIP : Rinse complete
CIP --> Idle : CIP complete
Production --> CIP : Emergency CIP
Rinse --> Idle : Emergency stop
@enduml
```
## Oxygen and CO2 Calculations
The block calculates oxygen content in water, syrup, and product:
$$gProductO2 = \frac{gActualRatioM \times gDeairWaterO2 + gSyrupO2}{gActualRatioM + 1}$$
It also calculates CO2 solubility and volume based on temperature and pressure conditions.
---
### Flowchart:
***
```mermaid
flowchart TD
Start([Start]) --> A
A[Initialize variables] --> B
B{"Has Brix<br>meter?"} -->|Yes| C1["Calculate mBevBrixDelta<br>based on measurements"]
B -->|No| C2["Use default value<br>mBevBrixDelta = 0.06"]
C1 --> D
C2 --> D
D{"Is sugar<br>beverage?"} -->|Yes| E1
D -->|No| E2
E1{"First<br>production?"} -->|Yes| F1["Calculate gActualSyrupPerc<br>with extra Brix"]
E1 -->|No| F2["Calculate gActualSyrupPerc<br>with Brix compensation"]
E2{"First<br>production?"} -->|Yes| F3["Calculate gActualSyrupPerc<br>with extra syrup"]
E2 -->|No| F4["Calculate gActualSyrupPerc<br>based on ratio"]
F1 --> G
F2 --> G
F3 --> G
F4 --> G
G{"Water<br>recipe?"} -->|Yes| H1["Adjust percentages<br>for pure water"]
G -->|No| H2["Calculate gActualWaterPerc"]
H1 --> I
H2 --> I
I["Calculate mixing ratios"] --> J["Calculate gActualSP_RatioVol"]
J --> K["Calculate maximum<br>slew rates"]
K --> L{"Production<br>mode?"} -->|Yes| M1["Calculate CO2<br>equilibrium pressure"]
L -->|No| M2["Set production<br>setpoint to zero"]
M1 --> N["Set tank<br>pressure setpoints"]
N --> O["Calculate current<br>production setpoint"]
O --> P["Apply slew<br>rate limits"]
M2 --> Q
P --> Q
Q["Calculate water<br>flow setpoint"] --> R["Evaluate critical<br>blending condition"]
R --> S["Calculate syrup<br>flow setpoint"]
S --> T["Calculate CO2<br>temperature compensation"]
T --> U["Calculate O2<br>content in product"]
U --> V["Calculate CO2<br>injection setpoint"]
V --> W{"Second gas<br>injection?"} -->|Yes| X1["Calculate second<br>gas setpoint"]
W -->|No| X2["Second gas<br>setpoint = 0"]
X1 --> Y
X2 --> Y
Y["Calculate tank<br>level setpoints"]
Y --> Z["Calculate temperature<br>setpoints"]
Z --> End([End])
```
### Sequence
***
```plantuml
@startuml BlenderSequence
skinparam sequence {
LifeLineBackgroundColor LightYellow
ParticipantBackgroundColor LightCyan
}
participant "BlenderPID_PIDSPCalc" as Calc
participant "Water Flow Controller" as Water
participant "Syrup Flow Controller" as Syrup
participant "CO2 Controller" as CO2
participant "Tank Level Controller" as Level
participant "Temperature Controller" as Temp
activate Calc
== Startup Phase ==
Calc -> Level : Set deaerator tank level setpoint
activate Level
Level -> Calc : Level feedback
deactivate Level
Calc -> Temp : Set target water temperature
activate Temp
Temp -> Calc : Temperature feedback
deactivate Temp
== First Production Phase ==
Calc -> Water : Set initial water flow
activate Water
Water -> Calc : Flow measurement
deactivate Water
Calc -> Syrup : Set initial syrup flow (with extra syrup)
activate Syrup
Syrup -> Calc : Flow measurement
deactivate Syrup
Calc -> CO2 : Set CO2 injection (with extra CO2)
activate CO2
CO2 -> Calc : CO2 measurement
deactivate CO2
== Normal Production Phase ==
loop While in production mode
Calc -> Water : Adjust water flow setpoint
activate Water
Water -> Calc : Flow measurement
deactivate Water
Calc -> Syrup : Adjust syrup flow setpoint
activate Syrup
Syrup -> Calc : Flow measurement
alt Critical blending detected
Calc -> Syrup : Apply correction factor
end
deactivate Syrup
Calc -> CO2 : Adjust CO2 setpoint
activate CO2
CO2 -> Calc : CO2 measurement
deactivate CO2
Calc -> Level : Monitor and maintain target levels
activate Level
Level -> Calc : Level feedback
deactivate Level
end
== Runout Phase ==
Calc -> Water : Ramp down water flow
Calc -> Syrup : Ramp down syrup flow
Calc -> CO2 : Reduce CO2 injection
Calc -> Level : Adjust tank levels for end of production
deactivate Calc
@enduml
```
```markmap
---
markmap:
height: 860
highlight: false
---
# BlenderPID_PIDSPCalc
## Initialization
- Initialize variables
- Set up slew rate limits
- Configure timer variables
## Beverage Type Detection
### Sugar Beverage
- Calculate syrup percentage based on Brix
#### First Production Mode
- Formula: $gActualSyrupPerc = \frac{ProductBrix + ProdBrixOffset + gFirstProdExtraBrix}{gActualSyrupBrix}$
- Add extra Brix for first production
#### Normal Production Mode
- Formula: $gActualSyrupPerc = \frac{ProductBrix + ProdBrixOffset + gBrixTrackingCorr}{gActualSyrupBrix}$
- Apply Brix tracking correction
### Diet Beverage
- Calculate syrup percentage based on ratio
#### First Production Mode
- Formula: $gActualSyrupPerc = \frac{1}{Ratio + 1} + gFirstProdDietExtraSyr$
- Add extra syrup (1.2% more)
#### Normal Production Mode
- Formula: $gActualSyrupPerc = \frac{1}{Ratio + 1}$
### Water Recipe
- Set water percentage to 100%
- Set syrup percentage to 0%
## Ratio Calculations
- Water percentage: $gActualWaterPerc = 1 - gActualSyrupPerc$
- Mixing ratio: $gActualRatioM = \frac{gActualWaterPerc}{gActualSyrupPerc}$
- Volumetric ratio: $gActualSPRatioVol = \frac{gActualRatioM \times gActualSyrupDens}{gH2ODensity}$
## Production Mode Operations
### CO2 Equilibrium Pressure Calculation
- Calculate pressure based on CO2 volumes
- Add safety margin (0.3 bar)
- Set tank pressure setpoints
### Production Setpoint Management
- Apply production speed limits
- Handle first production special conditions
- Apply slew rate limiting for smooth changes
### Water Flow Control
- Formula: $gSPH2O = \frac{gActualProdSP}{gActualSPRatioVol + 1.0} \times gActualSPRatioVol$
- Handle water-only recipes
### Critical Blending Detection
- Monitor blending error magnitude
- Monitor flow deviation percentage
- Enable tracking mode if critical
### Syrup Flow Control
- Track water flow in critical conditions
- Calculate reference setpoint
- Apply blend error correction
- Formula: $gSPSYR = (gSyrSPRef + gSyrSPTemp) \times gActualSyrupDens$
## CO2 and Gas Control
### CO2 Temperature Compensation
- Calculate temperature-based compensation
- Account for deaeration effect
### Oxygen Content Calculation
- Calculate water O2 content
- Calculate syrup O2 content
- Calculate product O2 content: $gProductO2 = \frac{gActualRatioM \times gDeairWaterO2 + gSyrupO2}{gActualRatioM + 1}$
### CO2 Injection Control
- Calculate CO2 volumes setpoint
- Apply corrections based on flow
- Formula: $gSPCO2 = gCO2SPRef + gCO2SPTemp$
- First production: $gActualSPCO2 = (CO2Vols - gDeairCO2Comp) \times gFirstProdExtraCO2Fact \times CO2Fact \times (1 - \frac{ProductBrix}{100.0})$
### Secondary Gas Injection
- Calculate second gas volumes if enabled
- Formula: $gActualSPGAS2 = GAS2Vols \times GAS2Fact \times (1 - \frac{ProductBrix}{100.0})$
- Set to zero if disabled
## Tank Level Control
### Syrup Tank
- Set level based on operation mode
- Use slew limiting for transitions
- Handle CIP mode conditions
### Deaeration Tank
- Set level based on operation mode
- Handle startup conditions
- Control deaeration effectiveness
### Storage Tank
- Set level based on target level
- Apply slew rate limiting
## Temperature Control
### Product Chiller Mode
- Set water and product temperature equal
- Match recipe temperature setpoint
### Water Chiller Mode
- Compensate for syrup temperature
- Formula: $gSPH2OTemperature = SPProdTemp - \frac{gCpSyrup \times (gMeterSyrTemp - SPProdTemp) \times gActualSyrupDens}{gCpH2O}$
### CIP Mode
- Set appropriate temperature for cleaning
```

View File

@ -0,0 +1,108 @@
# BlenderPID_PIDSPCalc
## Initialization
- Initialize variables
- Set up slew rate limits
- Configure timer variables
## Beverage Type Detection
### Sugar Beverage
- Calculate syrup percentage based on Brix
#### First Production Mode
- Formula: $gActualSyrupPerc = \frac{ProductBrix + ProdBrixOffset + gFirstProdExtraBrix}{gActualSyrupBrix}$
- Add extra Brix for first production
#### Normal Production Mode
- Formula: $gActualSyrupPerc = \frac{ProductBrix + ProdBrixOffset + gBrixTrackingCorr}{gActualSyrupBrix}$
- Apply Brix tracking correction
### Diet Beverage
- Calculate syrup percentage based on ratio
#### First Production Mode
- Formula: $gActualSyrupPerc = \frac{1}{Ratio + 1} + gFirstProdDietExtraSyr$
- Add extra syrup (1.2% more)
#### Normal Production Mode
- Formula: $gActualSyrupPerc = \frac{1}{Ratio + 1}$
### Water Recipe
- Set water percentage to 100%
- Set syrup percentage to 0%
## Ratio Calculations
- Water percentage: $gActualWaterPerc = 1 - gActualSyrupPerc$
- Mixing ratio: $gActualRatioM = \frac{gActualWaterPerc}{gActualSyrupPerc}$
- Volumetric ratio: $gActualSPRatioVol = \frac{gActualRatioM \times gActualSyrupDens}{gH2ODensity}$
## Production Mode Operations
### CO2 Equilibrium Pressure Calculation
- Calculate pressure based on CO2 volumes
- Add safety margin (0.3 bar)
- Set tank pressure setpoints
### Production Setpoint Management
- Apply production speed limits
- Handle first production special conditions
- Apply slew rate limiting for smooth changes
### Water Flow Control
- Formula: $gSPH2O = \frac{gActualProdSP}{gActualSPRatioVol + 1.0} \times gActualSPRatioVol$
- Handle water-only recipes
### Critical Blending Detection
- Monitor blending error magnitude
- Monitor flow deviation percentage
- Enable tracking mode if critical
### Syrup Flow Control
- Track water flow in critical conditions
- Calculate reference setpoint
- Apply blend error correction
- Formula: $gSPSYR = (gSyrSPRef + gSyrSPTemp) \times gActualSyrupDens$
## CO2 and Gas Control
### CO2 Temperature Compensation
- Calculate temperature-based compensation
- Account for deaeration effect
### Oxygen Content Calculation
- Calculate water O2 content
- Calculate syrup O2 content
- Calculate product O2 content: $gProductO2 = \frac{gActualRatioM \times gDeairWaterO2 + gSyrupO2}{gActualRatioM + 1}$
### CO2 Injection Control
- Calculate CO2 volumes setpoint
- Apply corrections based on flow
- Formula: $gSPCO2 = gCO2SPRef + gCO2SPTemp$
- First production: $gActualSPCO2 = (CO2Vols - gDeairCO2Comp) \times gFirstProdExtraCO2Fact \times CO2Fact \times (1 - \frac{ProductBrix}{100.0})$
### Secondary Gas Injection
- Calculate second gas volumes if enabled
- Formula: $gActualSPGAS2 = GAS2Vols \times GAS2Fact \times (1 - \frac{ProductBrix}{100.0})$
- Set to zero if disabled
## Tank Level Control
### Syrup Tank
- Set level based on operation mode
- Use slew limiting for transitions
- Handle CIP mode conditions
### Deaeration Tank
- Set level based on operation mode
- Handle startup conditions
- Control deaeration effectiveness
### Storage Tank
- Set level based on target level
- Apply slew rate limiting
## Temperature Control
### Product Chiller Mode
- Set water and product temperature equal
- Match recipe temperature setpoint
### Water Chiller Mode
- Compensate for syrup temperature
- Formula: $gSPH2OTemperature = SPProdTemp - \frac{gCpSyrup \times (gMeterSyrTemp - SPProdTemp) \times gActualSyrupDens}{gCpH2O}$
### CIP Mode
- Set appropriate temperature for cleaning

View File

@ -0,0 +1,59 @@
***
VIDEO: [hot to Licence BR Windows PC Zenon 10.mp4](file:///C:%5CTrabajo%5CSIDEL%5C00%20-%20MASTER%5CReporte%5CVideos%5CLicence%20Zenon%2010%20-%20HMI%20BR%5Chot%20to%20Licence%20BR%20Windows%20PC%20Zenon%2010.mp4)
![[Pasted image 20250428141550.png]]
* Hardware Dongle
![[Pasted image 20250428141641.png]]
* Serial Number on paper to get the Certificate
![[Pasted image 20250428140526.png|800]]
* Step 1 . Go to License managment
![[Pasted image 20250428140700.png|800]]
* Optional: if the image was previously on another PC will ask to reset el software license before continue
![[Pasted image 20250428140814.png]]
* Select - Advanced license administration
![[Pasted image 20250428141033.png|800]]
* Select:
* Online activation
* Set the Serial Number from the paper
* Select the target to Dongle
![[Pasted image 20250428141005.png|750]]
* Click Activate licence
![[Pasted image 20250428141053.png|800]]
* If the activation is done will receive this message. If there is some problem you need to check that the PC has Internet connected.
* To change the IP on the PC
* switch to Administrator
* Go to Network
* Network and Sharing Center
* Change advanced sharing settings
* Change the customer network to adapt the internet conncetion
* Enable if disabled
* Try again to Activate licence
![[Pasted image 20250428141137.png]]
* After the correct licensing the number of licenses will increase to 1 on the Hardware Dongle
* Go back to the start Dialog
![[Pasted image 20250428141224.png]]
* Click : Use license on this computer
![[Pasted image 20250428123903.png]]
* Message ok
![[Pasted image 20250428141328.png|800]]
* Close
* Start the Zenon runtime

View File

@ -0,0 +1,13 @@
***
### Restore Lazesoft Disk Image with Windows & Zenon 10
![[Pasted image 20250428111855.png|800]]
*
![[Pasted image 20250428105457.png]]
![[Pasted image 20250428110411.png|800]]
![[Pasted image 20250428110509.png]]
![[Pasted image 20250428110540.png]]

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

View File

@ -0,0 +1,3 @@
![[Pasted image 20250428113932.png|800]]
![[Pasted image 20250428113916.png|800]]

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

View File

@ -0,0 +1,21 @@
![[Pasted image 20250428113358.png]]
OLD: SAE0469
![[Pasted image 20250428145219.png]]
New Promass: from 0027
![[Pasted image 20250428145209.png]]
| Description | Slot | Old Slot | | New Slot | New |
| ------------ | ---- | -------- | --- | -------- | --- |
| Massflow | 1 | 1030 | | 1 | |
| Totalizer | 2 | 1035 | | 9 | |
| Density | 3 | 1040 | | 3 | |
| Temperature | 4 | 1045 | | 4 | |
| Calc Density | 10 | 1050 | | 5 | |
| | | 1055 | | 6 | |
![[Pasted image 20250428173456.png]]

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -1,7 +0,0 @@
***
## Shrocuts
***
* `Ctrl+K Ctrl + 0` : para minimizar o colapsar todas las funciones de una sola vez
* `Shift + Ctrp + P` : Add ignore -> Python : antes de crear el repositorio

View File

@ -11,7 +11,7 @@
| SafetyEMS | SIEMENS_SAFE | SIEMENS_SAFE | | SafetyEMS | SIEMENS_SAFE | SIEMENS_SAFE |
| SIDEL | sa | 9991 | | SIDEL | sa | 9991 |
| SIDEL PLC | Sidel123 | Sidel123 | | SIDEL PLC | Sidel123 | Sidel123 |
| | | | | SIDEL PC | | 9-3urKW* |
| | | | | | | |
| | | | | | | |
| | | | | | | |
@ -162,3 +162,8 @@
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | |
| | | |
| | | |
| | | |
| | | |

Binary file not shown.