Disable the LED on the Pi Zero W

This was interesting. I found several posts on the net, on how to disable the green LED on the Pi Zero W. None of them where working. Then I noticed, that the led was just inverted. On state means the LED is dark off state means the led is lit.
So this is how it works:

echo default-on | sudo tee /sys/class/leds/led0/trigger # LED dark
echo none | sudo tee /sys/class/leds/led0/trigger # LED lit

The LED was lighting my whole bedroom. Now it’s dark at night again.

There are several options to trigger the LED. You can list them with cat /sys/class/leds/led0/trigger. The selected one becomes surrounded with square braces.

cat /sys/class/leds/led0/trigger
#none rc-feedback kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu cpu0 default-on input panic mmc1 [mmc0] rfkill-any rfkill-none rfkill0

As I didn’t find out how to set this using /boot/config.txt. I ust used /etc/rc.local. This way the LED is turned of when boot is completed.

Simple training protocol web-app.

Between the Christmas and New-year, I was starting a small project to get familiar with bootstrap. The Idea came to me, when I was talking to the dude I am Training with. He encourages us do track our Progress. We have a set of 5 or so Exercises to get a merely full body workout within an hour. Which fits nicely into my daily routine. So instead of doing it on Paper or PDF-Forms, I thought it would be nice to do it on my SmartPhone.

Implementation

The result is a web-based App which runs in a normal browser. You start with an empty Plan if you navigate to: netzlan.de/fit. The app is designed to generate an new ID and redirects you to an URL which contains the ID. So for accessing the log afterwards, you need to Bookmark the URL. The page is generated with static HTML. All the content is already loaded and hidden, or will be generated with JavaScript in response to the data returned from the back-end. The back-end is written in PHP, but the communication is JSON only. JavaScript is generating JSON for calling the back-end and the PHP is encoding its answer in JSON. So no HTML is generated with PHP. I chose JSON over XML because it has less overhead and you can work with it easily within Both PHP an JavaScript/JQuery.

Functions

The app is kept very simple. There are merely two to three functions. Generating the ID, getting the exercise protocol and adding new exercises.

Weihnachtliche Beleuchtung mit ATtiny85 und WS2811

Wenn man im Dezember zu Weihnachten durch die Straßen geht, sieht man an vielen Stellen Blitzenden und hektische Beleuchtung an Fenstern, Zäunen und Bäumen.
Weinachtleiche Beleuchtung ist schön. Nur könnte sie etwas ruhiger, aber trotzdem nicht langweilig sein. Sternen-funkeln wäre schön. Bunt wäre auch nicht schlecht. Eine Lichterkette, bei der die einzelnen Lichter zufällig anfangen in einer zufälligen Farbe ein und dann wieder auszublenden.
Und wie immer wenn es so etwas nicht gibt, muss man es halt selber bauen.

Testaufbau für Entwicklung

Komponenten

Für die Umsetzung findet verschiedene Angebote für Lichterketten mit WS281x und WS2801 Chip. Die beiden Chips unterschieden sich durch den Bus, über den sie angesteuert werden. WS2801 verwendet einen Zweidraht Bus. Eine Leitung für den Takt und eine andere für die Daten. Die WS281x Serie wird über einen Eindraht Bus. Der Takt ist fest mit 800 Kinoherz vorgegeben.
Ein Ring aus WS2812, wie im Video zu sehen, dient zum Testen.

Das kleinste was mir für die Steuerung eingefallen ist, war ein ATtiny85. Hier gibt es für die Arduino Umgebung eine fertige Bibliothek eine zur Ansteuerung der WS281x, die auch den ATtiny unterstützt. Man findet sich über die Suche unter „NeoPixel“.

Schaltung

Die Schaltung gestaltet sich als äußerst einfach, sowohl ATtiny85 als auch WS2812 werden an 5V Versorgungsspannung angeschlossen. Die Lichterkette soll später 0,3W pro Pixel haben. Bei 50 Pixel sind das 15 Wart, die das Netzteil liefern muss. Für den Testaufbau genügt der USB-Port. Ein 1000µF Kondensator soll spitzen vom Netzteil und Schwankungen durch Stromverbrauch der LED ausgleichen.
Der Daten-Pin der WS2812 wird an Arduino PIN 1 beziehungsweise Pin 6 des ATtiny85 Gehäuse angeschlossen. Die Pins werden nämlich unterschiedlich nummeriert.

Programmcode

Folgendes Programm steuert dann die Pixel.
TODO: Beschreibung des Programmcode 😉

// there is a 1 in IMPROBABILITY chance to activate a pixel
#define IMPROBABILITY   600

// there are COLORCOUNT colors to chose from
#define COLORCOUNT        8

const byte COLOURS[COLORCOUNT][3] = {
  {65,105,225},//royaleblue
  {255,140,0}, //darkorange
  {178,34,34}, //firebrick
  {99,235,50}, //yellowgreen
  {255,69,0},  //orange red
  {127,0,225}, //lila
  {255,203,5}, //green
  {255,10,10}  //red
};

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

// Pin connected to the NeoPixel Data pin
#define PIN            1

// How many NeoPixels are attached
#define NUMPIXELS      50

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  
  randomSeed(analogRead(0));
  pixels.begin();
}

void loop() {
  for(byte i=0;i<NUMPIXELS;i++){
    pixels.setPixelColor(i, fadein(i));
  }
  pixels.show();
  delay(50/NUMPIXELS);
}

uint32_t fadein(byte pixel) {
  static byte pcolor[NUMPIXELS] = { 0 };
  static byte pvalue[NUMPIXELS] = { 0 };

  if (pvalue[pixel] > 0) {
      pvalue[pixel]++;
  } else if (pvalue[pixel] == 0) {
    if (random(IMPROBABILITY) == 0) {
      pvalue[pixel] = 1;
      pcolor[pixel] = random(COLORCOUNT);
    }
  }
  
  float x = (float)(128-abs(pvalue[pixel]-128))/128;

  byte new_r = COLOURS[pcolor[pixel]][0] * x;
  byte new_g = COLOURS[pcolor[pixel]][1] * x;
  byte new_b = COLOURS[pcolor[pixel]][2] * x;

  return pixels.Color(new_r, new_g, new_b);
}

Syntax-Highlighting in Beiträgen

Nach dem Schreiben des Beitrages über chroot dachte ich mir, dass ein Syntax-Highlighting doch ganz nett wäre.

Also kurzerhand das Plugin „WP Code Highlight.js“ installiert und den Artikel noch einmal etwas überarbeitet. Das Plugin verwendet https://highlightjs.org/ und bindet es einfach konfigurierbar in WordPress ein.

chroot Jail für SFTP und SSH mit minimaler Shell

Miniserie ASCENSION auf Netflix

600 Menschen auf einem Generationen Raumschiff in richtig einer Fremden Welt.

Die miniserie Ascension die man auf Netflix schauen kann ist richtig gut gelungen. Es bleibt bis zum Ende spannend. Intrigen, ein Mord, etwas Horror und Mystery sind auch mit dabei. Leider gibt es nur sechs Folgen. Diese sind dann jedoch mit einem recht abgerundeten Ende versehen. Man bekommt zumindest den Hintergrund des ganzen Projektes mitgeteilt. Für Sci-fi Fans auf jeden Fall sehenswert.

Achtung Spoiler: Ab hier nur weiterlesen, wenn ihr die Serie gesehen habt.

Miniserie ASCENSION auf Netflix weiterlesen

Schneeglöckchen erfrohren?

Man liest zwar hier und da, dass Frühblüher wie Schneeglöckchen nicht erfrieren können, weil sie ihren eigenen Frostschutz produzieren. Die anhaltenden Minusgrade deutlich unter -10°C der letzten Tage waren wohl für diese hier doch zu viel. Sie lassen ihre köpfe hängen.

Bei den Narzissen sieht es da schon besser aus. Vielleicht hatten sie auch einfach ein besseres Timing mit dem Frost.

Update

Ein paar Tage Später haben sie sich dann doch wieder aufgerichtet. Ist schon interessant. Habe ich so vorher noch nicht gesehen.

Auch die Narzissen sind jetzt schon ein Bisschen weiter.

Lightbox

Ein weiteres Plugin ist heute Teil meiner WordPress Umgebung geworden. Nachdem ich Bilder in einen Beitrag eingefügt habe, dachte ich mir, dass es schön wäre, wenn man die auch in groß öffnen könnte, ohne dass man die Seite mit Klick auf das Bild verlässt. Es sollte nichts besonderes sein, eine einfache Lightbox genügt. Unter einer Lightbox versteht man das Abdunkeln der Seite und die Darstellung ges Bildes im Grußformat.

Das Plugin „Easy FancyBox“ erfüllt genau diesen Zweck.

Registrierungs Spam

Update: Nachdem das verwendete Plugin mich im Backend nervte habe ich jetzt auf das „Math Captcha“-Plugin umgestellt. Also kein Problem mehr mit Google und Datenschutz.

Eigentlich hat WordPress ja einen ganz netten Mechanismus zum Registrieren von Benutzern. – Man trägt seine E-Mail ein und Bekommt einen Link zugeschickt, den man zum Bestätigen anklicken muss. Danach vergibt man sein Passwort, beziehungsweise setzt es zurück. Der Admin wird darüber jeweils per E-Mail informiert.

Leider gibt es, warum auch immer Bots, die dies automatisch tun. Also ab ins Backend und den schwachsinnigen Benutzer gelöscht. Da ich das jetzt nicht ständig machen möchte, muss Abhilfe her. Dafür ist meine Toleranzschwelle ziemlich gering. Vielleicht bin ich auch etwas verwöhnt, weil ich mit policyd-weight so gut wie keine Spam-E-Mails bekommen (2-3 pro Jahr).
Warum werden eigentlich die unvollständigen Registrierungen nicht nach einiger Zeit gelöscht? Kann man damit nicht auch Leute nerven, wenn man automatisiert auf dutzenden WortPress Registrierungen die E-Mail Adresse der zu nervenden Person einträgt? Durch eine einfache Einstellung bekommt man das wohl leider nicht gelöst.

Also die Registrierung deaktivieren?

Da gab es doch etwas, was sich CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) nennt. In den Plugins findet man auch gleich was dazu. Dabei kommt reCAPTCHA von Google zum Einsatz.

Und der Datenschutz?

Wird dabei nicht was an Google übermittelt? – Naja, diesen Tot muss man dann eben sterben, wenn man hier einen Kommentar hinterlassen möchte.
Es gibt zwar auch andere Plugins, nur hatten die mir zu wenige Nutzer. Es sollte ja auch getestet sein und immer mir der neuesten Version von WordPress funktionieren, damit man immer schön unproblematisch die Updates fahren kann. Und die Seite wartungsarm bleibt.
Ich könnte natürlich auch ein eigenes Plugin schreiben. Dafür muss ich mich erst noch etwas mehr mit WordPress befassen.

Nicht das sich jemals ein echter Mensch hier registrieren würde.
LOL ?