Direkt zum Hauptinhalt

bffh.dhall

BFFH usesverwendet DHALL forfür Config-Filedie structureStruktur der Konfigurationsdateien BFFH usesverwendet RBAC forfür accessdie controlZugriffskontrolle.

Die Konfiguration von BFFH Configbefindet issich in der Datei bffh.dhall file..

GeneralAllgemeine BFFH ConfigKonfiguration

listens

ContainsEnthält thedie AddressesAdressen, auf die BFFH isbei listender forVerbindung Connectionfür for thedie API Defaulthört. PortStandardport forfür BFFH isist 59661

Example:Beispiel:

listens = 
[ 
    { address = "127.0.0.1", port = Some 59661 }
]


mqtt_url

ContainsEnthält thedie AddressAdresse fordes theMQTT-Servers, MQTTmit Serverdem sich BFFH connects to.verbindet.

TheDie AddressAdresse hashat thedas formatFormat <protocol>://[user]:[password]@<server>:[port]

  • protocol iswird requiredbenötigt andund cankann beeins oneder of:folgenden Werte annehmen: mqtt,tcp,mqtts,ssl
  • user andund password aresind optional
  • server isist requirederforderlich andund cankann beeine anIP-Adresse ipoder addressein orHostname a hostnamesein
  • port isist optionaloptional. Der Standardport ist 59661

Beispiele:

mqtt_url = "tcp://localhost:1883" 
mqtt_url = "mqtts://user:password@server.tld:port"


db_path

Contains the Path for the internal Database BFFH uses. BFFH will create two files: <db_path> and <db_path>-lock. Make sure that BFFH has write access in the relevant directory Example:

db_path = "/tmp/bffh"


PermissionsBerechtigungen (Permissions)


Modellieren von Berechtigungen

Modellieren von Berechtigungen

Allgemeines Schema: space.type.category.permission.model

Administrator
space.machines.printers.*

Offene Berechtigung
space.machines.printers.read.*

BFFH usesverwendet aeine Path-stylepfadähnliche stringZeichenkette asals permissionErlaubnisformat, format,getrennt separateddurch byeinen .”. Punkt. So forbesteht examplezum Beispiel this.is.a.permission consistsaus ofden the partsTeilen this, is, a andund permission. WhenBei requireingder permissions,Anforderung suchvon asBerechtigungen, z. B. in machinesMaschinen, youmuss alwaysimmer needeine togenaue giveBerechtigung anangegeben exactwerden, permission,also soz. for exampleB. test.write. WhenBei grantingder permissions,Erteilung suchvon asBerechtigungen, z. B. in rolesRollen, youkönnen canentweder eithereine givegenaue anBerechtigung exactangegeben permissionoder ordie youbeiden can use the two wildcardsPlatzhalter * andund +. Theseverwendet wildcardswerden. behaveDiese similarWildcards toverhalten regexsich orähnlich bashwie wildcards:Regex- oder Bash-Wildcards:

  • * grantsgewährt allalle permissionsBerechtigungen in thatdiesem subtree.Teilbaum. So,So wird perms.read.* willfür matchjedes forvon anypassen: of:
    • perms.read
    • perms.read.machineA
    • perms.read.machineB
    • perms.read.machineC.manage
  • + grantsgewährt allalle permissionsBerechtigungen belowunter thatdes one.Wertes. So,So wird perms.read.+* willfür matchjedes forvon anypassen: of:
    • perms.read.machineA
    • perms.read.machineB
    • perms.read.machineC.manage
    • butaber notnicht perms.read

Wildcards aresind probablywahrscheinlich mostam usefulnützlichsten, ifum youMaschinen groupzu yougruppieren, machines around them, e.g. yourz.B. 3D-printersDrucker andund youreine one bandsaw require:Bandsäge:

  1. Write permissions(schreiben) Berechtigungen
    • machines.printers.write.prusa.sl1
    • machines.printers.write.prusa.i3
    • machines.printers.write.anycubic
    • machines.bandsaws.write.bandsaw1
  2. Manage permissions(verwalten) Berechtigungen
    • machines.printers.manage.prusa.sl1
    • machines.printers.manage.prusa.i3
    • machines.printers.manage.anycubic
    • machines.bandsaws.manage.bandsaw1
  3. Admin permissionsBerechtigungen
    • machines.printers
      • ForFür allalle printersDrucker
    • machines.bandsaws
      • ForFür allalle bandsawsBandsägen

AndDann youerteilen thenwir giveden rolesRollen permissionsdie likeentsprechenden so:Rechte:

  • UseNutze anybeliebige 3D printer:3D-Drucker:
    • machines.printers.write.+
  • OnlyErlaube allownur usedie ofNutzung the"billiger" “cheap” printersDrucker:
    • machines.printers.write.anycubic.*
    • machines.printers.write.prusa.i3
  • AllowErlaube managingdas ofVerwalten printers:der Drucker:
    • machines.printers.+
  • AllowErlaubte administratingdas printers:Administrieren aller Drucker:
    • machines.printers.*

ThisAuf waydiese ifWeise youklappt buyes atrotzdem differentmit anycubicder andAufteilung, splitwenn thespäter permissionsein toweitere e.g.Anycubic Drucker gekauft wird:

  • machines.printers.write.anycubic.i3
  • machines.printers.write.anycubic.megax

It

Konfiguration stillvon works out.

Maschinen

Machine Config

machines

ContainsEnthält listeine ofListe machines

der

Machinesdefinierten haveMaschinen. differentDie perissionMaschinen levelshaben toverschiedene interactWahrnehmungsebenen, with:mit denen interagiert werden kann:

  • disclose: User can see the machine in machine list
  • read: User can read information about the machine and there state
  • write: User can use the machine
  • manage: User can interact with the machine as Manager (Check, ForceFree, ForceTransfer)
  • disclose (offenlegen): Benutzer kann die Maschine in der Maschinenliste sehen
  • read (lesen): Der Benutzer kann Informationen über die Maschine und ihren Zustand lesen
  • schreiben: Der Benutzer kann die Maschine benutzen
  • Verwalten: Der Benutzer kann als Manager mit dem Rechner interagieren (Prüfen, Freigeben, Übertragen)

EachJede machineMaschine mustmuss have aneine ID tohaben, reference the machineum in otheranderen partTeilen ofdieser thisKonfiguration configoder orüber overdie theAPI API.auf Anddie eachMaschine machineverweisen mustzu havekönnen. aUnd name.jede Maschine muss einen Namen haben.

OptionalOptionale InformationInformationen

ToUm provideweitere moreInformationen informationüber aboutdie theMaschine machinebereitzustellen, youkönnen candiesen addBeschreibungen ithinzugefügt tooder theein descriptionexterner orWiki-Link providbereitstellt anwerden. externalBeide wikiAttribute link.sind Both attributes are onlynur optional andund domüssen notnicht needgesetzt to be set.werden.

Example:Beispiel:

machines = 
{ 
    machine123 = 
    { 
        name = "Testmachine",
        description = Some "A test machine",
        wiki = "https://someurl"

        disclose = "lab.test.read",
        read = "lab.test.read",
        write = "lab.test.write",
        manage = "lab.test.admin"
    }
}

“machine123” is in this case the “Machine-ID”


RolesKonfiguration Configvon Rollen

The roles are configured in the bffh.dhall. If the file “roles.toml” is existing in the directory, it can be deleted and can’t be used to manage roles.

roles

ContainsEnthält listdie ofListe roles

der

Rolesdefinierten haveRollen. aRollen listhaben ofeine permissionListe andvon canBerechtigungen beund inherited.können Permissionvererbt canwerden. beDie wildcardBerechtigung kann ein Platzhalter in permissionder list.Berechtigungsliste sein.

Example:Beispiel:

roles =
{
    testrole = 
    {
        permissions = [ "lab.test.*" ]
    },
    somerole =
    { 
        parents = ["testparent"],
        permissions = [ "lab.some.admin" ]
    }, 
    testparent =
    {
        permissions =
        [
            "lab.some.write",
            "lab.some.read",
            "lab.some.disclose"
        ]
    }
}


ActorsKonfigurations Configvon Aktoren (actors)

actors

ContainsEnthält listeine ofListe actorsvon ActorsAktoren. areAktoren definedwerden bydurch aein moduleModul andund oneeinen oroder moremehrere paramtersParameter definiert. Aktuell unterstützte Aktoren sind:

Currenty supported actors:

Shelly Actor

ThisDieser actorAktor connectsverbindet BFFH overüber aneinen MQTT-Server tomit aneinem shellyShelly device.Gerät.

You need to set theDer topic parameterParameter of thedes Shelly tomuss theauf Shellydas specificShelly-spezifische MQTT-Topic.Topic gesetzt werden.

Find shelly topic here

Example:Beispiel:

actors = 
{
    Shelly_123 = 
    { 
        module = "Shelly", 
        params = 
        {
            topic = "shellyplug-s-123456"
        }
    }
}

“Shelly_123”„Shelly_123“ isist in thisdiesem caseFall thedie "Actor-ID”ID".


Process Actor

ThisDieser actorAktor makesermöglicht ites, possibleeigene forGeräte youmit todem connectBFFH yourServer ownzu Devices to BFFH.verbinden.

cmd = PathPfad ofder executable

ausführbaren

Datei
args = ArgumentsArgumente forder executableausführbaren Datei

Example:Beispiel:

actors = 
{
    Bash =
    { 
        module = "Process", params =
        { 
            cmd = "./examples/actor.sh",
            args = "your ad could be here"
        }
    }
}

actor_connections

ConnectsVerbindet theden actorAktor withmit aeiner machineMaschine. AEine machineMaschine cankann havemehrere multipleAktoren actorshaben. Verwenden Sie die "Machine-ID" und "Actor-ID".

Use the “Machine-ID” and “Actor-ID”. Example:Beispiel:

actor_connections = 
[
    { machine = "Testmachine", actor = "Shelly_1234" },
    { machine = "Another", actor = "Bash" },
    { machine = "Yetmore", actor = "Bash2" }
]

Konfiguration exportieren

BASE="/opt/fabinfra/bffh/target/release"
CFG="$DATA/config/cfg.dhall"
$BASE/bffhd --verbose --config $CFG --dump-users /tmp/users.toml --force