Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Geschrieben

Hi,

ich möchte das Doppelrelais als Hygrostat und Thermostat verwenden. Aber ich muss bei set.State beide Relais schalten. Da ich ja zwei Listener nutze kann ich dass nicht machen. Wie kann ich das vielleicht anders Schreiben.

 

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package tinker;

import com.tinkerforge.*;



/**
*
* @author Adrian
*/

public class NewClass 
{
    public static final String host = "localhost";
    public static final int port = 4223;
    public static final String UID1 = "7Ys";   // Temperatursensor //
    public static final String UID2 = "7Vb";   // Luftfeuchtigkeitssensor //
    public static final String UID3 = "7Yo";   // LCD 20*4 //
    public static final String UID4 = "7FJ";   // Doppel Relay //
    
    public static void main (String args[])  throws Exception 
        {
        System.out.println("Start");
      
        NewClass.Temp();
        }
    public static void Temp()  throws Exception 
        {
        final IPConnection ipcon = new IPConnection(host, port); // Can throw IOException
        final BrickletTemperature temp = new BrickletTemperature(UID1); // Create device object
        final BrickletHumidity hum = new BrickletHumidity(UID2);
        final BrickletLCD20x4 lcd = new BrickletLCD20x4(UID3);
        final BrickletDualRelay dr = new BrickletDualRelay (UID4);
        
        // Add device to IP connection
        ipcon.addDevice(temp); // Can throw IPConnection.TimeoutException
        ipcon.addDevice(hum);
        ipcon.addDevice(lcd);
        ipcon.addDevice(dr);
        // Don't use device before it is added to a connection

        lcd.backlightOn();
        lcd.clearDisplay();
        
        // Get threshold callbacks with a debounce time of xx seconds (xx000ms)
        temp.setDebouncePeriod(1000);
        hum.setDebouncePeriod(1000);

        // Configure threshold for "greater than 30 °C" (unit is °C/100)
        temp.setTemperatureCallbackThreshold('>', (short)(-30*100), (short)0);
        hum.setHumidityCallbackThreshold('>', (short)(0), (short)(100));
        
        // Add and implement temperature reached listener 
        // (called if temperature is greater than 30 °C)
        temp.addListener(new BrickletTemperature.TemperatureReachedListener() {
            @Override
            public void temperatureReached(short temperature) {
                final java.util.Date now = new java.util.Date();
                final java.text.SimpleDateFormat sdf = new 
                        java.text.SimpleDateFormat("dd.MM.yyyy HH.mm.ss");
                lcd.writeLine((short)0, (short)0, "T: " + temperature/100.0 +
                        " " + (char)0b11011111 + "C  ");
                // wenn Temperatur unter 28° dann geht relay 1 an //
                if(temperature < 28*100) {
                    dr.setState(true,false);
                } else {
                    dr.setState(false,false);
                }
            }
        });
        hum.addListener(new BrickletHumidity.HumidityReachedListener() {
            @Override
            public void humidityReached(int humidity) {
                final java.util.Date now = new java.util.Date();
                final java.text.SimpleDateFormat sdf = new 
                        java.text.SimpleDateFormat("dd.MM.yyyy  HH.mm.ss");
                lcd.writeLine((short)1, (short)0, "rF: " + humidity/10.0 
                        + " %RH ");
                lcd.writeLine((short)3, (short)0, sdf.format(now));
               if(humidity < 500) {
                    dr.setState(false,true);
                } else {
                    dr.setState(false,false);
                }
            }});
      
}

}

Ich hab mal den Code gepostet wie er nicht funktionieren kann. Damit mein Problem deutlich wird.

Geschrieben

Hi,

 

Ne kurze Skizze:

Bau dir doch nen Wrapper Klasse mit der du beide Relais einzeln schalten kannst. Dann brauchst du nur eine Methode, die sich nur den alten Zustand merken müsste und dann setState aufruft etc.

 

 

Geschrieben

Da braucht man doch nur ein zusätzliches getState() mit dem man den aktuellen Relais-Zustand ausliest und dann das Ergebnis für das nicht zu verändernde Relais damit wieder setzt.

Geschrieben
  • Autor

Da braucht man doch nur ein zusätzliches getState() mit dem man den aktuellen Relais-Zustand ausliest und dann das Ergebnis für das nicht zu verändernde Relais damit wieder setzt.

 

Danke soweit. Vielleicht hast du noch einen Tipp zur Umsetzung (bin Java Anfänger)

Also den Zustand kann ich so abfragen und bspw. auf dem LCD wiedergeben:

 

State state1 = null;
                try {
                    state1 = dr.getState();
                } catch (TimeoutException ex) {
                    Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
                }
lcd.writeLine((short)2, (short)0,"" + state1);

 

Nur wie kann den nun auswerten und für set.State() verwenden? Kann ja nur true oder false sein. Ich brauch irgendeinen Hinweis wo nach ich suchen muss, dann kann ich mir es auch anlesen.

Danke.

Geschrieben
  • Autor

Ich hab meinen Fehler gefunden.

ich wuste nicht dass mit

getState().relay1

der Zustand des einzelnen Relais abgefragt werden kann.

 

p.s. könnte vielleicht in die Dokumentation aufgenommen werden, für noobs wie mich ;)

Geschrieben
  • Autor

Da steht es schon ^^

http://www.tinkerforge.com/doc/Software/Bricklets/DualRelay_Bricklet_Java.html#BrickletDualRelay::getState

 

(Im setState drüber steht sogar der Hinweis wie man nur eines von beiden schaltet ;))

 

Oder meinst du, dass nicht klar wird, dass man relay1 von getState() abfragen kann?

Letzteres. Ohne das wissen hatte ich probiert mit State dem ganzen Herr zu werden. Aber dass die Lösung so einfach ist. Naja Anfängerfehler.

Ich hab aber gerade selber nochmal nachgelesen. Aber Stand der Satz:

"The returned object has the public member variables boolean relay1 and boolean relay2." schon letzte Woche drin? Dann hab ich wohl einfach nicht genau gelesen.

 

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...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.