Merge pull request #20 from vmario89/patch-1

Implement initiators
This commit is contained in:
Wolfram 2025-04-02 20:31:44 +02:00 committed by GitHub
commit f5fda85030
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 78 additions and 88 deletions

View File

@ -42,21 +42,23 @@ roles = generate_roles(machines)
# Finale DHALL-Daten erzeugen # Finale DHALL-Daten erzeugen
export_roles = generate_bffh_roles(roles) export_roles = generate_bffh_roles(roles)
export_machines = generate_bffh_machines(machines) export_machines = generate_bffh_machines(machines)
export_actors = generate_bffh_actors(machines) export_actors = generate_bffh_plugins(machines, "actor")
export_actorconnections = generate_bffh_actorconnections(machines) export_actorconnections = generate_bffh_pluginconnections(machines, "actor")
export_all = export_roles + export_machines + export_actors + export_actorconnections export_initiators = generate_bffh_plugins(machines, "initiator")
export_initiatorconnections = generate_bffh_pluginconnections(machines, "initiator")
export_all = export_roles + export_machines + export_actors + export_actorconnections + export_initiators + export_initiatorconnections
# ------- Daten exportieren # ------- Daten exportieren
# Textdatei mit komplettem dhall-Inhalt # Textdatei mit komplettem dhall-Inhalt
create_singledhall(export_roles, export_machines, export_actors, export_actorconnections) create_singledhall(export_roles, export_machines, export_actors, export_actorconnections, export_actors, export_initiatorconnections)
# Rollenliste als CSV # Rollenliste als CSV
create_roles_csv(roles) create_roles_csv(roles)
# Einzelne DHALLs # Einzelne DHALLs
create_multipledhalls(export_roles, export_machines, export_actors, export_actorconnections) create_multipledhalls(export_roles, export_machines, export_actors, export_actorconnections, export_actors, export_initiatorconnections)
# Mermaid-Code # Mermaid-Code
create_mermaid(machines) create_mermaid(machines)

View File

@ -20,9 +20,15 @@ else:
settings = config_load('./settings.ini', 'generator') settings = config_load('./settings.ini', 'generator')
if os.path.isfile('actors.ini') == True: if os.path.isfile('actors.ini') == True:
actor_library = load_actors('actors.ini') actors_library = load_plugins('actors.ini')
else: else:
actor_library = load_actors('./actors.ini') actors_library = load_plugins('./actors.ini')
if os.path.isfile('initiators.ini') == True:
initiator_library = load_plugins('initiators.ini')
else:
initiator_library = load_plugins('./initiators.ini')
string_userhandle = settings["string_userhandle"] + ' ' string_userhandle = settings["string_userhandle"] + ' '
string_adminhandle = settings["string_adminhandle"] + ' ' string_adminhandle = settings["string_adminhandle"] + ' '
@ -198,6 +204,9 @@ class Machine(Subarea):
actor_id = string_clean(data["actor_id"].strip()).lower() actor_id = string_clean(data["actor_id"].strip()).lower()
# actor_module = data["actor_module"].strip() # actor_module = data["actor_module"].strip()
actor_type = data["actor_type"].strip().lower() actor_type = data["actor_type"].strip().lower()
initiator_id = string_clean(data["initiator_id"].strip()).lower()
# initiator_module = data["initiator_module"].strip()
initiator_type = data["initiator_type"].strip().lower()
customrole_id = string_clean(data["customrole_id"].strip()).lower() customrole_id = string_clean(data["customrole_id"].strip()).lower()
customrole_name = data["customrole_name"].strip() customrole_name = data["customrole_name"].strip()
@ -245,7 +254,9 @@ class Machine(Subarea):
"desc": machine_desc, "desc": machine_desc,
"wikiurl": wikiurl, "wikiurl": wikiurl,
"actor_id": actor_id, "actor_id": actor_id,
"actor_type": actor_type "actor_type": actor_type,
"initiator_id": initiator_id,
"initiator_type": initiator_type
} }
self.customrole = { self.customrole = {
@ -652,7 +663,12 @@ def generate_bffh_machines(machines):
return data return data
# Aktoren # Aktoren
def generate_bffh_actors(machines): def generate_bffh_plugins(machines, type):
if type == "actor":
plugin_library = actors_library
elif type == "initiator":
plugin_library = initiator_library
data = [] data = []
@ -660,30 +676,30 @@ def generate_bffh_actors(machines):
data.append('{') data.append('{')
# Inhalt # Inhalt
last_actor = len(machines) - 1 last_plugin = len(machines) - 1
for index_actor, (id, m) in enumerate(machines.items()): for index_plugin, (id, m) in enumerate(machines.items()):
specs = m.get_machine() specs = m.get_machine()
if len(specs["actor_id"]) > 0 and len(specs["actor_type"]) > 0: if len(specs["{}_id".format(type)]) > 0 and len(specs["{}_type".format(type)]) > 0:
actor_handle = specs["actor_type"] + '_' + specs["actor_id"] plugin_handle = specs["{}_type".format(type)] + '_' + specs["{}_id".format(type)]
# 2do Actor Library Funktionalität # 2do Plugin Library Funktionalität
data.append(space * 1 + f'{actor_handle} =') data.append(space * 1 + f'{plugin_handle} =')
data.append(space * 1 + '{') data.append(space * 1 + '{')
data.append(space * 2 + f'module = "{actor_library[specs["actor_type"]]["module"]}",') data.append(space * 2 + f'module = "{plugin_library[specs["{}_type".format(type)]]["module"]}",')
data.append(space * 2 + 'params =') data.append(space * 2 + 'params =')
data.append(space * 2 + '{') data.append(space * 2 + '{')
# Aktor-ID der aktuellen Maschine speichern # Aktor-ID der aktuellen Maschine speichern
replace = { replace = {
"actor_id": specs["actor_id"] "{}_id".format(type): specs["{}_id".format(type)]
} }
last_param = len(actor_library[specs["actor_type"]]["params"]) - 1 last_param = len(plugin_library[specs["{}_type".format(type)]]["params"]) - 1
for index_param, (key, value) in enumerate(actor_library[specs["actor_type"]]["params"].items()): for index_param, (key, value) in enumerate(plugin_library[specs["{}_type".format(type)]]["params"].items()):
template = Template(value) template = Template(value)
string = template.substitute(replace) string = template.substitute(replace)
@ -694,7 +710,7 @@ def generate_bffh_actors(machines):
data.append(space * 2 + '}') data.append(space * 2 + '}')
if index_actor == last_actor: if index_plugin == last_plugin:
data.append(space * 1 + '}') data.append(space * 1 + '}')
else: else:
data.append(space * 1 + '},') data.append(space * 1 + '},')
@ -707,9 +723,8 @@ def generate_bffh_actors(machines):
return data return data
# Aktoren-Verbindungen # Verbindungen (type = "actor" oder "initiator")
def generate_bffh_actorconnections(machines): def generate_bffh_pluginconnections(machines, type):
data = [] data = []
# Anfang Datenstruktur # Anfang Datenstruktur
@ -721,13 +736,13 @@ def generate_bffh_actorconnections(machines):
for index, (id, m) in enumerate(machines.items()): for index, (id, m) in enumerate(machines.items()):
specs = m.get_machine() specs = m.get_machine()
if len(specs["actor_id"]) > 0 and len(specs["actor_type"]) > 0: if len(specs["{}_id".format(type)]) > 0 and len(specs["{}_type".format(type)]) > 0:
actor_fullid = specs["actor_type"] + '_' + specs["actor_id"] plugin_fullid = specs["{}_type".format(type)] + '_' + specs["{}_id".format(type)]
if index == last: if index == last:
data.append(space * 1 + '{ ' + f'machine = "{specs["fa_id"]}", actor = "{actor_fullid}"' + ' }') data.append(space * 1 + "{{ machine = \"{}\", {} = \"{}\" }}".format(specs["fa_id"], type, plugin_fullid))
else: else:
data.append(space * 1 + '{ ' + f'machine = "{specs["fa_id"]}", actor = "{actor_fullid}"' + ' },') data.append(space * 1 + "{{ machine = \"{}\", {} = \"{}\" }},".format(specs["fa_id"], type, plugin_fullid))
# Ende Datenstruktur # Ende Datenstruktur
data.append(']') data.append(']')
@ -752,10 +767,10 @@ def create_roles_csv(roles):
# dhall-Dateien erzeugen # dhall-Dateien erzeugen
def create_singledhall(export_roles, export_machines, export_actors, export_actorconnections): def create_singledhall(export_roles, export_machines, export_actors, export_actorconnections, export_initiators, export_initiatorconnections):
print('|- Gesamten DHALL-Output exportieren') print('|- Gesamten DHALL-Output exportieren')
input = [export_roles, export_machines, export_actors, export_actorconnections] input = [export_roles, export_machines, export_actors, export_actorconnections, export_actorconnections, export_initiators, export_initiatorconnections]
data = [] data = []
@ -770,7 +785,8 @@ def create_singledhall(export_roles, export_machines, export_actors, export_acto
case 1: data.append('machines =') case 1: data.append('machines =')
case 2: data.append('actors =') case 2: data.append('actors =')
case 3: data.append('export_actorconnections =') case 3: data.append('export_actorconnections =')
case 4: data.append('initiators =')
case 5: data.append('export_initiatorconnections =')
last = len(input[index_input]) - 1 last = len(input[index_input]) - 1
for index_seg, (el) in enumerate(i): for index_seg, (el) in enumerate(i):
@ -785,11 +801,11 @@ def create_singledhall(export_roles, export_machines, export_actors, export_acto
write_file('output/bffh-dhall-data.txt', data) write_file('output/bffh-dhall-data.txt', data)
def create_multipledhalls(export_roles, export_machines, export_actors, export_actorconnections): def create_multipledhalls(export_roles, export_machines, export_actors, export_actorconnections, export_initiators, export_initiatorconnections):
input = [export_roles, export_machines, export_actors, export_actorconnections] input = [export_roles, export_machines, export_actors, export_actorconnections, export_initiators, export_initiatorconnections]
fa_dhall_directory = settings["fa_dhall_directory"].replace('\\', '/') fa_dhall_directory = settings["fa_dhall_directory"].replace('\\', '/')
@ -808,7 +824,8 @@ def create_multipledhalls(export_roles, export_machines, export_actors, export_a
case 1: target_file = 'machines.dhall' case 1: target_file = 'machines.dhall'
case 2: target_file = 'actors.dhall' case 2: target_file = 'actors.dhall'
case 3: target_file = 'actorconnections.dhall' case 3: target_file = 'actorconnections.dhall'
case 4: target_file = 'initiators.dhall'
case 5: target_file = 'initiatorconnections.dhall'
print(f' |- Erzeuge {target_file}') print(f' |- Erzeuge {target_file}')
# Im Output-Ordner # Im Output-Ordner
@ -911,6 +928,8 @@ def display_machine(machine_object):
print(' ' + p) print(' ' + p)
print('actor_id = ' + scope["actor_id"]) print('actor_id = ' + scope["actor_id"])
print('actor_type = ' + scope["actor_type"]) print('actor_type = ' + scope["actor_type"])
print('initiator_id = ' + scope["initiator_id"])
print('initiator_type = ' + scope["initiator_type"])
print('\n[Alternativrolle: '+ role["name"] + ']') print('\n[Alternativrolle: '+ role["name"] + ']')
print('state = ' + str(machine_object.has_customrole())) print('state = ' + str(machine_object.has_customrole()))

View File

@ -1,5 +1,5 @@
from generator.helpers import config_load from generator.helpers import config_load
from generator.helpers import load_actors from generator.helpers import load_plugins
# Icons für Mermaid-Code # Icons für Mermaid-Code
@ -41,6 +41,9 @@ csv_match = {
"Aktor ID": "actor_id", "Aktor ID": "actor_id",
"Aktor Modul": "actor_module", "Aktor Modul": "actor_module",
"Aktor Typ": "actor_type", "Aktor Typ": "actor_type",
"Initiator ID": "initiator_id",
"Initiator Modul": "initiator_module",
"Initiator Typ": "initiator_type",
"ID Alternativrolle": "customrole_id", "ID Alternativrolle": "customrole_id",
"Name Alternativrolle": "customrole_name", "Name Alternativrolle": "customrole_name",
} }

View File

@ -191,7 +191,7 @@ def config_load(file, section = 'all'):
return dict_settings return dict_settings
# Actor-Library einlesen # Actor-Library einlesen
def load_actors(file): def load_plugins(file):
dict_actors = {} dict_actors = {}
filehandle = app_path + f'/{file}' filehandle = app_path + f'/{file}'

View File

@ -1,2 +1,5 @@
[dummy] [dummy]
module = Dummy module = Dummy
[process]
module = Process

View File

@ -1,16 +1,16 @@
Name Domäne;Name Bereich;Name Unterbereich;Name Maschine;Maschinenbeschreibung;Manager Unterbereich;ID Alternativrolle;Name Alternativrolle;Wiki-URL;ID Domäne;ID Bereich;ID Unterbereich;ID Maschine;Aktor ID;Aktor Typ;Kommentar Name Domäne,Name Bereich,Name Unterbereich,Name Maschine,Maschinenbeschreibung,Manager Unterbereich,ID Alternativrolle,Name Alternativrolle,Wiki-URL,ID Domäne,ID Bereich,ID Unterbereich,ID Maschine,Aktor ID,Aktor Typ,Initiator ID,Initiator Typ,Kommentar
Beispielwerkstatt;Holzwerkstatt;Bandsäge;Bandsäge;Bandsäge im Holzbereich;;;;;beispielw;holz;bandsaege;bandsaege;1;Tasmota; Beispielwerkstatt,Holzwerkstatt,Bandsäge,Bandsäge,Bandsäge im Holzbereich,,,,,beispielw,holz,bandsaege,bandsaege,1,Tasmota,,,
Beispielwerkstatt;Holzwerkstatt;Hobelmaschine;Hobelmaschine;Hobelmaschine im Holzbereich;;;;;beispielw;holz;hobelmaschine;hobelmaschine;2;Tasmota; Beispielwerkstatt,Holzwerkstatt,Hobelmaschine,Hobelmaschine,Hobelmaschine im Holzbereich,,,,,beispielw,holz,hobelmaschine,hobelmaschine,2,Tasmota,1,Process,
Beispielwerkstatt;Holzwerkstatt;CNC-Fräse;CNC-Fräse;CNC Fräse im Holzbereich;;;;;beispielw;holz;holzcnc;holzcncfraese;6;Tasmota; Beispielwerkstatt,Holzwerkstatt,CNC-Fräse,CNC-Fräse,CNC Fräse im Holzbereich,,,,,beispielw,holz,holzcnc,holzcncfraese,6,Tasmota,,,
Beispielwerkstatt;Holzwerkstatt;;Kappsäge;Kappsäge mit allgemeiner Einweisung Holz;;;;;beispielw;holz;;kappsaege;7;Tasmota; Beispielwerkstatt,Holzwerkstatt,,Kappsäge,Kappsäge mit allgemeiner Einweisung Holz,,,,,beispielw,holz,,kappsaege,7,Tasmota,,,
Beispielwerkstatt;Holzwerkstatt;;Bandschleifer;Bandschleifer mit allgemeiner Einweisung Holz;;;;;beispielw;holz;;bandschleifer;8;Tasmota;Irgendein Kommentar Beispielwerkstatt,Holzwerkstatt,,Bandschleifer,Bandschleifer mit allgemeiner Einweisung Holz,,,,,beispielw,holz,,bandschleifer,8,Tasmota,,,Irgendein Kommentar
Beispielwerkstatt;Holzwerkstatt;;Ständerbohrmaschine;Ständerbohrmaschine mit allgemeiner Einweisung Holz;;;;;beispielw;holz;;staenderbohrmaschine;9;Tasmota; Beispielwerkstatt,Holzwerkstatt,,Ständerbohrmaschine,Ständerbohrmaschine mit allgemeiner Einweisung Holz,,,,,beispielw,holz,,staenderbohrmaschine,9,Tasmota,,,
Beispielwerkstatt;Textilwerkstatt;;Nähmaschine 1;Nähmaschine Nummer 1;;;;;beispielw;textil;;naehmaschine1;10;Tasmota; Beispielwerkstatt,Textilwerkstatt,,Nähmaschine 1,Nähmaschine Nummer 1,,,,,beispielw,textil,,naehmaschine1,10,Tasmota,,,
Beispielwerkstatt;Textilwerkstatt;;Nähmaschine 2;Nähmaschine Nummer 2;;;;;beispielw;textil;;naehmaschine2;11;Tasmota; Beispielwerkstatt,Textilwerkstatt,,Nähmaschine 2,Nähmaschine Nummer 2,,,,,beispielw,textil,,naehmaschine2,11,Tasmota,,,
Beispielwerkstatt;FabLab;3D-Druck;3D-Drucker 1;3D-Drucker Modell 111;x;;;;beispielw;fablab;3dprint;3ddrucker1;12;Tasmota; Beispielwerkstatt,FabLab,3D-Druck,3D-Drucker 1,3D-Drucker Modell 111,x,,,,beispielw,fablab,3dprint,3ddrucker1,12,Tasmota,,,
Beispielwerkstatt;FabLab;3D-Druck;3D-Drucker 2;3D-Drucker Modell 222;x;;;;beispielw;fablab;3dprint;3ddrucker2;13;Tasmota; Beispielwerkstatt,FabLab,3D-Druck,3D-Drucker 2,3D-Drucker Modell 222,x,,,,beispielw,fablab,3dprint,3ddrucker2,13,Tasmota,,,
Beispielwerkstatt;FabLab;Laser;Lasercutter;Modell Laser3000;x;;;https://www.fiktivedoku.de;beispielw;fablab;laser;laser3000;14;Tasmota; Beispielwerkstatt,FabLab,Laser,Lasercutter,Modell Laser3000,x,,,https://www.fiktivedoku.de,beispielw,fablab,laser,laser3000,14,Tasmota,,,
Beispielwerkstatt;FabLab;Laser;Kühlung;Modell Kühlung3000;x;;;;beispielw;fablab;laser;kühlung3000;15;Tasmota; Beispielwerkstatt,FabLab,Laser,Kühlung,Modell Kühlung3000,x,,,,beispielw,fablab,laser,kühlung3000,15,Tasmota,,,
Beispielwerkstatt;Siebdruck;;SD-Belichter;Belichter für die Siebe;;;;;beispielw;siebdruck;;sdbelichter;16;Tasmota; Beispielwerkstatt,Siebdruck,,SD-Belichter,Belichter für die Siebe,,,,,beispielw,siebdruck,,sdbelichter,16,Tasmota,,,
Beispielwerkstatt;Siebdruck;;A3-Drucker;A3 Drucker im Siebdruck Bereich;;drucker;Druckernutzung;;beispielw;siebdruck;;a3drucker;17;Tasmota; Beispielwerkstatt,Siebdruck,,A3-Drucker,A3 Drucker im Siebdruck Bereich,,drucker,Druckernutzung,,beispielw,siebdruck,,a3drucker,17,Tasmota,,,
Beispielwerkstatt;Büro;;Drucker;;;drucker;Druckernutzung;;beispielw;büro;;drucker;18;Tasmota; Beispielwerkstatt,Büro,,Drucker,,,drucker,Druckernutzung,,beispielw,büro,,drucker,18,Tasmota,,,

1 Name Domäne Name Bereich Name Unterbereich Name Maschine Maschinenbeschreibung Manager Unterbereich ID Alternativrolle Name Alternativrolle Wiki-URL ID Domäne ID Bereich ID Unterbereich ID Maschine Aktor ID Aktor Typ Initiator ID Initiator Typ Kommentar
2 Beispielwerkstatt Holzwerkstatt Bandsäge Bandsäge Bandsäge im Holzbereich beispielw holz bandsaege bandsaege 1 Tasmota
3 Beispielwerkstatt Holzwerkstatt Hobelmaschine Hobelmaschine Hobelmaschine im Holzbereich beispielw holz hobelmaschine hobelmaschine 2 Tasmota 1 Process
4 Beispielwerkstatt Holzwerkstatt CNC-Fräse CNC-Fräse CNC Fräse im Holzbereich beispielw holz holzcnc holzcncfraese 6 Tasmota
5 Beispielwerkstatt Holzwerkstatt Kappsäge Kappsäge mit allgemeiner Einweisung Holz beispielw holz kappsaege 7 Tasmota
6 Beispielwerkstatt Holzwerkstatt Bandschleifer Bandschleifer mit allgemeiner Einweisung Holz beispielw holz bandschleifer 8 Tasmota Irgendein Kommentar
7 Beispielwerkstatt Holzwerkstatt Ständerbohrmaschine Ständerbohrmaschine mit allgemeiner Einweisung Holz beispielw holz staenderbohrmaschine 9 Tasmota
8 Beispielwerkstatt Textilwerkstatt Nähmaschine 1 Nähmaschine Nummer 1 beispielw textil naehmaschine1 10 Tasmota
9 Beispielwerkstatt Textilwerkstatt Nähmaschine 2 Nähmaschine Nummer 2 beispielw textil naehmaschine2 11 Tasmota
10 Beispielwerkstatt FabLab 3D-Druck 3D-Drucker 1 3D-Drucker Modell 111 x beispielw fablab 3dprint 3ddrucker1 12 Tasmota
11 Beispielwerkstatt FabLab 3D-Druck 3D-Drucker 2 3D-Drucker Modell 222 x beispielw fablab 3dprint 3ddrucker2 13 Tasmota
12 Beispielwerkstatt FabLab Laser Lasercutter Modell Laser3000 x https://www.fiktivedoku.de beispielw fablab laser laser3000 14 Tasmota
13 Beispielwerkstatt FabLab Laser Kühlung Modell Kühlung3000 x beispielw fablab laser kühlung3000 15 Tasmota
14 Beispielwerkstatt Siebdruck SD-Belichter Belichter für die Siebe beispielw siebdruck sdbelichter 16 Tasmota
15 Beispielwerkstatt Siebdruck A3-Drucker A3 Drucker im Siebdruck Bereich drucker Druckernutzung beispielw siebdruck a3drucker 17 Tasmota
16 Beispielwerkstatt Büro Drucker drucker Druckernutzung beispielw büro drucker 18 Tasmota

View File

@ -1,37 +0,0 @@
; ------------ Einstellungen für den DHALL-Generator ------------
; Einstellung aktiv = True
; Einstellung inkativ = False
[generator]
; Verwendung mehrer Domänen. Bei Verwendung mehrer Domänen werden wird für jede Domäne ein Manager erstellt
multi_domains = False
; Erstellung einer Benutzerrolle für die gesamte Werkstatt. (Es werden keine Benutzerrollen für Unterbereiche/ Bereiche erstellt)
domain_user = True
; Manager-Rolle für die Domäne erstellen.
manager_domain = True
; Manager-Rolle für jeden Bereich erstellen.
manager_area = False
; Spalte "Unterbereich Manager" der CSV beachten (True) der nicht (False).
manager_subarea = False
; Erzeugt DHALL-Dateien für Rollen, Maschinen, Aktoren und Aktorenverbindungen
fa_dhall_directory = F:\fabaccess-docker\config\bffh\
; Anzeige aller erzeugten Maschinendaten
show_machines = False
; Anzeige aller erzeugten Rollendaten
show_roles = False
; Kennzeichnung für Administrator-Rollen, steht am Anfang des Namens der Rolle.
string_adminhandle = Admin
; Kennzeichnung für Manager-Rollen, steht am Anfang des Namens der Rolle.
string_managerhandle = Manager
; Kennzeichnung für Benutzer-Rollen, steht am Anfang des Namens der Rolle.
string_userhandle = Benutzer