DoorPI / VoIP Door-Intercomstation with Raspberry Pi

Hallo Kris,

besten Dank. Hilft weiter, aber grundsätzlich sollte es ja irgendwie gehen. Vielleicht ist Thomas mal wieder online.
Ich werde das Projekt final erst im Neubau umsetzen, aber auf jeden Fall eine super Alternative zu den doch meist unverschämt teuren Lösungen ala Telegärtner und co.

Gruss Thomas

Erst einmal ein grosses Lob für die bisherige Arbeit.

Heut habe ich im Internet die DoorlinePro Ex mit TFT gesehen…

https://www.youtube.com/watch?v=OWVO_coxOh0

Da wäre doch die Erweiterung des Raspberrys mit einem Touchdisplay ein weitere Ziel.
Leider zwickt sich das am GPIO mit der Benutzung des PiFace oder?

Gruß Konny

Hallo zusammen,

ich bin noch nicht so weit wie andere hier und bräuchte mal etwas Hilfe. in der doorpi.log steht die nette Zeile:

[doorpi.doorpi] no Webserver loaded

Was kann ich tun, damit der webserver geladen wir? Mir fehlt z.B. das Verzeichnis /usr/local/etc/DoorPiWeb…

Ich noch mal,

nachdem doorpi einen restart nicht überlebt, habe ich mich noch mal von Anfang an durch die Installation gehangelt. Wenn ich das richtig sehe, ist die manuelle Installtion aus dem Wiki nicht mehr erforderlich (zumindest was den Python-Anteil betrifft) da das Installationsscript aus Beitrag #91 die benötigten Module installiert. Egal, ich habe trotzdem erst laut Wiki manuell installiert, bis zu dem Punkt wo DoorPi installiert wird. Dann bin ich auf die Anleitung laut Beitrag #91 umgeschwenkt, da sie mir die Aktuellste zu sein scheint.

git clone https://github.com/motom001/DoorPi.git /tmp/DoorPi
cd /tmp/DoorPi
sudo python setup.py install
sudo rm /etc/init.d/doorpi
sudo cp /usr/local/etc/DoorPi/docs/daemon/doorpi /etc/init.d/doorpi
sudo update-rc.d doorpi defaults
doorpi_cli --trace --test &&
sudo /etc/init.d/doorpi start

Bis „sudo rm /etc/init.d/doorpi“ ist noch alles gut, dann habe ich aber ein Problem. Das Verzeichnis /usr/local/etc/DoorPi/docs/daemon gibt es nicht, es gibt nur /usr/local/etc/DoorPi und das ist leer! Es gibt auch kein Verzeichnis /home/pi/DoorPi.

Die „doorpi“-Datei ist nur unter /tmp/DoorPi/doorpi/docs/service zu finden, benutze ich diese, läuft erst mal alles, nach einem reboot funktioniert das Webinterface dann aber nicht mehr, obwohl ein doorpi-Prozess läuft.

Ich hoffe, ihr könnt mir helfen, da ich z.Zt. keine Türklingel habe (die alte hat ihren Geist aufgegeben).

So, ich habe DoorPi laufen. Diese Anleitung: https://github.com/motom001/DoorPi/issues/127
hat mir dabei geholfen. Ausserdem habe ich versucht auf einem Jessie zu installieren, mit Wheezy hat es dann geklappt!

Ich würde Euch gern auf mein neues Forum hinweisen.
Darin werden wir versuchen die Informationen rund um DoorPi strukturiert abzulegen.

Schaut doch mal vorbei…

DoorPi

Hallo motom001,

nachdem ich gestern mit der Jessy-Anleitung die DoorPi (erfolgreich) neu aufgespielt habe,
und ich mich an einigen Stellen schwer getan habe,
möchte ich deshalb als Anregung und Hilfe für Andere auf folgende Sachen hinweisen:

  • Leider wurde „doorpi.ini“ nicht mitinstalliert. Die extra im Forum zur Verfügung gestellte, ist etwas mager.
  • Der DoorPI-Pfad ist nicht auf den ersten Blick so schnell zu finden:
    /usr/local/etc/DoorPi/conf/doorpi.ini statt conf/doorpi.ini
  • In den verschiedenen Installationsbeschreibungen zwickt sich Linphone und pjsua:
    Linphone ist jetzt Standard und musste extra installiert werden.

Mein Wunsch:
mit Piface2 und RFID MC522 Programmierung/Abfrage über
SPI_CS0(pin24 GPIO8) und
SPI_CS1(pin26 GPIO7)
In welchen py-Files wird das definiert?

Anbei noch meine test- doorpi.ini

Gruss Konny


[DoorPi]
base_path = /usr/local/etc/DoorPi
eventlog = !BASEPATH!/conf/eventlog.db
is_alive_led =blinking_led
# Kontrollleuchte auf PIface-Board

# Snapshot anlegen in 
snapshot_path = !BASEPATH!/../DoorPiWeb/snapshots/
number_of_snapshots = 25
snapshot_size =  1280x720

[DoorPiWeb]
indexfile = index.html
ip =
loginfile = login.html
online_fallback = 
port = 8080
public = AREA_public
www = !BASEPATH!/../DoorPiWeb

[AREA_installer]
.* =
[User]
door = pi

[Group]
administrators= admin, doorpi ,door,pi

[WritePermission]
administrator = installer.dashboard,config

[ReadPermission]
guests = dashboard

[SIP-Phone]
# Anschluss an Fritzbox über  **620
firewallpolicy = PolicyNoFirewall
audio_codecs = PCMA,PCMU
call_timeout = 15
capture_device = ALSA: USB PnP Sound Device
dialtone = !BASEPATH!/media/ShortDialTone.wav
dialtone_renew_every_start = False
dialtone_volume = 35
echo_cancellation_enabled = False

identity = DoorPi
# angezeigter Rufname
local_port = 5060
ua.max_calls = 2
max_call_time = 120
playback_device = ALSA: USB PnP Sound Device
record_while_dialing = False
records = !BASEPATH!/records/%Y-%m-%d_%H-%M-%S.wav


# Sipphonezugang Fritz
sipphonetyp = linphone
sipserver_password = abcdef
sipserver_realm = fritz.box
sipserver_server = 192.168.2.1
sipserver_username = 620
stun_server =192.168.2.1

# Videoeinstellungen 
video_codecs = VP8
video_device = V4L2: /dev/video0
video_display_enabled = False
video_size = vga

[DTMF]
# Empfang -> Ausführung
„#9“ = out:Tueroeffner,1,0,3
„1“ = out:Licht,1,0,30
„4“ = out:Zirkulation,1,0,90

[keyboards]
# Angeschlossene Device GPIO 
pifacepins = piface
onboardpins = gpio

[pifacepins_keyboard]
# Taster Wiederholrate
bouncetime = 1000

[onboardpins_OutputPins]

[pifacepins_OutputPins]
#PIFACE2 Output Relais 0,1 Buchsen/LED 0-7
0 = Tueroeffner
1 = Licht
2 = Garage
3 = Heizung
4 = Zirkulation
5 = WOL-Server
6 = Connect
7 = blinking_led

[onboardpins_InputPins]

[pifacepins_InputPins]
# = Onboard Taster 0-3,Buchsen 0-7
0 = call:**610
1 = call:**611
2 = out:Tueroeffner,1,0,3
3 = out:Licht,1,0,1
4 = out:Zirkulation,1,0,1
5 = take_snapshot
6 = os_execute: sudo reboot
#7 = mailto:fb@a21.de,DoorPi:OnOpenDoor,Tuere geoeffnet,1
#    Empfänger,Betreff,Nachricht,Snapshot(Boolean)

[EVENT_OnStartup]
10 = sleep:1
#20= out:IPS,1

 [EVENT_OnCallStateConnect]
10 = out:Connect,1
#20 = ipsrpc_setvalue:40276,true

[EVENT_OnCallStateDisconnect]
10 = out:Connect,0
#20 = ipsrpc_setvalue:40276,false

[rfidreader_InputPins]
#rfidreader = rdm6300
#rfidreader = rc522

[SMTP]
server=smtp.strato.de
port= 465
need_login =true
username= abcde@abcde.de
password=
use_tls=false
from=Doorpi



Klappt bei euch noch die Schnittstelle von Doorpi zu IPS.
Paar Einträge vorher scheint ja das selbe Problem wie bei mir zu sein

20 11:57:52,779 [ERROR]         [doorpi.action.SingleActions.ipsrpc_setvalue] couldn't send IpsRpc ('instancemethod' object has no attribute '__getitem__')
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/doorpi/action/SingleActions/ipsrpc_setvalue.py", line 50, in ips_rpc_set_value
    if ips_rpc_check_variable_exists(key, config) is not True: raise Exception("var %s doesn't exist", key)
  File "/usr/local/lib/python2.7/dist-packages/doorpi/action/SingleActions/ipsrpc_setvalue.py", line 40, in ips_rpc_check_variable_exists
    return response.json['result']
TypeError: 'instancemethod' object has 

Hat einer schon ne Lösung ?!

Erstmal muss ich sagen nen cooles Projekt.

Das aufsetzen hat so seine Zeit gedauert, da immer wieder mal was nicht ganz so funktionierte. Auch die SUB Soundkarte wollte erst nicht. Mal sehen wie im Parallelbetrieb die Stabilität ist, denn daran hängt der WAF

Nun bin ich an dem Punkt wo ich aus DoorPI über DTMF zur Steuerung des Türschloss und Licht Variablen in IPS setzen will. Denn das sind für mich Komfort Merkmale.
Aber ich bekomme die JSON nicht hin.

2016-07-23 11:15:32,596 [ERROR]  	[doorpi.action.SingleActions.ipsrpc_setvalue] couldn't send IpsRpc (('Connection aborted.', error(111, 'Verbindungsaufbau abgelehnt')))
Traceback (most recent call last):

bekomme ich. Die doorpi.ini sieht wie folgt aus. Fernwartung und Passwort in ISP sind gesetzt.

[IP-Symcon]
server = http://192.168.0.44:82/api/
username = ****@me.com
password = ****
jsonrpc = 2.0

[DTMF]
„#“ = ipsrpc_setvalue:29079,true

Kann es sein das es durch die eMail Adresse wegen dem @ Zeichen Probleme geben kann?

So einen Schritt weiter…wenn man den richtigen Port nimmt dann bekommt man auch eine Verbindung.

Allerdings geht es mir wie wuppi83. Sieht bei mir genauso aus…Da seit Monaten hier kein neuer Eintrag ist, scheint der Weg also Tod zu sein. Schade.

Moin,

leider hat von uns nur noch keiner Zeit gefunden für ne Teaviewer Sitzung :0(
Wenn du Zeit hast hilft er uns gerne weiter :0)

VG

ANdreas

Habe meinen Pi jetzt auch an die Tür gebracht.

Läuft alles soweit ganz gut. Jetzt möchte ich das ganze mit IPS-Verknüpfen. IPS-Läuft auf einem Windows PC.
Ich steuere IPS über ein Httpget von außen an das ich auswertet und welches dann wiederum befehle schaltet.

So mache ich es vom tasker aus und über batch dateien von den verschiedenen PC`s.
Ist ein sehr simples verfahren und funktioniert stabil.

So würde ich es jetzt auch gerne über den PI machen. Also wenn Gpio 13 gedrückt wird soll nicht nur die Fritzbox reagieren sondern auch eine Vab in IPS aktualisiert werden.

Die fritzbox reagiert auch schön sauber
in der ini steht

[onboardpins_InputPins]
13 = call:**611

wie muss ich den folge befehl anhängen und wie sollte dieser aussehen wenn ich eine URL HTTP://IPSServer:8080/%nutzer%passwort345%true%
senden möchte

Man lege eine .sh datei an
z.B.
im ordner der doorpi.ini

cd  /usr/local/etc/DoorPi/conf
sudo nano test.sh

mit dem Inhalt

curl -m 1 "HTTP://IPSServer:8080/%nutzer%passwort%12345%true%"

prüfe das ganze mit

bash test.sh

auf funktion

mache mit

sudo chmod +x test.sh

ausführbar

prüfe das ganze mit

./test.sh

nun gehe man in die Doorpi.ini und fülle sie in meinem fall mit

[EVENT_OnKeyPressed_onboardpins.13]
10 = os_execute:/usr/local/etc/DoorPi/conf/test.sh

[onboardpins_InputPins]
13 = call:**611

und siehe da es funktioniert

weitere funktionen kann man übrigens dann in

[EVENT_OnKeyPressed_onboardpins.13]

einfügen.

ich bekomm hier immer „File not Found“ zurück? was mach ich falsch?
Habe symcon auf einem Raspi laufen? Ist hier der Port schon 3777?

hm ich bekomm es einfach nicht hin, über HTTP die Variable zu steuern. Woran kann das liegen :slight_smile:
wie geht das genau?

Hallo zusammen,

könnte jemand mal folgenden Code für das python file ipsrpc_setvalue.py testen.
Hat allerdings einen Schönheitsfehler, dass die config aus doorpi.ini nicht gezogen wird, ansonsten geht´s bei mir wieder.

Vielleicht hat jemand mehr python Erfahrung und kann die config-daten Funktionalität wiederherstellen.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import logging
logger = logging.getLogger(__name__)
logger.debug("%s loaded", __name__)

import doorpi
import requests
import json
from requests.auth import HTTPBasicAuth
from doorpi.action.base import SingleAction

def ips_rpc_fire(method, *parameters):
    url = 'http://<ip-adresse>:3777/api/'
    auth=HTTPBasicAuth('<email>@<provider.de>', '<password>')
    headers = {'content-type': 'application/json'}

    payload = {
        "method": method,
        "params": parameters,
        "jsonrpc": "2.0",
        "id": 0,
    }
    return requests.post(url, auth=auth, data=json.dumps(payload), headers=headers)

def ips_rpc_check_variable_exists(key):
    response = ips_rpc_fire('IPS_VariableExists', key)
    return response.json()['result']

def ips_rpc_get_variable_type(key):
    response = ips_rpc_fire('IPS_GetVariable', key)
    return response.json()['result']['VariableType']

def ips_rpc_set_value(key, value):
    try:
        if ips_rpc_check_variable_exists(key) is not True: raise Exception("var %s doesn't exist", key)
        type = ips_rpc_get_variable_type(key)
        if type is None: raise Exception("type of var %s couldn't find", key)
        # http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/variablenverwaltung/ips-getvariable/
        # Variablentyp (0: Boolean, 1: Integer, 2: Float, 3: String)
        elif type == 0:
            if value.lower() in ['true', 'yes', '1']: value = True
            else: value = False
        elif type == 1: value = int(value)
        elif type == 2: value = float(value)
        elif type == 3: value = str(value)
        else: value = str(value)
        ips_rpc_fire('SetValue', key, value)
    except Exception as ex:
        logger.exception("couldn't send IpsRpc (%s)", ex)
        return False
    return True

def get(parameters):
    parameter_list = parameters.split(',')
    if len(parameter_list) is not 2: return None

    key = int(parameter_list[0])
    value = parameter_list[1]

    return IpsRpcSetValueAction(ips_rpc_set_value, key, value)

class IpsRpcSetValueAction(SingleAction):
    pass

Habe es jetzt hinbekommen mit der gewohnten Funktionalität.

die Files kann man zum Testen hier runterladen:

https://github.com/hermanthegerman2/DoorPi

Als Schmankerl hab ich noch eine neue SingleAction programmiert:

Aufruf in der doorpi.ini:

10 = IPS_SetMediaContent,xxxxx

xxxxx = Variablen-Id einer Mediendatei des Typs 1 (Bild)

PiCamera muss angeschlossen sein und die Python-Bibliothek für die PiCamera muss logischerweise geladen sein.

Viel Spaß!

Moin Hermann,

danke für deine Arbeit … werde das am WE gleich mal austesten :0)

Vg

Andreas

Hi wuppi83,

ware super … ich möchte mich mal demnächst etwas mehr der Anbindung zwischen Symcon und doorpi widmen.
Ich stelle mir dazu ein PHP-Modul vor.

Was sollte dieses denn alles können ?

Teste doch bitte auch das IPS_SetMediaContent und mach Dir vielleicht Gedanken, was hierzu noch für Konfigurationsmöglichkeiten (Kameraauflösung, Framerate usw.) in der doorpi.ini reinkommen sollen.

Irgendwie schwebt mir auch noch ein Keyboard ausgelöst durch Symcon vor. Meine derzeitige Überlegung ist ebenfalls eine JsonRPC Schnittstelle, welche Events auslöst, in doorpi zu installieren.

Dazu brauch ich aber die Unterstützung von motom001, da ich in Python nicht gerade firm bin und er sein Baby natürlich wesentlich besser kennt, als ich.

Gruß und viel Spaß beim Testen wünscht,
Hermann

P.S.: Fehlt nur noch ein SIP-Client in Symcon!

Moin,

das Keyboard soll doch angeblich mittlerweile integriert sein.
Habe jetzt schon lange nicht mehr mitgelesen aber hier stand doch sowas

SSH Befehl für Türöffner über PiFace · Issue #36 · motom001/DoorPi · GitHub

VG

Andreas