BAMI: Bambu Advanced Monitoring Interface


Een alternatief voor de Bambu Handy app. Hun app vereist dat je printer in Cloud Mode staat, is er alleen voor Android en iOS, en is bovendien closed source.
Ik ben bezig met een app met deels dezelfde functionaliteit, maar zonder de nadelen.

Geplande features:

  • [x] Device discovery
    • [x] Device discovery op Apple’s platformen met alle moeilijke permissies
  • [x] Voortgang van lopende prints zien
  • [_] Prints kunnen pauzeren en stoppen
  • [x] Live video van de ingebouwde camera
    • [_] betrouwbaarder dan Bambu’s eigen live view
  • [_] Notificaties bij starten/eindigen/falen van prints
  • [_] 3D gcode preview met de voortgang zichtbaar
  • Passende UI voor alle platformen:
    • [_] Desktop
    • [_] Mobiel
    • [_] TV

Supported devices

  • Android telefoons en tablets
  • AndroidGoogle TV (met een UI gefocust op live view)
  • iPhone, iPad, iPod Touch
  • Linux Desktop
  • macOS Desktop
  • Windows Desktop
  • Linux Mobile (Pinephone, etc)

Ik denk aan verspreiding via Google Play, Fdroid, Flathub, en uiteraard ook gewoon via github.com/Peetz0r/bami/releases.

Beschikbaarheid op de Apple App Store is afhankelijk van hun implementatie van de DMA, met hun huidige voorstel gaat het em niet worden maar ik heb zo’n vermoeden dat de EC helemaal niet blij is met Apple’s huidige voorstel, dus daar zou nog wel eens wat aan kunnen veranderen:

Achtergrondinformatie

Voor het cross-platform maken van de app gebruik ik Flutter, een framework gemaakt door Google. Nee, ik ben geen vriendjes van Google. Maar ditr is de makkelijkste manier om iets te bouwen voor mobiel en desktop zonder dubbel werk.

Mijn development omgeving bestaat uit:

  • Framework Laptop met Linux (Fedora 39 of straks 40)
  • VM met windows 11
  • late 2013 Macbook Pro die voor veel te weinig geld op Marktplaats stond
  • Moto G (1st gen) met LineageOS 14 (Android 7)
  • Sony Xperia Compact X met Android 8
    • Fun fact: een deel van de onderdelen hiervan is ooit van @eloy geweest
  • Google Pixel 6a met GrapheneOS (Android 14)
  • iPod Touch 6th gen met iOS 12
  • iPhone 8 met iOS 16
    • Fun fact: is ooit van @Bas geweest
  • MiTV met Google TV (Android 10)

6 telefoons op een rij

Linux Desktop, Windows in een VM, TV op de achtergrond

(Ik zoek nog een device met de nieuwste iOS 17.4 en straks 17.5 om de DMA aanpassingen IRL te zien, maar voorlopig is het budget op.)

4 Likes

Nice! Gaan de notificaties ook op Apple’s platform werken? En hoe zit het qua een printer bereikbaar buiten maken je netwerk, kan je een poortje openzetten (er zit authenticatie op, toch?) of is de beste optie om gewoon een VPN te gebruiken, en detect de app dit ook?

Thanks :slight_smile:

Geen idee, ik ben nog niet begonnen met het bouwen daarvan

Het is bedoeld om te werken over een lokaal netwerk, maar over een VPN zou het ook moeten werken. Op mijn interne todo-lijst staat ook handmatig printers toevoegen per IP adres. Maar als je een VPN-oplossing hebt die ook broadcast verkeer doorlaat dan zou device discovery ook over de VPN moeten werken.

Port forwarding zou ik niet aanraden, want de authenticatie is een 8-letter wachtwoord waarvan de tekens [0-9a-f] zijn. Daarnaast moet je een handvol poorten (mqtts/8883, ftps/990, rtsps/322) forwarden, het is er niet slechts eentje.

Noot: de documentatie op Printer Network Ports | Bambu Lab Wiki is niet helemaal correct :wink:

@Peetz0r Mocht je assistentie willen voor push notificaties, ofwel Flutter ofwel Android/iOS-specifiek, let me know. Ik ben voor een eigen project binnenkort weer een betalende Apple App Store Connect-gebruiker, je zou de app dan ook via mij naar Apple kunnen releasen als er animo voor is…

1 Like

Hey, ik kwam je naam vorige week nog tegen op GitHub - bdlukaa/fluent_ui: Implements Microsoft's WinUI3 in Flutter. :slight_smile:

Je aanbod om de app via jouw in de App Store te kunnen krijgen hou ik ook in het achterhoofd. Eerst maar eens richting een 1.0-ish release werken.

Maar, heb jij ervaring met “Multicast Networking Entitlement” in Apple’s ecosysteem? En met permissies op hun platformen in het algemeen?

Tot nu toe heb ik de device discovery werkend op

  • De iPod Touch (want die heeft iOS 12 en pas sinds 14 zijn ze streng)
  • In de simulator met iOS 17.4 (blijkbaar mag in de simulator gewoon alles?)
  • Alle niet-apple dingen

Het werkt niet op

  • macOS 14 desktop
  • de iPhone met iOS 16

Op beide platformen faalt het op ongeveer dezelfde manier:

macOS 14:

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Send failed (OS Error: Operation not permitted, errno = 1), address = ::, port = 0
#0      _NativeSocket.send (dart:io-patch/socket_patch.dart:1269:34)
#1      _RawDatagramSocket.send (dart:io-patch/socket_patch.dart:2582:15)
#2      DeviceDiscoverer.search (package:upnp2/src/discovery.dart:170:16)
#3      DeviceDiscoverer.quickDiscoverClients (package:upnp2/src/discovery.dart:211:7)
<asynchronous suspension>
#4      DiscoveryPage.Discover.<anonymous closure> (package:bami/discovery.dart:34:27)
<asynchronous suspension>

iOS 16:

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: SocketException: Send failed (OS Error: No route to host, errno = 65), address = 0.0.0.0, port = 0
#0      _NativeSocket.send (dart:io-patch/socket_patch.dart:1269:34)
#1      _RawDatagramSocket.send (dart:io-patch/socket_patch.dart:2582:15)
#2      DeviceDiscoverer.search (package:upnp2/src/discovery.dart:166:16)
#3      DeviceDiscoverer.quickDiscoverClients (package:upnp2/src/discovery.dart:211:7)
<asynchronous suspension>
#4      DiscoveryPage.Discover.<anonymous closure> (package:bami/discovery.dart:34:27)
<asynchronous suspension>

Het faalt op net niet dezelfde plek met net niet dezelfde foutcode, maar het voelt toch als hetzelfde probleem.

Niet met specifiek die Multicast Networking Entitlement, maar wel met entitlements in het algemeen. Ik heb bijvoorbeeld gewerkt aan een app met Bluetooth en aan apps met push notificaties. Komt er (als ik het me goed herinner) op neer dat je de app aanmaakt in je Apple Developer account, provisioning profiles aanmaakt, de entitlements daar instelt, lokaal ook instelt via Xcode of via de entitlements file en dan zou het toegestaan moeten zijn.

Op macOS kun je nog te maken hebben met de sandbox die dwarszit, daar loop ik met m’n project MomentoBooth ook tegenaan. Bijvoorbeeld libusb lijkt geheel niet bruikbaar als die aan is. Je zou die kunnen uitzetten via Xcode. Echter is de sandbox wel verplicht als je je app wil publiceren in de macOS App Store, maar met uitzetten kun je in ieder geval testen of dat het is.

Helpt deze link misschien nog wat? Ik gokte erop dat de permission_handler library van dienst zou kunnen zijn. Maar dat lijkt niet zo te zijn, vond tijdens die tocht wel die GitHub-issue. Zie ook hier. Ik denk dat je iets moet goochelen om te triggeren dat hij permissie gaat vragen om lokale devices te detecteren…

2 Likes

Ik ben heel stiekem inderdaad fan van die fluent_ui library, vind dat Microsoft net dat extra beetje contrast heeft toegevoegd in de design guidelines van die componenten wat ik in Material 3 een beetje mis… :smiley:

Fixed! Met dank aan @shiz :slight_smile:

Het ging mis omdat de library die ik gebruik niet alleen luisterend maar ook schreeuwend probeert te zoeken. Op andere OS’en mag dat gewoon (en de Bambu negeert het) maar op Apple’s platformen zegt het “Foei Mag Niet”.

Het lijkt erop dat ik de Multicast Networking Entitlement helemaal niet nodig heb. mDNS (aka Bonjour) is uitgezonderd van die entitlement-eis. Bambu’s protocol is nonstandaard en leeft op een andere poort, maar valt (zolang je enkel luistert) blijkbaar toch binnen de uitzondering. Dat scheelt weer :slight_smile:

2 Likes

Na de nodige worstelingen met fruitmachines vorige week heb ik vandaag geworsteld met robots en pinguïns. Of nouja, die dingen werken gewoon mee :stuck_out_tongue:

We hebben nu:

  • Scriptje dat alles van MQTT plukt en als plaintext json bestandjes logt
  • De eerste commando’s die verzonden worden, namelijk pause, resume en stop
  • Nog wat meer werk aan de layout-kant (maar dat is nog lang niet af - een goed idee voor een desktop layout heb ik nog niet echt)

1 Like