Obi Steckdose mit Tasmota flashen

Posted by quark007 | Posted in Computer & IT, Programmieren / Coden | Posted on 20-03-2018-05-2008

3

Zugegeben, ich bin etwas blau-äugig an die Sache heran gegangen. Ich dachte mit ein wenig Erfahrung im Löten, mit RF433 Spielereien auf den GPIO des RaspberryPi wäre ich einigermaßen ausgestattet. Im Endeffekt hat es super geklappt, aber ich kam mir nie sicher vor, was ich machen (beim Flashen). Eigentlich ist es aber auch gar nicht so schwer, wenn man den Weg kennt. Daher hier eine kurze Anleitung (die englische allgemeine Version gibt es hier und Infos zu dem Obi-Stecker hier).

Was man benötigt:

  • Obi Wifi Steckdose
  • USB UART TTL 3.3V Converter/Programmer (e.g. CP2102, CH340G, FT232, PL2303)
  • Schraubenzieher (Kreuzschlitz und 3-fach Kreutschlitz)
  • Steckverbinderleiste (altenativ Chip-Sockel mit langen Pins) oder Kabel zum fest-anlöten
  • ev. ein 3.3V Netzgerät

Damit kann es losgehen

1. Vorbereiten des Steckers

Mit dem 3-Flügel Schraubenzieher die beiden Schrauben am Gehäuse öffnen. Anschließend mit einem leichten Drucke die Gehäuse-Ober- von der Unterseite abnehmen und mit einem Kreuzschlitzschraubenzieher die Platine vom Gehäuse lösen. Anschließend kann man die Platine vorsichtig, dass keine Kabel abreißen oder Elektronikbauteile beschädigt werden, herausnehmen. Dann sieht man auch schon wunderbar die Lötstellen für unsere Steckerleiste.

Wie man lötet brauche ich hoffentlich nicht erklären. Nun lötet man 7 Steckstifte an die entsprechenden Kontakte. Da man die Lötstelle schlecht einsehen kann, ist dies eine schöne Fehlerquelle, falls das Flashen nicht klappt. Dann nochmal nachlöten.

2. Vorbereiten der Firmware

Zunächst Arduino IDE herunterladen. Anschließend in ein Verzeichnis entpacken und vor dem ersten Start direkt dort einen neuen Ordner mit dem Namen “portable” anlegen. Damit arbeitet Arduino IDE automatisch immer in seinem eigenen Ordner (User-unabhängig). Nun kann Arduino IDE gestartet werden. Wir müssen ihm nun alle Infos zu dem ESP8266 beibringen. Dazu auf “File->Preferences” / “Datei->Voreinstellungen” gehen und in “Additional Bookmarks Manager URLs” folgende Quelle einfügen (ich habe zusätzlich die Sprache auf Englisch umgestellt um mit den GitHub Angaben arbeiten zu können) und mit “ok” bestätigen.

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

Dann gehen wir auf “Tools->Board->Boardmanager” und suchen in der Liste den ESP8266 und installieren die neueste Version. Danach wählen wir unter “Tools->Board” den ESP8266 aus. Die Einstellungen sollten wie auf dem Bild aussehen. Wichtig ist noch der Com-Port. Der muss auf die Nummer eures UART-TTL-Boards eingestellt werden (kann man im Gerätemanager nachschauen).

Arudino IDE schließen. Von GitHub die neueste Tasmota-Firmware herunterladen und in den “portable/sketchbook/” Ordner entpacken. Anschließend aus dem Tasmota Ordner den Inhalt des Lib-Ordners in “portable/sketchbook/libraries” verschieben.

Nun öffnet Arduino IDE wieder und wählt über File/Datei das Sketchbook “Sonoff” aus. Über den Pfeil ganz rechts die Datei “user_config.h” auswählen. Darin folgende Änderungen vornehmen und speichern:

– CFG_HOLDER auf den heutigen Tag setzen (z.B. 0x20180318)

– WiFi Gateway, DNS,

– Wlan SSID und Key (macht das konfigurieren einfacher, wenn das Gerät direkt im WLan ist)

– Wenn man möchte kann man auch gleich den MQTT Zugang konfigueren (funktioniert über die Web-Oberfläche am Ende aber auch sehr gut)

Mit “Sketch -> Verify/Compile” die Firmware einmal kompilieren und prüfen ob alle Abhängigkeiten erfüllt sind.

3. Vorbereiten und Flashen der Hardware

Vor dem ersten Einstecken des UART-TTL die Treiber von der Hersteller Homepage herunterladen und installieren. Anschließend einstecken und zunächst mit einem Multimeter prüfen, ob zwischen dem 3.3V Pin und Ground wirklich nur 3.3V anliegen (sonst geht der ESP ganz schnell kaputt).

Jetzt verbinden wir UART-TTL und die Wifi-Steckdose. Manchmal, wenn das Flashen nicht funktioniert, kann man probieren RXD und TXD auf einer Seite zu tauschen (bei neuen Sonoffs ist das manchmal der Fall).

  • UART            Obi-Steckdose
  • 3.3V               VCC
  • RXD              TXD
  • TXD              RXD
  • GND             GND

Den 3.3V Pin am UART lasse ich erst einmal nicht verbunden (Überspannung beim Anstecken). Um den ESP in den Flash-Modus zu bekommen, müssen wir den GPIO0 mit GND kurzschließen (entweder mit einem extra GPIO-Kabel oder einfach mit einem Krokodilklemmen-Kabel). Jetzt den 3.3V Pin anschließen und nach 2-5 Sekunden wieder entfernen (die blaue LED leuchtet dann ganz leicht).

Jetzt installieren wir die neue Firmware über “Sketch -> Upload”. Ist der Upload bei 100% ohne Fehler durchgelaufen, trennen wir die Spannung wieder (ziehen den Stecker also vom UART ab).
Bei mir tauchte beim Upload anfangs öfter ein Fehler auf, dass der Sync nicht funktioniert hat. Bei mir war das ein Kontakt-Problem der Stiftleiste durchs löten. Nocheinmal erwärmt und neues Lötzinn hat Abhilfe geschaffen.

Als nächstes ändern wir in der user_config.h den CFG_HOLDER zurück auf “0x20161209” und flaschen das ganze nochmal (natürlich wieder im Flash-Modus). Das Vorgehen ist dabei das gleiche wie eben.

Wenn das alles ohne Fehler funktioniert hat, schließen wir die 3.3V wieder an, diesmal nicht im Flash-Modus. Jetzt kann man im Router nach der IP-Adresse Ausschau halten. Diese ruft man dann im Browser auf und kann alles weitere konfigurieren.

4. Steckdose konfigurieren

In der Oberfläche (siehe Bild) geht man auf “Configuration” und “Configure Modul”. Dort wählt man “18 Generic” aus und klickt auf “Save”. Das Modul startet neu und man geht nochmal auf die gleiche Konfigurations-Seite. Dort muss man dann folgende Einstellungen vornehmen:

Nocheinmal speichern und den 3.3V Pin wieder trennen.

Von jetzt an kann man den Stecker direkt in eine Schuko-Steckdose stecken und betreiben. Einstellungen kann man auch jetzt immernoch vornehmen.

 

 

5. Einbinden in OpenHAB2 über MQTT

Für das Einbinden in OpenHAB braucht man erstmal einen Mosquitto (MQTT)-Server. Den kann man auf dem gleichen Gerät installieren wie openHAB auch. Wichtig ist, dass man einen Anmeldenamen und ein Passwort für den Server vergibt. Die sind bei Tasmota nämlich Pflicht (wäre auch blöd, wenn irgendjemand einfach alle MQTT-Geräte steuern könnte). Eventuell die Firewall prüfen, dass Verbindungen auch erlaubt sind.

In OpenHAB nun das MQTT Plugin installieren. In dem Conf-Ordner unter “services” die mqtt.cfg entsprechend eures MQTT-Servers anpassen. Es hilft hier OpenHAB einmal neu zu starten. Jetzt kann man die Items für die Steckdose anlegen. Ich habe mich zunächst auf das An-Aus-Schalten beschränkt. Dafür in einer .items-Datei folgende Zeile anlegen:

Switch item_id "Item Name" <light> (LivingRoom,Light) { mqtt=">[mqttbroker:cmnd/mqtt_plug_name/power:command:*:default],
                                                              <[mqttbroker:stat/mqtt_plug_name/POWER:state:default]" }

Anschließend in der sitemap den Schalter hinzufügen. Bei mir hat es damit einwandfrei funktioniert, direkt vom Start weg.

 

Für Fragen, Anregungen und Fehler bin ich immer zu haben. Ich versuche noch am gleichen Tag zu antworten.

 

Hier eine Liste meiner Quellen:

https://smarthome.schimmer-media.de/forum/index.php?thread/535-obi-wlan-steckdose-mit-esp8266/ (Hat mich erst auf den Geschmack gebracht)

https://forum.iobroker.net/viewtopic.php?f=34&t=12125 (der erste Versuch der funktioniert hat ; leider not wenige Möglichkeiten)

https://github.com/arendst/Sonoff-Tasmota/issues/1988 (Obi-Plug Einstellungen ; doppeltes Flashen)

https://github.com/arendst/Sonoff-Tasmota/wiki/Arduino-IDE (Arduiono IDE Vorgehen)

https://community.openhab.org/t/itead-sonoff-switches-and-sockets-cheap-esp8266-wifi-mqtt-hardware/15024 (OpenHAB Integration)

Connman WLan Verbindung

Posted by quark007 | Posted in Computer & IT, Programmieren / Coden | Posted on 22-12-2017-05-2008

0

Nach einiger Zeit habe ich mein altes RaspberryPi mit OSMC-Installation herausgekramt. Eigentlich nur um mein 433MHz Sender-Modul zu testen. Beim Anschließen, hat allerdings das WLan nicht funktioniert. Das hat mich gefuchst und ich habe versucht es neu einzurichten.

Ich hatte in der Zwischenzeit mein WPA2-Key geändert, da einige Geräte mit einem “=” in der Passphrase nicht klar kamen. Also habe ich versucht es über die Oberfläche von OSMC zu ändern. Doch das schlug immer fehl (Ich weiß nicht ob es an Fehlern der Eingabe oder an einem falschen Tastatur-Layout gelegen hat).

Nachdem Login per SSH (im LAN) habe ich versucht es über Connman mit dem WLan zu verbinden (wie hier beschrieben). Doch es hat nicht geklappt. Keine Meldung, dass die Verbindung korrekt hergestellt werden konnte.

osmc@rpi2:~$ connmanctl
connmanctl> enable wifi
    Enabled wifi
connmanctl> scan wifi
    Scan completed for wifi
connmanctl> services
    *AO Wired ethernet_b827ebd04564_cable
    wifi_e894f6191023_hidden_managed_psk
    VM420130-2G wifi_e894f6191023_564d1235f53035302d3247_managed_psk
connmanctl> agent on
    Agent registered
connmanctl> connect wifi_e894f6191023_564d1235f53035302d3247_managed_psk
connmanctl>

Nach dem Connect kam keine Abfrage des WPA-Keys. Eine neue Verbindung mit meinem Gast-WLan hat jedoch funktioniert wie beschrieben.

Ich habe dann rausgefunden, dass in dem Ordner /var/lib/connmann/ die Configurationen der einzelnen Verbindungen gespeichert wurden. Dort habe ich den Ordner meines WLans gelöscht und das ganze nochmal über die connmanctl probiert: es hat geklappt:

connmanctl> connect wifi_e894f6191023_564d1235f53035302d3247_managed_psk

Agent RequestInput wifi_e894f6191023_564d1235f53035302d3247_managed_psk
 Passphrase = [ Type=psk, Requirement=mandatory, Alternates=[ WPS ] ]
 WPS = [ Type=wpspin, Requirement=alternate ]
 Passphrase? xxxxxxxx

Connected wifi_e894f6191023_564d1235f53035302d3247_managed_psk

Vielleicht kann jemand den Hinweis ja gebrauchen 😉

Batch Script Sammlung

Posted by quark007 | Posted in Computer & IT, Programmieren / Coden | Posted on 06-05-2016-05-2008

1

Wie oft ist es schon vorgekommen, dass ich einfach schnell z.B. alle Dateien in einem Ordner als Text-File versenden wollte. Dann fängt jedes mal die Suche nach dem richtigen Skript wieder von vorne an. Daher möchte ich hier eine kleine Sammlung aller meiner verwendeten Scripte anlegen. Vielleicht hilft es ja auch dem ein oder anderen weiter.

Dateien eines Ordner als Text-File [source]

dir /a /b /-p /o:gen >filelist.txt

USB-Scans umbenennen (rekursiv) (Datum+Uhrzeit)

@echo off
FOR /r %%V IN (*.pdf) DO FOR /F "tokens=1-5 delims=./: " %%J IN ("%%~tV") DO IF EXIST "%%L-%%K-%%J %%M-%%N%%~xV" (ECHO rename "%%V" "%%L-%%K-%%J %%M-%%N_1%%~xV" & rename "%%V" "%%L-%%K-%%J %%M-%%N%%~xV") ELSE (rename "%%V" "%%L-%%K-%%J %%M-%%N%%~xV")
pause

 

Bildschirmhelligkeit festlegen Win10DE (hier für EN)

@echo OFF
for /f "tokens=*" %%i in ('powercfg -q ^| find "GUID des Energieschemas"') do set pwrSchm=%%i
set pwrSchm=%pwrSchm:~25,38%

for /f "tokens=*" %%i in ('powercfg -q ^| find "(Bildschirm)"') do set dsply=%%i
set dsply=%dsply:~22,36%

for /f "tokens=*" %%i in ('powercfg -q ^| find "(Bildschirmhelligkeit)"') do set brtnss=%%i
set brtnss=%brtnss:~29,37%

Echo Bildschirmhelligkeit von 0-100% eingeben
set /P brightness= % brightness:  %=%

powercfg -SetDcValueIndex %pwrSchm% %dsply% %brtnss% %brightness%
powercfg -S %pwrSchm%

Aktuell wird der zu setztende Wert abgefragt. Soll es jedoch ein fester Wert sein, dann in der Zeile “set /P brightness=” alles dahinter löschen und einen fixen Prozentwert 0-100 einsetzen

ICS Kalender in Owncloud importieren

Posted by quark007 | Posted in Programmieren / Coden | Posted on 01-01-2016-05-2008

0

Wer einmal mit Owncloud angefangen wird davon vermutlich nicht mehr loskommen. Doch einige Punkte sind noch nicht optimal gelöst bzw. für bestimmte Anforderungen gibt es noch keine OutOfTheBox Lösung. Dazu gehört auch das importieren von KalenderFeeds. In meinem Fall sind das z.B. Abfuhrtermine für Haushaltsmüll oder aber Sportveranstaltungen am Wochenende.

Mit PHP-Skripten habe ich mir bereits aus den Internetseiten die Daten für eine ICS-File extrahiert und daraus eine konforme ics-datei erzeugt. Dies geschieht bei jedem Aufruf des Scripts automatisch. Ein Beispiel, das die Spieltermine der Badmintonabteilung des TSV Lauf 1 aufbereitet (bereits ausgetragene Spiele werden dabei herausgefiltert):

<?php
    $ch = curl_init();
    $URL = "http://www.alleturniere.de/sport/drawmatches.aspx?id=5892ECDD-1447-4D3B-ABF2-99A596D92E79&draw=1";
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //Set the URL
    curl_setopt($ch, CURLOPT_URL, $URL);
    //Execute the fetch
    $data = curl_exec($ch);
    //Close the connection
    curl_close($ch);

    
    $position = strpos($data,'<table class="ruler matches">');
    $text_new = substr($data,$position);
    $ics_data = array("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nMETHOD:PUBLISH\r\nPRODID:-//ABC Corporation//NONSGML My Product//EN\r\nBEGIN:VTIMEZONE\r\nTZID:Europe/Berlin\r\nBEGIN:DAYLIGHT\r\nTZOFFSETFROM:+0200\r\nTZOFFSETTO:+0100\r\nTZNAME:PDT\r\nDTSTART:19700308T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\r\nEND:DAYLIGHT\r\nBEGIN:STANDARD\r\nTZOFFSETFROM:+0100\r\nTZOFFSETTO:+0200\r\nTZNAME:PST\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\r\nEND:STANDARD\r\nEND:VTIMEZONE\r\n"); //SammelArray für ICS-Einträge
    
    if(preg_match_all('~<tr>(.*)<\/tr>~isU', trim($text_new), $matches)) {
        foreach($matches[0] as $array) {
            if(preg_match('~<td class="plannedtime" align="right">([A-Za-z]{2}) ([0-9]{2}).([0-9]{2}).([0-9]{4}) <span class="time">([0-9]{2}):([0-9]{2}){1}</span><\/td><td align="right">[0-9]{1,2}<\/td><td align="right">[H|R]<\/td><td>[0-9]{1,2}<\/td><td class="nowrap" align="right">(.*)<a class(.*)>(.*)<\/a>(.*)<\/td><td align="center">\-<\/td><td class="nowrap">(.*)<a class(.*)>(.*)</a>(.*)<\/td><td>(.*)<\/td><td><a href(.*)>(.*)<\/a><\/td>~',$array,$splits)) {
                if(preg_match('~(TSV Lauf)~is',$splits[9].$splits[13]) AND $splits[15] == "") {
                    $ics_data[] = "BEGIN:VEVENT\r\nDTSTART;TZID=Europe/Berlin:".$splits[4].$splits[3].$splits[2]."T".$splits[5].$splits[6]."00\r\nDTEND;TZID=Europe/Berlin:".$splits[4].$splits[3].$splits[2]."T".($splits[5]+3).$splits[6]."00\r\nLOCATION:".str_replace(",","\,",$splits[17])."\r\nCATEGORIES:Sport\r\nTRANSP: OPAQUE\r\nSEQUENCE:0\r\nUID:\r\nDTSTAMP:".date("Ymd\THis\Z")."\r\nSUMMARY:Badmintonspiel ".$splits[9]." - ".$splits[13]."\r\nDESCRIPTION: \r\nPRIORITY:1\r\nCLASS:PUBLIC\r\nBEGIN:VALARM\r\nRIGGER:-PT10080M\r\nACTION:DISPLAY\r\nDESCRIPTION:Reminder\r\nEND:VALARM\r\nEND:VEVENT\r\n";
                }
            }
        }
    }
foreach($ics_data AS $date) {
    print($date);
} echo "END:VCALENDAR";
?>

Read the rest of this entry »

Xampp Portable mit getrennter Datenablage

Posted by quark007 | Posted in Computer & IT, Programmieren / Coden | Posted on 01-09-2015-05-2008

0

Um auch auf Reisen an meinen PHP-JS-Skripten arbeiten zu können, habe ich mir einen USB-Stick mit TrueCrypt-Container angelegt. In den Container möchte ich aber nicht XAMPP selber packen (auch wegen Performance Gründen), sondern lediglich die Daten. Also habe ich mir die XAMPP-Portable-Version (minimal) herunter geladen und auf den USB-Stick installiert. Ebenso TrueCrypt und einen Container gesichert mit PW und Key-File in den ich www- und mysql-Daten in Unterordner gepackt habe.

Anschließend muss man noch in der XAMPP Config (bei mir speziell MySQL und Apache) die Pfad-Variablen anpassen.

Beim Apache ist das bei mir recht unkompliziert mit einer Änderung der Datei …/xampp/apache/conf/httpd.conf. Dabei tauscht man den Pfad in folgenden Zeilen aus:

DocumentRoot "/xampp/htdocs"
<Directory "/xampp/htdocs">

Bei MySQL sollte es auch nicht komplizierter sein. Man kopiert sich den mysql/data/ Ordner oder dessen Inhalt in einen Ordner in dem gemounteten Container. Anschließend muss man die Daten in …/xampp/mysql/bin/my.ini anpassen.

Wichtig ist dabei folgende Zeilen upzudaten:

innodb_log_group_home_dir = "X:/mysql_data"
innodb_data_home_dir = "X:/mysql_data"
datadir = "X:/mysql_data"

Eigentlich sollte es dann schon funtionieren, doch bei mir hat er den Start immer abgebrochen. In Blick in die mysql_error.log ergab folgenden Fehler, der dafür verantwortlich war:

2015-09-01 18:43:17 [...]  InnoDB: Error: unable to create temporary file; errno: 2

Ein wenig stöbern im Internet hat mich zu diesem Post auf stackexchange geführt. Darin wird erwähnt, dass es zielführend sein kann, den Temp-Ordner auf den Windows-Temp Ordner zu legen. Dazu passt man folgenden Wert in der my.ini an:

tmpdir = "C:/Windows/Temp"

Damit läuft bei mir nun alles so wie gewünscht. Vielleicht hilft es ja auch dem ein oder anderen von euch.

RaspberryPi startet nicht mehr nach Underclocking

Posted by quark007 | Posted in Computer & IT, Programmieren / Coden | Posted on 15-06-2015-05-2008

0

Im Zuge der Installation einer neuen Wetterstation, die mit einem RaspberryPi B+ ausgelesen wird, bin ich auf ein Problem gestoßen, das ich erst nach mehrmaligem neuen Aufsetzen gelöst bekommen habe.

Das RaspberryPi habe ich mit Debian Wheezy aufgesetzt und weewx installiert. Die Station habe ich über USB angeschlossen und sie wurde auch sofort erkannt und abgefragt. Anschließend habe ich alles so eingerichtet wie es sein sollte und auch einen Skin übersetzt (Dazu mehr in einem weiteren Beitrag). Da das Pi dabei kaum etwas zu tun hat, überlegte ich mir es herunterzutakten.

Dafür findet man im Internet Anleitungen zu Hauf, z.B. diese hier (erste bei der google-Suche). Darin wird beschrieben, wie man die /boot/config.txt anpassen muss. Es sollen folgende Zeilen ergänzt bzw. geändert werden:

 arm_freq=700
 arm_freq_min=100
 core_freq=250
 core_freq_min=75
 sdram_freq=400
 over_voltage=0

Das habe ich auch ganz vorbildlich gemacht, doch nach einem reboot konnte ich nicht mehr auf mein RasPi zugreifen. Es wurde auch im Netzwerk nicht gefunden. Selbst bei Anschluss von Tastatur und Bildschirm blieb alles tot. Zunächst dachte ich, ich hätte in der /etc/network/interfaces etwas falsches eingetragen und habe die SD-Karte neu aufgesetzt. Doch beim nächsten mal das gleiche.

Da ich dachte, es könnte an der Netzwerkkonfiguration liegen, habe ich mir ein Live-Linux auf einen Stick gepackt und gestartet, um die SD-Karte mounten zu können. Doch die Konfiguration schien in Ordnung. Dann wollte ich die Änderungen in der /boot/config.txt rückgängig machen, doch unter dem Linux schien der Ordner leer. Ich habe aufgegeben und Windows gestartet. Im Windows wurde die boot-Partition aber erkannt und dort habe ich auch die config.txt gefunden. ALs ich die Änderungen rückgängig machte, startete das RasPi wieder ganz normal, als wäre nichts gewesen.

Mein Tipp daher: das underclocking sollte man besser lassen. In vielen Foren wir darauf verwiesen, dass der Lan-Chip das eigentliche Leistungsmonster ist. Das Underclocking würde sowohl was Wärme als auch Stromverbrauch angeht, kaum etwas bewirken. Wenn ich Zeit habe, werde ich das einmal nachprüfen, sofern es bei mir doch funktionieren sollte.

Homeserver Update Problem

Posted by quark007 | Posted in Computer & IT, Programmieren / Coden | Posted on 09-06-2015-05-2008

0

Da ich es nicht lassen kann und immer wieder am rumspielen und ausprobieren bin, ist mir heute etwas komisches passiert. Nun aber nach einander.

Postfix als Relay-Server einrichten

Ich habe den Postfix Mail-Relay eingerichtet (das hatte bei mir lange nicht funktioniert). Nach dieser Anleitung bin ich vorgegangen und habe alles korrekt eingerichtet. Da ich das ganze über meinen Posteo-Account laufen lassen wollte habe ich folgende Werte angegeben:

Hostname: ServerName [Bei mir war dabei wichtig, dass es eine öffentlich registrierte Internetdomain ist. Sonst gab es einen Fehler]
SMTP-Relay: "[posteo.de]:587"

In der main.cf habe ich diese vorgegebenen Werte ergänzt und die vorigen Eingaben kontrolliert.

Die Datei /etc/postfix/sasl_password mit dem korrekten Inhalt wird mit folgendem Befehl erstellt:

sudo echo "posteo.de [Benutzername]@posteo.de:[Passwort]" > /etc/postfix/sasl_password

Nachdem ich dann den Postfix-Server neugestartet hatte, konnte ich wirklich Mails versenden und die kamen auch an. Ohne das “@posteo.de” im Benutzernamen gab es einen Authentifizierungsfehler. Wurde lediglich posteo.de als Relayserver angegeben, wurde mir der Zugriff verweigert.

Unbekannter Fehler mit falscher Lösung

Mein Smartphone besser gesagt DavDroid meldete auf einmal, dass es ein Synchronisationsproblem gegeben habe. Also den Sync nochmal neu gestartet, aber die Meldung kam wieder. Also versucht mich in OwnCloud einzuloggen: 403 Fehler beim Laden der Seite. Naja dachte ich mir, schau ich mir halt mal nginx-Config an. Sah alles normal aus und auch ein Neustart von nginx hat nichts gebracht.

Da mir im Openmediavault Forum schon einmal sehr weiter holfen wurde und ich erfahren habe, dass der Befehl

sudo apt-get install --reinstall openmediavault

meine Konfiguration beibehält aber Fehler dennoch beseitigen konnte (damals ein Fehler mit nicht mehr auffindbarer env.conf), habe ich diesen Befehl einfach mal ausgeführt. Doch das verschlimmerte alles nur. Meine Plugins (Nginx, Mysql, OMVextras etc.) waren alle weg. Ich habe den Server dann erstmal neu gestartet in der Hoffnung, dass er beim Start die Konfig-Dateien vielleicht doch findet und wieder einbindet, aber war nix. Zu allem Überfluss konnte ich mich auch per SSH nicht mehr einloggen und auch die SMB-Shares waren nicht erreichbar. Die Services waren gestartet, aber das Symbol dafür war rot, also lag ein Fehler vor. Aber welcher?

Das weiß ich bis eben auch noch nicht. Ein ändern der Konfiguration, deaktivieren, speichern und wieder neu aktivieren hat das Problem dann aber beseitigt.

Also habe ich alle Plugins wieder installiert und eingerichtet (was ein act, wenn man die Konsole gewöhnt ist und sich jetzt im Webinterface zurecht finden muss). Dabei ist mir aufgefallen, dass in der Menüleiste ein Feld für das Owncloud-Interface ist. Da ich mein OwnCloud aber manuell in einem Server installiert habe brauche ich das nicht. Read the rest of this entry »

Lilypond: Notenblättchen selbstgemacht

Posted by quark007 | Posted in Computer & IT, Programmieren / Coden | Posted on 19-05-2015-05-2008

9

Für unsere Hochzeit habe ich ein Programm gesucht, mit dem ich die Liedzettel selber machen kann. Im Internet findet man zwar viele Lieder als Bild, aber nie alle in gleicher Schriftart und -größe. Bei der Suche bin ich dann auf Lilypond gestoßen, ein unter GNU GPL stehendes OpenSource Projekt, dass sich das erstellen von Liedblättern, Kompositionen und ganzer Partituren auf die Fahne schreibt.

Es ist ähnlich angelegt wie LaTeX mit Befehlen und einer reinen Texteingabe. Erst durch das Kompilieren in PDF, PNG und/oder Midi kann man das Ergebnis betrachten. Zur einfacheren Handhabung habe ich mich für den Frescobaldi-Editor entschieden. Dieser bietet das für mich wichtige Feature, direkt neben der Texteingabe die kompilierte Ausgabedatei anzuzeigen. Zudem springt er bei Klick auf eine Note an die korrekte Stelle im Quelltext.

Da das Liedblatt bei uns in Din A5 gedruckt werden soll, hat es bei mir nicht funktioniert alle Stücke in einem PDF auszugeben. Die Aufteilung auf die Seiten war mir einfach nicht sauber genug. Also habe ich alle Stücke einzeln kompiliert und mit PDF Split And Merge Basic zusammengefügt, zumal noch Deckblatt, Leerseiten und eine Anfahrtsskizze hinzu kommen mussten.

Beim Erstellen der Stücke sind mir eine Dinge in die Quere gekommen, die ich hier erklären und ausräumen will.

1. Mich hat die Einrückung der ersten Notenzeile zu Beginn des Stückes gestört. Um dies abzustellen, muss in den \layout-Block die folgende Zeile hinzugefügt werden:

\layout {
  indent = #0
}

Wenn man die Einrückung erhöhen will, erhöht man einfach den Wert 0 auf einen passenden >0

2. Außerdem war auf jeder letzten kompilierten Seite ein Hinweis auf das Lilypond Projekt. Dieser Hinweis wäre auf jeder meiner Seiten aufgetaucht, was ich für nicht erträglich erachte. Abhilft bringt folgender Code:

\paper {
  oddFooterMarkup = \markup{ \fill-line{ \line{" "} } }
}

Aus Rücksicht auf das Projekt, sollte man aber an das Ende des gesamten Heftes den Hinweis anfügen. Bekanntheit ist für solche Projekte äußerst wichtig.

3. Bei einem Stück kam es vor, dass eine einzelne Zeile auf eine weitere Seite geschoben wurde. Das ist für einen Liedzettel aber äußerst unpraktisch. Ich habe daher folgenden Code gefunden, der den Abstand der Notenzeilen ändert. Mit den Werten muss man etwas spielen, gerade wenn noch Liedtext unter den Noten vorhanden ist. Bei mir haben die folgenden Zeilen geholfen:

\paper {
  system-system-spacing = #'((padding . 0.5) (basic-distance . 0.5))
}

Damit konnte ich ein wenig mehr Platz gewinnen und so das Lied auf eine Seite gebracht.

4. Wenn mehrere \score Umgebungen auf eine Seite gebracht werden sollen, werden sie automatisch so angeordnet, dass es (angeblich) am Besten aussieht. Das Auseinanderziehen von Liedzeilen empfinde ich aber als nicht schön. Mit den Anweisungen:

\paper {
  ragged-last-bottom = ##f
  ragged-bottom = ##f
}

wird das Einhängen des Inhalts am Seitenende deaktiviert und somit wieder von oben gestapelt angezeigt.

5. Außerdem  haben mich die Seitenzahlen gestört. Diese ließen sich mit folgender Funktion deaktivieren:

\paper {
  print-page-number = ##f
}

Read the rest of this entry »

Mozilla Firefox Sync mit OwnCloud realisieren

Posted by quark007 | Posted in Computer & IT, Programmieren / Coden | Posted on 22-04-2015-05-2008

4

Nachdem die Installation von OwnCloud auf OMV ganz gut geklappt hat, war ich auf der Suche nach neuen Möglichkeiten der Integration. Dabei bin ich auf das MozillaSync Plugin gestoßen.

05-05 WordPress Mozilla_Sync8 05-05 WordPress Mozilla_Sync9Die Installation war genauso einfach wie bei jedem anderen Plugin auch:
über SSH einloggen, in den Addons-Ordner wechseln, mit wget das Archiv laden und in den selben Ordner entpacken.
Dann im OwnCloud Webinterface als Admin das Plugin noch aktivieren. anschließen in die persönlichen Einstellungen gehen und ganz unten für MozillaSync eine E-Mail-Adresse eingeben. Diese wird für die Anmeldung später benötigt. Dabei kann man sich auch gleich die SyncServer-URL kopieren.

Als ich im Firefox nun Sync einrichten wollte, habe ich aber keine Möglichkeit gefunden einen eigenen Sync-Server auszuwählen. Nach einigem Suchen bin ich auf einen Kommentar zu dem Plugin gestoßen. Darin wurde folgendes Vorgehen beschrieben:

1. Im Firefox die URL about:config aufrufen
05-05 WordPress Mozilla_Sync2
2. Dort mit Rechtsklick -> Neu einen neuen String mit dem Namen services.sync.username erstellen und einen x-beliebigen Wert zuweisen. Sollte die Variable schon gesetzt sein, kann der Schritt übersprungen werden.
05-05 WordPress Mozilla_Sync1
3. Im Suchfeld nach dem Wert services.sync.tokenServerURI suchen. Dort muss die OwnCloud-MozillaSync Adresse eingegeben werden.
4. Den Firefox einmal neu starten.
05-05 WordPress Mozilla_Sync3
5. Nun in den Einstellungen auf den Reiter “Sync” gehen und anschließend “Sync einrichten” anklicken.
05-05 WordPress Mozilla_Sync4
6. Als nächstes muss man entscheiden ob man ein neues Gerät zu einem bestehenden Account hinzufügen oder einen neuen Account anlegen will. Ich habe schon einen Account eingerichtet, daher werde ich nur einen neuen Sync-Client hinzufügen.
05-05 WordPress Mozilla_Sync5
6. Da ich mein Gerät nicht bei mir habe, meine Daten aber in meiner auf allen Geräten zugänglichen KeePass-DB gespeichert habe, wähle ich Ich habe mein Gerät nicht bei mir
05-05 WordPress Mozilla_Sync7
7. Im sich nun öffnenden Fenster gibt man die zuvor eingegebene E-Mail-Adresse (im Bsp. name@provider.de) sowie das zu dem OwnCloud Account passende Kennwort ein. Bei Server wählt man “manuell” aus und gibt die vorhin kopierte MozillaSync URL ein (in meinem Fall https://oc.omv/remote.php/mozilla_sync/).
Zudem braucht man noch den Wiederherstellungsschlüssel, den man sich auf dem bereits eingerichteten Gerät ebenfalls über die Einstellungen -> Sync im Auswahlmenü anzeigenlassen kann.
Tipp: alle benötigten Daten entweder in einer extra TXT-Datei oder im Keepass Container zusammen abspeichern. Bei der Sync-Einrichtung ist der Firefox ansonsten leider nicht bedienbar.
8. Anschließend nur noch auf “Weiter” klicken und schon beginnt die erste Synchronisierung.

Ein wenig Aufwand der sich lohnt, zumal ich Daten wir Passwörter und Login-Namen nie in fremde Hände geben würde.

Leider habe ich noch keine Möglichkeit gefunden auch den Firefox unter Android damit zu synchronisieren, doch mit dem Fennec Browser ist es angeblich möglich.

Viel lieber wäre mir aber die Synchronisation mit dem OwnCloud Plugin Bookmarks. Es gibt zwar eine App, die damit synchronisiert, aber nur in die App selber und nicht in Firefox oder Chrome. Wem solch eine App bekannt ist, darf mir gerne einen Kommentar hinterlassen.

EDIT: wieso auch immer, musste ich feststellen, dass ich über 200 Dublikate in meinen Bookmarks hatte. Diese alle per Hand zu entfernen war mir zu aufwändig. Das Addon Bookmark Dedublicator hat für mich am besten funtkioniert. Um nicht alle doppelten Bookmarks einzeln löschen müssen, ruft man das Addon am besten über die Firefox-Addon-Seite auf. Wenn man dort das Addon auswähl sieht man die Option “Suchen”. Daneben findet man schon die Anzeige, ob Dublikate gefunden wurden oder nicht.

05-05 WordPress Mozilla_Sync10

klickt man anschließend auf Suchen, werden alle Dublikate angezeigt und können ganz einfach mit einem Klick auf Remove all entfernt werden.

05-05 WordPress Mozilla_Sync11

IE9 stürzt ab ohne Meldung

Posted by quark007 | Posted in Programmieren / Coden | Posted on 29-01-2015-05-2008

0

Heute bin ich auf ein Problem gestoßen, das ich vollkommen falsch angegangen bin. Zunächst hatte ich die Mitteilung bekommen, dass ein Skript nicht mehr richtig laufen würde (benutzt wurde der IE 9.0.8112). Die Seite ließe sich nicht mehr aufbauen und benutzen schon mal garnicht.

Ich habe zunächst an den Server und einen überlasteten Apache gedacht. Alles überprüft aber auch im Access- und Errorlog waren keine entsprechenden Hinweise zu finden. Ein Update aller System- und Programmkomponenten hat auch keinen Erfolg gebracht. Dann kam mir die Idee, dass eventuell mit dem Netzwerk und der IP-Vergabe etwas nicht stimmen könnte (da feste IP in dynamischem Netzwerk). Doch auch eine Änderung auf eine mit DHCP zugewiesen Adresse brachte nichts.

Zufällig habe ich die Seite dann mal mit dem Firefox (mein Arbeitswerkzeug) geöffnet und siehe da, alles lief wie geschmiert. Also musste es doch am Internetexplorer liegen. Also habe ich alles mögliche durchprobiert: Quellcode validiert, CSS validiert, JS validiert und alles war in Ordnung. Anschließend habe ich eine neue Seite aufgebaut, ohne Inhalt jedoch mit JS und CSS. Alles ging.

Wieso auch immer aus Verdacht habe ich einfach mal eine PHP-Funktion auskommentiert und oh Wunder, es lief. Diese Funktion erstellt aus einer txt-Datei eine Drop-Down-Liste (mit <select> und <\option>). Zunächst dachte ich an einen falsch oder nicht maskiertes HTML-Element doch auch da habe ich nichts gefunden.

Das Problem war: der Anzeigetext der <\option> war so lang, dass sich der IE daran verhoben hat. Ich habe die Zeichenzahl jetzt auf 256 Zeichen beschränkt und da der IE9 sowieso das Info-Feld nicht weiter vergrößert (nicht wie beim FF), stört es auch nicht. Komischer Weise taucht dieses Problem beim title-Attribut nicht auf. Nur die Bezeichnung ist anfällig dafür.

Da ich über die Internetsuche nichts gefunden habe, musste ich meine Erfahrung einfach niederschreiben. Vielleicht hilft es ja jemandem.