Kassanext
Installeren

Next Controller neerzetten

De kassa draait bij ons in een datacentrum; je printer en je pinautomaat staan in de zaak. Daar kan die server niet bij. Dus zet je de Next Controller ertussen: een klein programma dat om werk vraagt in plaats van dat wij naar binnen bellen — geen poort open in je router, geen vast IP-adres, geen gepriegel.

Waar zet je hem neer

Twee wegen. Kies één; verderop staat per stap wat er voor jouw weg geldt.

meestal deze

De Windows-pc die er al staat

Achter bijna elke kassa staat al een Windows-computer. Dan hoef je niets te kopen en niets bij te plaatsen: één regel in PowerShell en het staat er.

geen pc? dan deze

Een Raspberry Pi

Een Pi Zero 2 W van ongeveer twintig euro. Verbruikt bijna niets, gaat nooit in de slaapstand, en draait jaren op één geheugenkaartje.

Beide moeten aan blijven. Niet aan een stekkerdoos die 's avonds met de lichten meegaat, en op een laptop: slaapstand uit. Een computer die slaapt meldt zich niet, en dan blijven je bonnen staan tot hij wakker is.

Wat er verder nodig is, is voor beide hetzelfde: hetzelfde netwerk als je printer en je pinautomaat — een draadje is beter dan wifi als het kan. Geen extra software, geen abonnement, geen open poorten.

  1. De opdracht ophalen uit de kassa

    Ga in de kassa naar Instellingen → Bonnenprinters. Onderaan staat Next Controller met twee knoppen: Windows-pc en Raspberry Pi of Linux. Kies je weg en druk op Opdracht kopiëren.

    In die opdracht staan je adres en je sleutel al ingevuld. Voor Windows ziet hij er zo uit:

    iwr https://jouwzaak.kassanext.nl/controller/installeer.ps1 -OutFile installeer.ps1; powershell -ExecutionPolicy Bypass -File .\installeer.ps1 -Adres https://jouwzaak.kassanext.nl -Sleutel a1b2c3…

    En voor een Pi zo:

    curl -O https://jouwzaak.kassanext.nl/controller/installeer.sh \
      && bash installeer.sh --adres https://jouwzaak.kassanext.nl --sleutel a1b2c3…
    Tik hem niet over. Die sleutel is veertig tekens. Eén fout en de controller doet stil niets — en dan zoek je op de verkeerde plek.
  2. De computer klaarmaken

    Windows: niets. Python hoeft er niet op te staan — de installatie haalt hem er zelf bij als hij ontbreekt.

    Eén ding wél kiezen: hoe je PowerShell opent.

    Hoe je PowerShell opentWanneer de controller start
    Rechtsklik op de Windowsknop →
    Terminal (Administrator)
    aanbevolen op een kassa
    Bij het opstarten van de computer, ook als er niemand is ingelogd. De pc gaat 's ochtends aan en het werkt — er hoeft niemand eerst in te loggen.
    Gewoon Terminal of PowerShell Bij het aanmelden van deze gebruiker. Werkt ook, zolang er iemand op die pc inlogt.

    Raspberry Pi: zet Raspberry Pi OS Lite (64-bit) op een kaartje met de Raspberry Pi Imager. Lite en niet de versie met bureaublad: minder om bij te werken, start in seconden. Klik in de Imager op het tandwiel en vul daar meteen in: een wachtwoord, je wifi, en SSH aan. Dan hoef je er geen scherm en toetsenbord aan te hangen.

    Kaartje erin, stroom erop, en na een minuut kun je erbij:

    ssh pi@raspberrypi.local

    Werkt die naam niet, kijk dan in je router welk adres hij heeft gekregen. Een gewone Debian of Ubuntu werkt net zo goed — het script gebruikt systemd, en dat zit er standaard op.

  3. De opdracht uitvoeren

    Plak de opdracht uit stap 1 en druk op enter. Hij vraagt eerst wat hij nodig heeft en zet pas daarna iets neer:

    • het adres van je pinautomaat, bijvoorbeeld 192.168.1.50:20002 — leeg laten mag, dan loopt het pinnen niet via de controller;
    • het adres van je bonnenprinter — leeg laten mag ook, dan gebruikt hij de printers die al in de kassa staan.

    Daarna kijkt hij of het werkelijk kan, en niet of het waarschijnlijk kan:

    • staat er Python, en is die nieuw genoeg,
    • is je kassa te bereiken vanaf deze computer,
    • kent de kassa deze sleutel,
    • en antwoordt er iets op het adres van je pinautomaat.

    Klopt er iets niet, dan stopt het met één regel die zegt wát er niet klopt. Gaat het goed, dan draait de controller daarna mee met het opstarten en komt hij terug als hij omvalt. Op Windows wordt daarbij elke vijf minuten gekeken of hij nog leeft; op een Pi doet systemd dat.

    Aan het eind loopt hij alles na en zegt Klaar. Is er iets niet in orde, dan zegt hij NIET KLAAR met wat er aan de hand is — hij doet nooit alsof.
  4. Nakijken dat het werkt

    Ga terug naar Instellingen → Bonnenprinters. Daar staat een lijst met je kastjes, en het nieuwe hoort erbij te staan met een groene online erachter. In die lijst staat ook op welk systeem hij draait, welke versie hij heeft, zijn adres op je eigen netwerk, en sinds wanneer hij er staat.

    Geef hem daar meteen een naam met de knop Naam: "Kassa bij de deur" leest een stuk sneller dan DESKTOP-M4KQ2A1 als er op zaterdagavond iets stilvalt. De computernaam blijft eronder staan, want die heb je nodig als je ernaartoe loopt.

    Blijft een kastje meer dan een minuut stil, dan wordt de regel rood. Wil je op de computer zelf meekijken:

    WaarHoe
    Windows Taakbeheer → tabblad Details → daar staat pythonw.exe. Of laat hem zelf zeggen wat hij ziet:
    python "%ProgramData%\NextController\controller.py" --zelftest
    Raspberry Pi sudo journalctl -u next-controller -f

    Druk daarna in de kassa bij een printer op Proefbon. Binnen een paar tellen hoort er papier uit te komen.

    Het moet een bonnenprinter zijn. De kassa stuurt ESC/POS, de taal van bonnenprinters. Een laserprinter of inkjet drukt die tekst wel af, maar de stuurbytes komen als rare tekens op een laatste pagina — en afsnijden en de kassalade doet hij niet. Wil je een bon op een gewone printer, open hem dan in het bonvenster na het afrekenen en druk op Ctrl+P.
  5. De pinautomaat erbij

    Zoek in het menu van je terminal het IP-adres en de poort op (bij een CCV of Worldline staat dat onder de netwerkinstellingen; de poort is vaak 20002). Vul dat in de kassa in bij Instellingen → Integraties → Pinautomaat, met dienst op brug — dat is de Next Controller.

    Vanaf dan gaat bij pinnen het bedrag naar de terminal en wacht de kassa. Er komt pas een bon als de betaaldienst bevestigt dat er is betaald — het scherm zegt het, maar het scherm is geen bewijs.

    Hier heb je je aanbieder voor nodig. Die moet de kassa-aansluiting (de ECR-interface) op jouw terminal aanzetten en je de OPI-NL-documentatie sturen. Zolang dat niet is gebeurd praat een terminal niet met een kassa. Bel ze en vraag om die twee dingen.

    Tot die tijd doet de controller alsof, en volledig — zodat je de hele weg kunt proberen zonder apparaat. De centen van het bedrag bepalen de uitkomst:

    Bedrag eindigt opWat er gebeurt
    ,00 t/m ,89de betaling lukt na een paar tellen
    ,90geweigerd — te weinig saldo
    ,91de klant breekt af op de terminal
    ,92de terminal antwoordt niet meer

    Probeer die laatste een keer. Dan staat er iemand aan de toonbank en weet niemand of er is betaald — en dat is precies het geval waarvoor de kassa “onbekend of er is betaald” zegt en niet “mislukt”. Twee keer laten pinnen is duurder dan even kijken.

Als het niet werkt

Vijf dingen dekken vrijwel alles af. Begin bovenaan.

Wat je zietWat het is
Een kastje staat rood op stil Die computer staat uit, heeft geen internet, of het programma draait niet. Kijken op Windows met schtasks /Query /TN "Next Controller", op een Pi met sudo systemctl status next-controller. Bonnen en pinopdrachten blijven staan tot hij terug is — er gaat niets verloren. Heb je twee kastjes, dan zegt de lijst welke van de twee het is.
Er staat een kastje bij dat Onbekend kastje heet Dat is een kastje van vóór de versie die zijn naam meestuurt. Werk je hem bij, dan meldt hij zich onder zijn echte naam en blijft de oude regel achter. Die mag weg met Uit de lijst.
“De kassa kent deze sleutel niet” De sleutel is verkeerd overgenomen, of er is in de kassa een nieuwe gemaakt. Haal de opdracht opnieuw op en voer hem nog eens uit. Een bestaande controller.ini blijft staan, dus pas die met de hand aan of gooi hem weg.
Bonnen komen er niet uit Kijk of het adres van de printer in de kassa klopt en of de printer aan staat. Een Epson drukt zijn eigen IP-adres af als je hem aanzet met de papierknop ingedrukt. De zelftest zegt of hij die printer kan bereiken.
Pinnen zegt “de terminal antwoordt niet” Het adres klopt niet, de terminal zit op een ander netwerk, of hij hangt aan een simkaart in plaats van aan de wifi. De zelftest zegt precies wat er op dat adres antwoordt en wat niet.

Weghalen

Beide wegen zijn terug te draaien, en de instellingen blijven staan zodat je hem terug kunt zetten zonder alles opnieuw in te vullen.

WaarHoe
Windows powershell -ExecutionPolicy Bypass -File installeer.ps1 -Verwijderen
Raspberry Pi sudo systemctl disable --now next-controller

Wat de controller wel en niet mag

Hij staat in de hoek van een zaak, dus dat is een eerlijke vraag.