seeseekey.net - Invictus Deus Ex Machina

Der ESP8266 ist ein Mikrocontroller welcher vor allem aufgrund seines Preises und seiner Fähigkeiten sehr beliebt in der Bastlerszene ist. Während er ursprünglich als WLAN-Shield für den Arduino und Konsorten gedacht war, wird er immer öfter direkt genutzt. Das sollte auch nicht verwundern, schließlich sind viele Leistungswerte des ESP8266 einem gewöhnlichen Arduino überlegen. Mittlerweile gibt es vom ESP8266 14 Varianten die von ESP-1 bis ESP-14 durchnummeriert sind.

Das NodeMCU-Board

Der einfache Einstieg gelingt mit gelingt am besten mit einem ESP8266-Entwicklerboard. Diese verfügen meist über NodeMCU. Das NodeMCU-Modul basiert dabei auf einem ESP-12. Da der ESP8266 3,3 Volt benötigt, USB allerdings 5 Volt liefert, löst das Entwicklerboard viele Probleme, da es bereits einen Spannungsteiler an Bord hat. Für die Anbindung per seriellem Interface wird unter macOS ein Treiber benötigt. Dieser kann unter anderem auf GitHub gefunden werden. Nach der Installation des Treibers muss der Entwicklungsrechner neu gestartet werden.

Nach der Treiberinstallation kann die Schnittstelle angesprochen werden

Nach dem Neustart kann die Arduino IDE geöffnet werden. Da das Board nicht von Haus aus unterstützt wird, muss eine weitere Konfiguration für den Board Manager hinzugefügt werden. Dazu öffnet man die Einstellungen der Arduino IDE und wählt dort den Punkt Zusätzliche Boardverwalter-URLs aus. Dort fügt man nun die URL:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

hinzu. Anschließend können die Einstellungen geschlossen werden und der Board Manager geöffnet werden. Im Board Manager wird nun nach ESP8266 gesucht und die entsprechende Unterstützung installiert.

Die Unterstützung für die ESP8266-Boards wird installiert

Nachdem die Unterstützung für das Board installiert wurde, muss das ganze noch korrekt konfiguriert werden. In diesem Beispiel wurden folgende Einstellungen genutzt:

Board: "NodeMCU 1.0 (ESP-12E Module)"
CPU Frequency: "80 MHz"
Flash Size: "4M (3M SPIFFS)"
Upload Speed: "9600"
Port: "/dev/cu.wchusbserial1410"

Als Beispiel-Programm bietet sich das Webserver-Beispiel an. Nachdem das Beispielprogramm in der Arduino IDE gelandet ist, kompiliert und hochgeladen wurde kann der erste Test des ESP8266 durchgeführt werden. Dazu muss im Browser die IP-Adresse des Gerätes oder alternativ die URL: http://esp8266.local aufgerufen werden.

In den letzten Tagen gab es zwei Artikel zum Thema Counter-Strike 1.6 Server:

In diesem Artikel, der die Fortsetzung der obigen Artikel darstellt, soll es um die Installation von Bots auf dem Counter-Strike 1.6 Server gehen. Damit kann auch gespielt werden wenn auf Server mal nicht so viel los ist. Zur Installation des POD-bot wird wieder das Metamod benötigt, welches im letzten Artikel im Zusammenhang mit dem AMX Mod installiert wurde. Zur Installation laden wir den POD-bot herunter und verschieben ihn in den addons-Ordner:

wget https://seeseekey.net/wp-content/uploads/2017/04/podbot.zip
unzip podbot.zip
rm podbot.zip
mv podbot /home/counterstrike/game/cstrike/addons/podbot

Anschließend muss der POD-bot Mod aktiviert werden. Dazu editieren wir die Datei /home/counterstrike/game/cstrike/addons/metamod/plugins.ini und fügen dort folgendes hinzu:

; POD-bot
win32 addons/podbot/podbot_mm.dll
linux addons/podbot/podbot_mm_i386.so

Damit ist die Grundinstallation des POD-bot abgeschlossen. In der Datei /home/counterstrike/game/cstrike/addons/podbot/podbot.cfg kann der POD-bot nun im Einzelnen konfiguriert werden. Besonders interessant sind dabei folgende Optionen:

# passwordkey - need set as setinfo to get access to the main podbot menu.
# usage (in the below example You may need to write Your-own passwordkey
# string instead default _pbadminpw - if You changed it):
# setinfo _pbadminpw "your_password"
pb_passwordkey "_pbadminpw"

# Set the password to have access to the podbot menu on DS by 'pb menu'
# console command typed in client's admin PC or called from the binded key.
# Example of bind on Your client PC:
# bind "=" "pb menu"
pb_password "your_password"

# Switches to on/off Botchatting. <0|1>. Default is 1.
pb_chat 1

# Set the below value to 1 to enable auto kill bots if all human players
# are dead already. <0|1>. Default is 0.
pb_autokill 0

# Set the below value to delay (in seconds) autokill bots if
# autokill function is enabled (above). Default is 45.
pb_autokilldelay 45

# These lines below are adding automatically the bots to the server when
# the new game is created on the listenserver or the dedicated server
# is starting.
# As many such lines like "pb add" is here as many bots will be added
# to the server (unless You will not exceed pb_maxbots setting).
pb add 100
pb add 100

Mit dem Kommando:

setinfo _pbadminpw "your_password"

weist man sich gegenüber dem POD-bot aus und erhält administrative Rechte und kann anschließend das Kommando:

pb menu

in der Counter-Strike-Konsole nutzen um die Bots zu konfigurieren.

Vor ein paar Tagen beschrieb ich wie man einen Counter-Strike 1.6 Server unter Ubuntu aufsetzt. Dem Server in der Vanila-Version fehlen allerdings einige Komfort-Features wie z.B. das Voten von Maps. Möchte man diese Funktionalität nutzen, benötigt man ein entsprechendes Mod. Hier empfiehlt es sich das AMX Mod zu installieren. Dieses benötigt den Metamod, der allerdings direkt im Paket enthalten ist. Im ersten Schritt muss der Mod auf dem Server installiert werden. Dazu wechselt man auf das Home-Verzeichnis des Servernutzers und gibt dort folgende Kommandos ein:

mkdir amxmod
cd amxmod
wget http://www.amxmod.net/amxfiles/amxmod_2010.1/amxmod_2010.1_cs-en.zip
unzip amxmod_2010.1_cs-en.zip 
rm amxmod_2010.1_cs-en.zip
cp * /home/counterstrike/game/cstrike/ -r
cd ..
rm -r amxmod/

Mit den Kommandos wird der Mod heruntergeladen und an die richtige Stelle verschoben. Anschließend muss die Pluginliste für das Metamod aktiviert werden:

mv /home/counterstrike/game/cstrike/addons/metamod/sample_plugins.ini /home/counterstrike/game/cstrike/addons/metamod/plugins.ini

Damit das AMX Mod erkennt wer im Spiel über administrative Rechte verfügt, muss die users.ini-Datei bearbeitet werden. Diese befindet sich im Ordner /home/counterstrike/game/cstrike/addons/amx/config/users.ini. Der einfachste Weg den Administrator zu definieren ist es die Steam-ID des jeweiligen Spielers zu benutzen. Zur Ermittlung der Steam-ID des Spielers öffnet man im Spiel mittels der ^-Taste die Konsole und gibt dort den Befehl status ein. Anschließend kann der Nutzer der users.ini-Datei hinzugefügt werden:

"STEAM_0:1:12345"    ""       "abcefijmnopqrstu" "ce"

Dabei muss nur die Steam-ID im vorderen Teil geändert werden. Danach ist die Grundkonfiguration erledigt und der Server kann gestartet werden. Damit die Mods aktiviert werden, muss ein neuer Parameter beim Start übergeben werden:

-dll addons/metamod/dlls/metamod.so

In der vollständigen Kommandozeile könnte dies dann so aussehen:

./hlds_run -game cstrike +map de_dust2 +maxplayers 20 -dll addons/metamod/dlls/metamod.so

Sobald der Server hochgefahren ist kann in der Konsole des Spieles mittels des Befehls:

meta list

überprüft werden ob das Plugin erfolgreich gestartet wurde.

Der AMX Mod wurde erfolgreich installiert

In der Standard-Installation verfügt der AMX Mod über 76 Befehle, welche für den Betrieb und die Steuerung des Servers genutzt werden können:

1: amx_help - displays this help
2: amx_langmenu - displays language menu
3: amx_language [|save] - displays/sets/saves language
4: amx_listmaps - lists maps that can be nominated
5: amx_who - displays who is on server
6: say /currentmap - displays current map (say)
7: say /ff - displays friendly fire status (say)
8: say /flop15 - displays worst 15 players (MOTD)
9: say /flop15new - displays worst 15 players (MOTD)
10: say /hp - displays info. about your killer (chat)
11: amx_csayy [color]  - sends center hud message to all players - anonymous
12: amx_flicksay [color]  - sends flickering hud message to all players
13: amx_flicksayy [color]  - sends flickering hud message to all players - anonymous
14: amx_fsay   [color]  - sends hud message to all players
15: amx_fsayy   [color]  - sends hud message to all players - anonymous
16: amx_fxsay [color]  - sends fx hud message to all players
17: amx_fxsayy [color]  - sends fx hud message to all players - anonymous
18: amx_help - displays this help
19: amx_kick  [reason] - kicks
20: amx_kickmenu - displays kick menu
21: amx_langmenu - displays language menu
22: amx_language [|save] - displays/sets/saves language
23: amx_leave  [tag] [tag] [tag] - kicks non specified players
24: amx_listmaps - lists maps that can be nominated
25: amx_map  - changelevel
26: amx_mapmenu - displays changelevel menu
27: amx_name   - changes player's name
28: amx_plugcmdmenu [filename.amx/plugin name] - displays plugins commands menu
29: amx_psay   - sends private message
30: amx_psayy   - sends private message - anonymous
31: amx_say  - sends message to all players
32: amx_sayy  - sends message to all players - anonymous
33: amx_scrollsay [color]  - sends scroll message to all players
34: amx_scrollsayy [color]  - sends scroll message to all players - anonymous
35: amx_slap  [power] - slaps
36: amx_slapmenu - displays slap/slay menu
37: amx_slay  - slays
38: amx_speechmenu - displays speech menu
39: amx_teammenu - displays team menu
40: amx_teleportmenu - displays teleport menu
41: amx_tsay [color]  - sends left side hud message to all players
42: amx_tsayy [color]  - sends left side hud message to all players - anonymous
43: amx_vote    [answer #3] [answer #4] - starts a custom vote
44: amx_voteban  [ip] - starts a voteban
45: amx_voteff - starts a vote to enable/disable Friendly Fire
46: amx_votekick  - starts a votekick
47: amx_votemap  [map] [map] [map] - starts a votemap
48: amx_votemapmenu - displays votemap menu
49: amx_votenextmap [time] - the map will be changed [time] seconds after the end of the vote
50: amx_who - displays who is on server
51: amxmodmenu - displays menus
52: say <@[@|@]|#[#|#]|$[$|$]>[color]  - displays chat/hud message
53: say /currentmap - displays current map (say)
54: say /ff - displays friendly fire status (say)
55: say /flop15 - displays worst 15 players (MOTD)
56: say /flop15new - displays worst 15 players (MOTD)
57: say /hp - displays info. about your killer (chat)
58: say /me - displays current round stats (chat)
59: say /rank - displays your rank (chat)
60: say /rankstats - displays your server stats (MOTD)
61: say /rankstatsnew - displays your server stats (MOTD)
62: say /report - displays weapon status (say_team)
63: say /score - displays last score (chat)
64: say /stats - displays players stats (menu/MOTD)
65: say /statsme - displays your stats (MOTD)
66: say /streak - display info. about your killing streak
67: say /switch - switch client's stats on or off
68: say /thetime - displays the time (say)
69: say /timeleft - displays time left on map (say)
70: say /top15 - displays top 15 players (MOTD)
71: say /top15new - displays top 15 players (MOTD)
72: say currentmap - displays current map
73: say nextmap - displays next map
74: say thetime - displays current time
75: say timeleft - displays timeleft
76: say_team @ - displays message to admins

Mit Homebrew gibt es neben MacPorts einen Paket-Manager für macOS. Wenn man Homebrew installiert wird man feststellen das automatisch einer anonymen Datensammlung zugestimmt wurde. Möchte man dieser Datensammlung widersprechen so kann dies mit dem Kommando:

brew analytics off

bewerkstelligt werden. Auf einer gesonderten Info-Seite informiert das Homebrew-Projekt darüber welche Daten gesammelt werden.

Mit dem Mi Band 2 hat Xiaomi einen Fitnesstracker mit einem unschlagbaren Preis auf den Markt gebracht. Er verfügt über ein OLED-Display, einen Schrittzähler (mit Distanzanzeige), kann den Puls messen und verfügt über Funktionalität zur Pulsmessung. Daneben ist der Tracker wasserdicht und macht durch Vibrationen auf sich aufmerksam und ist für knapp 40 € im Handel erhältlich.

Das Mi Band 2 in seiner Verpackung

Nachdem man das Mi Band 2 ausgepackt hat, sollte der eigentliche Tracker mit dem mitgelieferten Kabel geladen werden. Dies nimmt etwa ein bis zwei Stunden in Anspruch. Die Akku-Laufzeit im Betrieb beträgt zirka 20 Tage, so das dass Ladekabel nur selten benötigt wird. In dieser Zeit kann die offizielle Mi Band 2-App bereits auf dem iOS-Gerät installiert werden.

Mi Fit
Preis: Kostenlos

Alternativ kann auch die App Mi HR für eine dauerhafte Pulsmessung genutzt werden:

Nach der Installation der Mi Fit-App muss ein Mi Account angelegt werden. Nachdem dieser Account angelegt und mit einigen persönlichen Daten befüttert wurde kann mit dem Pairing des Trackers mit dem iOS-Gerät begonnen werden.

Dazu muss Bluetooth auf dem iOS-Gerät aktiviert sein. Die App sucht anschließend nach dem Mi Band 2. Dies kann ein bis zwei Minuten in Anspruch nehmen. Anschließend vibriert das Mi Band 2 und die Erkennung muss mit einem Druck auf den Tracker bestätigt werden.

Im nächsten Schritt verlangt die App Zugriff auf Apple Health um die Werte zu synchronisieren. Danach wird, wenn vorhanden, die aktuelle Firmware auf das Mi Band 2 gespielt. Unter iOS 10 kann das Update der Firmware fehlschlagen. Die Empfehlung des Herstellers ist es das Update so oft zu starten bis es schlussendlich aufgespielt werden kann.

Die Firmware des Mi Band 2 wird aktualisiert

Wurde das Update erfolgreich durchgeführt synchronisiert sich das Mi Band 2 mit dem iOS-Gerät und kann anschließend genutzt werden. In der App kann man nun noch einige Komfortfunktionen wie z.B. die Vibration bei eingehenden Anrufen einstellen.

Counter-Strike 1.6 hat mittlerweile einige Jahre auf dem Buckel, gehört aber immer noch zu den beliebtesten Multiplayer-Spielen. Möchte man unter Ubuntu einen Server aufsetzen, so ist dies in wenigen Schritten erledigt. Im ersten Schritt müssen Abhängigkeiten installiert und ein Nutzer für den Server angelegt werden:

apt-get install lib32gcc1
adduser counterstrike

Nach dem Anlegen des Nutzers wird in dessen Kontext gewechselt und dort die Ordner-Infrastruktur angelegt:

su counterstrike
cd
mkdir steam
mkdir game

Nun steht die Installation des Steam-Kommandozeilen-Clients an:

cd steam
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
rm steamcmd_linux.tar.gz

Danach kann der Steam-Client gestartet werden und der Counter-Strike-Server installiert werden:

./steamcmd.sh
login anonymous
force_install_dir /home/counterstrike/game/
app_update "90 -beta Beta" validate

Beim app_update kann es bei der Installation zu folgender Fehlermeldung kommen:

Error! App '90' state is 0x6 after update job.

Zur Lösung des Problems muss der Befehl:

app_update "90 -beta Beta" validate

so oft ausgeführt werden, bis der Vorgang schlussendlich erfolgreich beendet wird. Anschließend kann der Steam-Client mit dem Kommando exit beendet werden. Bevor man den Server startet, sollte man die server.cfg-Datei den Umständen entsprechend anpassen. Diese befindet sich im Ordner /home/counterstrike/game/cstrike/. Fertig konfiguriert könnte diese so aussehen:

// Use this file to configure your DEDICATED server. 
// This config file is executed on server start.

// server password
sv_password "geheim"
rcon_password "geheim"

// disable autoaim
sv_aim 0

// disable clients' ability to pause the server
pausable 0

// default server name. Change to "Bob's Server", etc.
hostname "Mein erster CS-Server"

// maximum client movement speed 
sv_maxspeed 320

// 20 minute timelimit
mp_timelimit 20

sv_cheats 0

// load ban files
// exec listip.cfg
// exec banned.cfg

Wenn man beim Start des Servers mittels:

./hlds_run -game cstrike +map de_dust2

folgende Ausgabe erhält:

dlopen failed trying to load:
/home/counterstrike/.steam/sdk32/steamclient.so
with error:
/home/counterstrike/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory

muss ein symbolischer Link erstellt werden, welcher auf den linux32-Ordner der Steam-Installation zeigt:

cd
mkdir .steam
ln -s /home/counterstrike/steam/linux32 /home/counterstrike/.steam/sdk32

Anschließend kann der Server wieder gestartet werden. Alternativ kann der Server natürlich auch in einer screen-Umgebung gestartet werden, so das dieser im Hintergrund läuft.

Je nach Speicherkonfiguration des eigenen iOS-Gerätes hat man mehr oder weniger Probleme mit dem freien Speicher. Immerhin nimmt das aktuelle iOS 10 mit den vorinstallierten Apps bereits zwischen 4 und 6 Gigabyte im Speicher ein. Besonders die Konfigurationen mit 32 oder gar 16 GB geraten hier schnell an ihr Limit, da die vorinstallierten Apps in der aktuellen Version nicht entfernt werden können. Wenn zu wenig Speicher vorhanden ist, gibt es mehrere Wege den Speicher zu bereinigen. Im ersten Schritt sollte sich in den Einstellungen unter Allgemein -> Speicher- & iCloud-Nutzung -> Speicher -> Speicher verwalten die aktuelle Nutzung angeschaut werden. Hier findet man meist relativ schnell die Platzfresser, da die Apps und deren Größe (inklusive Daten) hier absteigend sortiert sind. Wenn man selbst hier keinen Optimierungsansatz mehr findet, gibt es eine Möglichkeit die interne Bereinigung von iOS anzustoßen.

Der Filmkauf startet die Speicherbereinigung

Dazu muss auf dem Gerät iTunes aufgerufen werden und ein Film mit möglichst viel Datenvolumen herausgesucht werden (The Dark Knight Rises bietet sich hierbei an). Wenn der Film herausgesucht wurde, wird der Kaufen-Button angeklickt. Wichtig ist es die Kaufbestätigung bei iTunes aktiviert zu haben, ansonsten kann es passieren das besagter Film gekauft wird; für den Start der Speicherbereinigung reicht es den Kauf anzustarten. Nachdem der Kaufen-Button angeklickt wurde, zeigt das Gerät bei vollem Speicher eine Warteanimation an und nach einigen Sekunden wird man gebeten den Kauf per TouchID oder per Kennwort zu bestätigen. Hier kann der Vorgang abgebrochen werden. Die Speicherbereinigung von iOS wurde durchgeführt und man sollte nun zwischen einem und sechs Gigabyte mehr freien Speicher auf dem Gerät zur Verfügung haben. Die Speicherbereinigung hat dabei im Hintergrund nicht benötigte Cache-Dateien und ähnliches vom Gerät entfernt.

Der Fabrikator Mini ist ein günstiger 3D-Drucker. Unter macOS kann er unter anderem mit der Software Cura betrieben werden. Allerdings sollte man die nicht aktuelle Version für macOS nutzen. Stattdessen sollte man die Version 15.04.2 herunterladen und nutzen. In späteren Versionen funktioniert die Zusammenarbeit mit dem Fabrikator Mini nicht mehr so wie sie sollte.

Der Fabrikator Mini in Aktion

Nach dem Anlegen eines neuen Drucker vom Typ RepRap sollten im Basic-Tab folgende Werte eingestellt werden:

Quality
Layer height (mm): 0.1
Shell thickness (mm): 0.8
Enable retraction: true

Fill
Bottom/Top thickness (mm): 0.6
Fill Density: 20

Speed and Temperature
Print speed (mm/s): 20
Printing temperature (C): 210

Support
Support type: None
Platform adhesion type: None

Filament
Diameter (mm): 1.75
Flow (%): 100

In den Advanced-Tab gehören folgende Einstellungen:

Machine
Nozzle size (mm): 0.4

Retraction
Speed (mm/s): 30
Distance (mm): 3

Quality
Initial layer thickness (mm): 0.3
Initial layer line width (%): 100
Cut off object bottom (mm): 0.0
Dual extrusion overlap (mm): 0.15

Speed
Travel speed (mm/s): 30
Bottom layer speed (mm/s): 20
Infill speed (mm/s): 0.0
Top/bottom speed (mm/s) 0.0
Outher shell speed (mm/s): 0.0
Inner shell speed (mm/s) 0.0

Cool
Minimal layer time (sec): 5
Enabling cooling fan: true

Als Start-GCode empfiehlt es sich folgenden Code zu nutzen:

M53; enable feed-hold
G0 Z2.0; always start from the same height to compensate backlash
G28; move extruder to 0
G28; move extruder to 0
G28; move extruder to 0
G28; move extruder to 0
G28; move extruder to 0
M420 R0.0 E0.0 D0.0 P0.1 ; turn the lights on
M107; turn off fan
G64 P0.05 Q0.05; path blending settings
G23; unretract

Der End-GCode sollte so aussehen:

M104 P0
G0 X49 Y49 Z70; move the extruder out of the way
M420 R0.0 E0.1 D0.0 P0.6 ; signalize end of print
M140 P0 ; turn off heatbed

Der Start- und End-GCode sind sicherlich nicht die optimale Version, funktionieren mit dem Fabrikator Mini aber schon halbwegs passabel. Mit diesen Einstellungen kann anschließend der erste Druck getätigt werden. Je nach Modell kann dies einige Minuten bis Stunden in Anspruch nehmen.

Beim Update einer MediaWiki-Installation auf die Version 1.28.1 über das update.php-Skript erhielt ich folgende Fehlermeldung:

Error: your composer.lock file is not up to date. Run "composer update" to install newer dependencies

Hintergrund sind unerfüllte Abhängigkeiten, welche wohl nur für die Entwicklung benötigt werden. Um das Update trotzdem durchzuführen sollte folgendes Kommando im Terminal genutzt werden:

php ./update.php --skip-external-dependencies

Damit wird die Prüfung der externen Abhängigkeiten deaktiviert und die Aktualisierung kann erfolgreich durchgeführt werden.

Für macOS existiert seit vielen Jahren eine Erweiterung (der macOS Server), mit welchem dem Betriebssystem bestimmte Server-Funktionalitäten hinzugefügt werden können. Wenn der macOS Server später wieder deinstalliert werden soll, so ist dies in zwei einfachen Schritten möglich.

Die Konfigurationsoberfläche des macOS Server

Im ersten Schritt muss die Server-Applikation aus dem Programme-Ordner gelöscht werden. Anschließend muss der Ordner /Library/Server gelöscht werden. Damit ist der macOS Server deinstalliert.