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.
mein_kleiner_regler => {
receive=>'1/2/3', #Temperatur
transmit=>'4/5/6', #Last
translate=>sub{
if ($input < -1) {return "1"} # wenn kaelter als -1, schalte Last ein
if ($input > 0) {return "0"} # wenn waermer als 0, schalte Last aus
return undef; # wenn nichts zutrifft, schalte nicht
},
},
Das geht sicher auch in einer Zeile, aber dann kann ich es nicht mehr lesen
mein_kleiner_regler => {
receive=>'1/2/3', #Temperatur
transmit=>'4/5/6', #Last
translate=>sub{
if ($input < -1) {return "1"} # wenn kaelter als -1, schalte Last ein
if ($input > 0) {return "0"} # wenn waermer als 0, schalte Last aus
return undef; # wenn nichts zutrifft, schalte nicht
},
},
Das geht sicher auch in einer Zeile, aber dann kann ich es nicht mehr lesen
Der Funktioniert schon mal. Was kann man machen wenn man will das der Regler das Relais maximal 1 mal die Stunde umschaltet? Das Gerät der Frostwächter hat einen eigenen Thermostat der bei 5 Grad abregelt. Ist also für sich selber schon sicher.
Die einfachste Methode ist wohl die Temperatur nicht so oft zu senden. Aber dann sehe ich ja auch den Temperaturverlauf nicht so schön.
Ich kann zwar nicht nachvollziehen, wieso, aber wenn Du nur alle Stunde mal schalten willst, kannst Du cool=>3600 setzen, das blockiert die Logik nach einem Aufruf für eine Stunde. Alternativ kannst Du das 'receive' durch ein 'fetch' ersetzen, dann wird die Logik nicht mehr durch die Temperatur-GA getriggert, und dann kannst Du mit einem 'time'-Statement die Logik stündlich aufrufen.
Darf ich raten: der Frostwächter lässt sich nur bis auf 5° runtersetzen und Du willst Dich bis an den Gefrierpunkt herantasten, um den Strom für das angeschlossene Gerät zu sparen ? Falls ja, lebst Du gefährlich: wenn der Schaltaktor aus ist, dann kann der Thermostat klicken, soviel er lustig ist, dann friert's ein.
Richte das wie einen umgekehrten Treppenlichtschalter ein, wenn Dein Aktor das kann: der Aktor ist immer eingeschaltet, und Du kannst ihn per GA für einen gegebenen Zeitraum ausschalten. Wenn die Ausschalt-GA nicht regelmässig kommt, dann schaltet der Aktor wieder ein. So ist es eigensicher, und überlebt den Ausfall des WG, des Logikprozessors, des KNX-Kabels dazwischen etc.
Hi,
so richtig kaputt gehen kann da nur mein Oleander und der verträgt auch für Kurze Zeit einige Minus grade. Aber die Idee mit dem umgekehrten Treppenlichschatler werde ich mir mal ausprobieren. Es geht mir darum das der Aktorkanal nicht kaputt geht. Als ich es gestern ausprobiert habe ging der Aktor im 5min Zyklus ein und aus. Das soll so nicht sein schätze mal mit einer Stündlichen ein ausschalten wird da nix gross Kaput gehen.
Viele Grüsse & Danke
Jürgen
Ich meine mich erinnern zu können, mal von einer Million Schaltvorgängen für einen Aktor gelesen zu haben. Würde der Aktor wirklich alle 5 Minuten schalten, wären das 9 Jahre. Da der Aktor aber nur maximal 2 Monate im Jahr schalten würde, weil ja nicht immer Winter ist, kommst Du 50 Jahre mit dem Aktor. Passt IMHO
Hi,
ja eine million wird auch von dem von mir verwendeten MDT AMI 1216.02 genannt. Okay mir fällt da noch eine weiter Massnahme ein. Der Sensor werde ich nahe an den Oleander bringen. (weiter von der Wärmequele weg) Denke das es dann nicht mehr so stark takten wird. Aber so einen Cool mit 15 minuten bau ich trotzdem ein.
VG
Jürgen
Hallo, mein wiregate_plugin.log zeigt nach jeder Initialisierung (z.B. nach neuer Logik hinzugefügt) folgenden Eintrag:
2015-12-12 07:51:27.927,Logicprozessor,Config warn: Lesezugriffe auf folgende transmit-Adressen werden von mehreren Logiken beantwortet:
2015-12-12 07:51:27.928,Logicprozessor,Szenen_Schlafzimmer_St atus -> SzSzeneMemorySTORE, Memory_Szenen_Schlafzimmer_Status
2015-12-12 07:51:27.928,Logicprozessor,Bei folgende Logiken wurde daher reply_to_read_requests=>0 gesetzt:
2015-12-12 07:51:27.928,Logicprozessor,SzSzeneMemorySTORE
2015-12-12 07:51:27.928,Logicprozessor,(T) - transmit_only_on_request gesetzt
2015-12-12 07:51:27.929,Logicprozessor,(R) - recalc_on_request gesetzt
Das ist mir aber nicht ganz klar, weil in der Logic "SzSzeneMemorySTORE" die GA "Szenen_Schlafzimmer_Status" nur unter fetch eingetragen ist. fetch antwortet doch nicht auf Lesezugriffe, oder doch? Hier einmal alle Code-Schnipsel, bei denen ich die GA "Szenen_Schlafzimmer_Status" verwende:
Hat jemand eine Idee, was ich eleganter machen könnte? Grundsätzliches Ziel: Die letzte genutzte Szene in einem Raum soll in Szenen_Schlafzimmer_Status abgespeichert werden. Bei einer 1 auf SzSzeneMemoryRESTORE soll diese wieder hergestellt werden, wenn eine Zeit lang keine Bewegung im Raum stattgefunden hat, schaltet der BM eine bestimmte Szene (alles Aus). Bei erneuter Bewegung soll die bestehende Szene erhalten bleiben oder wieder angehen. Die Szene für alles Aus wird nie in Szenen_Schlafzimmer_Status abgespeichert.
Wäre das so irgendwie lösbar?
Also von einem RRD zwei werte lesen und mit diesen zu rechnen.
Gruß Gernot
Soweit ich weiß kann der LP nur in einen rrd schreiben. Aber du kannst natürlich eine sub "rrd_oilstand" schreiben, die dann aus einem rrd etwas ausliest und zurück gibt.
Hallo,
ich habe gerade Probleme damit, mit dem LP eine Reaktion auf das Schreiben auf einer GA hinzubekommen. Da ich ein CommunityGate am Laufen habe, habe ich die Frage vorrangig dort im Thread gestellt (Klick).
Allerdings treibt mich in dem Zusammenhang auch die Frage um, ob es vielleicht irgendwelche Abhängigkeiten zwischen LP-Version und Wiregate-Version gibt? Es gab mal einen Hinweis auf Patchlevel 32, wenn ich mich recht erinnere. Das CommunityGate läuft mit dem letzten freien WG-Stand - also Patchlevel 39. LP ist der aktuellste Stand aus dem GIT.
Gibt es da irgendwas, was ich beachten muss? Vielleicht hat hier ja jemand noch einen Tipp für mich.
Schöne Grüße,
Jens
Hallo,
ich habe mein Problem immer noch nicht gelöst. Allerdings bin ich mit dem Debuggen etwas voran gekommen.
Ich habe den Wiregate-Deamon mit der Option -d gestartet und sehe so jede Menge Meldungen. Wenn auf meine GA, die der LP aboniert hat, geschrieben wird, kommen auch entsprechende Meldungen:
Ich habe dann in den LP noch ein paar Debug-Meldungen eingebaut und festgestelt, dass er dort, wo der Aufrufgrund ermittelt wird, immer in den Cycle-Bereich läuft, also in das letzte "Else". Er sollte ja aber in den Bustraffic-Else-If laufen - eine Logmeldung, die ich dort eingebaut habe, wird aber nicht ausgegeben. Es scheint also so, dass %msg nicht definiert ist.
Hat dazu jemand vielleicht eine Idee?
Edit: Ich habe mein Problem gelöst. Allerdings frage ich mich, was da mit meinem Softwarestand nicht stimmt.
Die Lösung: in der wiregated.pl in
Code:
sub check_generic_plugins
habe ich das
Code:
my %msg;
auskommentiert. Damit wird nach meinem Verständnis das globale Hash %msg verwendet und nun läuft meine Logik.
Wäre trotzdem toll, wenn das noch jemand aufzulösen wüßte. Bei allen anderen hier laufen doch LP und wiregated problemlos im AUslieferungszustand zusammen, oder?
Zuletzt geändert von dismantled; 27.12.2015, 15:33.
Hallo,
erstmal vielen Dank für die Arbeit die hier bereits in die Logikengine geflossen ist. Damit lässt sich einfach unglaublich viel machen.
Ich wollte jetzt mal das Wecker-Skript, welches Fry hier irgendwo im Thread gepostet hat mal testen.
Leider verstehe ich noch nicht ganz wo ich das genau einbinden muss.
Gehören die ganzen Funktionen ($logic{"Alarm_set"}, $logic{"Alarm_time"}, usw.) in ein eigenes Plugin, in die Logikengine.pl oder einfach in die Logikengine.conf?
Ich hab da zwar mal ein wenig ausprobiert, hab das aber nicht ans laufen gekriegt.
Hallo Zusammen
Ich bin gerade dabei den LP für mich zu entdecken. Vielen Dank an alle die hier ihre Ressourcen reinstecken. Ich bin absoluter Perl Anfänger, und daher ist für mich vieles mit viel (Google-) Aufwand verbunden. Aber bei einer Aufgabe komme ich auch da grad nicht weiter.
Und zwar möchte ich, wenn ich eine Lampe einschalte überprüfen mit welcher Dimmstufe diese nun brennt, und bei unterschreiten eines Schwellwertes einen höheren Wert senden. (Hintergrund: mein DMX Gateway schaltet immer mit der letzten Dimmwert ein, etwas blöd beim runterdimmen auf null und anschliessendem wieder einschalten)
das ganze sollte eigentlich so funktionieren hoffe ich? (sitze grad nicht vor dem WG)
1/1/100 --> 1Bit Befehl vom Taster
1/5/100 --> 8Bit Rückmeldung von DMX
1/4/100 --> 8Bit Befehl absolutes Dimmen
Code:
dim => { receive=>['1/1/100','1/5/100'], transmit=>'1/4/100',
translate => sub { if ($input->[0]) == 1 && ($input->[1]) < 20 { return 50 }; } },
Nun möchte ich aber noch einbauen dass die Logik nach einmaliger Ausführung gesperrt wird, bis auf 1/1/100 wieder eine 0 gesendet wird. ansonsten wird ja bei relativem oder absolutem Dimmen unter Schwellwert automatisch wieder erhöht.
Hat jemand eine Idee wie ich das realisieren könnte?
vorweg: ich bin noch relativ am Anfang mit dem Logikprozessor.
Aber Du könntest vielleicht eine zusätzliche Logik schreiben, die in einer Hilfs-GA die 'Sperre' für Deine dim-Logik abbildet.
z.B. so
Code:
NullGesendet => { receive=>'1/1/100', transmit=>'0/1/123', translate => sub { if ($input) == 0 { return 1 }; } },
0/1/123 ist dabei eine Hilfs-Gruppenadresse, die auf 1 gesetzt wird, wenn jemand an 1/1/100 eine 0 sendet.
Deine dim-Logik kann dann erweitert werden.
Code:
dim => { receive=>['1/1/100','1/5/100','0/1/123'], transmit=>'1/4/100',
translate => sub { if ($input->[0]) == 1 && ($input->[1]) < 20 && ($input->[2]) == 1 { return 50 }; } },
So wird die 50 nur gesendet, wenn die Logik über die 1 in 0/1/123 freigegeben wurde.
Damit nach Ausführung der Logik wieder eine 0 in die 0/1/123 kommt, könntest Du jetzt vieleicht ein followup starten, um die 0/1/123 einfach wieder zu nullen. Sitz aber gerade nicht vorm Wiregate, daher kann ich das nicht testen. Der Code lässt sich bestimmt auch irgendwie schöner abbilden, aber vielleicht hilft es Dir weiter.
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