Archive for the ‘Programming’ Category.

Beispiel Kunden-Programmierung: Honeywell BasicTE

Ein Honeywell Kunde möchte von CK3, Windows Mobile 6, Intermec Terminal Emulation zu Honeywell CK65, Android 9, Honeywell BasicTE wechseln.

Für die SAP Telnet/VT Anwendung werden zwei spezielle Anpassung notwendig:

  1. Beim  Drücken der F5 Taste soll die Zeichenfolge “~[35” (F21) zum Host gesendet werden
  2. Wenn GS1-128 Barcode Typen gescannt werden, sollen diese mit dem Präfix [C1 versehen werden.
  3. Das GS Symbol in GS1-128 Barcode Typen muß durch “#” ersetz werden.

Die oben genannten Bedingungen sind auf dem CK3 implementiert. Dort kann man zB den Symbology Identifier (Aim ID) nur für GS1-128 einsetzen lassen. Auf dem CK65 ist diese Aim ID Einfügung nur global für alle Barcode Typen einschaltbar. Die Ersetzung des GS Symbols (hex: 0x1D) ist auf dem CK3 ebenfalls von Haus aus möglich. Der CK65 bietet dies Möglichkeit im Zusammenhand mit Honeywell BasicTE nicht.

Die Tastenbelgung F5->”~[35″ ist in der BasicTE Anwendung über die Anpassung der CustomKeyboard.xml möglich, welche auch das Tastenlayout und die Funktionen der BasicTE Software Tastatur bestimmt.

Da die BasicTE den Barcode Scanner direkt ansteuert muß die Aim ID Einsetzung und die GS Symbol ersetzung über ein sogenanntes DataEdit Plugin realisiert werden. Dazu ist etwas Android Programmierung notwendig. Diese Android Programm erhält dann die Barcode Daten und den Typ über einen Broadcast und kann die Daten dann verändert zurückliefern.

Nach erstenTests und Korrekturen kann der Kunde nun das CK65 uneingeschränkt statt dem CK3 verwenden.

COVID-19 Infektionen in Deutschland

Auf meinem Github Account habe ich eine Bash Script Sammlung hinterlegt, mit der man die aktuellen COVID-19 Zahlen schnell in einem Plot sehen kann.

Die bereits verfügbaren grafischen Darstellungen waren mir in meinem Browser zu langsam. Deshalb habe ich meine eigene Darstellung mit Hilfe von Bash und GNUPlot erstellt:

LED candle light with timer

LEDTimedCandle

I did a lot of research on battery powered LED candle lights circuits and code and was unable to find a time controlled LED candle light.

As I have some ATTiny13 left, I decided to use this little chip. As I want the LED to do a candle light for about 4hours and then stay of for another 20 hours, I need on timer and counter. Another timer/PWM is needed to immitate a candle flickering. But the ATTiny13 has only one timer. On the ATTiny13 you can either use the timer or PWM.

Fortunately the ATTiny has also a Watchdog timer that can be used to call an interrupt function. The watchdog runs with a separate 128kHz clock, independent from the CPU clock. The largest timeout is 8 seconds. So I need to count this 450 times to have one hour.

// watchdog interrupt
ISR (WDT_vect)
{
  sec8_counter++;

#ifdef USE_HEART_BEAT_LED  
  //flash heart beat LED
  digitalWrite(LED2, HIGH);
  delay(1);
  digitalWrite(LED2, LOW);
#endif
  
  if(sec8_counter>=HOUR_INTERVAL){
    sec8_counter=0;
    if(bLedIsOn==1){
      on_hours++;
      if(on_hours>=MAX_ON_HOURS){
        bLedIsOn=0; //switch to OFF mode
        off_hours=0;
      }
    }else{
      off_hours++;
      if(off_hours>=MAX_OFF_HOURS){
        bLedIsOn=1; //switch to ON mode
        on_hours=0;
      }
    }
  }
  wdt_reset();
}  // end of WDT_vect

The code makes the ATTiny13 sleep for another 8 seconds or light the LED. The ON phase is 4 hours and the sleep phase will be extended to 20 hours.

void loop ()
{
  //sleep 20 hours and work 4 hours
  noInterrupts();
  if(bLedIsOn==1){
    doCandle();
  }else{
    digitalWrite (LED, LOW); //ensure LED is OFF
   goToSleep ();
  }
  interrupts();
}  // end of loop

The sequence starts with the ON phase, when power is applied. In the ON phase I measure about 3mA and in the OFF phase the circuit needs 300µA.

The circuit is documented in the Arduino code file. Running the ATTiny13 at lower clock than 9.6MHz did not change the power usage. But I switched to the 1.2MHz internal clock and disabled BOD (auto power down for low power) to get a longer runtime with two or three AA batteries.

UPDATE 2019/03/10: The wdt calculation is wrong and I changed the 450 cycles for one hour to 388. See github README for full update. The main issue is that the ATTiny13 datasheet says 128kHz but means 131072Hz and not 128000Hz and the wdt oscilator never cycles that fast but more or less at around 113000Hz.

https://github.com/hjgode/LEDTimedCandle/tree/master

CREDITS to all that share their knowledge, especially:

https://github.com/MCUdude/MicroCore

http://forum.arduino.cc/index.php?topic=200590.0

https://electronics.stackexchange.com/questions/74840/use-avr-watchdog-like-normal-isr

http://www.ece.cmu.edu/~koopman/lfsr/index.html

Openvpn server an Deutsche Glasfaser IPv6 only Router und feste-ip.net

OpenVPN auf BananaPi M2 Zero W mit Raspbian

Deutsche Glasfaser Genexis Router in Verbindung mit feste-ip.net zur Umsetzung ipv4 nach ipv6

Ich versuche hier meine Installation basierend auf den nachfolgenden Quellen zusammenzufassen.

Quellen: https://wiki.ubuntuusers.de/OpenVPN/ und https://blog.sengotta.net/openvpn-server-am-unitymedia-ds-lite-anschluss-betreiben/

Nachfolgend sind persönliche Angaben in < und > gesetzt. IP Addressen sind in der Form durch x ersetzt.

Feste-ip.net Universal Portmapper einrichten

Über https://test-ipv6.com/ die öffentliche IP6 Adresse des Servers (VPN Gateway) ermitteln.

Feste-IP.net Portmapper

Bei feste-ip.net habe ich eine Port Weiterleitung auf die öffentliche IPv6 Addresse des BananaPi (dem OpenVPN Server) und den Port 443 unter “Universelle Portmapper” angelegt.

Ich habe hier den Port 443 gewählt da dieser auch in vielen Fremdnetzen (zb Mobilfunk Netze) funktioniert. Der Standard VPN Port 1194 ist möglicherweise in dem einen oder anderen Netz gesperrt.

Ich habe einen Alias gewählt den ich mir leichter merken kann als den DNS-Namen. Ausserdem laufen auf demselben BananaPi M2 Zero W noch drei weitere Dienste. Diese sind über den gleichen Alias unter drei anderen Ports erreichbar.

In der Client.conf muss später der Alias Name und der gemapte Port angegeben werden, da die Verbindung nicht über IPv6 und Port 443 hergestellt wird. Siehe client.con Zeile:

remote <aliasname>.feste-ip.net <auf 443 umgeleiterter port>

Openvpn Server einrichten

Continue reading ‘Openvpn server an Deutsche Glasfaser IPv6 only Router und feste-ip.net’ »