Jump to content

Betaversion der openHAB-Bindings


rtrbt

Recommended Posts

Hallo Erik

 

kein Problem, es reicht klar wenn es mit der nächsten Binding-Version gefixt wird.

 

Den Piezo Speaker würde ich als Signalgeber für Hinweise / Warnungen / Alarme / Störungen, einsetzten wollen.

 

Es wäre es gut, wenn man zwischen einem Dauerton und einem Pipton unterscheiden kann.

 

Unten so eine Idee, wie man den PiezoSpeaker über Openhab ansteuern könnte.

 

>> Channel für das Ein und Ausschalten (Switch)

>> Channel für die Tonfrequenz (Number)

>> Channel für die Intensität der Lautstärke (Number 0-100 ?)

>> Channel für die Anzahl der PipTöne pro Sekunde (Number 0-20 ?) und wenn dieser Wert 0 ist, gibt es einen Dauerton.

 

Wenn der Switch des Speaker auf ON steht, sollte es dennoch möglich sein, die Werte für Frequenz und Intensität verändern zu können. So könnten man auch ein Anschwellen des Ton oder einen Frequenzwechsel ermöglichen.

 

viele Grüsse

 

Stefan

 

Udate:

Hallo Erik ich habe gestern meinen PiezoSpeaker erhalten und gesehen wie groß dieser ist. Ich hätte da eine Frage: Meinst Du, es ist machbar, dass man über das Binding den PiezoSpeaker (wenn er über das "Hat" angeschossen ist), als "SystemSpeaker" für den Raspi mit nutzen könnte ? Auch wieder nur um Signal Töne/ mini MP3 ausgeben zu können (openhab Funktion "playSound(String filename)". (diese Frage ist vom Typ Nice-to-have)

 

Link zu diesem Kommentar
Share on other sites

Moin,

 

Beta 12 ist jetzt im Post oben.

 

@Wannes: The 12th beta version should fix your wifi problems. The bindings now check periodically if a network connection was lost and then try to reconnect.

 

@StefanOHAN: In der neuen Version ist der Fix für dein IO16-Problem enthalten. Piezo Speaker kommt mit der nächsten Beta, das sollte aber schneller gehen als die letzte ;) Den Speaker als Systemlautsprecher zu benutzen wird nicht gehen, da bräuchte man einen eigenen Treiber oder müsste eine openHAB-AudioSink schreiben.

Link zu diesem Kommentar
Share on other sites

Hallo Erik,

 

danke für die neue Beta, ich habe heute mit Ihr getestet.

 

Der Init des 16fach-IO V1 scheint jetzt sauber zu klappen.

 

Weiter habe ich die „Edge Count“ Zählfunktion  und die Trigger „Monoflop“ Funktion

des IO-16-V1 / IO-16-V2 / IO-4-V2 getestet. Bei beiden Funktionen hatte ich aber Probleme.

Für den „Edge Count“ hab ich immer Pin 0 als Input konfiguriert und verlinkt.

 

Edge-Count Verlinkung in der Item-Datei

Number PinTest0count "H44 Pin0 Input count [%s]" (TestTF) {channel="tinkerforge:io16v2:f80007d9:H44:IO16V2EdgeCountPin0"}

 

Frage: Sollte das Number-Item sich nicht um 1 erhöhen wenn ich den als Input konfigurierten Pin betätige ? Bei mit behält das Number-Item den Wert „0“

 

Trigger Monoflop IO-16 / 4

Wie muss ich den Trigger für die Monoflop Funktion in den Rules benutzen ?

Einfach per sendCommad einen String-Wert dem String-Item zuweisen ? Dies habe ich per Rule versucht, aber ohne Erfolg.

Wenn ich über die Web-Site PaperUI/Control den Trigger Button betätige, schaltet er den als Output konfigurierten Pin ein und anschließend wieder aus . Es ist egal ob ich das für das IO16-V1 / V2 oder das IO-4 V2 ausführe, der Trigger per PaperUi/Control funktioniert, per Rule funktioniert es nicht.

 

Monoflop Verlinkung in der Item-Datei

String PinTest8mf "H44 Pin8 out Monoflop [%s]" (TestTF) { channel="tinkerforge:io16v2:f80007d9:H44:IO16V2MonoflopPin15"}

 

Meine Rule (sind für die IO16-V1 / V2 und das IO4-V2 immer gleich aufgebaut)

rule "mono-flop"

    when

        Item Pin0IO4V2 changed to OFF

    then

    Pin2IO4V2mf.sendCommad ("TRIGGER")

  end

 

rule "mono-flop2"

    when

        Item Pin0IO4V2 changed to ON

    then

    Pin2IO4V2mf.sendCommad ("ON")

end

 

Nur das I0-4 V2 erzeugt eine Fehlermeldung (die IO-16 V1 / V2 nicht)

 

2019-10-27 19:21:40.363 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'mono-flop': 'sendCommad' is not a member of 'org.eclipse.smarthome.core.library.items.StringItem'; line 355, column 6, length 34

 

Was mache ich falsch ?

 

Weiter im Test

 

Neu :

Tinkerforge Rotary Poti Bricklet 2.0

Verlinken klappt wunderbar, der Wert des Number-Item verändert sich bei drehen des Poti. Mit dem Item kann eine Rule angesteuert werden.

 

Neu :

Tinkerforge Rotary Encoder Bricklet 2.0

Verlinken klappt wunderbar, der Wert des Number-Item verändert sich bei drehen des Poti. Mit dem Number-Item und dem Channel des „Push-button“ kann eine Rule angesteuert werden.

Einzig mit dem „Reset Counter“ Channel hatte ich Probleme.

Frage: Wie kann ich den "Count-Channel" Number-Wert  zurück setzten ? Ich habe vermutet, wenn ich dem String-Item des "Reset Counter" (verlinkter Channel) per sendCommand einen beliebigen String-Wert zuweise, wird der Wert des "Count"-Channel auf 0 gesetzt,  es kam aber nur eine Fehlermeldung im Log.

 

Verlinkung in der Item Datei

String RotEnc_V2_reset "Rotary Enc reset [%s]" (TestTF) { channel="tinkerforge:rotaryencoderv2:f80007d9:KbY:RotaryEncoderV2ResetCounter"}

 

Befehl in der Rule

RotEnc_V2_reset.sendCommad("reset-trigger")

 

Fehlermeldung im Log war:

2019-10-27 19:40:44.737 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'RotaryEncoder Pressed': 'sendCommad' is not a member of 'org.eclipse.smarthome.core.library.items.StringItem'; line 333, column 5, length 43

 

Wo liegt der Fehler ?

 

Mir ist heute mit dem neue Binding aufgefallen, dass im Log sich sehr oft diese Meldung für die verschiedenen Bricklets wiederholt.

2019-10-27 20:04:29.669 [iNFO ] [forge.internal.handler.DeviceHandler] - Checking reachability of H44

2019-10-27 20:04:29.676 [iNFO ] [forge.internal.handler.DeviceHandler] - Done checking reachability of H44

 

Ist dies Absicht ?

 

Nachtrag zum Piezo-Speaker:

Nachdem ich heute sah, was alles über den BrickViewer machbar ist, würde ich sagen:

Beiden Funktionen „Play-Beep“ und „Play-Alarm“ mit Ihren Parametern sollten so in OpenHAB nutzbar sein. Allerdings sollte die „Beep-Duration“ und „Alarm-Duration“ länger als 1000msec einstellbar sein (minimum 30sec). Was auch sinnvolle wäre, wenn zum aktivieren des Beep / Alarm Play ein Switch zum Einsatz kommen würde, der nach Ablauf der „Duration“ wieder vom ON in den OFF Status wechselt. Dadurch könnte man andere „Items“ die nur „ON“ sein sollen solange ein Ton ertönt, steuern.

Das abschalten des Beep/Alarm Play soll auch vor Ablauf der Duration möglich sein.

 

Demnächst werde ich per Rule mal den Trigger Monoflop für die „Tinkerforge Industrial Quad Relay Bricklet 2.0 „ testen ob ich da ähnliche Probleme habe wie bei den IO-16 / IO-4

 

viele Grüße

 

Stefan

Link zu diesem Kommentar
Share on other sites

Moin,

Frage: Sollte das Number-Item sich nicht um 1 erhöhen wenn ich den als Input konfigurierten Pin betätige ? Bei mit behält das Number-Item den Wert „0“

Das funktioniert leider noch nicht automatisch, da der Edge Count kein Callback hat, ich also den Getter benutzen muss. Der wird aber nur ausgeführt, wenn du dem Item ein Refresh-Command schickst. Solche Werte automatisch zu aktualisieren steht noch auf der TODO-Liste.

Meine Rule (sind für die IO16-V1 / V2 und das IO4-V2 immer gleich aufgebaut)

rule "mono-flop"

    when

        Item Pin0IO4V2 changed to OFF

    then

    Pin2IO4V2mf.sendCommad ("TRIGGER")

  end

 

rule "mono-flop2"

    when

        Item Pin0IO4V2 changed to ON

    then

    Pin2IO4V2mf.sendCommad ("ON")

end

 

Nur das I0-4 V2 erzeugt eine Fehlermeldung (die IO-16 V1 / V2 nicht)

 

2019-10-27 19:21:40.363 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'mono-flop': 'sendCommad' is not a member of 'org.eclipse.smarthome.core.library.items.StringItem'; line 355, column 6, length 34

 

Was mache ich falsch ?

Das sollte sendCommand sein, beim Rotary Encoder 2.0 auch.

Mir ist heute mit dem neue Binding aufgefallen, dass im Log sich sehr oft diese Meldung für die verschiedenen Bricklets wiederholt.

2019-10-27 20:04:29.669 [iNFO ] [forge.internal.handler.DeviceHandler] - Checking reachability of H44

2019-10-27 20:04:29.676 [iNFO ] [forge.internal.handler.DeviceHandler] - Done checking reachability of H44

 

Ist dies Absicht ?

Technisch gesehen ja. Das ist der Mechanismus, der prüft ob die Verbindung noch besteht. Die Meldungen hatte ich aber nur testweise auf INFO gesetzt, das sollte eigentlich DEBUG sein, damit es beim normalen Log-Level nicht die Ausgabe überflutet. Repariere ich für die nächste Beta.

Link zu diesem Kommentar
Share on other sites

Hallo Erik,

 

oh man ist mir das jetzt peinlich. Dass ich ein "n" in Command übersehen habe ist mir echt nicht aufgefallen. Man sollte nicht einfach Zeilen kopieren ohne diese zu prüfen  :-\

 

Nachdem ich die fehlerhaften Befehle korrigiert hatte, funktionierte alles.

Die Monoflop Trigger per Rule bei den IO-16 V1/V2 und IO-4 V2. Auch den Reset-Counter zum Rücksetzten des "Count-Channel" des  Rotary Encoder konnte ich per Rule ausführen.

 

Nochmal Sorry, dass ich meine eigenen Fehler in der Rule nicht gesehen habe, Asche auf mein Haupt.

 

Danke für das schnelle Feedback

 

viele Grüsse

 

Stefan

Link zu diesem Kommentar
Share on other sites

Hallo Erik

 

ich hab mal etwas bei Euch im Shop gestöbert um zu schauen welche Komponenten für mich von Interesse sein könnten.

 

Ich hätte da ein paar Fragen.

 

Ist es möglich, dass ich Bricklets die über eine Kombination von Ethernet Master Extention  / WIFI Master Extention 2.0 und über USB / Hat angeschlossenen sind, gleichzeitig nutzen kann ?

 

Ich bin am überlegen ob ich mir die WIFI Master Extention oder die Ethernet Master Extention zulegen soll.

 

Im Shop bei Euch gibt es das E-Paper Bricklet, ich bin mir zwar noch nicht sicher ob ich eine sinnvolle Anwendung in OpenHAB habe, wollte aber fragen ob Du planst diese auch in das Binding einzubinden.

 

viele Grüsse

 

Stefan

Link zu diesem Kommentar
Share on other sites

Hallo Erik,

 

danke für die schnelle Antwort und das neue Binding.

 

Ich habe heute Abend noch kurz den Piezo Speaker getestet. Ich kann den Beep und Alarm starten.

Am Wochenende werde ich mal per Rule die Frequenz und das Volumen verändern testen.

 

Die neue Action Funktion konnte ich noch nicht testen.

 

Frage: Hast Du im neuen Binding etwas am Edge Count für das IO-16 V2 verändert ? Ich hab eine Warnmeldung im Log.

 

Ich werde es aber am WE nochmal in aller ruhe Checken.

 

 

viele Grüsse

 

Stefan

 

P.S Werde die Tage noch das E-Paper und die WiFi-Extention 2.0 zum testen bestellen

 

Link zu diesem Kommentar
Share on other sites

Hallo Erik

 

Ich habe gerade die Rule nochmal angeschaut, die Warnmeldung wird von einer alten  Rule ausgelöst, in der ich versuchte per sendCommand den EdgeCount auf "0" zu setzten.

 

Link des Channel

Number PinTest0count  "Pin0 Input count [%s]"      (TestTF) {channel="tinkerforge:io16v2:f80007d9:H4y:IO16V2EdgeCountPin0"}

 

Rule

 

PinTest0count.sendCommand (0)

 

==> /var/log/openhab2/openhab.log <==

 

2019-11-07 19:39:35.291 [WARN ] [com.tinkerforge.BrickletIO16V2      ] - Command for unknown channel IO16V2EdgeCountPin0

 

 

Das Rücksetzten des EdgeCounter wird so nicht funktionieren (man kann ja auch den Number-String eines ThermoBricklet nicht per sendCommand ändern), oder ?

 

Per Action ?

 

Viele Grüsse

 

Stefan

Link zu diesem Kommentar
Share on other sites

Ah ja, das funktioniert so nicht. Du kannst den Channel umkonfigurieren, sodass du bei jedem Refresh resettest, dann bekommst du immer relative Werte. Alternativ kannst du es so lassen und wenn du resetten willst in einer Rule

val ioActions = getActions("tinkerforge", "tinkerforge:io16v2:f80007d9:H4y")
ioActions.getEdgeCount(0, true)

aufrufen.

Link zu diesem Kommentar
Share on other sites

Beta 13 ist jetzt im Post oben.

 

Habe momentan leider keine Zeit zum Testen, versuche es aber nächste Woche zu schaffen.

 

Zwei Fragen zu allgemeinen Themen habe ich aber dennoch:

 

1) Wie sieht es mit dem Support im Binding für ältere TF Hardware aus? Ich habe z.B. noch ein Remote Switch Bricklet V1 mit dem ich meine ganzen Baumarkt Steckdosen schalte (Weihnachten steht vor der Tür).

Ich bin über TF überhaupt erst zur Hausautomation gekommen, das ist jetzt fast fünf Jahre her und es wäre schade wenn die älteren Bricklets jetzt aus dem Binding rausfallen.

 

2) Ist geplant das Binding in das offizielle openHAB Repository einzubringen? Auch wenn das manuelle Installieren ohne Probleme klappt, es wäre jedoch schöner wenn man das Binding über den üblichen Weg installieren könnte.

Link zu diesem Kommentar
Share on other sites

Hallo Erik

 

Am Samstag ist die WIFI-Extetion V2 sowie das e-Paper Display gekommen.

Das einbinden des WIFI über einen zweiten Dämon hat wunderbar geklappt. Jetzt läuft ein Dämon für die USB (incl. RS485 angebunden Bricklets) und einer für WIFI2-Extention. Das über das WIFI angebundene e-Paper Display ist über PaperUI / Things erreichbar (habe aber noch keine Rules für hierfür geschrieben).

Frage: Hast Du die Möglichkeit auch Things der WIFI-Extention einzubinden ? Man kann ja neben dem Client auch den AccesPoint Mode nutzen, da wäre es schön wenn man den AccesPoint Mode ein und ausschalten könnte.

Weiter habe heute etwas mit den actions getested, komme aber leider nicht so richtig zurecht.

Beim LCD128x64 nutzte ich Dein Rule-Beispiel von Seite 1 (mit angepassten ID/DämonID) und es erscheint gleich beim Startup im LOG

Zitat

 

The method clearDisplay(ThingActions) from the type BrickletLCD20x4Actions refers to the missing type Object

 

2019-11-10 20:29:57.138 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Error during the execution of startup rule 'startrule': Instance is not an BrickletLCD20x4Actions class.

 

 

Im zweiten Schritt habe ich nur „eine“ action Deines LCD-Beispiel genutzt „lcdActions.clearDisplay()“

auch hier kam die gleiche Fehlermeldung.

Die ClearDisplay Rule sieht wie folgt aus

rule "startrule"

    when

        System started

        or

        Channel "tinkerforge:lcd20x4:f90009d9:vwU:LCD20x4Button2" triggered 

    then

        var lcdActions = getActions("tinkerforge", "tinkerforge:lcd128x64:f90009d9:HhJ")

        lcdActions.clearDisplay()

end

Anschließend habe ich Dein Beispiel zum Löschen des EdgeCount genutzt (mit dem IO-4 V2).

 val ioActions = getActions("tinkerforge", "tinkerforge:io4v2:f90009d9:g7y")

 ioActions.getEdgeCount(1, true)

Hier kam zwar auch die „missing Objekt Meldung“ aber keine weitere Fehlermeldung.

 

Zitat

The method getEdgeCount(ThingActions, int, boolean) from the type BrickletIO4V2Actions refers to the missing type Object

 

Mein letzer Versuch war nur den Value per Action auszulesen ohne den EdgeCount nach dem auslesen zu löschen, so wie in der Eurer JAVA Doku beschrieben

ioActions.getEdgeCount(0, false)“

 

Der EdgeCounter hatte immer den Wert „0“ behalten, egal wie oft ich den Pin0 (input) mit GND verbunden habe.

Zur Kontrolle habe ich mir den Wert am Display ausgeben lassen.

Frage : „hast Du das Problem mit dem Zählen des EdgeCount schon anpassen können ? oder habe ich die action falsch verwendet ?“

Am 28.10.2019 um 10:13 schrieb rtrbt:

Das funktioniert leider noch nicht automatisch, da der Edge Count kein Callback hat, ich also den Getter benutzen muss. Der wird aber nur ausgeführt, wenn du dem Item ein Refresh-Command schickst. Solche Werte automatisch zu aktualisieren steht noch auf der TODO-Liste.

 

Eines ist mir aufgefallen, in dem LCD-Beispiel nutzt Du

Zitat

var lcdActions = getActions..“

beim EdgeCount Beispiel

Zitat

val ioActions = getActions...“

eigentlich solle es keinen Unterschied machen ob nun variable oder value genutzt wird, oder ?

Momentan bin ich etwas ratlos weil ich nicht erkenne wo der Fehler liegt.

Leider bin ich diese Woche bis Mittwoch nur sporadisch online, daher kann ich vor nächsten WE nicht weiter testen.

Viele Grüße

Stefan

P.S. Großes Lob an Euren Warenversand, ich habe am Freitag Morgen bestellt und am Samstag war schon alles da.

Link zu diesem Kommentar
Share on other sites

Moin,

Am 8.11.2019 um 18:52 schrieb sihui:

1) Wie sieht es mit dem Support im Binding für ältere TF Hardware aus? Ich habe z.B. noch ein Remote Switch Bricklet V1 mit dem ich meine ganzen Baumarkt Steckdosen schalte (Weihnachten steht vor der Tür).

Ich bin über TF überhaupt erst zur Hausautomation gekommen, das ist jetzt fast fünf Jahre her und es wäre schade wenn die älteren Bricklets jetzt aus dem Binding rausfallen.

Die älteren Bricklets werden unterstützt, nur die Remote Switches fehlen noch (sind aber schon implementiert, kommen mit der nächsten Beta).

Am 8.11.2019 um 18:52 schrieb sihui:

2) Ist geplant das Binding in das offizielle openHAB Repository einzubringen? Auch wenn das manuelle Installieren ohne Probleme klappt, es wäre jedoch schöner wenn man das Binding über den üblichen Weg installieren könnte.

Das kann ich noch nicht versprechen. Auf der TODO-Liste steht noch, rauszufinden wie ich den Code dafür umbauen müsste

vor 18 Stunden schrieb StefanOHAN:

Frage: Hast Du die Möglichkeit auch Things der WIFI-Extention einzubinden ? Man kann ja neben dem Client auch den AccesPoint Mode nutzen, da wäre es schön wenn man den AccesPoint Mode ein und ausschalten könnte.

Eher nicht. Den AccessPoint-Modus kann man nur ausschalten, indem die ganze Wifi-Konfiguration geschrieben wird, das kostet aber wieder EEPROM-Schreibzyklen, deshalb habe ich das in openHAB nicht eingebaut. Extra API dafür einbauen ist auch nicht sinnvoll, weil man sich dann einen Haufen Probleme für andere Anwendungsfälle einhandelt.

 

Zitat

The method clearDisplay(ThingActions) from the type BrickletLCD20x4Actions refers to the missing type Object

2019-11-10 20:29:57.138 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Error during the execution of startup rule 'startrule': Instance is not an BrickletLCD20x4Actions class.

Die erste Fehlermeldung bekomme ich auch, das scheint aber nichts relevantes zu sein, die Rules funktionieren trotzdem. Die zweite ist wichtiger, openHAB scheint, wenn man die Bindings-JAR aktualisiert, Teile davon in irgendeinen Cache zu laden, der für die RuleEngine nicht korrekt bereinigt wird, nicht mal wenn openHAB neugestartet wird. Was bei mir zuverlässig hilft ist, die Bindings zu aktualisieren, während openHAB läuft und mit log:tail die Ausgabe zu verfolgen. Nach ~ 20 Sekunden tut sich im Log einiges, weil er die Bindings neugeladen hat, wenn du danach openHAB neustartest, läd er nur die neuen Bindings, danach sollte es funktionieren.

vor 18 Stunden schrieb StefanOHAN:

Die ClearDisplay Rule sieht wie folgt aus

Die sieht soweit korrekt aus. Ich gehe mal davon aus, dass das auf das selbe Problem wie oben zurückzuführen ist.

vor 18 Stunden schrieb StefanOHAN:

hast Du das Problem mit dem Zählen des EdgeCount schon anpassen können ? oder habe ich die action falsch verwendet ?

So wie du die Action verwendest, fragst du den Edge Counter ab, aber das Ergebnis wird dann verworfen. Wenn du den Wert von openHAB aktualisieren willst, kannst du in der Rule

[itemname].sendCommand(REFRESH)

aufrufen, wobei [itemname] das EdgeCount-Item ist. Intern ruft das dann auch

getEdgeCount(0, false)

auf, schreibt das Ergebnis aber in das Item.

vor 18 Stunden schrieb StefanOHAN:

eigentlich solle es keinen Unterschied machen ob nun variable oder value genutzt wird, oder ?

Stimmt das ist hier egal. Da war ich nur verwirrt, weil ich davor irgendeine andere Sprache benutzt habe.

 

vor 18 Stunden schrieb StefanOHAN:

Leider bin ich diese Woche bis Mittwoch nur sporadisch online, daher kann ich vor nächsten WE nicht weiter testen.

Kein Problem, ist ja freiwillig :D

vor 18 Stunden schrieb StefanOHAN:

Großes Lob an Euren Warenversand, ich habe am Freitag Morgen bestellt und am Samstag war schon alles da.

Habe ich mal weitergegeben.

Link zu diesem Kommentar
Share on other sites

Hallo Erik,

irgend wie stehe ich jetzt auf dem Schlauch

Zum Problem mit dem Log-Fehlermeldungen für die LCD128x64 Action

Du schreibst :

Am 11.11.2019 um 12:46 schrieb rtrbt:

Was bei mir zuverlässig hilft ist, die Bindings zu aktualisieren, während openHAB läuft und mit log:tail die Ausgabe zu verfolgen. Nach ~ 20 Sekunden tut sich im Log einiges, weil er die Bindings neugeladen hat, wenn du danach openHAB neustartest, läd er nur die neuen Bindings, danach sollte es funktionieren.

Frage:

Wie kann ich das Binding im laufenden Betrieb aktualisieren ?

Bisher ist meine Vorgehensweise entweder

Zitat

 

openhab-cli console

bundle:refresh paketnummer

anschließend restart openhab2

oder Bundle deinstallieren

Zitat

 

openhab-cli console

bundle:list

bundle:uninstall paketnummer

 

 

openHAB herunter fahren

das alte Binding durch das neue ersetzen und openhab neu starten.

 

Diese Vorgänge hab ich jetzt 2x wiederholt, aber ohne dass ich die action zum laufen bekommen habe.

Wie ist Deine Vorgehensweise beim aktualisieren des Binding ?

 

Zumindest zwei Erfolg hatte ich heute:

Das Stapel der über die WiFi-V2 MasterExtention angebunden ist, war zum Test für ca 10 Stunden Spannungslos. Nach dem anschließen der Spannungsversorgung ging mit leichter Verzögerung der Dämon (WiFi) und das angeschlossene Bricklet, wieder in OpenHab online.

 

und das Update mit dem EdgeCount per

ItemName.sendCommand(REFRESH)

hat funktioniert.

 

Was ich nicht verstehe ist Euro Doku „io4-v2-bricklet-java-examples“

Zitat:

Zitat

 

long BrickletIO4V2.getEdgeCount(int channel, boolean resetCounter)

Parameter:

  • channel – Typ: int, Wertebereich: [0 bis 255]

  • resetCounter – Typ: boolean

Rückgabe:

  • count – Typ: long, Wertebereich: [0 bis 232 - 1]

Gibt den aktuellen Wert des Flankenzählers für den ausgewählten Kanal zurück. Die zu zählenden Flanken können mit setEdgeCountConfiguration() konfiguriert werden.

Wenn reset counter auf true gesetzt wird, wird der Zählerstand direkt nach dem auslesen auf 0 zurückgesetzt.

 

 

Meine Interpretation war, dass ich eben mit der „action“ getEdgeCount(Channel0 , false) eben nicht den Counter reset ausführe.

 

Zum Abschluss wollte ich noch das E-Paper-Display per Rule testen.

Hat nicht funktioniert, kann aber sein, daß es das gleiche Problem wie beim LCD128x64 ist.

Frage: Wenn ich per Rule einen Text auf das E-Paper schreiben wollte, wären dann folgende Zeilen in der Rule richtig (Font24x32 , Farbe weiss, horizontal )?

 

Zitat

 

val ePaper = getActions("tinkerforge""tinkerforge:epaper296x128:wifi2test:Jyc")

ePaper.fillDisplay(0)

ePaper.drawText(0,0,9,1,0,"test")

 

 

Ich habe allerdings den Channel tinkerforge:epaper296x128:wifi2test:Jyc:EPaper296x128DrawStatus

nicht mit einem Item verlinkt.

 

Was aber echt komisch ist, die Fehlermeldung im Log, bekomme ich nur für Das LCD128x64 nicht aber für das ePaper.

 

Momentan bin ich etwas Ratlos.

 

Viele Grüße

 

Stefan

Link zu diesem Kommentar
Share on other sites

Update zu meinem Post von gestern.

Leider finde ich im neuen Design des Forum nicht mehr den Button zum Editieren des Beitrages. (kann es sein dass man älter Beiträge nicht ändern kann ?)

Ich habe nach dem ich den Post abgesendet habe noch mal etwas an den Rules rumgespielt.

Ich glaub nicht dass es an meiner Konfiguration liegt, denn die action für das IO-4 V2 funktionieren (zumindest das zurücksetzten des EdgeCount)

 

Das Item Pin0IO4V2Count (Pin0 input) des IO-4 ist in der Item-Datei als „IO4V2EdgeCountPin0 " verlinkt.

Mit der Rule prüfe ich einfach ob der Wert von Pin0IO4V2Count grösser 10 ist, wenn ja wird per Action der EdgeCount zurück gesetzt.

Vor und nach der if-Anweisung wird auf dem LCD128x64 der Wert es EdgeCount ausgegeben.

 

Zitat

 

   LCD128x64_text.sendCommand("1,0,fl-P0-in-G7y-" + Pin0IO4V2Count.state + "-")

    val ioActions = getActions("tinkerforge""tinkerforge:io4v2:f80007d9:G7y")

    Pin0IO4V2Count.sendCommand(REFRESH)

    if (Pin0IO4V2Count.state > 10 ) {

      if(null == ioActions) {

            logInfo("actions""Actions not found, for io4v2")

        else {

            logInfo("actions""Actions found, for io4v2")

            ioActions.getEdgeCount(0true)         

        }

    }

LCD128x64_text.sendCommand("2,0,fl-P0-in-G7y-" + Pin0IO4V2Count.state + "-")

 

 

 

Ich habe auch nochmal in Eurer Doku „lcd-128x64-bricklet-java-examples“ nachgeschaut ob ich evlt noch einen Parameter für die LCD128x64  lcdActions.clearDisplay()

benötige, aber nichts gefunden.

 

Zumindest kann ich für das LCD128x64 mit getActions den Value auslesen. Nur die eigentliche action lcdActions.clearDisplay() führt zum Abruch der Rule und der Fehlermeldung im Log.

 

Zitat

 

rule "startrule"

    when

        System started

        or

        Channel "tinkerforge:lcd20x4:f80007d9:vwU:LCD20x4Button2" triggered 

    then

        val lcdActions = getActions("tinkerforge""tinkerforge:lcd128x64:f80007d9:HhJ")

        if(null == lcdActions) {

        logInfo("Action für lcdActions""nicht vorhanden" )

        else {

            logInfo("Action für lcdActions""vorhanden >>" + lcdActions )

    //        lcdActions.clearDisplay()   // Fehlermeldung im Log auskommentiert    

        }

end

 

Ich hoffe nur dass ich nicht wieder so betriebsblind bin und wieder ein Zeichen oder Kommando vergessen / übersehen habe.

Mit dem e-Paper bin ich nicht weiter gekommen

Viele Grüsse

 

Stefan

bearbeitet von StefanOHAN
Test der Editier Funktion
Link zu diesem Kommentar
Share on other sites

vor 11 Stunden schrieb StefanOHAN:

Wie ist Deine Vorgehensweise beim aktualisieren des Binding ?

Hm das war ungünstig formuliert. Mit aktualisieren meinte ich, die JAR im Addons-Verzeichnis mit der neuen zu überschreiben. Also was ich mache ist (während openHAB läuft):

  • Die JAR durch die neue ersetzen
  • Warten bis im Log (log:tail) die Reinitialisierung durch ist. Das dauert typischerweise so 20 Sekunden. (Ich habe eine Regel, die eine LED auf Grün setzt wenn System started triggert, das ist alternativ auch ein guter Indikator)
  • openHAB neustarten, wieder auf die grüne LED warten

Das hilft typischerweise, ist aber etwas Cargo-Kultesk. Da die anderen Actions bei dir aber funktionieren, vermute ich, dass du nicht das Cachingproblem hast.

vor 11 Stunden schrieb StefanOHAN:

Meine Interpretation war, dass ich eben mit der „action“ getEdgeCount(Channel0 , false) eben nicht den Counter reset ausführe.

Das ist auch so. Was ich meinte ist, dass du in deiner ursprünglichen Regel die Action mit false aufgerufen hast, was dir den aktuellen Wert gibt, mit dem hast du dann aber nichts gemacht, deshalb hast du keine Änderung gesehen. Es gibt da 4 sinnvolle Varianten was du in einer Rule machen kannst:

  • ioActions.getEdgeCount(0, true): Das setzt den Zähler zurück, den aktuellen Wert verlierst du dabei.
  • val x = ioActions.getEdgeCount(0, true): Das setzt den Zähler zurück, den alten Wert hast du dann in x und kannst irgendwas damit anfangen.
  • val x =  ioActions.getEdgeCount(0, true): Das setzt den Zähler nicht zurück, den alten Wert hast du dann in x und kannst irgendwas damit anfangen.
  • Pin0IO4V2Count.sendCommand(REFRESH): Das aktualisiert den Zähler in openHAB, du hast aber nicht den Wert sofort zur Hand. Damit kannst du aber natürlich eine separate Regel triggern, die auf den Channel-Wert reagiert.

Mit  ioActions.getEdgeCount(0, true) fragst du nur den Wert ab und verlierst ihn dann, der Zähler wird aber nicht zurückgesetzt, deshalb passiert dann nichts.

Perspektivisch kannst du dir das ganze Refreshen aber sparen, dass muss ich sowieso für Werte, die sich nicht automatisch aktualisieren, allgemein lösen, damit wird der Edge Counter dann auch erschlagen.

Die Bearbeiten-Funktion des Forums war tatsächlich seltsam, die Standardkonfiguration ist wohl, dass man nur 5 Minuten lang den letzten Post bearbeiten darf. Das habe ich mal geändert.

Die LCD/E-Paper-Regeln teste ich mal und melde mich nochmal, eigentlich sehen die funktional aus.

Edit: Bei den val x = ioActions.getEdgeCount()-Geschichten muss noch .get("count") as int hinten dran, siehe den nächsten Post

Link zu diesem Kommentar
Share on other sites

Bei der E-Paper-Regel fehlt noch ein draw()-Aufruf, so funktioniert es:

val ePaper = getActions("tinkerforge", "tinkerforge:epaper296x128:8e8df7e6:Jn6")
ePaper.fillDisplay(0)
ePaper.drawText(0,0,9,1,0,"test")
ePaper.draw()

Das ist im Moment ungünstig dokumentiert, aber auch draw(Text/Box/Line) und fillDisplay schreiben nur in den Buffer, damit tatsächlich auf das Display gezeichnet wird muss immer draw() aufgerufen werden. Die Doku passe ich nachher mal an.

 

Die LCD/IO16-Regel war etwas verwirrender, nachdem ich da mal rumgesucht habe, bin ich über diesen Post gestolpert. Da sieht man, dass [item].state dir eine Instanz von State gibt. Wenn die nicht in einen Zahltyp gecastet wird, klappen keine Vergleiche mit Zahlen. So funktioniert es bei mir:

LCD128x64_text.sendCommand("1,0,fl-P0-in-G7y-" + H5r_EdgeCountPin0A0.state + "-")

val ioActions = getActions("tinkerforge", "tinkerforge:io16v2:8e8df7e6:H5r")

H5r_EdgeCountPin0A0.sendCommand(REFRESH)

if ((H5r_EdgeCountPin0A0.state as Number).intValue > 10) {
    if(null == ioActions) {
        logInfo("actions", "Actions not found, for io4v2")
    } else {
        logInfo("actions", "Actions found, for io4v2")
        ioActions.getEdgeCount(0, true)
    }
}

LCD128x64_text.sendCommand("2,0,fl-P0-in-G7y-" + H5r_EdgeCountPin0A0.state + "-")

So wie die Regel da steht, hat sie aber noch ein anderes Problem: Der REFRESH ist asynchron, das heißt, du siehst bei den beiden Ausgaben immer den selben Wert, weil der aktualisierte noch nicht da ist, wenn das zweite LCD128x64_text.sendCommand passiert. Alternativ kannst du folgendes machen, dann verhält es sich eher so, wie man es erwartet:

LCD128x64_text.sendCommand("1,0,fl-P0-in-G7y-" + H5r_EdgeCountPin0A0.state + "-")

val ioActions = getActions("tinkerforge", "tinkerforge:io16v2:8e8df7e6:H5r")
if(ioActions === null) {
    logInfo("actions", "Actions not found, for io4v2")
    return
}

val currentEdgeCount = ioActions.getEdgeCount(0, false).get("count") as int

if (currentEdgeCount > 10) {
    val currentEdgeCount = ioActions.getEdgeCount(0, true).get("count") as int
}

LCD128x64_text.sendCommand("2,0,fl-P0-in-G7y-" + currentEdgeCount + "-")
H5r_EdgeCountPin0A0.sendCommand(REFRESH)

Da sieht man auch gut, warum ich noch auf meiner TODO-Liste stehen habe, für Actions die nur einen Wert zurückgeben, den direkt rauszuführen und nicht über den Map<String, Object>-Ansatz zu gehen. Dann fällt das ganze ".get("count") as int" weg.

Link zu diesem Kommentar
Share on other sites

Hallo Erik,

heute habe ich für 3 Bricklets einige Actions getestet. E-Paper, LCD128x64 und PiezoSpeaker.

Bisher hatte ich immer Probleme mit den LCD128x64 Actions. Das lag aber nicht an meiner Konfiguration sondern ausschließlich an der Actions „clearDisplay()“.

Nachdem ich diese Action in allen LCD128x64 Rules an erster Stelle eingebaut hatte, konnte ich nicht erkennen dass die anderen Actions des LCD128x64 funktionierten.

Frage : habe ich bei der Schreibweise einen Fehler übersehen ?

Zitat

lcdActions.clearDisplay()“

 

getestete Actions LCD128x64:

lcdActions.clearDisplay() KO erzeugt einen Fehler im Log

Zitat

2019-11-17 13:54:23.982 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'LCD128x64-action3-Tab': Instance is not an BrickletLCD20x4Actions class.

 

lcdActions.removeAllGUI() OK >> löscht alle Button / Tab usw.

lcdActions.setGUIButton(0, 0, 0, 60, 20, "button1") OK >> erzeugt einen Button für (ID 0)

lcdActions.setGUIButton(1, 68, 0, 60, 20, "CLEAR") OK >>erzeugt einen Button für (ID 1)

lcdActions.setGUISlider(0, 0, 30, 60, 0, 50) OK >> erzeugt einen Slider (für ID 0)

lcdActions.setGUITabText(0,“Tab A“) OK, >> erzeugt einen „Tab A“

 

Frage: zu drawText

Zitat

lcdActions.drawText(0,55,6,true,“Hallo“)

wie wird diese Action benutzt ?

Ich hatte keine Reaktion am Display, erwartet hätte ich einen Text Schriftgröße 2x32 , Schriftfarbe schwarz. Muss ich ähnlich wie beim e-Paper noch eine weitere Actions ausführen ?

 

weiter im Test:

Wenn der verlinkte Channel des Slider betätigt wird, reagiert die Rule  >> OK

Wenn die erzeugten Button „button1“ oder „CLEAR“ betätigt werden reagiert die Rule  >> OK

 

Frage:

Was kann ich mit dem Channel „LCD128x64SelectedGUITab“ anfangen ?

Ich hätte vermutet, dass das mit dem Channel verlinkte Number-Item, die „ID“ des berührten TAB erhält (ich erhalte immer „1“ als Rückgabe Wert)

 

Frage:

Slider Number-Wert

Das mit dem LCD128x64GUISlider1 verlinkte Number-Item hat bei mir einen Wert von 0-52. Kann man den Maximal Wert konfigurieren ? Wenn der Slider am Ende seiner Skala ist z.B. einen Wert 10 hat oder auch 100 hat ?

 

Zitat

            lcdActions.setGUISlider(0, 0, 30, 60, 0, 50);

 

weiter mit dem e-Paper 

Nachdem ich fehlende Action „ePaper.draw()“ in die Rule einfügte wurde der Text geschrieben >> OK

 

Test mit Action PiezoSpeaker

piezoActions.updateVolume(int) OK >> verändert beim aktiven Beep/Alarm die Lautstärke

piezoActions.updateFrequency(int) OK >> verändert beim aktiven Beep die Frequenz

piezoActions.setAlarm(75,1500,1,5,5,10000) OK >> verändert den Alarm (auch auch während eines aktiven Alarms)

 

Das war heute ein echt erfolgreicher Test 🙂

 

Eine Frage hätte ich noch zur WIFI-V2 Extension:

Sie läuft soweit gut, ich sehe nur so ziemlich genau alle 6 Stunden einen kurzen Verbindungsabbruch im OpenHab Log. Nach ca. einer Minute steht die Verbindung auch wieder und zugehörige Dämon ist wieder online.

Kann es sein, dass diese Master-Extension Zyklisch (müsste ich da evtl. was rekonfigurieren ?) einen Verbindungsabbau / Aufbau ausführt ? Oder meinst Du es liegt an der Konfiguration meines WLAN-Router ? (AVM 7590).

Das ist nicht schlimm, es ist nur aufgefallen als ich heute morgen mal die Logs kontrollierte.

 

Danke für Deine Hilfe / Tipps und das Erstellen des Bindings 🙂

 

viele Grüße

 

Stefan

Link zu diesem Kommentar
Share on other sites

Moin,

vor 16 Stunden schrieb StefanOHAN:
Frage : habe ich bei der Schreibweise einen Fehler übersehen ?
Zitat

lcdActions.clearDisplay()“

 

getestete Actions LCD128x64:

lcdActions.clearDisplay() KO erzeugt einen Fehler im Log

Zitat

2019-11-17 13:54:23.982 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'LCD128x64-action3-Tab': Instance is not an BrickletLCD20x4Actions class.

 

Das ist echt verwirrend. Die Fehlermeldung sollte nur ausgegeben werden, wenn die Actions-Klasse mit einer falschen Instanz aufgerufen wird. Das kannst du (meines Wissens) in den Regeln aber nicht erzeugen, ich hatte diese Meldung bei mir nur wegen dem Caching-Problem immer mal gesehen. Das seltsamste daran ist, dass eine LCD20x4Actions-Instanz erwartet wurde, anstelle von einer LCD128x64Actions.

Ich habe das bei mir getestet und es funktioniert problemlos. Welche openHAB-Version hast du genau laufen? Dann würde ich das nochmal mit genau deinem Setup zu testen.

Du kannst natürlich übergangsweise den clearDisplay-Channel benutzen. (Der nimmt einen StringType, der Wert ist egal, du kannst ihn also mit [item].sendCommand("Blah")) Da musst du aber aufpassen, wenn du Channel- mit Action-Verwendung mischt: Das sendCommand ist asynchron, wenn du direkt danach auf das LCD zeichnest, ist das schneller als das clear-Command, dann wird das danach gezeichnete auch gelöscht.

vor 16 Stunden schrieb StefanOHAN:
Frage: zu drawText
Zitat

lcdActions.drawText(0,55,6,true,“Hallo“)

wie wird diese Action benutzt ?

Ich hatte keine Reaktion am Display, erwartet hätte ich einen Text Schriftgröße 2x32 , Schriftfarbe schwarz. Muss ich ähnlich wie beim e-Paper noch eine weitere Actions ausführen ?

Nein, das sollte so funktionieren. Ich habe das auch gerade mal hier ausprobiert, da ist mir aufgefallen, dass du da statt normalen Anführungszeichen (denen hier), spezielle Unicode-Zeichen für die linken Anführungszeichen hast (diese hier). Macht dein Texteditor da Mist?

 

vor 16 Stunden schrieb StefanOHAN:

Frage:

Was kann ich mit dem Channel „LCD128x64SelectedGUITab“ anfangen ?

Ich hätte vermutet, dass das mit dem Channel verlinkte Number-Item, die „ID“ des berührten TAB erhält (ich erhalte immer „1“ als Rückgabe Wert)

Hm, das funktioniert bei mir. Teste mal dieses Minimalbeispiel:

rule "startrule"
when
    System started
then
    var lcdActions = getActions("tinkerforge", "tinkerforge:lcd128x64:8e8df7e6:HQ6")
    lcdActions.clearDisplay()
    lcdActions.removeAllGUI()
    lcdActions.setGUITabConfiguration(3, false)
    lcdActions.setGUITabText(0, "Tab A")
    lcdActions.setGUITabText(1, "Tab B")
    lcdActions.setGUITabText(2, "Tab C")
end

und sieh mal nach ob du mit log:tail dann Zeilen wie diese hier siehst, wenn du das Item angelegt hast:

09:58:58.783 [INFO ] [smarthome.event.ItemStateChangedEvent] - HQ6_SelectedTab changed from 1 to 2

vor 16 Stunden schrieb StefanOHAN:

Frage:

Slider Number-Wert

Das mit dem LCD128x64GUISlider1 verlinkte Number-Item hat bei mir einen Wert von 0-52. Kann man den Maximal Wert konfigurieren ? Wenn der Slider am Ende seiner Skala ist z.B. einen Wert 10 hat oder auch 100 hat ?

Nein, der Wert ist immer in Pixeln. Das musst du dir dann hinterher zurecht skalieren, z.B mit (ungetestet!) Math.round(([item].state as DecimalType) / 52.0 * 10)

vor 17 Stunden schrieb StefanOHAN:

Eine Frage hätte ich noch zur WIFI-V2 Extension:

Sie läuft soweit gut, ich sehe nur so ziemlich genau alle 6 Stunden einen kurzen Verbindungsabbruch im OpenHab Log. Nach ca. einer Minute steht die Verbindung auch wieder und zugehörige Dämon ist wieder online.

Kann es sein, dass diese Master-Extension Zyklisch (müsste ich da evtl. was rekonfigurieren ?) einen Verbindungsabbau / Aufbau ausführt ? Oder meinst Du es liegt an der Konfiguration meines WLAN-Router ? (AVM 7590).

Das ist nicht schlimm, es ist nur aufgefallen als ich heute morgen mal die Logs kontrollierte.

Dazu hätte ich folgende Fragen:

  1. Wie sieht dein Aufbau genau aus? Also wo läuft openHAB? (auf einem Raspberry oder so?), was hast du an der WIFI-Extension? usw.
  2. Was steht genau im openHAB-Log? Häng am besten mal die ganze Datei an
  3. Steht etwas brauchbares im Log der Fritzbox?

Das der Rest funktioniert freut mich schonmal. Nochmal danke dafür, dass du so rigoros testest :)

Gruß,

Erik

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...