Freundin bedingt zutritt gewähren

WebUIs (DashUI, yahui, ...), Adapter (Hue, IRTrans, Sonos, ...), Logging, Scripting

Moderator: Co-Administratoren

mimquadrat
Beiträge: 71
Registriert: 18.11.2013, 15:50

Freundin bedingt zutritt gewähren

Beitrag von mimquadrat » 24.06.2014, 15:28

Servus Jungs,
Problemstellung: ich bin heute an der Nase operiert worden (Muscheln verkleinern weil ich immer schlecht Luft bekomme...).
Ich lieg jetzt zuhause und schlaf wegen der Narkose immer wieder ein. Jetzt möchte ich meiner Freundin die Möglichkeit geben mich zu besuchen und sich selbst die Türen aufzumachen.
Das ist das Problem für heute.
Anderes Szenario ist, ich möchte jemanden einen Link schicken, mit der er "sich" nur ein eisiges mal "reinlassen" kann. Wenn ein Freund zB etwas abholen möchte.

Es müssen 2 Türen geöffnet werden.
Tür 1: Haupteingangstür (hab hier die Gegensprechanlage angezapft und kann diesen Kontakt schließen)
Tür 2: Wohungstür (Keymatic)

Am liebsten wärs mir, einen Link zu schicken, der zB auf eine DashUI Seite geht (port geforwardet im Router). Aber es soll nur ein Einziges mal gehen. Oder nur an einem Tag, oder nur 1 Stunde oder so.

Habt ihr da irgendeine Idee?

Ich habe ziemlich alle Autoren uns Sensoren die das HM Programm hergibt und die meisten CCU.IO adapter die gängig sind.

Keine Sorge - meiner Nase gehts schon wieder ganz gut :)

Danke für Eure Ideen!

PaulG4H
Beiträge: 1184
Registriert: 11.08.2011, 10:09

Re: Freundin bedingt zutritt gewähren

Beitrag von PaulG4H » 24.06.2014, 16:09

Hallo,

interessante "Herausforderung"!

Als erstes kann ich dir nur raten die Anleitung für den Apache Reverse Proxy um einen Sicheren Zugang zur CCU von extern zu bekommen in meiner Signatur anzusehen, damit kannst du dir auch einen "ungesicherten" webserver machen der von Extern erreichbar ist.

Hier kannst du dann eine Webseite erstellen die aufgrund einer Steuerdatei welche "Tokens" und Parameter enthält dann dynamisch Links zum öffnen Anzeigen lassen.

Beispiel für eine Token Datei:

Code: Alles auswählen

2sdf4fhdhdh3dfsdfqwiuhkjdsfohj98sfdFgf|onetime|0
dskjfisdfiojoiijo4389owijefeoiwef|0900-1200|0
Wobei nach dem Trennzeichen die Art des Zutritts einzugeben ist und dannach wird die Anzahl der Benutzungen Mitgeschrieben.

Jetzt musst du "nur noch" eine php Seite erstellen die dann mit einem Link wie diesem erreichbar ist
https://dns.name/entry.php?token=2sdf4f ... hj98sfdFgf
Über den token "weis" die php Seite welche Rechte derjenige hat und wenn z.B. bei onetime das öffnen ausgeführt wurde und der Zähler in der token Datei erhöht wurde wird einfach kein button mehr angezeigt...

Das ist alles nur Theorie und auf "Sicherheit" hin zu testen aber Grundsätlzich ist jede Möglichkeit von Extern auf dein Türschloss zuzugreifen gefährlich und sollte vermieden werden!

Deshalb habe ich meine Keymatic IQ (keine Homematic!) mit dem Codeschloss und der Kabelverbedienung wobei nur der Kontakt für Verriegeln mit der Homematic Haussteuerng verbunden ist und im Codeschloss kann z.B. für die Putzfrau genau wie gewünscht ein Benutzer angelegt werden der nur am Montag von 08:00 bis 12:00 zutritt hat...

Paul
Apache Reverse Proxy fuer sicheren Zugriff auf die CCU von Unterwegs
Zeitgesteuertes LXCCU / CCU2 Backup damit es immer eine Aktuelle Sicherung gibt!
Diverse weitere Anleitungen für CCU / LXCCU / Raspberry PI

nicx
Beiträge: 307
Registriert: 18.05.2013, 22:31
Hat sich bedankt: 4 Mal

Re: Freundin bedingt zutritt gewähren

Beitrag von nicx » 24.06.2014, 16:56

lösungsvorschlag für dein erstes szenario: warum gibts du deiner freundin nicht temporär einen zweitschlüssel? aber vielleicht denke ich auch einfach nicht zu homematic genug ;)

Bluefox
Beiträge: 779
Registriert: 20.02.2011, 19:55

Re: Freundin bedingt zutritt gewähren

Beitrag von Bluefox » 24.06.2014, 17:48

Es muss irgendwie so aussehen. Ein script-door.js erzeugen:

Code: Alles auswählen

var idStart = 100100;

var idDoor1 = 12345; // Haustür
var idDoor2 = 12340; // Eingangstür

// Users array
var myUsers = [
	{
		name:    "Freuendin",
		token:   "ABCDEFG",
		enabled: false,
		isOnce:  true,
		expiredOn: ""
	},
	{
		name:    "Putzfrau",
		token:   "ABCDEFG",
		enabled: false,
		isOnce:  false,
		expiredOn: "2014-06-25 23:59:59"
	}
];

var rootDevice   = idStart;
var rootChannels = [];

// Register variables for users
for (var i = 0; i < myUsers.length; i++) {
	myUsers[i].channel = rootDevice + 1 + i * 5;
	rootChannels.push(myUsers[i].channel);
	
	myUsers[i].channel_DPs = {
			COMMAND:      channel + 1, 
			ENABLED:      channel + 2, 
			IS_ONCE:      channel + 3, 
			EXPIRED_ON:   channel + 4
		};

	// Register variables for channel
	setObject(myUsers[i].channel_DPs.COMMAND, {
		Name:     "ACCESS." + myUsers[i].name + ".COMMAND",
		TypeName: "HSSDP", 
		Parent:   myUsers[i].channel 
	});		
	setObject(myUsers[i].channel_DPs.ENABLED, {
		Name:     "ACCESS." + myUsers[i].name + ".ENABLED",
		TypeName: "HSSDP", 
		Parent:   myUsers[i].channel 
	});		
	setObject(myUsers[i].channel_DPs.IS_ONCE, {
		Name:     "ACCESS." + myUsers[i].name + ".IS_ONCE",
		TypeName: "HSSDP", 
		Parent:   myUsers[i].channel 
	});	
	setObject(myUsers[i].channel_DPs.EXPIRED_ON, {
		Name:     "ACCESS." + myUsers[i].name + ".EXPIRED_ON",
		TypeName: "HSSDP", 
		Parent:   myUsers[i].channel 
	});	
	setObject(myUsers[i].channel, {
		Name:     "ACCESS." + myUsers[i].name, // Channel name
		TypeName: "CHANNEL",        
		Address:  "ACCESS." + myUsers[i].name,
		HssType:  "ACCESS",         
		DPs:      myUsers[i].channel_DPs,
		Parent:   rootDevice        // root element
	});
}
// Create root element
setObject(rootDevice, {
		Name:      "ACCESS",
		TypeName:  "DEVICE",
		HssType:   "ACCESS_ROOT",
		Address:   "ACCESS",
		Interface: "CCU.IO",
		Channels:  rootChannels
});

// Now we have registered all variables what we required
for (var i = 0; i < myUsers.length; i++) {
	// Process commands
	subscribe(myUsers[i].channel_DPs.COMMAND, function (obj) {
		if (obj.newState.value) {
			for (var j = 0; j < myUsers.length; j++) {
				if (myUsers[j].channel_DPs.COMMAND == obj.id) {
					// Check the enability
					if (!getState(myUsers[j].channel_DPs.ENABLED))  {
						log("Person " + myUsers[j].name + " versucht die Tür aufzumachen und darf es nicht");
					} else {
						var exp = getState(myUsers[j].channel_DPs.EXPIRED_ON);
						if (exp) {
							try {
								var expire = new Date(exp);
								if (new Date() > expire) {
									log("Person " + myUsers[j].name + " versucht die Tür aufzumachen, aber die Zeit '" + exp + "' ist um");
									break;
								}
							}
							catch(e) {
								log("Cannot convert time to expire" + exp);
								break;								
							}
						}
						
						// Disable access if only once enabled
						if (getState(myUsers[j].channel_DPs.IS_ONCE)) {
							setState(myUsers[j].channel_DPs.ENABLED, false);
						}
						// Open the doors
						setState(idDoor1, true);
						setState(idDoor2, true);					
					break;
				}
			}
		}
	}
	// Enable the user if new expire date is set
	subscribe(myUsers[i].channel_DPs.EXPIRED_ON, function (obj) {
		if (!obj.newState.value) return;
		
		for (var j = 0; j < myUsers.length; j++) {
			if (myUsers[j].channel_DPs.EXPIRED_ON == obj.id) {
				try {
					var expire = new Date(obj.newState.value);
					if (new Date() < expire) {
						setState(myUsers[j].channel_DPs.ENABLED, false);
						log("Person " + myUsers[j].name + " darf wider die Tür aufzumachen");
						break;
					} else {
						log("Person " + myUsers[j].name + " darf nicht die Tür aufzumachen, weil die Zeit " + obj.newState.value + " liegt in Vergangenheit");
						break;
					}
				}
				catch(e) {
					log("Cannot convert time to expire" + exp);
					break;								
				}
			}
		}
	});	
}
Danach man hat in CCU.IO folgende Variablen:

Code: Alles auswählen

ACCESS - 100100
   ACCESS.Freuendin - 100101
      ACCESS.Freuendin.COMMAND - 100102
      ACCESS.Freuendin.ENABLED   - 100103
      ACCESS.Freuendin.IS_ONCE    -100104
      ACCESS.Freuendin.EXPIRED_ON -100105

   ACCESS.Putzfrau - 100106
      ACCESS.Putzfrau.COMMAND - 100107
      ACCESS.Putzfrau.ENABLED - 100108
      ACCESS.Putzfrau.IS_ONCE - 100109
      ACCESS.Putzfrau.EXPIRED_ON - 100110
Wenn man folgende Variablen mit Toggle oder Bool Widgets in DashUI steuert:
-ACCESS.xxx.ENABLED
- ACCESS.xxx.IS_ONCE
und
ACCESS.xxx.EXPIRED_ON mit jqui - Time and Date Picker steuert

Dann wird es gehen und man kann sehr bequem mit Dash UI die Rechte steuern.

Man muss natürlich auf dem Router den Port 8080 weiterleiten und irgendeine IP haben z.B mit http://www.noip.com/

Danach man kann mit dem Kommando
http://myhome.noip.me:8080/api/set/100102/?value=1 versuchen die Tür aufzumachen.

Dieses link als Bookmark auf dem Freündin-Handy speichern oder NFS Tag vor die Tür hängen und über Trigger/Tasker das Link aufrufen.

P.S. Natürlich macht man damit riesen Loch im System auf. Weil wenn man Link kennt, dann kann man alles Zuhause steuern.

PaulG4H
Beiträge: 1184
Registriert: 11.08.2011, 10:09

Re: Freundin bedingt zutritt gewähren

Beitrag von PaulG4H » 24.06.2014, 18:37

Hallo Bluefox,

Deshalb von mir der Tipp über eine PHP Seite die kann nur das was du damit Programmierst ohne den node.js Server aus dem Internet direkt ohne SSL Verschlüsselung zugänglich zu machen...

Aber cooler Vorschlag!

@nicx dies ist ein Homematic Forum [emoji1]

Paul
Apache Reverse Proxy fuer sicheren Zugriff auf die CCU von Unterwegs
Zeitgesteuertes LXCCU / CCU2 Backup damit es immer eine Aktuelle Sicherung gibt!
Diverse weitere Anleitungen für CCU / LXCCU / Raspberry PI

mimquadrat
Beiträge: 71
Registriert: 18.11.2013, 15:50

Re: Freundin bedingt zutritt gewähren

Beitrag von mimquadrat » 24.06.2014, 19:15

Leute Leute Leute - vielen dank für die tipps - bin grad am arbeiten wie ichs umsetze...vielleicht mach ichs doch noch anders auf eine tricky version:

ich hab die fritzbox inkl Adapter, eine schaltzustanderkennung an der Klingel und am treppenhauslicht.
wenn sie jetzt auf meiner festznetznummer (die nicht klingelt)anruft (mit ihrer Nummer), und gleichzeitig den treppenhauslichschalter betätigt, macht der summer und das türschloss auf. oder irgendwie sowas in der Richtung.

das wär dann noch einfacher. könnte ich eigentlich auch mit der nahegelegenen Telefonzelle so machen damit ich auch reinkomm wenn mein handy leer ist...was haltet ihr davon? ist zwar wenig CCU.IO aber evtl schön simpel (obwohl sie nicht blöd ist!!! :))

PaulG4H
Beiträge: 1184
Registriert: 11.08.2011, 10:09

Re: AW: Freundin bedingt zutritt gewähren

Beitrag von PaulG4H » 24.06.2014, 19:27

Hi,

Nur wie rufst du von der Telefonzelle aus an und drückst den Treppenhaus Lichtschalter zugleich? [emoji1]

Ist sonst eine gute Idee vor allem weil du deine Zentrale nicht aus dem Internet erreichbar machen must!

Paul
Apache Reverse Proxy fuer sicheren Zugriff auf die CCU von Unterwegs
Zeitgesteuertes LXCCU / CCU2 Backup damit es immer eine Aktuelle Sicherung gibt!
Diverse weitere Anleitungen für CCU / LXCCU / Raspberry PI

Bluefox
Beiträge: 779
Registriert: 20.02.2011, 19:55

Re: Freundin bedingt zutritt gewähren

Beitrag von Bluefox » 25.06.2014, 13:04

Finde ich auch gut. :D

pix
Beiträge: 608
Registriert: 23.01.2012, 15:40
Danksagung erhalten: 1 Mal

Re: Freundin bedingt zutritt gewähren

Beitrag von pix » 25.06.2014, 13:22

Hallo,

wenn du krank zu Hause bist kannst du ihr deine Keymatic Fernbedienung geben. Direktverknüpfung zur Keymatic löschen. Dann legst du eine Variable an "türdarfauf" = true.

Wenn sie vor der Tür steht und drückt, wird die Tür per Programm (nicht Verknüpfung) geprüft, ob türdarfauf=true und ggf. geöffnet, die zweite Tür meinetwegen nach 30s auch noch, dann wird die Variable nach einer Minute auf false gesetzt.

Sonst Wenn gedrückt und türdarfauf=false
Email an Dich

Gruß
Pix
150 Kanäle in 75 Geräten und 103 CUxD-Kanäle in 25 CUxD-Geräten (HomeMatic, FS20), CCU1 FW1.519, AddOns: CUxD 1.0, dropbear, E-Mail 1.2, ftp_server und regaWatchdog.
Logik und Visualisierung mit ioBroker auf Mac OS X Node.js. Eingebundene Systeme: Sonos, Rademacher Homepilot, Roomba, Network-OWL. Danke für das Homematic-Inventur-Skript von EnergyStar

Bluefox
Beiträge: 779
Registriert: 20.02.2011, 19:55

Re: Freundin bedingt zutritt gewähren

Beitrag von Bluefox » 25.06.2014, 15:44

pix hat geschrieben:Hallo,

wenn du krank zu Hause bist kannst du ihr deine Keymatic Fernbedienung geben. Direktverknüpfung zur Keymatic löschen. Dann legst du eine Variable an "türdarfauf" = true.

Wenn sie vor der Tür steht und drückt, wird die Tür per Programm (nicht Verknüpfung) geprüft, ob türdarfauf=true und ggf. geöffnet, die zweite Tür meinetwegen nach 30s auch noch, dann wird die Variable nach einer Minute auf false gesetzt.

Sonst Wenn gedrückt und türdarfauf=false
Email an Dich

Gruß
Pix
Warum kommen mir solche einfache Ideen nicht? :(
:)

Antworten

Zurück zu „CCU.IO“