Zahlenkombination/Codeschloss für Homematic

Kabellose und kabelgebundene Sender und Empfänger der klassischen Homematic-Serie

Moderator: Co-Administratoren

Roybär
Beiträge: 2
Registriert: 21.11.2019, 21:42

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von Roybär » 21.11.2019, 21:54

Hallo zusammen
Ich bin neu hier uns total begeistert über das Codeschloss über den 6-fach Taster.
Ich hätte da aber noch eine Frage. Kann mir jemand sagen wie ich eine Meldung hinbekomme wenn der Code falsch eingegeben wird.
Wenn ich in das Programm wo der Code abgefragt wird (Wenn code_01 im Wertebereich xxxx-xxxxx) eine Sonst Anweisung rein bringe, bekomme ich eine Meldung bei jedem Tastendruck. Ich möchte aber nur eine Meldung haben wenn der Code falsch eingegeben wurde.
Hat da noch jemand eine Idee?
Danke für eure Hilfe.

Xel66
Beiträge: 14297
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 601 Mal
Danksagung erhalten: 1529 Mal

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von Xel66 » 21.11.2019, 22:13

Ich würde eine weitere Systemvariable einfügen, die pro Tasterbetätigung hochgezählt wird und bei falscher PIN und Zähler gleich Anzahl der erforderlichen Stellen ein Ausgabeprogramm startet. Hier kannst Du eine Aktion hinterlegen, je nachdem, was als "Meldung" gemeint ist. Zurückgesetzt wird sie jeweils mit dem Zwischenspeicher.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Roybär
Beiträge: 2
Registriert: 21.11.2019, 21:42

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von Roybär » 22.11.2019, 18:05

Danke Xel66. Die ersten Test haben super funktioniert. Werde mal weitere Test machen.

mekke
Beiträge: 61
Registriert: 15.03.2013, 22:03
System: CCU
Danksagung erhalten: 3 Mal

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von mekke » 25.12.2020, 17:32

Ich wollte noch ein paar Möglichkeiten haben
- Freie Definition des Codes auch aus der Ferne
- Klarer Start der Code-Eingabe sowie der "Aktion" (zB. Türöffner KayMatic)
- Mail-Benachrichtigung bei Manipulation
- Maximale Versuche danach blockiert das Programm
- Ein-/Ausschalten der Code-Eingabe

Hardware
- CCU2
- Taster-Sender zB. HM-PBI-4-FM (script ist so geschrieben, dass auch andere Taster (6, 8 Kanäle) funktionieren
- Aktor, zB. Keymatic.

Ansatz:
- Programm erstellen welches auf auf alle Kanäle (=Zahlen), sowie davon auf 2 LONG_PRESS, reagiert
- Die 4 globalen Variablen erzeugen (siehe script)
- Script zur Auswertung, etc.

Funktionsweise:
- Im script unter "DEFINITIONEN" eure Umgebung eintragen
(Wunschcode, Taster, Aktor, Aktion, Start- / Löschtaste)
- Durch LONG_PRESS von Taste 1 wird hier im Beispiel die Code-Eingabe initialisiert
- Danach wird jeder SHORT_PRESS als Zahl in die (dadurch wachsende) Variable "Passcode-in" geschrieben
(wichtig dabei ist, dass <Geräteadresse>:1 / <Geräteadresse>:2 / etc. als Namen vergeben wird für die Taster-Kanäle!!!)
- Durch LONG_PRESS von Taste 4 wird der aktuelle Wert gegen den Zielcode verglichen
- Falls erfolgreich, wird die Aktion ausgelöst, zB. Tür geöffnet
- Alle falschen Versuche führen zu entsprechenden Fallback-Aktionen
- Wird das script manuell gestartet schaltet Code-Eingabe ein- oder aus

Falls jemand Interesse an mehr Infos hat melden, ansonsten ist es selbst-erklärend, siehe code.
(das ganze ist sehr einfach und nicht grad elegant programmiert, aber es scheint zu laufen).

Variablen:
Bild

Programm:
Bild

Script (für Erklärung siehe Kommentare im Script):

Code: Alles auswählen

!! Programm für Aktor-Aktivierung (zB. KeyMatic) nach Code-Eingabe via Taster-Sender

! SYSTEM-VARIABLEN (MÜSSEN VORHER ANGELEGT WERDEN)
! Weise sie zu einem Kanal des Taster-Senders zu, einfacher für Visualisierung in Favoritenliste
! Passcode-active   = Ist das ganze scharf geschaltet? Bool: ja oder nein
! Passcode-in         = der eingegebene aktuelle Status des Passcodes
! Passcode-check   = der Zielcode (wird direkt weiter unten definiert)
! Passcode-trials    = Wie oft wurde ein Code versucht

! DEFINITIONEN: Hier nach belieben anpassen
string actualcode = "123";                                                                ! SETZE DEN GÜLTIGEN CODE HIER!!!!
var tastername   = dom.GetObject("AAtesttast");                               ! Name des genutzten Tasters hier eintragen (muss derselbe sein wie die Trigger im Programm)
var Aktor = dom.GetObject("Dimmer Büro:1").DPByHssDP("LEVEL");   ! Name des genutzten Aktors hier eintragen
var AktorWert    = 1;                                                                        ! und welcher Wert an den Aktor gesendet werden soll bei erfolgreichem Code
string startkey = "1";                                                                       ! Taste LONG_PRESS für neue Codeeingabe
string endkey = "4";                                                                        ! Taste LONG_PRESS für Code senden/ausführen
integer maxlength = 10;                                                                  ! maximal angenommenen Eingaben bis Reset (verhindert Überlauf)
integer maxtries   = 5;                                                                     ! maximal Versuche bis zur Sperrung der Öffnung


!VORBEREITUNG 
dom.GetObject("Passcode-check").State(actualcode);          ! Setze den Code in Systemvariable (nur nötig für Info)
var source = dom.GetObject ("$src$");                               ! Hole den auslösenden Kanal
string activ = dom.GetObject("Passcode-active");                ! Hole Info ob Eingabe möglich ist oder nicht.
var aktuell = dom.GetObject("Passcode-in");                       ! Hiermit wird der Code nach Tastendruck aufgebaut
string tasteradresse = "BidCos-RF."#tastername.Address(); ! Basis-String für die Auswertung 
integer trials = dom.GetObject("Passcode-trials");               ! Wie oft wurde der Code (falsch) eingegeben?
boolean sendmail = false;
string subject = "Mail von CCU2 wegen Code-Eingabe";
string mailtext = "";


! PROGRAMM
if (source) {                                                      ! Falls Programm durch AKTOR gestartet wurde
  string name     = source.Name().ToString();      ! name des auslösenden Aktors als Text
  string taste      = name.Split(":").StrValueByIndex("\t",1).Split(".").StrValueByIndex("\t",0); ! Welche Tastennummer wars?
  string langkurz = name.Split(":").StrValueByIndex("\t",1).Split(".").StrValueByIndex("\t",1); ! Lang oder kurz gedrückt?

  if (name.Contains(tasteradresse.ToString())) {                 ! Sicherheitscheck falls falscher Aktor das Script getriggert hat
    if (activ.State()) {                                                        ! Ist die Code-Eingabe aktiv?
      ! ################################
      ! HAUPTPROGRAMM
      ! ################################
      if (langkurz == "PRESS_LONG") {
        if (taste == startkey) {
          aktuell.State("");                                               ! Neu beginnen = löschen der Tastefolge
        } elseif (taste == endkey) {                                 ! HAUPT-CHECK --------------------- Nun prüfe ob Code korrekt war
           if (trials.Value() >= maxtries) {                         ! Falls es zu viele Versuche waren abbrechen und sperren
             activ.State(false);
             aktuell.State("Gesperrt, zu viele Versuche");
             sendmail = true;
             mailtext = mailtext#"\n\nEs gab zu viele Code-Eingabeversuche von '"#tastername#"'. Eingabe gesperrt.";
           } elseif (aktuell.Value() == actualcode) {            ! Jetzt prüfen Eingabe gegen gesetzten Code
             !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
             Aktor.State(AktorWert);                                  ! Führe aus, zB. Tür öffnen
             !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
             trials.State(0);                                                ! Zähler wird auf null gesetzt
             aktuell.State("");                                             ! Reset des code strings
             sendmail = true;
             mailtext = mailtext#"\n\nDurch Eingabe an '"#tastername#"' wurde '"#Aktor#"' aktiviert.";

           } else {
               trials.State(trials.Value()+1);                          ! Zähler für falsche Versuche eins erhöhen
              aktuell.State("");                                            ! Reset des code strings
           }
        } else {
          aktuell.State("F1: Ungültige Eingabe");
        }
      } elseif (langkurz == "PRESS_SHORT") {
           if (aktuell.Value().Length() < maxlength) {           ! Sicherheitscheck um Überlauf zu verhindern
             aktuell.State(aktuell.Value()#taste);                   ! Hier wird die Tastenfolge gespeichert
           } else {
             aktuell.State("");                                              ! Rücksetzen falls zu lange
           }
      } else {
           aktuell.State("Da ging was Schief bei long/short");
      }
    } else {                                                                      ! SONST ABBRUCH
           aktuell.State("Abbruch: Code inaktiv!");
    }
  } else {                                                                         ! SONST ABBRUCH
     aktuell.State("Auslöser für Code stimmt nicht überein. Stopp");
  }


} else {                                                         ! Falls Programm MANUELL gestartet wurde, setze Aktiv-Status um (toggeln)
  if (activ.Value())  {
    activ.State(false);
    aktuell.State("Inaktiv");
   WriteLine("Codeeingabe nicht möglich");
  } else {
    activ.State(true);     ! Jetzt ist Auslösung durch Code möglich
    trials.State(0);         ! und der Zähler wird auf null gesetzt
    aktuell.State("Warten auf Eingabe");
    WriteLine("Codeeingabe ist jetzt aktiv mit code "#actualcode);
 
  }
}

if (sendmail) {
  dom.GetObject ("E-Mail.Subject").State (subject);
  dom.GetObject ("E-Mail.Body").State (mailtext);
  dom.GetObject ("E-Mail.Versand").State (1);
}



Anlage 1: 167 Kanäle und 539 Datenpunkte in 30 Geräten:
4x HM-LC-Sw1-FM, 3x HM-LC-Sw2-FM, 1x HM-PBI-4-FM, 1x HmIP-RCV-50, 1x HmIP-CCU3, 1x HM-LC-Dim1T-FM, 1x HM-LC-Dim1T-CV, 2x HM-PB-6-WM55, 1x HM-OU-LED16, 1x HM-Sec-SCo, 1x HM-ES-PMSw1-Pl-DN-R5, 1x HmIP-FALMOT-C12, 1x HM-RC-4-3, 1x HM-LC-Sw4-WM, 1x HM-WDS100-C6-O-2, 1x HM-RC-8, 1x HM-Sen-RD-O, 1x HM-LC-Sw1-Pl-DN-R5, 1x HM-LC-Bl1-SM, 1x HmIP-WTH-1, 1x HmIP-STH, 1x HM-WDS30-OT2-SM, 2x HmIP-SWD
--------------------------------------------
Anlage 2: 127 Kanäle und 338 Datenpunkte in 24 Geräten:
9x HM-Sec-SCo, 1x HmIP-WKP, 2x HM-LC-Sw1-FM, 1x HM-LC-Sw4-WM, 1x HM-MOD-EM-8, 1x HmIP-RCV-50, 1x HM-ES-PMSw1-Pl-DN-R5, 1x HM-PBI-4-FM, 1x HM-LC-Sw2-FM, 1x HM-Sec-Key-S, 1x HM-OU-LED16, 1x HM-WDS10-TH-O, 1x HM-WDS40-TH-I-2, 1x HM-Sec-WDS-2, 1x HmIP-SWD
--------------------------------------------

Sven_A
Beiträge: 4162
Registriert: 26.01.2016, 08:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Renningen
Hat sich bedankt: 353 Mal
Danksagung erhalten: 285 Mal

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von Sven_A » 27.12.2020, 08:26

Der Vollständigkeit halber:
viewtopic.php?p=610825#p610825

Gruß,
Sven

mekke
Beiträge: 61
Registriert: 15.03.2013, 22:03
System: CCU
Danksagung erhalten: 3 Mal

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von mekke » 29.12.2020, 18:46

Hallo @sven
Danke für den Hinweis, bin bisher nicht über deine Lösung "gestolpert". Auch elegant.
Erfüllt einfach meinen Wunsch nach komplettem (und langem) Batteriebetrieb für Tasten-Eingabe ohne Verkabelung (vermutlich :?: ) nicht.

Meine Lösung ist ganz einfach mit Standard-Homematic-Komponenten realisierbar und braucht nur 1 Programm/1 Script. Auch wenn dieses halt ein wenig länger wird. Dafür deckt es auch meine Wünsche ab (Fern-Code-Update, aktiv/passiv, Sperrung bei Fehlversuchen) und erscheint mir recht sicher.

Ich nutze jetzt den 6Fach Wandtaster als Eingabe, und bin grad dran ein Wettergehäuse aus dem 3D Drucker zu ziehen :mrgreen:
Eigentlich wollte ich den 8pin HM-MOD-EM-8, aber ich fand kein geeignetes keypad, da die alle auf Matrix verdrahtet sind.
Egal, wenn der Code lange genug ist, ist mir das sicher genug....

Gruss
Anlage 1: 167 Kanäle und 539 Datenpunkte in 30 Geräten:
4x HM-LC-Sw1-FM, 3x HM-LC-Sw2-FM, 1x HM-PBI-4-FM, 1x HmIP-RCV-50, 1x HmIP-CCU3, 1x HM-LC-Dim1T-FM, 1x HM-LC-Dim1T-CV, 2x HM-PB-6-WM55, 1x HM-OU-LED16, 1x HM-Sec-SCo, 1x HM-ES-PMSw1-Pl-DN-R5, 1x HmIP-FALMOT-C12, 1x HM-RC-4-3, 1x HM-LC-Sw4-WM, 1x HM-WDS100-C6-O-2, 1x HM-RC-8, 1x HM-Sen-RD-O, 1x HM-LC-Sw1-Pl-DN-R5, 1x HM-LC-Bl1-SM, 1x HmIP-WTH-1, 1x HmIP-STH, 1x HM-WDS30-OT2-SM, 2x HmIP-SWD
--------------------------------------------
Anlage 2: 127 Kanäle und 338 Datenpunkte in 24 Geräten:
9x HM-Sec-SCo, 1x HmIP-WKP, 2x HM-LC-Sw1-FM, 1x HM-LC-Sw4-WM, 1x HM-MOD-EM-8, 1x HmIP-RCV-50, 1x HM-ES-PMSw1-Pl-DN-R5, 1x HM-PBI-4-FM, 1x HM-LC-Sw2-FM, 1x HM-Sec-Key-S, 1x HM-OU-LED16, 1x HM-WDS10-TH-O, 1x HM-WDS40-TH-I-2, 1x HM-Sec-WDS-2, 1x HmIP-SWD
--------------------------------------------

Sven_A
Beiträge: 4162
Registriert: 26.01.2016, 08:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Renningen
Hat sich bedankt: 353 Mal
Danksagung erhalten: 285 Mal

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von Sven_A » 30.12.2020, 07:42

Tja, dann hast du denn Beitrag nicht gelesen.
1) ist ein Batteriebetrieb möglich
2) mach ich sonst nichts anderes als du: Sperrvariablen, Verarbeitung in der CCU,... Einzig das ich eben alle 10 Ziffern plus ESC/Enter zur Verfügung habe.

Das es mit der Verkalkung mehr Aufwand ist ist unbestritten.
Ich wollte aber auch niemanden "bekehren", ich wollte nur darauf hinweisen.

Gruß,
Sven

mekke
Beiträge: 61
Registriert: 15.03.2013, 22:03
System: CCU
Danksagung erhalten: 3 Mal

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von mekke » 30.12.2020, 13:25

Hi Sven
Doch, habe es gelesen, drum auch der Kommentar "elegant". Ich find deine Lösung sehr gut, habe sogar noch irgendwo einen Arduino im Keller, aber nix für "low power", und ich weiss eben nicht, was bei Arduino wirklich low power bedeutet.
Wenn ich die Homematic-Taster verwende kann ich direkt via CCU den Batteriezustand sehen um zu wissen ob ich die Batterie ersetzen muss (das Gerät ist leider weit von zu Hause weg im Betrieb....).

anyway.... wenn du immer noch ein Gehäuse brauchst kann ich dir meine FreeCAD Datei geben, ist aber auf Homematic zugeschnitten.
Anlage 1: 167 Kanäle und 539 Datenpunkte in 30 Geräten:
4x HM-LC-Sw1-FM, 3x HM-LC-Sw2-FM, 1x HM-PBI-4-FM, 1x HmIP-RCV-50, 1x HmIP-CCU3, 1x HM-LC-Dim1T-FM, 1x HM-LC-Dim1T-CV, 2x HM-PB-6-WM55, 1x HM-OU-LED16, 1x HM-Sec-SCo, 1x HM-ES-PMSw1-Pl-DN-R5, 1x HmIP-FALMOT-C12, 1x HM-RC-4-3, 1x HM-LC-Sw4-WM, 1x HM-WDS100-C6-O-2, 1x HM-RC-8, 1x HM-Sen-RD-O, 1x HM-LC-Sw1-Pl-DN-R5, 1x HM-LC-Bl1-SM, 1x HmIP-WTH-1, 1x HmIP-STH, 1x HM-WDS30-OT2-SM, 2x HmIP-SWD
--------------------------------------------
Anlage 2: 127 Kanäle und 338 Datenpunkte in 24 Geräten:
9x HM-Sec-SCo, 1x HmIP-WKP, 2x HM-LC-Sw1-FM, 1x HM-LC-Sw4-WM, 1x HM-MOD-EM-8, 1x HmIP-RCV-50, 1x HM-ES-PMSw1-Pl-DN-R5, 1x HM-PBI-4-FM, 1x HM-LC-Sw2-FM, 1x HM-Sec-Key-S, 1x HM-OU-LED16, 1x HM-WDS10-TH-O, 1x HM-WDS40-TH-I-2, 1x HM-Sec-WDS-2, 1x HmIP-SWD
--------------------------------------------

klaus99
Beiträge: 68
Registriert: 07.06.2015, 18:54
Danksagung erhalten: 4 Mal

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von klaus99 » 30.12.2020, 15:05

Wer ohne großen Aufwand eine praxistaugliche, sichere, drahtlose und batteriebetriebene Lösung sucht: Sommer ENTRApin+ und ein dazugehöriger Funkempfänger plus HM-PBI-4-FM. Läuft bei mir schon seit Jahren ohne Probleme. Die Tastatur ist zwar keine Schönheit aber dafür IP54 und die Batterien halten ewig.

mekke
Beiträge: 61
Registriert: 15.03.2013, 22:03
System: CCU
Danksagung erhalten: 3 Mal

Re: Zahlenkombination/Codeschloss für Homematic

Beitrag von mekke » 30.12.2020, 17:07

Und das Entra-Gehäuse hatte platz für die Homematic-Komponente?
Anlage 1: 167 Kanäle und 539 Datenpunkte in 30 Geräten:
4x HM-LC-Sw1-FM, 3x HM-LC-Sw2-FM, 1x HM-PBI-4-FM, 1x HmIP-RCV-50, 1x HmIP-CCU3, 1x HM-LC-Dim1T-FM, 1x HM-LC-Dim1T-CV, 2x HM-PB-6-WM55, 1x HM-OU-LED16, 1x HM-Sec-SCo, 1x HM-ES-PMSw1-Pl-DN-R5, 1x HmIP-FALMOT-C12, 1x HM-RC-4-3, 1x HM-LC-Sw4-WM, 1x HM-WDS100-C6-O-2, 1x HM-RC-8, 1x HM-Sen-RD-O, 1x HM-LC-Sw1-Pl-DN-R5, 1x HM-LC-Bl1-SM, 1x HmIP-WTH-1, 1x HmIP-STH, 1x HM-WDS30-OT2-SM, 2x HmIP-SWD
--------------------------------------------
Anlage 2: 127 Kanäle und 338 Datenpunkte in 24 Geräten:
9x HM-Sec-SCo, 1x HmIP-WKP, 2x HM-LC-Sw1-FM, 1x HM-LC-Sw4-WM, 1x HM-MOD-EM-8, 1x HmIP-RCV-50, 1x HM-ES-PMSw1-Pl-DN-R5, 1x HM-PBI-4-FM, 1x HM-LC-Sw2-FM, 1x HM-Sec-Key-S, 1x HM-OU-LED16, 1x HM-WDS10-TH-O, 1x HM-WDS40-TH-I-2, 1x HM-Sec-WDS-2, 1x HmIP-SWD
--------------------------------------------

Antworten

Zurück zu „HomeMatic Aktoren und Sensoren (klassisch)“