diff --git a/know-how/hacking/_posts/2010-01-05-avm-fritzbox-7270.md b/know-how/hacking/_posts/2010-01-05-avm-fritzbox-7270.md index 1773625..3ab1192 100644 --- a/know-how/hacking/_posts/2010-01-05-avm-fritzbox-7270.md +++ b/know-how/hacking/_posts/2010-01-05-avm-fritzbox-7270.md @@ -2,7 +2,7 @@ title: AVM Fritz!Box 7270 layout: default created: 2009-12-19 18:40:34 +0100 -changed: 2010-01-05 00:19:18 +0100 +updated: 2010-01-05 00:19:18 +0100 toc: true tags: - know-how diff --git a/know-how/hacking/_posts/2013-09-08-tassimo-barcodes.md b/know-how/hacking/_posts/2013-09-08-tassimo-barcodes.md new file mode 100644 index 0000000..9062403 --- /dev/null +++ b/know-how/hacking/_posts/2013-09-08-tassimo-barcodes.md @@ -0,0 +1,96 @@ +--- +title: TASSIMO Barcodes +language: de +layout: default +created: 2013-09-08 15:43:52 +0200 +updated: 2013-09-08 20:18:52 +0200 +toc: true +tags: + - know-how + - hacking + - hardware + - tassimo +--- +Im Gegensatz zu anderen Kapselmaschinen, bringen die Kapseln bei Tassimo ihre Zubereitungsanleitung gleich mit: +In Form eines Barcodes auf der Kapsel. + +Weitere Informationen: + +* +* +* Patent: + + +Kapsel-Codes +============ + +

+Die Prüfziffer wird wie beim UPC-Code berechnet: +

+ +| Kapsel | Menge | dezimal | binär (ohne Prüfziffer) | +|:----------------------------------|--------:|:--------:|--------------------------:| +| Service-Disc | | 07879-5 | 0001 1110 1100 0111 | +| Jacobs Espresso | 60 ml | 06178-0 | 0001 1000 0010 0010 | +| Jacobs Caffè Crema XL | 215 ml | 29761-5 | 0111 0100 0100 0001 | +| Jacobs Krönung Verwöhnkanne | | 34419-7 | 1000 0110 0111 0011 | +| CARTE NOIRE Petit Déjeuner | 215 ml | 29761-5 | 0111 0100 0100 0001 | +| Milka | | 06665-5 | 0001 1010 0000 1001 | +| Milch für Milka, Marabou & Freia | | 06182-7 | 0001 1000 0010 0110 | +| Cadbury | | 06665-5 | 0001 1010 0000 1001 | +| Milch für Cadbury | | 06182-7 | 0001 1000 0010 0110 | +| Milch für Latte Macchiato | | 63735-0 | 1111 1000 1111 0111 | +| TWINING's Earl Grey | | 03351-0 | 0000 1101 0001 0111 | +| TWINING's Darjeeling | | 03351-0 | 0000 1101 0001 0111 | +| ICE DISC Espresso | | 06146-9 | 0001 1000 0000 0010 | +| ICE DISC Cappucino | | 06146-9 | 0001 1000 0000 0010 | +| ICE DISC Chocolate | | 06146-9 | 0001 1000 0000 0010 | +| ICE DISC Tea | | 71651-2 | 1 0001 0111 1110 0011 | + + +Programmierung +============== + +

+Die Angaben hier sind aus der Patentschrift übernommen. Wie die in den Barcodes oben kodiert wurden, ist noch nicht ganz klar. +

+ +| Bits | Funktion | Werte | +|:-----:|:-----------|:-------| +| 0 & 1 | Wassertemperatur | 00 = kalt | +| || 01 = warm | +| || 10 = 83 °C | +| || 11 = 93 °C | +| 2 & 3 | Kapselfüllung | 00 = schnell Füllen, mit Ziehen | +| || 01 = schnell Füllen, ohne Ziehen | +| || 10 = langsam Füllen, mit Ziehen | +| || 11 = langsam Füllen, ohne Ziehen | +| 4 & 5 & 6 & 7 | Getränkemenge | 0000 = 50 ml | +| || 0001 = 60 ml | +| || 0010 = 70 ml | +| || 0011 = 80 ml | +| || 0100 = 90 ml | +| || 0101 = 100 ml | +| || 0110 = 110 ml | +| || 0111 = 130 ml | +| || 1000 = 150 ml | +| || 1001 = 170 ml | +| || 1010 = 190 ml | +| || 1011 = 210 ml | +| || 1100 = 230 ml | +| || 1101 = 250 ml | +| || 1110 = 275 ml | +| || 1111 = 300 ml | +| 8 & 9 & 10 | Flussrate | 000 = 30 % | +| || 001 = 40 % | +| || 010 = 50 % | +| || 011 = 60 % | +| || 100 = 70 % | +| || 101 = 80 % | +| || 110 = 90 % | +| || 111 = 100 % | +| 11 & 12 | Kapsel-Leerung | 00 = langsamer Fluss / kurze Dauer | +| || 01 = langsamer Fluss / lange Dauer | +| || 10 = schneller Fluss / kurze Dauer | +| || 11 = schneller Fluss / lange Dauer | + diff --git a/know-how/software/_posts/2009-10-08-gemeinschaft.md b/know-how/software/_posts/2009-10-08-gemeinschaft.md new file mode 100644 index 0000000..3a26a7c --- /dev/null +++ b/know-how/software/_posts/2009-10-08-gemeinschaft.md @@ -0,0 +1,307 @@ +--- +title: Gemeinschaft Asterisk PBX +language: de +layout: default +created: 2009-10-08 01:35:01 +0200 +updated: 2009-10-08 20:54:42 +0200 +toc: true +tags: + - know-how + - software + - asterisk + - telephony + - gemeinschaft +--- +* [kempgen.net](http://www.kempgen.net/gemeinschaft/gemeinschaft-installation-trunk.html) --- Anleitung zur manuellen Installation + * in der `sounds-wav-to-alaw.sh` muss beim `sox`-Befehl der Parameter **`-w`** in **`-2`** geändert werden +* [belug.de](http://www.belug.de/hilfe/howtos/fcpci/) --- Kompilieren des fcpci-Moduls + * [kerneltrap.org](http://kerneltrap.org/mailarchive/linux-netdev/2009/6/7/5890033) --- `capi_ctr_reseted()` heißt jetzt `capi_ctr_down()` (muss geändert werden!) + + +Allgemeine Bedienung +==================== + +Benutzer an Telefon anmelden +---------------------------- + +Bei den Provisioning-fähigen Telefonen: + +* Hörer abheben +* `*0` eintippen +* nach Aufforderung Kennwort eintippen (bei uns üblicherweise `1234`) +* Telefon evtl. rebooten + + +Anrufergruppe beitreten +----------------------- + +Damit das Telefon richtig klingelt, folgenderweise der Anrufergruppe **100** beitreten: + +* Hörer abheben +* `*5` eintippen (bei uns die `100`) +* auflegen + + +Rauswählen ohne 0 +================= + +In der MySQL-Datenbank `asterisk` in der Tabelle `gates` sind die Wählstrings hinterlegt. Standard (und nicht über GUI +änderbar) ist folgender: + + mISDN/g:{gateway}/{number:1} + +d.h., von der Rufnummer wird immer die erste Stelle abgeschnitten. In den neueren Versionen werden aber generell alle +nicht intern vorhandenen Rufnummern an das ausgehende Routing übergeben. Somit kann man durch eine Änderung in der +Datenbank den Wählstring auf + + mISDN/g:{gateway}/{number} + +ändern und hat dann den gewünschten Effekt. [Google Groups Thread](http://groups.google.de/group/gemeinschaft-users/browse_thread/thread/2ceb4e5afdd50375) + + +Anruferidentifizierung +====================== + +Vorgesehen ist, dass dies auf dem Telefon passiert. Daher gibt es momentan keine Funktionalität in dieser Richtung, +die direkt im Asterisk den Anrufernamen aus einer Tabelle sucht. + +Da wir mit Queues arbeiten, muss dieser Aufruf vor dem Weiterleiten des ankommenden Anrufs in den Queue passieren. +Ein geeigneter Ort ist der `to_queue:`-Abschnitt in der `e-internal.ael` - direkt über dem `Queue()`-Aufruf: +[Google Groups Thread](http://groups.google.de/group/gemeinschaft-users/browse_thread/thread/cf4683c6a9081ae2) + +~~~ + else { + Set(ring_instead_of_moh=); + Progress(); // SIP: "183 Session Progress" with early media + } + // Die folgende Zeile ist neu: + AGI(/opt/gemeinschaft/dialplan-scripts/in-get-callerid.agi,${CALLERID(num)}); + Set(queue_entertime=${EPOCH}); + Queue(${EXTEN},${ring_instead_of_moh},,,${queuetimeout}); + Set(queue_waittime=$[${EPOCH}-${queue_entertime}]); + Verbose(1,### Tried to enter queue ${EXTEN}\, result: ${QUEUESTATUS}\, waittime: ${queue_waittime}); +~~~ + +Das Script `in-get-callerid.agi` sieht dann in etwa so aus: + +{% highlight php %} +#!/usr/bin/php -q + +{% endhighlight %} + +Wichtig ist noch, dass das AGI-Script ausführbar (`chmod a+x in-get-callerid.agi`) sein und die magische erste Zeile +haben muss. + + +Konferenzräume von außen +======================== + +In der Grundkonfiguration gibt es nur dynamische Konferenzräume, die man mittels 88 *+ Raumnummer* +anlegen kann. Diese sind allerdings dann nicht von außen erreichbar. Folgenderweise kann man einen Raum von außen +erreichbar machen: [Google Groups Thread](http://groups.google.de/group/gemeinschaft-users/browse_thread/thread/d79b8b969ae80ef9) + +In der `meetme.conf` einen neuen statischen Konferenzraum (hier: Nummer 888) anlegen: + + [rooms] + conf => 888 + +In der `e-internal.ael` direkt im Kontext `to-internal-users` folgenden Eintrag machen: + +~~~ + //---------------------------------------------------------- + // Direct to conference + //---------------------------------------------------------- + 20888 => { + Answer(); + System(wget 'http://192.168.1.245/gemeinschaft/prov/call-init.php?user=ah&to=21888'); + Playback(silence/2); + MeetMe(888, cM); + } + + 21888 => { + Answer(); + MeetMe(888, cM); + } +~~~ + +Dadurch werden Anrufe auf der 21888 direkt in den Konferenzraum 888 geschaltet. Anrufe auf der 20888 lassen das Telefon +vom Benutzer `ah` den Konferenzraum anrufen und schicken den Anrufer danach erst in den Raum. Somit muss man nicht in +einem stillen Raum auf die Teilnehmer warten. + + +Aussetzer beim Klingeln der Telefone +==================================== + +Die Telefone haben nach ca. 10 Sekunden plötzlich für ca. 2 Sekunden aufgehört zu klingeln. In diesen 2 Sekunden kann +man den Anruf auch nicht annehmen. [Google Groups Thread](http://groups.google.de/group/gemeinschaft-users/browse_thread/thread/a02d0cb376a77953) + +Ursache ist die Einstellung *Klingelzeit pro Agent* des Queues. Diese ist per default auf 10 Sekunden eingestellt, +sollte allerdings bei der Einstellung *Alle klingeln gleichzeitig* nicht greifen. Dennoch mach die Anlage nach den +10 Sekunden eine kurze Pause. Erhöht man den Wert auf z.B. 60 Sekunden, sollte die Pause nicht mehr auftreten. + + +Status-Monitor +============== + +Es gibt 2 Status-Monitore: + +* +* + +Der erstere fragt Asterisk alle paar Sekunden über das Manager-Interface ab und erzeugt somit pro Betrachter mehr +Last. Der zweitere benutzt (via AJAX) den ExtStateDaemon, welcher wie folgt aktiviert werden muss: + + +Aktivieren des ExtStateD +------------------------ + +1. Kopieren des init-Scripts nach `/etc/init.d`: + + cp /usr/src/gemeinschaft/etc/init.d/gs-extstated /etc/init.d/ + +1. Einrichten des automatischen Starts: + + update-rc.d gs-extstated defaults 90 10 + +1. Starten des Daemons + + /etc/init.d/gs-extstated start + +[Google Groups Thread](http://groups.google.com/group/gemeinschaft-users/browse_thread/thread/58af4e988e64cae4?hide_quotes=no#msg_1a966420d40bb2ee) + + +Anrufbeantworter-Scripting +========================== + +`/opt/gemeinschaft/scripts/gs-vm-audio-set`: + +{% highlight php %} +#!/usr/bin/php -q + */ + +define( 'GS_VALID', true ); /// this is a parent file +define( 'GS_VM_AUDIO_DIR', '/opt/gemeinschaft/vm-rec' ); // path to VM recordings +define( 'GS_VM_AUDIO_FILEFORMAT', '%1$s-%2$s.alaw' ); // %1$s = extension, %2$s = external|internal +define( 'GS_VM_AUDIO_SOURCE_DIR', '/ssl' ); // source dir for (will be appended to GS_VM_AUDIO_DIR) + +require_once( dirName(__FILE__) .'/../inc/conf.php' ); +include_once( GS_DIR .'lib/getopt.php' ); +include_once( GS_DIR .'inc/gs-lib.php' ); + + +/*********************************************************** +* the shell parameters +***********************************************************/ +$usage = 'Usage: '. baseName(__FILE__) .' --user= --source=internal|external --file='; + +$opts = @getOptsNoMultiples( '', + array( + 'user=', + 'source=', + 'file=' + ), + $usage +); +if (! isSet( $opts['user'] ) + || ! isSet( $opts['source'] ) + || ! isSet( $opts['file'] ) + ) { + gs_script_invalid_usage( $usage ); +} + + +/*********************************************************** +* do stuff +***********************************************************/ +if (!in_array($opts['source'], array('internal', 'external'))) { + gs_script_error( 'Please specify only "external" or "internal" as source!' ); +} + +$srcPath = GS_VM_AUDIO_DIR . GS_VM_AUDIO_SOURCE_DIR . '/' . $opts['file'] . '.alaw'; +if (!file_exists($srcPath)) { + gs_script_error( 'File "' . $srcPath . '" not found!' ); +} +$trgPath = GS_VM_AUDIO_DIR . '/' . sprintf(GS_VM_AUDIO_FILEFORMAT, $opts['user'], $opts['source']); + +if (file_exists($trgPath)) { + echo 'Warning. Target file "' . $trgPath . '" will be overwritten!' . PHP_EOL; +} + +if ( !copy($srcPath, $trgPath) ) { + gs_script_error( 'Failed to copy "' . $srcPath . '" to "' . $trgPath . '"!' ); +} + +echo 'Set VM announcement of user ' . $opts['user'] . ' for ' . $opts['source'] . ' calls to "' . $opts['file'] . '".' . PHP_EOL; + +?> +{% endhighlight %} + + +`/opt/gemeinschaft/sbin/do-event`: + +{% highlight bash %} +#!/bin/sh + +GS_DIR=/opt/gemeinschaft/scripts +GS_USER=99 +GS_QUEUE=100 +GS_SOURCE=external +LOGFILE=/var/log/gemeinschaft/do-event.log + +case "$1" in + mittag) + $GS_DIR/gs-vm-audio-set --user=$GS_USER --source=$GS_SOURCE --file=mittag 2>&1 >>$LOGFILE + $GS_DIR/gs-queue-callforward-activate --queue=$GS_QUEUE --source=$GS_SOURCE --case=timeout --active=std 2>&1 >>$LOGFILE + ;; + momeeting) + $GS_DIR/gs-vm-audio-set --user=$GS_USER --source=$GS_SOURCE --file=momeeting 2>&1 >>$LOGFILE + $GS_DIR/gs-queue-callforward-activate --queue=$GS_QUEUE --source=$GS_SOURCE --case=timeout --active=std 2>&1 >>$LOGFILE + ;; + off) + $GS_DIR/gs-queue-callforward-activate --queue=$GS_QUEUE --source=$GS_SOURCE --case=timeout --active=no 2>&1 >>$LOGFILE + $GS_DIR/gs-vm-audio-set --user=$GS_USER --source=$GS_SOURCE --file=default 2>&1 >>$LOGFILE + ;; + *) + echo "Usage: $0 {mittag|momeeting|off}" + exit 1 + ;; +esac + +exit 0 +{% endhighlight %} + + +**crontab**: + +~~~ +MAILTO=mab@intranet.silversolutions.de +#m h dom mon dow command +00 10 * * 1 /opt/gemeinschaft/sbin/do-event momeeting +00 11 * * 1 /opt/gemeinschaft/sbin/do-event off +00 13 * * 1-5 /opt/gemeinschaft/sbin/do-event mittag +00 14 * * 1-5 /opt/gemeinschaft/sbin/do-event off +~~~ + + +*[GUI]: Graphical User Interface +*[AGI]: Asterisk Gateway Interface +*[AJAX]: Asynchronous Javascript and XML