Doorbird Modul [Testversion]

Hallo,

ich habe jetzt aufgrund der Hinweise hier Verschiedenes ausprobiert, aber der taster 2 wird bei mir nicht ausgewertet bzw. verändert den Klingerzeitraum von taster 1

Das ist der http string:

http://ipsymcon:pw@192.168.x.x:3777/hook/doorbird51772?doorbirdevent=doorbell&id=211

und der kommt auch so im Debugfenster an.

Habe noch IPS 5.0 und Doorbird 2102v firmware 118

Woran kann es noch liegen ?

VG
Frank

Hallo Sickone4 und Fonzo,

gabs hierzu eigentlich irgend eine Lösung?

Ich habe das Modul noch recht neu bei mir installiert und erhalte auch den Fehler mit:

Warning: empty password
Error in Script C:\MEINIPSPFADBISZUMODULE\module.php on Line 902
134 in scripts \IPSLibrary\app\...
usw..

Dieser Fehler wird immer erzeugt, wenn eine Bewegung registriert wird.

Zeile 902 im module.php von Doorbird ist:

SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13

Bisher kann ich leider noch nicht nachvollziehen, woran es liegt.

Die Webhooks in der Doorbird App scheinen auch richtig zu sein, denn diese kann ich so 1:1 im Browser ausführen.

@Fonzo:
Gibt es für die D2101 eigentlich die Möglichkeit den Status der Relais 1 und 2 mit dem Modul abzufragen?

Bisher hatte ich nur „Öffnen“ gefunden, was meiner Ansicht nach mit Relais 1 zusammen fällt.

Danke schonmal für ein tolles Modul und Grüße von einem Doorbird Frischling :slight_smile:

Maze

Genaues kann ich auch nicht sagen, aber es könnte irgendwie mit dem Passwort zusammen hängen.Ist das Passwort außergewöhlich und verfügt über kryptische Zeichen? Wenn ja probiere mal ob das eine Ursache sein könnte und wähle ein anders aufgebautes Passwort. Welche Rechte hat der Nutzer in der Doorbird App? Das ganze tritt ausschließlich bei Bewegung auf?

Falls Dir in der Doorbird API irgendwas bekannt sein sollte wie man das abfragen kann, dann könnte man das ergänzen. Mir ich zur Zeit nicht bekannt das es dafür eine Abfrage gibt.

Hallo Fonzo,

danke schon mal für die schnelle Rückmeldung.

Ich werde morgen mal folgende Punkte checken:

Ob es auch beim klingeln auftritt
Ob es an dem Passwort liegt

Letzteres vermute ich nicht, da ich extra nur Buchstaben und Zahlen verwende, wie die doorbird selbst auch. Eventuell sind es zuviele Zeichen :wink: tbc

Die API werde ich mal durchforsten und bescheid geben, wenn ich die passenden zeilen finde.

Gruß und schönen Abend,
Maze

Hallo Fonzo,

ich habe den Benutzernamen und das Passwort durch einfache „nur Buchstaben“ gebilde ersetzt und das hat leider nichts an dem Fehler geändert.

Der Fehler tritt auch nicht nur bei Bewegung auf, sondern auch bei Klingel Events.

Zur Umsetzung von mehreren Relaisausgängen der D2101 habe ich folgendes gefunden:

http://<device-ip>/bha-api/open-door.cgi?<parameter>=<value>

mit

<parameter>=<value>            r=<string>
Values                                  1|2|<doorcontrollerID>@<relay>
Description                           optional: relay to trigger, e.g. physical relay number or relay on an paired I/O DoorController. If the parameter is ommitted, physical relay 1 gets triggered.

Beispiele:
http://<device-ip>/bha-api/open-door.cgi
http://<device-ip>/bha-api/open-door.cgi?r=1
http://<device-ip>/bha-api/open-door.cgi?r=gggaaa@1

Bei Dir ist vermutlich Version 1 umgesetzt oder?

Eventuell wäre es hier möglich einen zusätzlichen (optionalen) Parameter an die „opening“ function zu Übergeben.

Nachdem ich mir die Webhooks nochmal angesehen habe, denke ich es wäre sehr geschickt, wenn die DoorOpen funktion für die D2101V zB einfach „verdoppelt“ wird. Sprich ein dooropen2 angelegt wird.

In der Doorbell App, kann jedem der Relaisausgänge als Aktion ein Webhook zugewiesen werden. Somit könnte ich dass, was ich will umsetzten. (Ginge aktuell auch schon, dann müsste ich halt entweder „letztes Klingelsignal“ oder „letzte Bewegung“ als Webhook für das 2te Relais missbrauchen.

Der User, welchen ich für IPSymcon in der Doorbell angelegt habe, hat alle Berechtigungen, bis auf Geofencing. Daran sollte es auch nicht liegen.

Über favorites.cgi bekomme ich auch alle informationen abgefragt, somit ist die API-Berechtigung schonmal korrekt vergeben.
Die gelisteten Webhooks entsprechen auch den Erwartungen und funktionieren auch alle, wenn ich sie in den Browser kopiere.

Soweit mal.

Ich versuch mich noch weiter einzuarbeiten, aber dein Quellcode ist mittlerweile schon recht mächtig :smiley:

Gruß
Maze

edit:
Eventuell ist es aber auch in IPSLogger Problem. Es schein nämlich so zu sein, dass die Webhooks ja ankommen!
Die Events werden sauber auf die Variablen gesetzt.
Nur dies Fehlermeldung tauch 6mal auf:

Es gibt für die Beispiele passende Methoden, das hilft Dir aber nicht für Dein Anliegen, denn damit kannst Du nur schalten. Du willst ja den Status abfragen.


Doorbird_OpenDoorRelais(InstanceID: Integer, doorcontrollerID: String, relaisnumber: Integer)
 
Doorbird_OpenDoorRelaisNumber(InstanceID: Integer, relaisnumber: Integer)
 
Doorbird_OpenDoor(InstanceID: Integer)

sind die passenden Methoden.

Was meinst Du damit genau?

Das kann ich ergänzen das zusätzlich noch ein weiterer Parameter ausgewertet wird, der Webhook bleibt trotzdem der gleiche, nur die zu übergebenden Parameter ändern sich dann.

Das kann ich ergänzen und gebe Bescheid sobald das online ist.

Keine Ahnung wenn ich den Fehler finden sollte gebe ich Bescheid oder melde Dich wenn Du da weitere Ideen haben solltest.

Damit ich das sinvoll ergänzen kann, kann mir jemand sagen wieviele Relaisausgänge eine D2101, D2103 und D2103 besitzt?

Hallo,

die haben alle 2 Relaisausgänge soweit man keine zusätzlichen Module verbaut.

Gruß
Maze

Ich habe mal für die Modelle eine zweite Variable hinzugefügt und es wird ein weiterer Favorit in der Dorrbird App angelegt den man dann nutzten kann um die zweite Variable zu schalten. Die Beta ist online die Stable braucht noch bis diese durch Freigabe ist. Falls es Probleme geben sollte einfach melden.

Sorry, dass ich jetzt hier von vorne anfange, aber die Doku bringt mich an der Stelle nicht weiter und eine Suche hier im Thread führte mich auch nicht weiter. Ich habe folgende Fragen/Probleme:

(Erstmal Geräteinfo: Doorbird D202, HW 1.20, IP-Symcon neueste Version, Raspberry PI)

  • Muss beim Sende-Host in der Gateway-Konfiguration die IP-Adresse der Doorbird oder die des IPS-Servers rein?
  • Habe meiner Meinung nach alles korrekt eingetragen, User mit API-Rechten versorgt. Anzeige des Live-Bildes klappt zum Beispiel auch in der mobilen IPS-App. Allerdings passiert nichts, wenn ich auf den Button „Benachrichtigung einrichten“ klicke. Klingel-Ereignisse werden auch nicht in IPS angezeigt oder irgendwelche Variablen aktualisiert. IR-Licht-schalten geht wiederum.

Habt Ihr Tips? Vielen Dank :slight_smile:

Ok, habe jetzt doch einiges selbst rausbekommen. Das Prinzip mit diesen WebHooks war mir nicht klar. Und merkwürdigerweise klappte der Aufruf der Benachrichtigungs-URL aus dem Browser ohne Probleme, aber die Doorbird machte nichts. Jetzt habe ich einmal das Passwort geändert und nun geht es.

Allerdings ist mir immer noch nicht klar, was genau bei Sende-Host rein muss. Aber da es nun soweit funktioniert … :slight_smile:

Noch eine Frage: Weiß jemand, ob man irgendwie ein Soundile an die Doorbird schicken kann, welches dann abgespielt wird? Oder kann man das Hintergrundlicht ein- und ausschalten? Ich würde darüber gerne eine Quittierungsfunktion für die Scharfschaltung einer Alarmanlage realisieren.

Kannst Du mal ein Screenshot machen was Du meinst? Eigentlich steht doch im Konfigurationsformular drüber wo die Doorbird IP Adresse und wo die IP Symcon IP Adresse einzutragen ist.

Nicht das ich wüste, falls Du in der Dokumentation etwas finden solltest gib Bescheid.

Welches Hintergrundlicht, das des Klingelknopfs? Ist das nicht immer an? Ich würde vermuten das Du da extra was verbauen musst wenn Du das Licht ein und ausschalten willst. Was Du machen kannst sind die IR Leuchten ein und auschalten. Das kannst Du eventuell als Quitierungsfunktion nutzten insofern Du die IR Leuchten bei Tageshelligkeit überhaupt erkennen kannst.

Hallo Fonzo,

kurzer Feedback zur aktuellen Version:

Beim Installieren werden die „alten“ IPSMotionsensor HTTPS Einträge nicht gelöscht.

Sprich jedesmal wenn man auf „Benachrichtigungen einrichten“ klickt, dann wird ein zusätzlicher Eintrag erstellt.
Für die anderen Einträge „Doorbell“, „Dooropen“ und „Dooropen2“ funktioniert es.

Ist es gewollt, dass Dooropen und Dooropen2 auf den gleichen Link gehen? „…event=dooropen“

Ein Test zeigt, dass egal welches Relais ich ausführe, beide gehen auf die Variable „Zeitpunkt letzte Türöffnung“. „Zeitpunkt letzte Türöffnung 2“ wird ignoriert.

Die Einstellungen / Zuweisungen in der Doorbird App sind alle korrekt hinterlegt.

Webhook Dooropen auf Relais 1 und Webhook Dooropen2 auf Relais 2.

Gruß
Maze

Und noch zu dem Fehler den mein IPSLogger ausspuckt:

Ich habe nochmal in die Code Zeile reingeschaut (905 in meiner aktuellen) und da ist meiner Ansicht nach der Eintrag für den sodium crypto falsch:

Es sollte laut meiner Recherche dort folgendes stehen:
DoorbirdFehler.PNG

			$key = sodium_crypto_pwhash(
				SODIUM_CRYPTO_SIGN_SEEDBYTES,
				$password,
				$salt, // SALT
				unpack("N", $opslimit)[1], //OPSLIMIT
				unpack("N", $memlimit)[1], //MEMLIMIT
				SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13

Sollte es nicht so heißen?

			$key = sodium_crypto_pwhash(
				SODIUM_CRYPTO_SIGN_SEEDBYTES,
				$password,
				$salt, // SALT
				unpack("N", $opslimit)[1], //OPSLIMIT
				unpack("N", $memlimit)[1], //MEMLIMIT
				SODIUM_CRYPTO_PWHASH_ALG_ARGON2I[b]D[/b]13

Gruß
Maze

edit:

Es muss was mit dem Passwort zu tun haben, welches in Zeile 898 abgefragt wird.

Ich habe mein Passwort jetzt hardcodiert und die $key Funktion und schon sind die Fehlermeldungen weg.

Das ist so gewollt, ich möchte ungern einfach so Einträge löschen, das liegt in der Hoheit des Nutzers, das soll dieser einfach selber in der App machen. Wenn neu angelegt wird werden ja nur noch die neuen Einträge angelegt.

Was wird genau doppelt angelegt?

Ja das ist gewollt, da Anhand der id differenziert wird. Der Hook ist sowieso immer der Gleiche für Doorbird,nur die übergeben Parameter an den Hook unterscheiden sich.

Da war zunächst noch ein Fehler enthalten, hast Du ganz aktuelle Version installiert?

Kannst Du kurz verweisen wo Du die Info genau gefunden hast? SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13 steht für Argon2id algorithm version 1.3., ich konnte selber aber keine Information finden, welche Version momentan genau von Doorbird genutzt wird. SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13 gehört zumindest zu den vordefinierten Konstanten und wäre der normale Algorithmus.

Kannst Du mal schauen was Du mit


$doorbird_password = IPS_GetProperty(12345, 'Password_1'); // 12345 ID Doorbird
$password = substr($doorbird_password, 0, 5); // first 5 chars of your password
var_dump($password)

ausgegeben wird und das mit dem hardcodierten Wert vergleichen? Wenn da das Gleiche stehen sollte, dann kann ich mir nicht erklären warum es im einen Fall geht und dann wieder nicht.

Der Webhook für die Bewegung (Motion).

Ja. Eben nochmal gechecked und die Beta getested.
Das Problem ist das gleiche. Egal ob Relais 1 oder 2 verwendet werden, es geht beides auf die Variable von Relais 1.

An gleicher Stelle :slight_smile: Und du hast recht. Es geht beides!

Habe ich gemacht:
Der Namen ‚Password_1‘ existiert aber garnicht! Und somit ist der Wert auch leer.

Ich habe mir mal dein form.json angeschaut von dem Modul und dort kann ich so ein Feld auch nicht entdecken.

Ich vermute mal, dass an dieser Stelle auch das Passwort vom Webhook (Formularfeldname: ‚webhookpassword‘) rein sollten? Oder doch von der Doorbird (Formularfeldname ‚Password‘)?
Diese Formularfeldnamen funktionieren beide und es sind die einzigen beiden Passwörter, welche ich in der Maske in IPS eingeben kann.

Nur ist mir nicht klar, welche du hier von der Programmstruktur her benötigst :slight_smile:
Die User Abfrage ist somit denke ich auch fehlerhaft implementiert.

Was mich nur stark wundert ist, dass die Kommunikation ja in beide Richtungen funktioniert. Heißt dass dann, dass sie im Moment halt einfach unverschlüsselt ist?

Gruß
Maze

Ja sakrisch, gut das wird drüber geschrieben haben. Tja das ist dann wohl der simple Fehler, früher wurden mehrere Nutzer hinterlegt, das ist aber nun gar nicht mehr notwendig. Die Property kann also gar nicht mehr über das Formular befüllt werden, aber der Wert wurde dennoch abgefragt, was so natürlich nicht funktioniert. Manchmal sieht man den Wald vor Bäumen nicht, habe ich auf die schnelle korrigiert. Den Rest schau ich mir auch noch mal an. Ich hoffe aber das damit der offensichtliche Fehler wegen dem Passwort weg ist.

Sauber, dann haben wir das schon erledigt :slight_smile:

Zu den 2 Relais:

Ich würde vorschlagen du setzt das so um, dann läuft es auch :wink:

  1. Den Webhook vom zweiten Relais auf
doorbirdevent=dooropen2

setzen

  1. Den Code im Module anpassen auf:
		//Auswerten von Events von Doorbird
		// Doorbird nutzt GET
		if (isset($_GET["doorbirdevent"])) {
			$this->SendDebug("Doorbird:", json_encode($_GET), 0);
			$data = $_GET["doorbirdevent"];
			if ($data == "doorbell") {
				if(isset($_GET["id"]))
				{
					$id = $_GET["id"];
					if ($id == "111") {
						$this->SetLastRingtone(1);
					}
					if ($id == "211") {
						$this->SetLastRingtone(2);
					}
					if ($id == "311") {
						$this->SetLastRingtone(3);
					}
				}
				else{
					$this->SetLastRingtone(1);
				}

			} elseif ($data == "motionsensor") {
				$this->SetLastMovement();
			} elseif ($data == "motionsensor") {
				$this->SetLastMovement();
			} elseif ($data == "dooropen") {
					$this->SetLastDoorOpen(1);
			} elseif ($data == "dooropen2") {
					$this->SetLastDoorOpen(2);
			}
		}

und

		//Auswerten von Events von Doorbird
		// Doorbird nutzt GET
		if (isset($_GET["doorbirdevent"])) {
			$data = $_GET["doorbirdevent"];
			if ($data == "doorbell") {
				$id = $_GET["id"];
				if ($id == "111") {
					$this->SetLastRingtone(1);
				}
				if ($id == "211") {
					$this->SetLastRingtone(2);
				}
				if ($id == "311") {
					$this->SetLastRingtone(3);
				}
			} elseif ($data == "motionsensor") {
				$this->SetLastMovement();
			} elseif ($data == "dooropen") {
					$this->SetLastDoorOpen(1);
			} elseif ($data == "dooropen2") {
					$this->SetLastDoorOpen(2);

Somit läuft das ganze bei mir :slight_smile:

Drei Kleinigkeiten habe ich noch:

  1. Die Beta lies sich nicht updaten, da er das GUID des Moduls nicht fand. Musste alles löschen und neu installieren

  2. Der Motionsensor Webhook wird 2 mal angelegt

  3. Hab ich jetzt doch glatt vergessen vor laute Kinder Chaos hier O_o

Gruß
Maze

PS: Wenn ich nicht so nen GitHub DAU wäre, würde ich es ja Forken und dir so zur Verfügung stellen :wink:

Das Problem scheint zu sein das der Webhook nicht richtig übermittelt wird das &id=1 bzw. &id=2 wird verschluckt ich weis aber noch nicht warum. Falls jemand eine Idee hat. Ansonsten müsste man das &id=1 bzw. &id=2 in der Doorbird App händisch ergänzen.

Nein ist gibt zwei unterschiedliche Arten der Kommunikation so lange aber in der API nicht vollständig alles auch über UDP unterstützt wird muss man wohl noch den Webhook nutzten. Der Webhook ist über Nutzer und Passwort abgesichert und wird an IP-Symcon geschickt. zusetzlich sendet die Doorbird aber auch noch verschlüüselt Daten per UDP. So lange aber nicht jedes mögliche Event per UDP geschikct wird kann man auf den Webhook auch nicht gänzlich verzichten. Vorteil von einem Webhook ist auch der Funktioniert wenn IP-Symcon ganz wo anders steht. Broadcast per UDP get nur wenn die Doorbird und IP-Symcon im gleichen Netz sind.