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.
Die Attribute der Items können über das Dictionary cd.itempfad.attr ausgelesen werden. z.B.cd.test.attr['MeinAttribut'] lieft den Attributwert ‘MeinAttribut’ von dem Item ‘test’.
Ah ok, dann sollte der Item Typ schon mal "Dictionary" sein. Da ich ja mehrere Werte im Attribut poe_switch haben werde, wie werden dem Attribut dann Werte zugeteilt? z.B. Port5_on, Port5_off oder auch später weitere Ports?
Die Sache hier stellt mich schon vor eigene Rästel, hab nichts Programmiersprachen oder gar Python zutun. Bitte um Nachsicht
Vielleicht sollte ich lieber auf eine andere VISU wechseln
Würde ich anders machen der Port x Item ist Typ bool an diese Item hängst du ein Attribut mit der Zahl die die portnummer anzeigt mit dieser Nummer und den Wert des items würde ich den UDP Commando zusammenbauen.
beschreib Mal wie sich das UDP Kommando aufbaut.
VG Jürgen
wenn Du mich fragst, musst Du Dir konzeptionell klar werden, was Du willst. Du solltest Deine Ports nicht "irgendwie" an und aus bekommen, sondern auf eine nachvollziehbare und sinnvolle weise, die auch zukünftig handhabbar ist. Und vor allem solltest Du die Möglichkeiten von callidomus nutzen.
Vorschlag:
Jedes Item schaltet nur ein Port
Welchen Port es schaltet, gibst Du durch das Attribut "PortN" an, wobei N die Portnummer ist.
Das Item ist vom Typ bool.
Der Item-Wert (True oder False) gibt an, ob der Port an oder aus ist.
Wenn Du das so machst, musst Du Dir für die Logik nur überlegen, wie ein Port ein- bzw. ausgeschaltet wird. Komplexere Aufgaben (z.B. mehrere Ports schalten) wird dann mit callidomus gelöst (in dem Beispiel dann mehrere Items schalten).
Dein Beispielcoding enthält auch fast schon alles notwendige, Du musst nur noch den Itemwert auswerten:
Du musst nur noch die passenden on- und off-commands für die jeweiligen Ports eintragen und entsprechend Items definieren, die als Attribut poe_switch mit dem passenden Namen definiert haben.
Gruß, Waldemar
P.S.: Was bringt Dich auf die Idee, dass eine andere Visu passendes Coding für DEINEN Poe-Switch haben könnte?
ich kann dir demnächst (Morgen oder Übermorgen) die Logik fertig machen.
Hi Marcus,
Also ich fände es besser wenn anhand von dem Beispiel ein stück doku entstehen würde mit einbischen mehr erklärung wie man eine generische Logik schreibt. Dann hätten alle was davon!
Euch Allen erstmal ein frohes Neues und vielen Dank für die Mithilfe.
heckmannju
Wie sieht das UDP Kommando aus? gute Frage ist jedenfalls etwas komplexer mit SNMP als eine HTTP-API. Habe den Befehl zum abschalten und einschalten der Ports mit dem MIB Browser und der passenden mib-Datei des Switchs gesendet. Per Wireshark aufgezeichnet und den benötigten "Hex Dump" in die Logik übertragen. Zum ein und ausschalten der Ports ändern sich immer nur die letzte Stelle: 01 enable bzw. 02 disable
PS: das mit dem entstehen einer Doku sehe ich genauso. Mein Problem ist erst einmal überhaupt einen Zusammenhang / Anfang zwischen Logik, Item, Abhängikeiten usw. zufinden. Denke das würde vielen hier auch helfen Callidomus besser auszunutzen. Da bringen einer paar Codezeilen nicht viel wenn man nicht hinten den Aufbau von Callidomus kommt.
callidomus
Danke für dein Angebot, aber wie bereits erwähnt würde ich gerne das ganze besser Verstehen. Da hilft mir eine fertige Logik / Codeblock nur bedingt weiter. Was mich aber interessieren würde, ob es auch mit einem einzeln Item (poe_switch) und mehren Attributen funktionieren?
mumpf
Vielen Dank jetzt bei mir Klick gemacht , werde das gleich mal ausprobieren.
bzgl. andere VISU: nicht direkt für "meinen" Switch aber es gibt schon Lösung zur Integration von den SNMP mib-Dateien oder mit Eingabe der passenden OID. Das wäre auch das was Marcus mit einer SNMP-Bibliothek gemeint hätte, aber hier will der aktuellen Roadmap nicht im Wege stehen.
2017-01-01 18:02:05 ERROR poe Logic: poe, File: /data/callidomus/local/logics/poe.py, Line: 22, Method: <module>, Exception: 'NoneType' object has no attribute 'attr'
Traceback (most recent call last):
File "/mfs/core/lib/scheduler.py", line 443, in _task
exec(obj.bytecode, _globals)
File "/data/callidomus/local/logics/poe.py", line 22, in <module>
attributevalue = item.attr['poe_switch']
AttributeError: 'NoneType' object has no attribute 'attr'
müsste nicht der absolute Pfad laut Doku eintragen werden? z.B. bei mir:
attributevalue = cd.poe_switch_port5.attr['poe_switch']
Das hat aber denn Nachteil, das man mit der Logik wieder nur einen Port (5) bedienen kann.
mit dem Eintrag wird die Logik beim erneuten laden immer mit commands_off (False) ausgeführt, egal ob das Item (cd.poe_switch_port5) den Wert 0 oder 1 hat.
Für das schreiben einer Logik benötigt man zwei Dinge, man muss ein bisschen Python schreiben können und die Doku lesen.
Ich persönlich, lerne viel aus dem Code von anderen.
@ragepw: Es geht auch mit einem Item und mehreren Attributen. Ich würde allerdings pro Item nur ein Attribut verwenden um den Port zuzuordnen. Das macht die Zuordnung einfacher.
Man könnte auch den absoluten Pfad eintragen, dann verliert man aber die Flexibilität um evtl. auch andere Ports mit der Logik zu schalten.
Aber wieso lautet der Pfad poe_switch_port5? Bei der Logik gibst Du doch poe_switch als Abhängigkeit an? Wie sieht denn Deine Itemstruktur aus?
In der Logik würde ich "if item == True:" schreiben, anstelle des "if Item"
Eine Logick die nichts enthält was hart Codiert ist. Mit klar definierten ein aus ausgabe parameter. Die man beschreiben kann und jemanden anderen geben kann ohne das er gross in Sourcecode selber rumwühlen muss.
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