TimeStamp in mosquitto.log

Monday, September 24. 2018

 mosquitto gibt jedem Log-Eintrag einen TimeStamp im für Maschinen recht praktischen Aekunden-seit-Epoche - Format. Für menschliche augen ist diese Angabe eher sperrig.

Mit perl und ccze (macht's bunt) kann man die Ausgabe etwas aufhübschen:

tail -n2000 -f  mosquitto/mosquitto.log |  perl -pe 's/(\d+)/localtime($1)/e'| ccze -m ansi

 

Presence Detection in WLAN

Sunday, September 9. 2018

 I was not content with the network/pingdevice based presence detection openhab2 offers. While it finds and detects smarphones connect to the wlan, it soon gets beaten by some energy-savong sleep modes, so the device does not ping. It may still respond to arping, though.

The following script is used on a linux router with several interfaces where a device miight be reachable. It can be configured from a settings.ini, reads it's sc an targets from a different ini file and reports it's findings via openHab's REST api.

settings.ini:

[settings]
baseUrl=http://koel.intern:8080/rest/items/
interval=30
interfaces=eth0,eth2


baseUrl points to the REST api of the openHab2 server, interfaces is a comma separated list of the interface/s that should get scanned and interval gives the number of seconds the scanner will sleep between to scans

scan.ini:

[feng]
item=presence_feng
MAC=C0:EE:FB:43:A8:ED

[goldAmmer]
item=presence_goldammer
MAC=192.168.123.11


[ente]
item=presence_ente
MAC=192.168.123.99


Each device has its own section with the section name acting as the unique id of the device, item is the openHab item (expected to be a Switch) that should get the result (ON or OFF) and MAC has the MAC or IP of the device 

The scanner is done in python (2.7)
arpscan.py:

#!/usr/bin/env python
#############################

import ConfigParser
import string
import os
import subprocess
import time
import sys

conf={}
devices={}
interfaces=""
scantext=""
grace=3

def get_script_path():
   return os.path.dirname(os.path.realpath(sys.argv[0]))
        
def LoadConfig(file, config={}):
   """
   returns a dictionary with keys of the form
   <section>.<option> and the corresponding values
   """
   config = config.copy(  )
   cp = ConfigParser.ConfigParser(  )
   cp.read(file)
   for sec in cp.sections(  ):
       name = string.lower(sec)
       obj  = { }
       for opt in cp.options(sec):
           obj[string.lower(opt)] = string.strip(
               cp.get(sec, opt))
       config[name]=obj
   return config

def ScanThings():
       scantext=""
       for interface in interfaces:
           p = subprocess.Popen(["arp-scan","-l","-q","-r","3", "-I", interface], stdout=subprocess.PIPE)
           output, err = p.communicate()
           scantext += output
                
       for key in devices:
           device=devices[key]
           url=conf['settings']['baseurl']+device['item']
           if device["mac"].lower() in scantext.lower():
               print key+" ja"
               val = "ON"
               device["tap"]=0
           else:
               print key+" nein"
               device["tap"] = device.get("tap", 0) + 1
               if device["tap"] <= grace:
                   print key+" tap: "+str(device["tap"])
                   val="na"
               else:
                   val="OFF"
                    
           if val != "na":         
               os.system('/usr/bin/curl --silent --header "Content-Type: text/plain" --request POST --data '+val+' '+url)


conf=LoadConfig(get_script_path()+"/"+"settings.ini", conf)
devices=LoadConfig(get_script_path()+"/"+"scan.ini",devices)

interfaces=conf['settings']['interfaces'].split(",")


while 1:
   ScanThings()
   time.sleep(float(conf['settings']['interval']))

 

           

 

           

The script is most useful when run as a daemon. You can easily do this with systemd which uses .service files found in /lib/systemd/system/

arpscan.service:

[Unit]
Description=Run arpscan device detection
After=multi-user.target
 
[Service]
Type=simple
ExecStart=/usr/bin/python /usr/local/bin/presence/arpscan.py
Restart=on-abort
 
[Install]
WantedBy=multi-user.target

The scanner reads settings and scan data, runs an arpscan on each configured interface and finally searches the specified MAC (or IP, just one of the two is needed) in the result.
it needs the linux arp-scan package to be installed, which you can test and confirm by running

arp-scan -l -I eth0

from the commandline. It needs to be run as root.

Some devices may show up oscillating between on and off, to get more stable results the script waits for a number of fails before the "OFF" result is sent. This can be finetuned by the value for grace. 

 

 Zum Labeldrucker ql-710w (und einigen anderen) gibt Brother ein Kommandozeilentool,
mit dem man Custom pagesizes, also eigene Label-Formate erstellen und einbinden kann.
Das händisch zu versuchen, endet leicht in rot blinkender Drucker-LED.

brpapertoollpr_ql710w -P ql-710w -n 62x35Label -w 62 -h 35

ist die Syntax, um ein neues Format 62x35Label mit Breite 62mm, Höhe 35mm
zu erstellen.

Das Tool geht aber ungefragt davon aus, dass  
in /etc/cups/ppd die Datei ql-710w.ppd existiert und gibt sonst nur
lakonisch ein File not Found zurück.

mit

strace -ff  -e stat64  -e open brpapertoollpr_ql710w -P ql-710w -n 62x35Label -w 62 -h 35

kann man sich das vor Augen führen.

Hier gab es halt nur eine anders benamte .ppd, deshalb einiges Herumsuchen und -kopieren.

andere hier nennenswerte Orte:

/usr/share/cups/model
/opt/brother/PTouch/ql710w/inf

Was eben leider nicht geht, obwohl man es erwartet (und andere
Betriebssysteme auch Druckertreiber haben, die das unterstützen):
Das das Ding von seinem Endlospapier einfach druckt, bis es fertig ist, und
dann abschneidet.

Diese Erfahrung mache ich nicht allein, Tante Guggel findet reichlich ähnliche Fragen. 
Hilfreich waren mir Brother PCLinux-Forum Suse-Forum (mit Hinweisen auf einen besseren Foomatic-Treiber), natürlich das Arch-Drucker-Wiki 


Diese Einrichtung hat mich fast 3 m Etiketten gekostet.

Davon ab ist das ein für seine Zwecke nettes Druckerchen mit ordentlichem Druckbild. Ich bin im Zweifel, ob es grosse Unterschiede zwischen dem Druckwerk des QL-700 und günstigeren Modellen wie dem QL-570 gibt, lt. Datenblatt hat der QL-7XX zwar bis zu 300x600 px Auflösung, aber die Treiberdialoge kennen nur 300px und auch ein anhakbarer Schönschreibmodus hat keine sichtlichen Unterschiede gemacht. Zur Ersteinrichtung des Wlan musste ich auf einem anderen Betriebssystem einmal die Software installieren und eine USB-Verbindung herstellen, ganz ohne Mac oder Win geht es nur, wenn man an seinem AccessPoint die 1-Klick-Anmeldung mit WPS unterstützt.

Arch Linux entschlacken

Sunday, June 2. 2013

Ok, auch Linux verfettet mit der Zeit.
Mal eben ein df -h und mit Schrecken sehe ich, dass die root partition bei über 90% Benutzung angelangt ist.
Mein erster Verdacht (dass ein Backup statt in's gemountete remote-Laufwerk lokal reingerutscht ist, bestätigt sich nicht, stattdessen zeigt mir Konqueror im Viewmode 'File Size View' von /var nur /var/cache/pacman/pkg, alle anderen Verzeichnisse kleben als Pünktchen am Rand.

pacman hebt sich hier vorige versionen aller packages auf, um dem Nutzer so schmerzloses Downgrade von Paketen zu ermöglichen. Sowas habe ich bislang noch nicht machen müssen.

Google schickt mich zum pacman-Artikel im Arch-wiki und dort finde ich den Hinweis auf das Putzprogramm paccache. paccache -h zeigt die Optionen, ich putze alle alten Versionen und behalte nur die jeweils letzte von jedem mit
paccache -r -k1
die fettesten Brocken, KDE-Hintergrundbilder, vertreibe ich ganz mit
paccache -r -k0 kdeartwork-wallpapers
paccache -r -k0 kde-wallpapers


Ergebnis: 12 GB frei gemacht, Benutzung liegt wieder bei 42%. Dauer (mit Googlen): 15 min.

 

Mäusespeck

Saturday, April 6. 2013

 Den Trackball von LogiTech gibt es offenbar nur noch als kabelloses Device (und zu einem Preis, der jeden Kontakt zu den Herstellungskosten verloren hat). Musste trotzdem sein, und: AEG - auspacken, einschalten, gehtnich.
dmesg meinte dazu:

usb 6-1: new full-speed USB device number 5 using uhci_hcd
usb 6-1: device not accepting address 5, error -71
hub 6-0:1.0: unable to enumerate USB device on port 1
und kernel.log präzisierte:
device descriptor read/64, error -71
Auf den einschlägigen Seiten, die mir Google fand, stand nichts Weiterführendes. Was es dann brachte: den kleinen USB-Stecker in einen anderen USB-Port einzustöpseln.
kernel.log meint:
usb 6-2: new full-speed USB device number 10 using uhci_hcd
logitech-djreceiver 0003:046D:C52B.0006: hiddev0,hidraw3: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:1d.2-2/input2
input: Logitech Unifying Device. Wireless PID:1028 as /devices/pci0000:00/0000:00:1d.2/usb6/6-2/6-2:1.2/0003:046D:C52B.0006/input/input12
logitech-djdevice 0003:046D:C52B.0007: input,hidraw4: USB HID v1.11 Mouse [Logitech Unifying Device. Wireless PID:1028] on usb-0000:00:1d.2-2:1
 
Jetzt maust sie.
 
(Page 1 of 8, totaling 38 entries) » next page