mirror of
https://github.com/mbirth/wiki.git
synced 2024-12-24 22:54:09 +00:00
More German posts.
This commit is contained in:
parent
eca5b333d7
commit
0ee14bd19d
@ -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
|
||||
|
96
know-how/hacking/_posts/2013-09-08-tassimo-barcodes.md
Normal file
96
know-how/hacking/_posts/2013-09-08-tassimo-barcodes.md
Normal 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 |
|
||||
|
307
know-how/software/_posts/2009-10-08-gemeinschaft.md
Normal file
307
know-how/software/_posts/2009-10-08-gemeinschaft.md
Normal 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
|
Loading…
Reference in New Issue
Block a user