Für alle die es noch nicht wissen, diesen Sommer/Herbst gehts für mich los auf Weltreise. Der geplante Reiseverlauf ist unten dargestellt werden, danke an dieser Stelle an den Dienst http://www.tripline.net/maxxx/. Weitere Infos findet ihr jeweils in den Beiträgen.
SMS Gateway mit Raspberry Pi
Bisher hatte ich bereits mit Hilfe des Gammu Projekts und einem Huawei E220 Modem versucht, einen stabilen SMS Gateway zum Senden und Empfangen von Nachrichten zu schaffen. Das Problem dabei war allerdings, dass nach 2-3 Tagen das System nicht mehr funktioniert hat. Auch ein täglicher Neustart hat das Problem nicht verbessert. Vor kurzen habe ich einen Neuauflage des Projekts erwogen, es folgen nun die Umsetzungdetails.
Hardware:
- RASPBERRY-PI/8GB-USD mit Gehäuse und Netzteil um 40€ bei Farnell
- Ein gebrauchtes und entsperrtes Huawei E160 Modem um 13€ bei Ebay
- Einen USB-Hub, konkret den D-Link DUB-H7 um 21€ bei Amazon
Bei der Auswahl des Modems sollte man aufpassen und z.B. diese Liste konsultieren, ist zwar eigentlich für die Installation von http://www.raspberry-asterisk.org gedacht aber bietet einen guten Anhaltspunkt. Auch bei der Auswahl des USB-Hubs sollte man beachten, dass Raspberry nicht alle USB-Hubs unterstützt, eine Liste dazu siehe z.B. hier. Gesamt sieht das Setup dann etwa so aus.
Installation:
- Raspberry Pi kam bei mir schon mit einem vordefinierten Setup, sonnst einfach von hier das Paket auf die SD-Karte kopieren, eventuell wird dafür der Win32DiskImager oder ähnliches benötigt. Ich habe mich beim Betriebsystem für Raspbian, quasi dem Debian für Raspberry Pi entschieden
- Das System auf den aktuellen Stand bringen und Tools zum Compilieren installieren
apt-get update && apt-get upgrade -y
apt-get install -y build-essential
- SmsServerTools3 in neuester Version runterladen und compilieren/installieren
wget http://smstools3.kekekasvi.com/packages/smstools3-3.1.15.tar.gz tar -zxvf smstools3-3.1.15.tar.gz -C /usr/local/src cd /usr/local/src/smstools3 make make install
- Hat alles geklappt könnte man die SmsServerTools (sms3) starten, wobei es fehlt noch die Konfiguration
/etc/init.d/sms3 start bzw.
/etc/init.d/sms3 stop
Konfiguration:
Die Konfiguration ist grundsätzlich unter /etc/smsd.conf zu finden. Hier meine aktuelle Konfiguration.
# sms3 config from /etc/smsd.conf devices = huawei #log an loglevel (use loglevel 8 for debug) loglevel = 5 logfile = /var/log/smsd.log #folder for messages stats = /var/log/sms/stats outgoing = /var/spool/sms/outgoing checked = /var/spool/sms/checked failed = /var/spool/sms/failed incoming = /var/spool/sms/incoming sent = /var/spool/sms/sent delaytime = 4 errorsleeptime = 4 blocktime = 180 autosplit = 3 receive_before_send = yes national_prefixes = 0 # Modem configuration [huawei] smsc = 43XXXXXXXXXXX device = /dev/ttyUSB0 incoming = yes #baudrate = 115200 baudrate = 19200 rtscts = no hangup_incoming_call = yes #use internal memory for storing messages init = ATE0+CPMS="ME" #turn off periodic status messages init2 = AT^CURC=0
Die oben angegebenen Ordner und Pfade für Logs etc. müssen natürlich entsprechend eingerichtet werden.
Zwecks Debugging hier einige Tipps:
- Ist das Modem grundsätzlich vorhanden, siehe z.B. lsusb bzw. ls /dev/*USB*, Raspberry USB Themen siehe hier
- Können auf dem Modem AT Befehle abgesetzt werdnen, zB mit minicom
- Loglevel in smsd.conf auf 8 und tail -f /var/log/smsd.log und prüfen welche AT Befehle er nicht mag
- Ev. zuerst in smsd.conf incoming = no stellen und nur mal versuchen SMS zu senden
- Ev. Baudrate anpassen
- Ev. mit dem init = ATE0+CPMS=“ME“ Befehl anpassen wo die SMS ausgelesen/gespeichert werden sollen
- Mit den Timing Settings spielen
- Doku und Community fragen
- Pin von Simkarte is aus und Sim geht grundsätzlich
- Es ist GSM-Empfang und genügend Power für das Modem vorhanden
Echoscript für Test einrichten:
Um die Funktion und Stabilität des SMS-Gateways zu testen habe ich ein einfaches Script erstellt welches eine SMS-Ping Funktionalität zur Verfügung stellt. Ich sende also ein SMS an die Nummer meines Modems und erwarte innerhalb von etwa 30 Sekunden eine Antwort inklusive der Ursprünglich gesendeten Nachricht. Der Inhalt des Scriptes schaut in etwa so aus.
<?php date_default_timezone_set('Europe/Vienna'); $income_sms_dir="/var/spool/sms/incoming/"; if (is_dir($income_sms_dir)) { if ($dh = opendir($income_sms_dir)) { while (($file = readdir($dh)) !== false) { if($file!="." && $file!="..") { echo "filename: ".$file." date: ".date("d.m.Y H:i:s")."\n"; $content=file_get_contents($income_sms_dir.$file); $split_line=explode("\n",$content); $from=preg_replace("/[^0-9]+/","",
substr($split_line[0],6)); $message="Echo:".preg_replace("/[^a-zA-Z0-9]+/", "_",
$split_line[12]); $exec="/usr/local/bin/sendsms ".$from." \"".$message."\""; echo $exec."\n"; exec($exec); unlink($income_sms_dir.$file); } } closedir($dh); } } ?>
Um das ganze aufzurufen habe ich einen Workaround für crontab -e benützt um alle 5 Sekunden das Script zu starten.
* * * * * php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 5; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 10; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 15; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 20; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 25; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 30; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 35; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 40; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 45; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 50; php -f /root/echo.php >> /root/echolog.txt * * * * * sleep 55; php -f /root/echo.php >> /root/echolog.txt
Weiterführende Links:
Tauschmarkt Software
Liebe Tauschmarkt-Organisatoren und andere Interessenten an der Tauschmarkt Software,
Im Sommer 2013 sind wir zusammengesessen und haben darüber gesprochen wie man einen Tauschmarkt wohl am besten abwickeln könnte. Nach kurzer Diskussion hat sich gezeigt, dass wir den Tauschmarkt besser nicht mit Excel oder Zetteln abwickeln sollten, sondern dafür eine einfache Software geeigneter wäre.
Ich habe kurzerhand geprüft, welche Frameworks gerade aktuell sind und bin auf das Yii Framework gestoßen. Mich hat die Funktionalität aus Datenmodellen Klassen und Views zu generieren beeindruckt. Durch dieses Konzept kann man mit wenigen Handgriffen eine Softwarelösung auf die Beine stellen und hat dabei eine saubere Struktur und ist sehr flexibel. Ein umfangreiche Pool an Erweiterungen runden das Framework ab.
Aus dem Framework und anderen Tools ist innerhalb von wenigen Stunden die Software entstanden. Aktuell werden darin folgende Prozesse unterstützt: Annahme, Verkauf, Abholung und Reklamation. Details zur Software selbst oder zu den einzelnen Prozessen siehe Demo unter http://tauschmarkt.demo.schlucht.at bzw. http://vorerfassung.demo.schlucht.at. Die Hilfe bzw. Prozessbeschreibungen befinden sich unter dem Link „Home“. Sollte jemand in der Demo die Adminfunktionen benützen wollen, Benutzer und Passwort wären „admin“.
Ihr möchtet die Software auch für euren Tauschmarkt verwenden? Bitte gerne, hier die Beschreibungen und Download-Links zu den Versionen:
In Version 0.4 wurden folgende Dinge geändert:
– Download Tauschmarkt_Software_v0.4
– Optimierung Artikelerfassung durch Parameter show_artikelnr_by_system_button
– Optimierung Artikelerfassung durch Veränderte Reihenfolge der Artikelattribute
– Optimierung Artikelerfassung durch Select mit Warengruppenname zu Beginn (statt ID)
– Bugfixing und Erweiterung Readme
In Version 0.3 wurden folgende Dinge geändert:
– Download Tauschmarkt_Software_v0.3
– Bilderfassung zu Artikel am Handy unter Punkt Mobile
– Kundenstamm um eMail und PLZ erweitert
– Beim Verkauf wird beim klick auf das Bild ein JS-Popup angezeigt
– Verkäufe welche keinen Artikel finden werden auch in der Tabelle darunter rot hervorgehoben
– In Artikelliste zeige nur x wenn Bild vorhanden ist
– Annahmedruck und Abrechnungsdruck vom Pletz her optimiert
– Happyhour kann auf Annahmedruck und Abrechnungsdruck ausgeblendet werden (neuer Parameter happyhour_anzeigen)
– Freigabetext mit Unterschriftenfeld kann auf Abrechnung ausgeblendet werden (neuer Parameter abrechnung_disclaimer_show)
– Neuer Etikettentype „Standard_2018“ mit Andruck der KundenNr
– Unter dem Kunden kann man eine Voransicht der Abrechnung aufrufen
– Es können mehrere Kunden (aktuell 20) auf einmal abgerechnet werden
– Es gibt eine Auszahlungsliste um den Überblick der Auszahlungen zu behalten
– Artikel können als Admin gelöscht werden
– Diverse Erweiterungen in den Statistikansichten
– Diverse Bugfixes
In Version v0.2 wurden u.a. folgende Featuers hinzugefügt, Details siehe Demo’s oben:
– Download Tauschmarkt_Software_v0.2
– Artikel haben Warengruppen
– Artikel haben Größe/Länge
– HappyHour Funktionalität
– Eigene Anwendung „Vorerfassung“ für Artikelerfassung im Internet vor dem Tauschmarkt
Version v0.1 wurde bei unserem letzten Tauschmarkt verwendet:
– Download Tauschmarkt_Software_v0.1
Wenn ihr Infos über die Software weitergeben möchtet bitte den Permanenten Link http://tauschmarkt.schlucht.at verwenden.
LG,
Max
Friaul Juni 2013
Mit nur 2,5h Autofahrt von Salzburg entfernt ist in Friaul ein kleines Paradies an Schluchten vorhanden. Die meisten Canyons finden sich rund um Tolmezzo. Als Unterkunft empfiehlt sich zentral gelegen das Hotel Carnia oder der Campingplatz am See. Hier eine grafische und tabellarische Übersicht der besser bewerteten Touren in der näheren Umgebung.
Im Juni 2013 war ich wieder unten und habe dabei einige Highlights gemacht, hier die Schluchten im Detail.
Rio Pissanda:
Nachdem Regen angesagt war und der Bach unten genug Wasser hatte (ist normal fast trocken) sind wir eingestiegen. Das Verhältniss vom kurzen Zustieg zur dann doch längeren Tour hat mich beeindruckt. Die Tour selbst ist etwas moosig aber hat alles dabei, einige Rutschen, ein paar Sprünge und zum Schluss noch einige hohe Abseiler. Der ideale Canyon zum Anfangen oder wenn die Wettersituation nicht stabil ist.
Rio Simon:
Der Rio Simon kann getrost als eines der Highlights der Gegend bezeichnet werden. Er ist aquatisch, kann aber auch bei mehr Wasser gut bewältigt werden, da die Abseilstellen meist ausserhalb des Wasserlaufs angebracht sind. Nach 1,5h Zustieg folgt Schlag auf Schlag eine Attraktion der anderen, Abseiler und Sprünge stellen die Hauptattraktivität neben dem türkisen Wasser dar. Gehstrecken zwischen den Attraktionen sucht man hier vergeblich. Das Auto sollte man in der Hochsaison nicht direkt beim Ausstieg stehen lassen.
Rio Tralba:
Der Zustieg geht bei der Staumauer wo zum Rio Alba eingestiegen wird noch ca. 1h weiter nach oben. Oben angelangt geht es Schlag auf Schlag, Sprünge, Rutschen, Abseiler wechseln sich ab. Die Schlucht hatte bei der letzten Begehung relativ viel Wasser. Im Gegensatz zum Rio Simon seilt man hier meist durchs Wasser ab. Nach 2 hohen Abseilern endet dann der obere sehr interessante Teil. Als nächstes beginnt eine Bolderpassage, ca. 45min über große Blöcke klettern. Danach noch einige schönere Abseiler und dann erreicht man den Rio Alba. Dieser ist leider seit einigen Jahren ziemlich zugekiest, es gibt einige Sprünge und Abseiler, aber großteils sind einfach 3km zu laufen bis man wieder unten beim Parkplatz ankommt, dann ist noch ca. 30m Auto holen angesagt.
Rio Cuestis:
Was dem Rio Simon an Vertikalität fehlt bekommt man gleich bei dem Bach daneben. Zuerst etwas unspektakulär einige Abseiler zwischen 10 und 20m. Danach folgt etwas Gehgelände doch dann wird die Schlucht eingeschnitten, Abseiler im Wasser und Rutschen folgen. Dann öffnet sich die Schlucht und es beginnen einige hohe Abseiler. Diese Schlucht ist nichts für Leute mit Höhenangst. Highlight ist sicher der Zwischenstop unter dem Dach bei dem 80m Abseiler. Auch danach kommen noch einige höhere Abseiler bevor man wieder direkt unten beim Auto rauskommt.
Weitere Beiträge zu Friaul findet man unter dem Tag Friaul, weitere Beiträge zum Canyoning unter der Kategorie Canyoning.
Nextgen Gallery – Backup als Download bzw. Vollbild
Ich bin von den Funktionen der NextGEN Gallery für WordPress relativ begeistert, jedoch möchte ich zwischen den Bildern schnell blättern können (d.h. kleine Dateigröße erforderlich) und andererseits auch die Originalbilder zur Verfügung stellen.
Nachdem diese Funktionalität bisher nicht verfügbar war habe ich einige kleinere Anpassungen an der NextGEN Gallery 2.0.17 vorgenommen um dies zu ermöglichen.
Grundsätzlich müssen unter den Optionen die beiden Einstellungen „Backup the original images“ und „Automatically resize images after upload“ aktiv sein. Erstellt man nun eine Gallery dann bekommt man eine verkleinerte Datei für die Ansicht und die Backup Datei zur Wiederherstellung.
Im ersten Schritt habe ich den Dateinamen der Backup Datei geändert indem ich dahinter immer nochmals die tatsächliche Dateiendung angehängt habe. Also konkret sucht man in den folgenden Dateien class.gallerystorage_driver_base.php, class.ngglegacy_gallerystorage_driver.php, functions.php, manage-images.php, manage.php, xmlrpc.php nach dem String „_backup“ und muss dort eine Ersetzung vornehmen.
Zum Beispiel wenn bisher dort $filepath=$image_path.’_backup‘; gestanden ist muss danach $filepath=$image_path.’_backup‘.‘.‘.substr( strrchr($image_path, ‚.‘), 1); stehen. Dadurch wird statt der Datei Filename.Endung_Backup die Datei Filename.Endung_Backup.Endung erstellt.
Im zweiten Schritt muss dann auch noch der Link zum Download der großen Originaldatei im Frontend angezeigt werden. Dazu habe ich bei mir in den Optionen die Fancybox aktiviert und in der Datei nextgen_fancybox_init.js eine Manipulation hinzugefügt damit der Downloadlink unter allen Konstellationen angezeigt wird.
Eine Sammlung der Anpassungen kann hier: ng_2.0.17_BackupMod_FilesOnly heruntergeladen werden. Ein fertiges Installationspaket inklusive der Anpassungen ist hier ng_2.0.17_BackupMod_Full verfügbar.
Offene Punkte:
- Wenn man im Backend auf „Scan Folder for New Items“ drückt werden die Backupbilder als neue Bilder erkannt, dies muss noch unterbunden werden
Nachtrag: um bei einer NextGen-Gallerie den Albumnamen anzuzeigen ist folgende Modifikation in Datei album-compact.php nötig:
if($galleries[0]->gid) { //ermittle erstes album welches diese galerie enthält $temp_albums=nggdb::find_all_album(); foreach($temp_albums as $temp_album) { foreach($temp_album->galleries as $temp_galerie) { if((string)$temp_galerie==(string)$galleries[0]->gid) break; } if((string)$temp_galerie==(string)$galleries[0]->gid) break; } echo $temp_album->name; //oder ähnliches }