vault backup: 2025-05-03 14:46:27
|
@ -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",
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"backlinkInDocument": true
|
||||||
|
}
|
|
@ -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"
|
||||||
]
|
]
|
|
@ -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
|
||||||
}
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -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"
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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": ""
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
|
@ -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": [],
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 58 KiB |
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
|
@ -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)
|
|
@ -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
|
||||||
|
```
|
|
@ -1,6 +0,0 @@
|
||||||
|
|
||||||
### Commands:
|
|
||||||
***
|
|
||||||
conda create -n test-env
|
|
||||||
conda activate test-env
|
|
||||||
|
|
|
@ -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
|
||||||
|
```
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
```
|
After Width: | Height: | Size: 31 KiB |
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
|
||||||
|
![[Pasted image 20250428204503.png]]
|
||||||
|
|
After Width: | Height: | Size: 16 KiB |
|
@ -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
|
||||||
|
```
|
|
@ -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
|
||||||
|
```
|
|
@ -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
|
|
@ -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
|
|
@ -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]]
|
After Width: | Height: | Size: 59 KiB |
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 3.5 MiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 762 KiB |
After Width: | Height: | Size: 667 KiB |
After Width: | Height: | Size: 112 KiB |
After Width: | Height: | Size: 212 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 238 KiB |
After Width: | Height: | Size: 105 KiB |
After Width: | Height: | Size: 117 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 426 KiB |
After Width: | Height: | Size: 157 KiB |
After Width: | Height: | Size: 424 KiB |
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
![[Pasted image 20250428113932.png|800]]
|
||||||
|
![[Pasted image 20250428113916.png|800]]
|
After Width: | Height: | Size: 229 KiB |
After Width: | Height: | Size: 127 KiB |
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 164 KiB |
|
@ -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]]
|
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 37 KiB |
|
@ -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
|
|
||||||
|
|
|
@ -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 @@
|
||||||
| | | |
|
| | | |
|
||||||
| | | |
|
| | | |
|
||||||
| | | |
|
| | | |
|
||||||
|
| | | |
|
||||||
|
| | | |
|
||||||
|
| | | |
|
||||||
|
| | | |
|
||||||
|
| | | |
|
||||||
|
|