Jump to content

rwblinn

Members
  • Gesamte Inhalte

    121
  • Benutzer seit

  • Letzter Besuch

Posts erstellt von rwblinn

  1. OK.

    Rule funktioniert.

    Getestet: Alternativ item update, ohne action, aber mittels sendCommand

    rule "System Start"
    when
        System started
    then
    	// LCD backlight on
    	// Switch TF_LCDBacklight	"LCDBacklight" { channel="tinkerforge:brickletlcd20x4:rTS:BrickletLCD20x4Backlight" }
    	TF_LCDBacklight.sendCommand("ON");
    end
    
    // LCD 20x4 Display airpressure using sendCommand
    // Number TF_Barometer		"Pressure [%.3f mBar]" { channel="tinkerforge:brickletbarometer:jXZ:BrickletBarometerAirPressure" }
    // String TF_LCD			"LCD" { channel="tinkerforge:brickletlcd20x4:rTS:BrickletLCD20x4Text"}
    // String TF_LCDClear		"LCDClear" { channel="tinkerforge:brickletlcd20x4:rTS:BrickletLCD20x4ClearDisplay" }
    rule "LCD update airpressure sendcommand"
    when
    	Item TF_Barometer received update
    then
    	// Time HH:MM:SS
    	val lastUpdate = new DateTimeType().format("%1$tH:%1$tM:%1$tS");
    
    	// Get airpressure
    	val airPressure = (TF_Barometer.state) as DecimalType;
    		
    	// Update lcd
    	// TF_LCDBacklight.sendCommand("ON"); - see rule System Start
    	TF_LCDClear.sendCommand("Clear");
    	TF_LCD.sendCommand("0," + (20 - lastUpdate.length()).toString() + "," + lastUpdate);
    	TF_LCD.sendCommand("1,0," + String::format("%1$.4f",airPressure.floatValue) + " hPa");
    end 

     

  2. Node-RED openhab nodes: wollte mal checken ob diese als alternative zu rules (DSL based on Xtend) verwendet werden können. Node-RED mit Tinkerforge MQTT funktioniert sehr gut.

    Rule: test Barometer & LCD20x4

    /*
    openHAB 2 - Test & learn Tinkerforge Master Brick + Barometer & LCD20x4 Bricklets
    Notes:
    Barometer update interval is set using the PaperUi > Thing BaroBricklet > Channel Air Pressure
    Always check the log after changes: /var/log/openhab2/openhab.log or http://192.168.N.NNN:9001/
    Define var (and not val) for variables that are reassigned:
    val -> value (a fixed value, not to be changed during runtime)
    var -> variable (can be changed during runtime, anytime)
    */
    
    // LCD 20x4 Display airpressure
    rule "LCD update airpressure"
    	when
    		Item TF_Barometer received update
    	then
    		// Get action objects
    		val lcdActions = getActions("tinkerforge", "tinkerforge:brickletlcd20x4:rTS");
    		val baroActions = getActions("tinkerforge", "tinkerforge:brickletbarometer:jXZ");
    		// Get airpressure
    		var Number airPressure = baroActions.brickletBarometerGetAirPressure().get("airPressure");
    		airPressure = airPressure * 0.001;
    		// Update LCD. The line and pos must be initialized.
    		lcdActions.brickletLCD20x4ClearDisplay();
    		var line = 0;
    		var pos = 0;
    		// Time HH:MM:SS
    		val lastUpdate = new DateTimeType().format("%1$tH:%1$tM:%1$tS");
    		line = 0;
    		pos = 20 - lastUpdate.length();
    		lcdActions.brickletLCD20x4WriteLine(line as short, pos as short, lastUpdate);
    		// Airpressure displayed with 2 digits
    		line = 1;
    		pos = 0;
    		lcdActions.brickletLCD20x4WriteLine(line as short, pos as short, String::format("%1$.2f",airPressure) + " hPa");
    end 

    liefert INFO hinweise im openhab.log

    ==> /var/log/openhab2/openhab.log <==
    2020-07-22 08:48:52.194 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'tf1.rules', using it anyway:
    The method brickletBarometerGetAirPressure(ThingActions) from the type BrickletBarometerActions refers to the missing type Object
    The method brickletLCD20x4ClearDisplay(ThingActions) from the type BrickletLCD20x4Actions refers to the missing type Object
    The method brickletLCD20x4WriteLine(ThingActions, short, short, String) from the type BrickletLCD20x4Actions refers to the missing type Object
    2020-07-22 08:48:52.266 [INFO ] [el.core.internal.ModelRepositoryImpl] - Refreshing model 'tf1.rules'

     

  3. Danke für die info.

    Denke der weg über die paperui ist gut, da die things auch über die paperui definiert wurden, wo auch die channels konfiguriert sind/können.

    Falls textuelle konfiguration für things, dann is die astro binding ein gutes beispiel wo auch parameter gesetzt werden.

    Nächste frage: Node-RED openhab2 nodes

    Können diese auch für die Tinkerforge openhab2 bindings verwendet werden?
    Habe Barometer Bricklet getestet=OK; LCD20x4 Bricklet=Nicht OK (liefert null)

    Welche syntax ist für die openhab2-out node payload zu verwenden? beispiel: LCD20x5 writeline. 

     

  4. Newbie Frage: wie wird ein Channel Parameter for ein item definiert.

    Beispiel Air Pressure:

    Number TF_Barometer		"Pressure [%.3f mBar]" { channel="tinkerforge:brickletbarometer:jXZ:BrickletBarometerAirPressure" }
    
    Parameter "Update Interval" wo definieren?
    Number TF_Barometer		"Pressure [%.3f mBar]" { channel="tinkerforge:brickletbarometer:jXZ:BrickletBarometerAirPressure" ???}

     

    Air Pressure
     

    The measured air pressure

    Type:
    • Number:Pressure
    UID:
    • tinkerforge:brickletbarometer:[UID]:BrickletBarometerAirPressure
    Read only:
    • Yes
    Unit:
    • Bar
    Range:
    • 0.01 Bar to 1.2 Bar (Step 1e-06 Bar)
    Parameters:
    • Update Interval
  5. Hallo,

    erhalte den gleichen fehler wie schon gemeldet:

    2020-07-20 15:52:08.462 [WARN ] [org.apache.felix.fileinstall        ] - Error while starting bundle: file:/usr/share/openhab2/addons/org.openhab.binding.tinkerforge-2.5.6-SNAPSHOT.jar
    
    org.osgi.framework.BundleException: Could not resolve module: org.openhab.binding.tinkerforge [133]
    
      Unresolved requirement: Import-Package: org.openhab.core.automation.annotation; resolution:="optional"
    
      Unresolved requirement: Import-Package: com.tinkerforge; version="[2.1.0,3.0.0)"

    Im Verzeichnis \usr\share\openhab2\addons befinden sich die beiden jar Dateien:

    ls /usr/share/openhab2/addons
    org.openhab.binding.tinkerforge-2.5.6-SNAPSHOT.jar
    tinkerforge-2.1.26.jar
    [16:05:57] openhabian@openhab:~$ 

    Raspberry Pi mit openhab2 version stable 2.5.6-2

  6. ACHTUNG: Tests mit Arduino UNO & MEGA gestoppt, da ohne Pegelwandler 5V -> 3.3V ausgeführt = Gefahr Bricklet Zerstörung.

    Siehe Post #1: Arduinos mit AVR-Mikrocontroller (z.b. der Arduino Uno und Mega) haben einen Logikpegel von 5V und brauchen deshalb einen Pegelwandler zwischen dem Arduino und dem Bricklet. Bricklets haben einen Logikpegel von 3,3V.

    Update: Habe das HAT Zero erhalten und gestartet mit einem Arduino MEGA und LED Blink Beispiel.
    Frage vorweg
    Wie müßen die CS Ports im ino Sketch deklariert werden. Lt Doku gibt es 5 CS pins aber 4 Ports A-D?
    Wiring: Chip Select Pins HAT (=MEGA): 13 (=53), 16(=49), 18(=47), 15(=45), 22 (=43)


    1 Bricklet IO4 an Port A

    Deklaration ino Sketch: TF_Port ports[1] = { { .chip_select_pin=53, .port_name='A' }};

    LED Blink Beispiel funktioniert.
    Hinweis: nach Upload, Power HAT Zero wegnehmen und wieder anschließen sonst passiert nichts oder Fehler -10 erscheint nach der HAT Init.

    2 Bricklets IO4 (Port A) und IO16 (Ports B)

    Deklaration ino Sketch: TF_Port ports[2] = { { .chip_select_pin=53, .port_name='A' }, { .chip_select_pin=49, .port_name='B' }};

    Fehlermeldung -10 nach der HAT Init.

     

    Denke: Das Wiring x-mal überprüft, ist doch ein wenig unübersichtlich = vieleicht besser auf das neue Tinkerforge ESP32 Board warten.

  7. 6 hours ago, rtrbt said:

    Da würde ich zusammengefasst sagen "Nimm nur das NodeMCU und kauf dir ein HAT Zero Brick ". Das hat die korrekten Trenner/Buffer-Chips und du kannst 4 Bricklets anschließen ohne dass du Breakout Bricklets brauchst. Das HAT hat auch 3,3V Logikpegel, also sollte es am NodeMCU funktionieren.

    Danke für die ausführliche Infos. Werde es (erstmal) mit einem HAT Zero Brick versuchen …

  8. Danke - Post #2 mit Source angepasst.

    Nächster Test: Multiple Bricklets an einem Arduino MEGA & NodeMCU.
    Fragen dazu (bin kein Elektroniker):

    • Welchen "tri-state buffer chip" wird empfohlen (muß ich bestellen, zB 74HC125)?
    • Erbitte Wiring Beispiel(e) für 2-3 Bricklets?
    • Können an einem Breakout (v1) mehrere Bricklets angeschlossen werden?
    • Wie werden die Ports für die einzelnen Bricklets deklariert?
    • Macht es Sinn bei der Port deklaration auch die Bricklet UID zu definieren?
  9. Funktioniert. Klasse! Danke.

    Logik angepasst = nur jeweils einmal drücken um LED ON oder OFF zu setzen. Im Anhang die letzte Version.

    PS:

    Im Anhang noch ein ino Beispiel wo keine externe  Deklarationen verwendet werden = "alles in einem" - wollte mal checken ob direkt aus der ino, Tinkerforge Funktionen aufgerufen werden können.

    io4ledserial.ino

    io4ledbtn.c

  10. Im Buttonbeispiel, die Loop geändert:

    void io4ledbtn_loop(TF_HalContext *hal) {
    	tf_io4_v2_callback_tick(&io, 250);
    	// tf_io4_v2_get_value(&io, io_ret_value);
    
    	// Handle button pressed to set the led state on or off.
    	// The values button_pressed and led_state are set in the button callback io4ledbtn_cb_input_value()
    	if (button_pressed == true){
    		tf_hal_log_info("LED state set to %s", led_state ? "true" : "false");
    		tf_io4_v2_set_selected_value(&io, 0, led_state);
    	}
    }

    Die Bedingung wird ausgeführt, aber nicht die Function tf_io4_v2_set_selected_value(). Habe verschiedene timeouts probiert.

    Push-button pressed channel 1. Led state true
    LED state set to true

    Übrigens: der Test io4led erfolgreich auf folgende Microcontroller: Arduino UNO, Arduino MEGA, ESP-WROOM-32.

  11. Danke für die weiteren Infos. Fragen dazu:

    Die 5V werden dann anscheinend nicht benötigt da die Bricklets mit 3V3 auskommen?
    Habe die 5V Leitung zum Breakout weggelassen (nur 3V3) und die Tests funktionieren, sowohl bei einem Arduino UNO und ESP-Wroom-32. 

    Das mit dem Callbacks habe ich nicht verstanden.
    Erbitte Beispiel, wo ein Input Signal verarbeitet wird.
    In meinem Button Beispiel, setzt der Callback nur einen Flag der in der Loop verarbeitet wird.

  12. Danke für die Bindings = sehr gut. 

    ACHTUNG: Tests mit Arduino UNO & MEGA gestoppt, da ohne Pegelwandler 5V -> 3.3V ausgeführt = Gefahr Bricklet Zerstörung.

    Siehe Post #1: Arduinos mit AVR-Mikrocontroller (z.b. der Arduino Uno und Mega) haben einen Logikpegel von 5V und brauchen deshalb einen Pegelwandler zwischen dem Arduino und dem Bricklet. Bricklets haben einen Logikpegel von 3,3V.

    Aufbau

    Arduino UNO <-> Tinkerforge Breakout Bricklet V1 <-> Tinkerforge IO4 Bricklet V2 <-> LED & Push-Button.

    Tests

    •  LED 10x blinken (io4led)
    •  Push-button LED an | aus (io4ledbtn)

    Im Anhang: Beschreibung (PDF, En), Source Code.

    tf-microcontroller-example.zip

  13. Tested = same error - running Python 2.7.16 (default, Oct 10 2019, 22:02:15) [GCC 8.3.0] on linux2 on a Raspberry Pi 3B+ (Buster)
     

    2020-05-11 12:30:39,165 <DEBUG> MQTT bindings: Calling function write_line for device rTS of type lcd_20x4_bricklet.
    2020-05-11 12:30:39,167 <ERROR> MQTT bindings: argument for 's' must be a string (call of write_line of lcd_20x4_bricklet rTS)
    2020-05-11 12:30:39,169 <DEBUG> MQTT bindings: Calling function write_line for device rTS of type lcd_20x4_bricklet succedded.
    2020-05-11 12:30:39,170 <DEBUG> MQTT bindings: Publishing response to tinkerforge/response/lcd_20x4_bricklet/rTS/write_line
    2020-05-11 12:30:39,172 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m5), 'tinkerforge/response/lcd_20x4_bricklet/rTS/write_line', ... (2 bytes)

     

  14. Thanks for the update.

    1/ Confirmed get_identity working.

    tinkerforge/request/lcd_20x4_bricklet/rTS/get_identity (null)
    tinkerforge/response/lcd_20x4_bricklet/rTS/get_identity {"connected_uid": "5VGrDJ", "uid": "rTS", "device_identifier": "lcd_20x4_bricklet", "hardware_version": [1, 2, 0], "position": "b", "firmware_version": [2, 0, 6], "_display_name": "LCD 20x4 Bricklet"}

    2/ Write_line not working.

    Does this happen every time you attempt to call write_line?
    YES, tried on two different RPi's running latest bindings

    or only in specific cases?
    NO

    Did you call any other functions before calling write_line?
    Using bash script (tested on the two systems):

    cat lcd2004_write_line.sh
    #!/bin/bash
    mosquitto_pub -t tinkerforge/request/lcd_20x4_bricklet/rTS/backlight_on -m ''
    mosquitto_pub -t tinkerforge/request/lcd_20x4_bricklet/rTS/clear_display -m ''
    mosquitto_pub -t tinkerforge/request/lcd_20x4_bricklet/rTS/write_line -m '{"line": 0, "position": 0, "text":"Hello World"}'

     

  15. Environment: Raspberry Pi (Raspian Buster), Python  2.7.16, MQTT Bindings 2.0.9

    Issue:

    Publishing sample text is not displayed:

     mosquitto_pub -t tinkerforge/request/lcd_20x4_bricklet/rTS/write_line -m '{"line": 0, "position": 0, "text":"TEST"}'

    Ran Tinkerforge_mqtt with debug flag - shows an error

    2020-05-08 18:42:57,560 <DEBUG> MQTT bindings: Calling function write_line for device rTS of type lcd_20x4_bricklet.
    2020-05-08 18:42:57,562 <ERROR> MQTT bindings: argument for 's' must be a string (call of write_line of lcd_20x4_bricklet rTS)
    2020-05-08 18:42:57,563 <DEBUG> MQTT bindings: Calling function write_line for device rTS of type lcd_20x4_bricklet succedded.
    2020-05-08 18:42:57,564 <DEBUG> MQTT bindings: Publishing response to tinkerforge/response/lcd_20x4_bricklet/rTS/write_line
    2020-05-08 18:42:57,569 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m8), 'tinkerforge/response/lcd_20x4_bricklet/rTS/write_line', ... (2 bytes)
    2020-05-08 18:42:57,572 <DEBUG> MQTT bindings:
    

    Tested the same with a) brick viewer: text is displayed, b) Python bindings = text is displayed.

    Also tried other lcd20x4 mqtt functions:
    backlight_on & off = OK


    get_identity = error

    2020-05-08 18:55:50,901 <DEBUG> MQTT bindings: Calling function get_identity for device rTS of type lcd_20x4_bricklet.
    2020-05-08 18:55:50,909 <DEBUG> MQTT bindings: Calling function get_identity for device rTS of type lcd_20x4_bricklet succedded.
    Traceback (most recent call last):
      File "/usr/local/bin/tinkerforge_mqtt", line 7366, in on_message
        response = self.dispatch_call(request_type, device, uid, function, payload, response_path)
      File "/usr/local/bin/tinkerforge_mqtt", line 7717, in dispatch_call
        return self.device_call(device, device_class_name, uid, fnName, fnInfo, json_args)
      File "/usr/local/bin/tinkerforge_mqtt", line 7823, in device_call
        d["_display_name"] = display_names[dev_id]
    NameError: global name 'display_names' is not defined


     

     

     

     

  16. Please find the output of running the bindings with parameter --debug.

    Changed the period to 5000.

    2020-01-24 10:10:29,786 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m582), 'b'tinnse/air_quality_bricklet/Jvj/get_all_values_callback_configuration'', ... (46 bytes)
    2020-01-24 10:10:48,678 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m586), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes)
    2020-01-24 10:10:53,637 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m587), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes)
    2020-01-24 10:10:58,600 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m588), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes)
    2020-01-24 10:11:03,561 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m589), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes)
    2020-01-24 10:11:08,513 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m590), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes)
    2020-01-24 10:11:13,478 <DEBUG> paho.mqtt.client: Sending PUBLISH (d0, q0, r0, m591), 'b'tinkerforge/callback/air_quality_bricklet/Jvj/all_values'', ... (109 bytes)

     

  17. Hi,

     

    tried to setup an Air Quality Bricklet for MQTT Callback with a Raspberry Pi 4 running mosquito and the Tinkerforge MQTT Binding 2.0.6.

    The Brick Viewer shows all data; An MQTT request provides also the data (see below …/get_all_values request with response), but with MQTT callback no response.

    Question: what is wrong in below configuration?

    pi@4dev:~ $ mosquitto_pub -t tinkerforge/request/air_quality_bricklet/Jvj/set_all_values_callback_configuration -m '{"period": 100, "value_has_to_change":false}'
    
    pi@4dev:~ $ mosquitto_pub -t tinkerforge/register/air_quality_bricklet/Jvj/all_values -m '{"register": true}'

     

    OUTPUT

    pi@4dev:~ $ mosquitto_sub -v -t tinkerforge/#
    
    tinkerforge/request/air_quality_bricklet/Jvj/set_all_values_callback_configuration {"period":10,"value_has_to_change":false}
    tinkerforge/register/air_quality_bricklet/Jvj/all_values {"register":true}
    
    tinkerforge/request/air_quality_bricklet/Jvj/get_all_values {}
    tinkerforge/response/air_quality_bricklet/Jvj/get_all_values {"iaq_index": 26, "iaq_index_accuracy": "low", "temperature": 2100, "humidity": 5403, "air_pressure": 102912}
    

     

     

  18. Just a suggestion for a small change regarding writing a custom character with Java.

    Test Java Snippet

    // Custom Char battery assigned to index 0 (from max 7)
    short[] battery = new short[]{14,27,17,17,17,17,17,31};
    lcd.setCustomCharacter((short)0, battery);
    // Display the custom char with some text
    lcd.writeLine((short)0, (short)0, "Battery: " + (char)0x08);

    Suggestion Java documentation:
    For section

    void BrickletLCD20x4.setCustomCharacter(short index, short[] character) 

    change the line:

    The characters can later be written with writeLine() by using the characters with the byte representation 8 ("x08") to 15 ("x0F").

    to

    The characters can later be written with writeLine() by using the characters with the byte representation 8 ( (char)0x08 ) to 15 ( (char)0x0F ).

     

×
×
  • Neu erstellen...