Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Also ich würde ernsthaft darüber nachdenken das Projekt in der ETS komplett neu aufzusetzen. Sofern da nicht 1000 Sonderlocken und Logiken verbaut sind geht das im EFH relativ fix und dann hat man auch den nötigen Background für spätere Probleme.
Klingt erstmal nach viel Arbeit, ist aber am Ende vielleicht doch der schnellere und einfachere Weg.
Ja, im Grunde bin ich da schon dran. Die Licht- und Rollosteuerung macht mir auch keine Sorgen. Respekt habe ich vor der Einzelraumsteuerung der FBH.
Grüsse!
1.001 ist da schon korrekt. Das bedeutet nur, dass es sich um ein 1bit Telegramm handelt. Du must also für die Rollosteuerung mit dem Trigger auch DPT 1.001 auswählen
Hallo Miteinander,
nochmal herzlichen Dank für die Hilfe soweit.
Hier mein Stand: der Infotrigger funktioniert nicht vollständig, ist hier aber egal. Die Rolloaktoren sind falsch parametriert. Ich muss das erst neu machen - wie mir hier empfohlen wurde.
Die Aktoren haben folgende GA's: /16 mit 1 auf DPT 1.001 für rauf und 0 für runter sowie /17 für Stop.
Ich habe das Problem nun über 3 Trigger und eine Info gelöst:
/16 --> 0
/16 --> 1
/17 --> 1 für stop
und eine Info auf /16 readonly.
Funktioniert solange man die Visu nicht neu startet. Sobald eine andere GA (z.B. alle im Haus runter) wird nicht aktualisiert.
Ich würde die Aktualisierung jetzt anders machen (auch als Fingerübung):
Plugin schreiben, das je Fenster den Status in eine Datei schreibt und dann den Status aus der Datei anzeigen.
Schreiben habe ich schon gelöst, habe aber nur eine Idee, wie ich mit Bordmitteln den Status anzeigen kann:
Ich schicke den Status (0 oder 1) einfach an eine neue GA, die ich in /etc/wiregate/eibga.conf konfiguriert habe und lege wieder ein Info-Control readonly auf diese GA.
Nun meine Frage: wird das funktionieren?
Habt Ihr eine bessere Idee einen Wert aus einer Datei zu lesen und in der Visu anzuzeigen. Habe hier nur etwas über andere Visus gefunden.
Ohne jetzt das Problem/Gerät im Detail zu kennen: Lass dir gesagt sein:
- trenne Schalt- und Rückmelde-GA's!
- mache externe Logik, nur wenn absolut unvermeidbar
-> Sowas geht normalerweise auch ohne..
Ich habe das Plugin nun mal angepaßt und den Subscribe-Fehler gefixt.
Bei mir funktioniert's nun.
Danke für Eure Hilfe!
Für Interessierte hier der Code:
# Tueroeffnungen kontrollieren
# 2012-11-04
# JuMi2006 -> https://knx-user-forum.de
# Pro Rollo: geschlossen = 1 , offen = 0
# Gesamtstatus: alles zu = 1 noch mindestens ein Rollo offen = 0
# $send_ga ist der Gesamtstatus
# Die GAs sollten sauber in die //etc/wiregate/eibga.conf eingepflegt sein
# bzw. aus der ETS importiert werden
$plugin_info{$plugname.'_cycle'} = 0; # nur durch die GA getriggert
my (@rollos,$closed,@opened,$status, %rollos, $ga_called); # Variablen initialisieren
### KONFIGURATION ###
# Jede Zeile eine Tuer
push @rollos, { name => "RolloWZ 1", ga => "3/0/16"};
push @rollos, { name => "RolloWZ 2", ga => "3/0/18"};
push @rollos, { name => "RolloWZ 3", ga => "3/0/20"};
# push @rollos, { name => "TriggerGA", ga => "0/0/200"}; # Test-GA
# push @rollos, { name => "Tuer 4", ga => "1/2/50"};
# push @rollos, { name => "Tor 1", ga => "1/2/60"};
# push @rollos, { name => "Tor 2", ga => "1/2/35"};
my $send_ga = '0/0/100'; #An diese GA wird der Gesamtstaus gesendet.
### prüfen, ob die gerufene GA eine aus dem Array of hashes ist ###
foreach my $rollo (@rollos){
if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $rollo->{ga}) {
$ga_called = 1;
# open (DATEI, ">>/var/log/Rollostatus.log") or die $!;
# print DATEI $rollo->{ga} . " passende GA gecalled\n";
# close (DATEI);
}
}
### KONFIGURATION ENDE ###
if ($ga_called) {
my $elements = @rollos;
foreach my $rollo (@rollos){
# $plugin_subscribe{$rollo->{ga}}{$plugname} = 1;
# $status = 0;
$status = knx_read($rollo->{ga},0,1); # liest den Status aus der GA 0 für offen, 1 für geschlossen
open (DATEI, ">>/var/log/Rollostatus.log") or die $!;
print DATEI $rollo->{ga} . " " . "$status\n";
close (DATEI);
$closed += $status; # summiert den Status aller Rollos
if ($status == 0){
push @opened, ($rollo->{name}); # schreibt in den hash @opened den Namen der geschlossenen Tür
}
} # end foreach
} else { # zyklischer Aufruf
# Plugin an Gruppenadresse "anmelden", hierdurch wird das Plugin im folgenden bei jedem eintreffen eines Telegramms auf die GA aufgerufen und der obere Teil dieser if-Schleife durchlaufen
# $plugin_subscribe{$temp1_ga}{$plugname} = 1;
foreach my $rollo (@rollos){
$plugin_subscribe{$rollo->{ga}}{$plugname} = 1;
}
}
return;
Wenn ich das gesamte Modell richtig verstehe, dann soll subscribe nur einmal durchlaufen werden, und nicht jedesmal, wenn das plugin gerufen wird. Oder liege ich da falsch?
Wenn ich $plugin_info{$plugname.'_cycle'} = 0 setze, wird das Plugin genau einmal gerufen, wenn es gespeichert wird, danach nur noch, wenn die GA "subscribed" ist. Richtig?
Nun möchte ich aber nicht jedesmal subscriben. Deshalb die Prüfung:
foreach my $rollo (@rollos){
if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq $rollo->{ga}) {
$ga_called = 1;
# open (DATEI, ">>/var/log/Rollostatus.log") or die $!;
# print DATEI $rollo->{ga} . " passende GA gecalled\n";
# close (DATEI);
}
}
### KONFIGURATION ENDE ###
if ($ga_called) {
und dann im else-Zweig die subscribe Anweisung.
} else { # zyklischer Aufruf
# Plugin an Gruppenadresse "anmelden", hierdurch wird das Plugin im folgenden bei jedem eintreffen eines Telegramms auf die GA aufgerufen und der obere Teil dieser if-Schleife durchlaufen
# $plugin_subscribe{$temp1_ga}{$plugname} = 1;
foreach my $rollo (@rollos){
$plugin_subscribe{$rollo->{ga}}{$plugname} = 1;
}
}
return;
---
Das zusätzliche Log habe ich mir nur für Testzwecke eingebaut. Kommentiere ich dann aus. Liege ich da falsch?
Warum verliere ich die Meldung im Plugin-log?
Nein das Problem liegt woanders begraben. Den subscribe Befehl kannst Du (davon abgesehen dass es unnütz ist) im Plugin auch 10.000 setzen. Das macht nix.
Wenn alle Adressen per subscribe abonniert werden wird das Plugin immer ausgeführt wenn eine der entsprechende GAs einen Wert sendet. Dann wird auch der Gesamtstatus gesendet. Wenn nun alle Binäreingänge/Kontakte zur gleichen Zeit bzw. kurz hintereinander (Milisekunden-Bereich) ihren aktuellen Wert senden dann gibt es z.B. 12 GAs die schnell hintereinander senden. Damit wird aber auch das Plugin 12 x hintereinander aufgerufen und der Gesamtstatus 12x hintereinander gesendet. Dem Bus ist das erstmal ziemlich egal ... zumindest im EFH. Das abzufangen würde gehen, aber macht den Code einfach unübersichtlich und komlizierter.
@Mirko: danke für die Klarstellung. Jetzt habe ich es verstanden ;o).
Nur noch eine letzte Frage in diesem Zusammenhang, dann kann ich den Thread auch gerne als gelöst markieren und er kann ist WG-Forum. Ich habe erst später gesehen, dass solche Themen da hin gehören!
Wie kann ich eigentlich eine GA wieder "de-subscriben", für den Fall, dass ich möchte, dass ein Plugin nicht mehr auf eine bestimmte GA reagiert?
Ich glaube das geht nur mit einem Neustart des wiregated nachdem man das Plugin entsprechend geändert hat (Webmin->Status->
WireGate Serverprozess Restart) oder eben einem kompletten Neustart des WireGates, aber da kann makki mehr dazu sagen.
TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar