1
0
mirror of https://github.com/mbirth/wiki.git synced 2024-09-19 06:23:25 +01:00

More German posts.

This commit is contained in:
Markus Birth 2015-02-23 20:35:48 +01:00
parent eca5b333d7
commit 0ee14bd19d
3 changed files with 404 additions and 1 deletions

View File

@ -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

View File

@ -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:
* <http://blog.chapmanconsulting.ca/wiki/Tassimo%20Hacking.ashx>
* <http://blog.chapmanconsulting.ca/wiki/TassimoBarcodeCreator.ashx>
* Patent: <http://www.google.com/patents/US7231869?printsec=description&dq=coffee+barcode>
Kapsel-Codes
============
<p><div class="notetip" markdown="1">
Die Prüfziffer wird wie beim UPC-Code berechnet: <http://en.wikipedia.org/wiki/Universal_Product_Code#Check_digits>
</div></p>
| 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
==============
<p><div class="notewarning">
Die Angaben hier sind aus der Patentschrift übernommen. Wie die in den Barcodes oben kodiert wurden, ist noch nicht ganz klar.
</div></p>
| 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 |

View File

@ -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<Durchwahl>` 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<Queue-Nr.>` 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
<?php
define( 'GS_VALID', true ); /// this is a parent file
require_once( dirName(__FILE__) .'/../inc/conf.php' );
require_once( GS_DIR .'inc/agi-fns.php' );
ini_set('implicit_flush', 1);
ob_implicit_flush(1);
$number = trim(@$argv[1]);
if (empty($number)) die();
gs_agi_verbose( '### Number identification for ' . $number );
// TODO: Identify number
echo 'SET VARIABLE CALLERID(name) ' . gs_agi_str_esc($neuer_name) . "\n";
?>
{% 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 <kbd>8</kbd><kbd>8</kbd> *+ 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:
* <http://192.168.1.245/gemeinschaft/monitor.php?extensions=10-99>
* <http://192.168.1.245/gemeinschaft/mon/mon.php?extensions=10-99>
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
<?php
/** @author Markus Birth <mab@silversolutions.de> */
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 <filename> (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=<user> --source=internal|external --file=<filename>';
$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