Shelly mit einer Asterisk ansteuern

Es wird eine funktionierende Installation von Asterisk vorausgesetzt.

Als eine Anwendung aus der Praxis kann man mit einem Shelly z.B. einen Türöffner in einem Büro ansteuern. Über die Kurzwahl am Telefon kann dann durch einen Tastendruck der Türöffner betätigt werden. Viele andere Anwendungen sind damit möglich und es lassen sich viele Dinge somit über das Telefon steuern.

#!/usr/bin/php -q
<?php
error_reporting (E_ALL);
require('phpagi.php');
$url="http://192.168.0.30/relay/0?turn=on&timer=5";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
?>

Man kann z.B. obiges PHP Script verwenden. Es wird vorausgesetzt das PHPAGI installiert ist und das Verzeichnis /val/lib/asterisk/agi-bin/ auf der Asterisktelefonanlage vorhanden ist und man zugang über die Console hat.

Ein Shelly1 erhält dann über das obige Script den Befehl für 5 Sekunden eingeschaltet zu sein. Es sei vorausgesetzt das der Shelly im gleichen Netzwerk wie die Asteriskanlage ist. Damit man den Shelly über das Telefon ansteuern kann, muß noch die Datei extensions_custom.conf im Verzeichnis /etc/asterisk/ um folgendes ergänzt werden.

[from-internal]
exten => *255,1,Answer()
exten => *255,n,AGI(schalter.php)
exten => *255,n,Hangup()

Somit wird nach Anwahl von *255 in diesem Fall das obige Script angesteuert und der Shelly ausgelöst.
Verwendet wird Asterisk Version 16.19.0 und Free PBX 15.0.23

Arbeiten an Elektroanlagen sollten nur von Fachkräften durchgeführt werden!

Asterisk und Call Pickup mit Yealink T46S

Um einen Anruf von einer anderen Nebenstelle die gerade angerufen wird anzunehmen muß die Besetztlampen Funktion (BLF) eingerichtet werden.

Über das Telefonmenü, welches über die IP Adresse zu erreichen ist, wählt man den Reiter Direktwahl an. Je nach Firmware und eingestellter Sprache kann der Reiter auch anders heißen.

Als Typ wird dann erstmal BLF ausgewählt. In das Feld Wert kommt dann die Nebenstelle die man mit dem Knopf erreichen will. Das Label ist dann die Bezeichnung auf dem Telefon. Entscheident ist das Feld Erweiterung. Hier gehören 2 ** rein sonst kann man für die Nebenstelle keine Gespräche abfangen sollte der Kollege mal nicht da sein.

Ist nicht gewünscht das der Kollege andere Gespräche annimmt lässt man die ** einfach weg. Es kann dann mit dem Knopf nur die Nebenstelle angewählt werden.

PhoneSuite

Wer ein TAPI Schnittstelle zu seiner Telefonanlage sucht ist hier richtig. Auf der Seite von PhoneSuite.de gibt es eine TAPI Schnittstelle für die Asterisk, sowie alle anderen TAPI fähigen Anlagen. Die passende Software PhoneSuite verwaltet komfortabel am PC nicht nur die Adressen sondern dokumentiert auch die Anrufe an die Kontakte mit. Eine Anwahl der Telefonnummer aus anderen Anwendungen, wie zum Beispiuel Outlook, gehört natürlich ebendfalls dazu. Alles ist für einen kleinen Preis auf der Seite PhoneSuite.de erhältlich und vielfältig einsetzbar. Vorbeischauen lohnt sich.

Free-PBX 15 statische IP-Adresse

In manchen Netzwerken ist es erforderlich der Telefonanlage ein statsiche IP-Adresse zu geben. Dies kann nicht über die normalen Einstellungen über die Weboberflache erfolgen. Mit anderen Worten für den Laien ist es etwas schwierig und kann bei Fehlern dafür sorgen das die Anlage nicht mehr erreichbar ist. Die Einstellungen lassen sich direkt auf der Anlage (Tastatur und Bildschirm an der Telefonanlage) oder per SSH einstellen. Beim Einsatz über SSH geht allerdings die Verbindung nach dem Ändern der Konfigurationsdatei meist verloren.

Folgende Schritte sind erforderlich:
1. einloggen als root (mit einem SSH Client oder an der Anlage. Nicht über die Weboberfläche !)
2. wechsel in das Verzeichnis cd /etc/sysconfig/network-scripts
3. mit dem Editor eurer Wahl, VI oder NANO die Datei ifcfg-eth0 (kann bei euch auch ifcfg-eth1 oder ähnlich sein) bearbeiten
4. die Zeile BOOTPROTO=dhcp ändern auf BOOTPROTO=none (Das System soll sich keine IP-Adresse selbst besorgen)
5. die Zeilen
NETMASK=255.255.255.0
IPADDR=192.168.0.10
GATEWAY=192.168.0.1
einfügen. (Die IP-Adresse und das Gateway natürlich auf euer Netzwerk anpassen)
6. Die Einstellungen speichern.
7. Jetzt noch den Netwerkdienst neu starten mit: service network restart

Raspberry Pi / SSH

Wenn man einen Raspberry Pi neu aufsetzt ist der Zugriff per SSH aus Sicherheitsgründen standardmäßig deaktiviert.

Hat man keinen Bildschirm und keine Tastatur am Raspberry zur verfügung ist die einfachste Methode das man auf die SD Karte von einem z.B. Windows PC zugreift. Auf der SD Karte im Verzeichnis boot legt man eine leere Datei mit dem Namen ssh an. Achtung !!! Es darf keine Dateiendung hinzugefügt werden wie z.B. .txt oder ähnlich.

Beim Start von Raspian wird diese Datei dann gelöscht und ssh wird aktiviert.

Eine weitere Methode ist direkt über die Konsole sofern ein Bildschirm und eine Tastatur an den Pi angeschlossen ist. Man kann dann mit dem Befehl raspi-config auf der Benutzerkonsole die Einstellung vornehmen. Hier können dann auch andere Einstellungen, sowie die Sprache, die Bildschirmauflösung, Zeitzone, WLAN und viele andere Sachen eingestellt werden.

Update

Seit April 2022 Gibt es Änderungen im Raspberry Pi OS. Aus Sicherheitsgründen wurde auf die Vergabe des standardbenutzernamens PI verzichtet. Es muß nun, wenn der Pi ohne Bildschirm gestartet werden soll, über das Tool Raspberry Pi Imager beim erstellen des Images schon ein Benutzer angelegt, und SSH freigeschaltet werden.

Alle Nutzer die den Pi mit Bildschirm und Tastatur starten können dies auch nach dem ersten Start erledigen.

 

WordPress hängt im Wartungsmodus

In letzter Zeit passiert es mit immer öfter, dass bei kleineren Aktualisierungen in WordPress, der Updateprozess unterbrochen wird und die Webseite danach nicht mehr zu erreichen ist. Die Webseite bleibt einfach im Wartungsmodus stehen. Das Problem ist leider so einfach nicht zu beheben.

Die Lösung ist trotzdem sehr einfach. Mit einem FTP Programm deiner Wahl geht man in das Hauptverzeichnis deiner WordPressinstallation. Dort liegt eine Datei mit der Bezeichnung „.maintenance“. Diese Datei einfach löschen und alle läuft wieder wie gewohnt.

In Memoriam

Mit dem Tod eines geliebten Menschen verliert man vieles,
niemals aber die gemeinsam verbrachte Zeit.

google play dienste bleibt ständig stehen

Es kann vorkommen das durch ein missglücktes Update oder andere Fehler ein Dienst seine Arbeit verweigert und sich weder neu starten oder anhalten lässt. In meinem Fall auf einem Samsung Galaxy A3. Es gibt zahlreiche Anleitungen wie man dieses beheben kann, aber nur diese eine hat in meinem Fall geholfen.

Die nervige Fehlermeldung „google play dienste bleibt ständig stehen“ kann durch folgende Schritte behoben werden.

->Menü->Einstellungen->Biometrische Daten und Sicherheit->Andere Sicherheitseinstellungen->Geräteadministrator-Apps->Mein Gerät finden (Muss deaktiviert werden) dann zurück zu den Einstellungen

Apps->Google Play Dienste->App-Info (oben rechts die drei kleinen Punkte)->Aktualisierungen deinstallieren->Diese App durch Werksversion ersetzen?->OK drücken->Telefon neu starten.

Dieser Weg hat am Ende nach vielen Versuchen bei mir zum Erfolg geführt.

Cronjob auf einem Linuxsystem

Ein Cronjob wird dann und wann benötigt um Systemprozesse zu automatisieren, zu festgelegten Zeiten bestimmte Aufgaben zu erledigen. Als beispiel zeige ich das Anlegen eines Cronjobs der den Server zu bestimmten Zeiten neu Startet. Das funktioniert zum Beispiel auch auf einem Raspberry Pi. Gerade auf diesen kleinen Helferlein hängen sich schon mal gerne ein paar Dienste oder Prozesse auf, so das der Server dann von alleine z.B alle 24 neu startet.

Am einfachsten trägt man in die crontab den zu erledigenden Job ein. Das Format für die Ausführung lautet wie folgt.

m s t m w /auszuführender Befehl oder Programm

von links nach rechts: Minute Stunde Tag Monat Wochentag

Das * dient als Joker für z.B. ( 10 12 1 * * /MeinProgramm) die Ausführung findet immer um 12:10 an jedem 1. Des Monats statt. Egal welcher Wochentag ist. Intervalle werden angegeben mit (*/10 * * * * /MeinProgramm) das Programm wird alle 10 Minuten ausgeführt.

Wochentage fangen an mit 0(Sonntag) und enden mit 7(Sonntag). Den Sonntag gibt es also 2x

DataTables – Bootstrap

Hier findest du einen Codeschnippsel um Data Tables in Bootstrap immer aktuell darzustellen. Der erste Teil kommt in den Scriptbereich in der Datei wo die Tabele dargestellt werden soll. Das Script greift auf eine php Datei zu. In der php Datei werden dann die Daten für die Tabelle erzeugt. Es lässt sich so nur die Tabelle aktualisieren. Dann muß nicht immer die ganze Seite geladen werden.

<script>
$('#TblKunden').dataTable(

{

"ordering": true,
"paging": true,
"info": true,
"searching": true,
"processing": true,
"serverSide": true,
"columns":[{"title" : "spalte"},{"title" : "spalte1"},{"title" : "spalte2"},{"title" : "spalte3"}],
"ajax": '/scripte/ajax_DeiineTabellenAbfrage.php'
})

</script>
<?php
verbinden_mysqli();

// Alle Variablen initalisieren
$params = $columns = $totalRecords = $data = array();
$params = $_REQUEST;
// Die Spaltennamen festlegen
$columns = array(     
0 =>'spalte',     
1 =>'spalte1',
2 =>'spalte2',
3 =>'spalte3');

$where = $sqlTot = $sqlRec = "";

// Wenn eine Suche eingegeben ist prüfen ob der Suchbegriff existiert
if( !empty($params['search']['value']) ) {
    $where .=" WHERE ";     
    $where .=" ( spalte LIKE '".$params['search']['value']."%' ";    
    $where .=" OR spalte1 LIKE '".$params['search']['value']."%' ";     
    $where .=" OR spalte2 LIKE '".$params['search']['value']."%' )";
    }

// Anzahl der Datensätze ermitteln
$sql = "SELECT spalte,spalte1,spalte2,DATE_FORMAT(spalte3,'%d.%m.%Y %H:%i') AS spalte3 FROM `DeineTabelle` ";
$sqlTot .= $sql;
$sqlRec .= $sql;

// Den Suchstring verketten wenn Suchparameter vorhanden sind
if(isset($where) && $where != '') {
     $sqlTot .= $where;     
     $sqlRec .= $where;
     }

 $sqlRec .=  " ORDER BY ". $columns[$params['order'][0]['column']]." ".$params['order'][0]['dir']."  LIMIT ".$params['start']." ,".$params['length']." ";

$queryTot = mysqli_query($Connection, $sqlTot) or die("database error:". mysqli_error($Connection));
$totalRecords = mysqli_num_rows($queryTot);
$queryRecords = mysqli_query($Connection, $sqlRec) or die("error to fetch DeineTabelle data". mysqli_error($Connection));
while( $row = mysqli_fetch_row($queryRecords) ) {     
$data[] = $row; }
$json_data = array(         
"draw"            => intval( $params['draw'] ),         
"recordsTotal"    => intval( $totalRecords ),         
"recordsFiltered" => intval($totalRecords),         
"data"            => $data            
);

echo json_encode($json_data);

trennen_mysqli($Connection);  
// Antwort als JSON abschicken
?>