beim heutigen Update meiner PiHole Installation kam es zu folgendem Fehler
package 'php8.0-json' has no installation candidate
DAs ist soweit auch in Ordnung, da PHP8 das JSON Modul mittlerweile mitbringt. Aber die PiHole Installation ist mit PHP7.4 zur Zeit freigegeben (da das auch die unterstützte Version von Debian 10 “Buster”) ist.
Bei mir läuft aber die DietPI Distro und die hat mir PHP8 installiert beim Update.
Es gibt aber eine Möglichkeit zwischen installierten PHP-Versionen zu wechseln. Daher habe ich zunächst wieder PHP7.4 installiert (kann man sich sparen, wenn es noch installiert ist).
Anschließend konnte die Version mit dem folgenden Befehl ausgewählt werden (gefunden hier):
sudo update-alternatives --config php
Im sich zeigen Auswahldialog kann nun die zu aktivierende PHP Version ausgewählt werden. Nach Eingabe der Nummer und bestätigen mit Enter funktioniert das PiHole Update (pihole -up) einwandfrei.
Ob ein nachträgliches Wechseln auf PHP8.0 dann wieder funktioniert, habe ich noch nicht ausprobiert.
Mich hat das Konzept von HackAIR schon lange fasziniert, ich kam jedoch nie dazu es wirklich in Betrieb zu nehmen. Jetzt hat sich die Zeit ergeben und einige dabei zu umschiffende Probleme möchte ich euch gerne mitgeben.
In der Zwischenzeit ist das Projekt hackAIR ausgelaufen. Über die Platform https://opensensemap.org können die Daten aus den hackAIR Sensoren weiterhin abgeliefert werden. Der Code enthält diese option bereits.
Meine Einkaufsliste sieht wie folgt aus:
Wemos D1 mini
Nova SDS011 Sensor
DHT22 Shield
BHM1750 Brightness sensor (geplant zur Steuerung von Rolläden über OpenHab)
Regensensor (geplant zur Steuerung des Mähroboters über OpenHab)
Ich hatte zunächst nur den WEMOS D1 mini und das DHT22-Shield gelötet und verbunden (entsprechend der Anleitung auf der hackAIR webseite). Doch nach uploaden des Projekts konnte nie ein Wert für Luftfeuchte und Temperatur ermittelt werden. Ich ging zunächst von einem Hardware defekt aus, doch da die Dispute-Phase über Aliexpress schon vorbei war, hat mich der Ergeiz gepackt es doch nochmal genauer zu untersuchen.
Über ein Breadboard mit verschiedenen Pin-Anschlüssen hat sich rausgestellt, dass das DHT22 Shield es nicht mag, sowohl über 3,3V als auch über 5V versorgt zu werden.
Lösung: ich habe den 5V Pin einfach abgezwickt und der DHT22 lief. (erstmal, siehe Problem4)
Problem2: Nova SDS011 schläft ein, wacht aber nicht mehr auf
Im hackAIR code steht lediglich die Codezeile:
sensor.turnOn();
Nach einigem Lesen auf mehreren Seiten stellte sich heraus, dass es dem Sensor angeblich genügen würde irgend ein Commando zu bekommen um wieder aufzuwachen.
Nach etwas weiterem Lesen bin ich über diesen Post gestolpert, der etwas anderes behauptet: es ist doch eine konkrete Byte-Folge notwendig, um den Sensor aufzuwecken.
Also habe ich die hackair.cpp in den libraries entsprechend angepasst. Die turnOn(); Funktion sah dann für mich so aus:
void hackAIR::turnOn() {
static const byte WAKECMD[19] = {
0xAA, // head
0xB4, // command id
0x06, // data byte 1
0x01, // data byte 2 (set mode)
0x01, // data byte 3 (wake up)
0x00, // data byte 4
0x00, // data byte 5
0x00, // data byte 6
0x00, // data byte 7
0x00, // data byte 8
0x00, // data byte 9
0x00, // data byte 10
0x00, // data byte 11
0x00, // data byte 12
0x00, // data byte 13
0xFF, // data byte 14 (device id byte 1)
0xFF, // data byte 15 (device id byte 2)
0x06, // checksum
0xAB // tail
};
// SDS011 uses the built-in power saving function
if (_sensorType == SENSOR_SDS011) {
// Send anything to wake up the sensor
//_serial.write(0x01);
for (uint8_t i = 0; i < 19; i++) {
_serial.write(WAKECMD[i]);
}
delay(2000);
} else {
#ifndef ESP8266
digitalWrite(A2, HIGH);
#endif
}
}
Das Projekt neu kompiliert und hochgeladen und siehe da, der SDS011 ist wirklich wieder aufgewacht.
Problem3: Übertragen der Daten per MQTT an OpenHAB
Ein großteil meiner Datensammlung läuft über einen MQTT-Broker (Temperatur und Feuchte Sensoren in jedem Zimmer ; Steuerung des Mähroboters über die LandroidBridge …..). Also sollten auch diese Daten im Smarthome verfügbar sein.
Zunächst war ich der Annahme ich könnte die AdafruitMQTT-Libraries verwenden. Nach viel Rumprobieren hat sich das aber als Fehler herausgestellt. ich habe es nicht geschafft eine Verbindung zu einem normalen Mosquitto Server aufzunehmen. (Offensichtlich ist die Adafruit-Implementierung etwas anders).
Aus meinem Projekt mit den Zimmer-Sensoren habe ich mir Struktur des MQTT-Clients (PubSubClient) übernommen. In auszügen sieht das dann wie folgt aus:
#include <PubSubClient.h> // MQTT CLIENT FOR OPENHAB
// MQTT
#define MQTT_ENABLE "1" // set this to 1 to enable MQTT
#define MQTT_BROKER "192.168.178.XX" // MQTT Broker IP
#define MQTT_USER "openhab" // MQTT user
#define MQTT_PASS "openhab" // MQTT password
[...]
// Create a Wifi client for MQTT connection
WiFiClient espClient; //Only for MQTT
PubSubClient MQTTclient(espClient);
void setup() {
// MQTT Initialisation
MQTTclient.setServer(MQTT_BROKER, 1883);
[....]
}
void loop() {
[...]
//DHT READ
float env_temp = dht.readTemperature();
float env_hum = dht.readHumidity();
// Send error message if DHT22 values could not be read
if(isnan(env_hum) || isnan(env_temp)){
Serial.print("Temp: ");
Serial.print(env_temp);
Serial.print(" | Hum: ");
Serial.println(env_hum);
MQTTreconnect();
MQTTclient.publish("tele/hackair/state", "ERROR Temp/Hum");
}
[...]
if (MQTT_ENABLE == "1") {
if (!MQTTclient.connected()) {
MQTTreconnect();
}
String dataMQTT = "{\"data\":{\"PM25\":\""; // PM25 ist eingfacher über openhab abzurufen als PM2.5
dataMQTT += data.pm25;
dataMQTT += "\",\"PM10\":\"";
dataMQTT += data.pm10;
dataMQTT += "\",\"temp\":\"";
dataMQTT += env_temp;
dataMQTT += "\",\"hum\":\"";
dataMQTT += env_hum;
// dataMQTT += "\",\"rain_d\":\""; //noch nicht implementiert
// dataMQTT += env_rain_d; //noch nicht implementiert
// dataMQTT += "\",\"rain_a\":\""; //noch nicht implementiert
// dataMQTT += env_rain_a; //noch nicht implementiert
// dataMQTT += "\",\"lux\":\""; //noch nicht implementiert
// dataMQTT += env_lux; //noch nicht implementiert
dataMQTT += "\"},\"battery\":\"";
dataMQTT += vdd;
dataMQTT += "\",\"tamper\":\"";
dataMQTT += "0";
dataMQTT += "\",\"error\":\"";
dataMQTT += data.error;
dataMQTT += "\"}";
if (MQTTclient.publish("tele/hackair/SENSOR", (char*) dataMQTT.c_str()) && DEBUG == "1") {
Serial.print("MQTT Publish successful: ");
Serial.println(dataMQTT);
} else if (DEBUG == "1") {
Serial.print("MQTT Publish failed");
Serial.println(MQTTclient.state());
}
}
[...]
// define functions
void MQTTreconnect() {
// Loop until we're reconnected
while (!MQTTclient.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "Hackair-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (MQTTclient.connect(clientId.c_str(), MQTT_USER, MQTT_PASS)) {
Serial.println(" connected");
MQTTclient.publish("tele/hackair/LWT", "Online", false); //ohne hat er die Verbindung nicht behalten.
} else {
Serial.print("failed, rc=");
Serial.print(MQTTclient.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
MQTTclient.loop();
}
Mit ein wenig Konfiguration in openHAB sieht das Ergebnis dann wie folgt aus:
Problem4: Instabiler Neustart des Wemos D1 mini
Beim Neustart des Wemos D1 mini kommt es wiederholt (schon fast regelmäßig) vor, dass entweder die Ausgabe über die Serielle Schnittstelle nicht funktioniert oder aber das Auslesen der DHT22 Messwerte. Diese liefern dann nur nan zurück und somit ist eine Feuchtigkeits-Korrektur der Partikelmessung nicht mehr möglich.
Nach einem Upload eines Sketches auf den ESP funktioniert die Serielle Ausgabe ohne Neustart, jedoch der DHT22 nicht.
Nach dem ersten hard reset (Strom trennen und wieder verbinden) geht fast immer die Serielle Schnittstelle nicht.
Nach einem weiteren hard reset geht ab und an das Auslesen der DHT-Werte schief. Egal wie oft die Reset-Taste am ESP gedrückt wird.
Eine Lösung für das DHT22 Problem konnte ich hier finden: https://blog.zs64.net/2018/02/fixing-the-wemos-d1-mini-dht22-shield/ Es hat sich gezeigt, dass der D4-Port, den das DHT22 Shield verwendet, auch für die LED-Steuerung verwendet wird. Beim Start kann es also dazu kommen dass sich Sensor-Initialisieren und LED-Steuern in die Quere kommen.
Übers Breadboard mit umlegen auf den D3-Pin läuft es nun stabil wie nie!!! Damit hatte ich dann auch deutlich weniger Probleme mit einer nicht funktionierenden Seriellen Verbindung.
Edit: beim Programmieren eines weiteren DHT22 Shields kam ich wieder nicht weiter. Sowohl das umlegen des D-Pins, als auch der Spannungsversorgungs-hack hat nicht geholfen. Nach viel googlen bin ich dem Problem auf den Grund gekommen: die DHT-Library funktioniert mit meinen DHT22 nur bis Version 1.2.0. Mit allen neueren geht es nicht (hier der Bug-Eintrag dazu).
Gehäuse
Damit alles schön verpackt in den Außenbereich kann, habe ich nach einem Gehäuse gesucht. Auf thingivers.com bin ich bei der “Dust Sensor Box” fündig geworden. Auf meinem Ender3 habe ich das ganze aus weißem PLA mit 15% Infill gedruckt (195°C Düse und 48°C Druckbett Temperatur).
Da das Projekt aber für einen Nodemcu v2 amica vorgesehen ist, habe ich den Wemos D1 mit dem DHT22 Shield einfach reingelegt. Durch die relativ geringe Höhe und den leicht abstehenden DHT22 Sensor klemmt das ganze eigentlich ganz gut.
Montiert wurde die Box anschließend unter den selbstgebauten Hochbeeten (an der Querverbindung zur Stabilisierung des Mörtelwannenbodens).
Datenübertragung an opensensemap und luftdaten.info
Zusätzlich zu dem bereits unterstützten opensensemap.org wollte ich auch luftdaten.info mit einbinden. Dazu gibt es schon ein Script. Das habe ich als Vorlage verwendet, um den Code von hackair entsprechend anzupassen.
Es hat sich bei mir noch ein anderes Problem gezeigt: auch auf opensensemap konnten die Daten nicht hochgeladen werden. Nach viel herumprobieren und optimieren des Codes bin ich zu der im Code befindlichen Lösung gekommen.
Es kommt bei mir öfter vor, dass HackAIR an irgend einem Punkt hängen bleibt. Er macht dann nicht weiter und liefert auch keine Werte. Ich habe die Vermutung, dass es in der SDS011 ein Problem gibt. Die Serielle Schnittstelle so lange angeschlossen zu lassen, schaffe ich nicht (hackAIR hängt unter einem Hochbeet auf der Terasse). Daher habeich mich damit abgefunden und über openHAB eine Regel erstellt, die den Strom 20 Sekunden trennt und danach wieder anschaltet.
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).
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.
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:
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.
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:
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.
@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
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):
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:
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.
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:
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.
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:
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.
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:
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 »
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:
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:
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: