Jump to content

openhab Integration


[[Template core/global/global/poll is throwing an error. This theme may be out of date. Run the support tool in the AdminCP to restore the default theme.]]

Recommended Posts

  • Replies 526
  • Created
  • Letzte Antwort

Top Posters In This Topic

Hallo zusammen,

 

zunächst vielen Dank an Theo, der das alles so wunderbar umsetzt!

 

Kann mir jemand bei dieser Sache etwas auf die Sprünge helfen, da ich Neueinsteiger in dieser Thematik bin. Ich denke das kann auch anderen Neueinsteigern helfen.

 

>> Ich habe die Tinkerforge Wetterstation über den Masterbrick und USB-Kabel an meinen Raspberry Pi 3 B+ angeschlossen, auf dem OpenHabian mit OpenHab 2.4 läuft. Gibt es an diesem Setting Fehler?

>> Ich habe im Windows Explorer mit \\OPENHABIANPI\openHAB-share (BN: openhabian und PW: openhabian) das Verzeichnis aufgerufen und in den Ordner openhab-addons die Datei org.openhab.binding.tinkerforge-2.5.0-7-SNAPSHOT.jar gelegt.

>> Im Paper UI kann ich nun nach einem Neustart in der Inbox verschiedene Bindings wählen. U.a. habe ich den brickd gewählt, ambientlightv2, barometer und humidity.

Ab hier brauche ich Support:

>> Theo sagt man solle dem brickd eine IP-Adresse geben. Welche IP-Adresse ist das und wie kommt man an die? Egal was ich da eintrage der brickd wird immer als ONLINE angezeigt.

>> Alle anderen bricks sind OFFLINE. Den UID für die anderen Bricks habe ich korrekt eingetragen.

>> Wie bekomme ich die Dinge also vollends ans laufen?

 

Vielen Dank für eure Hilfe! :-)

 

lg Timo 

 

Link zu diesem Kommentar
Share on other sites

Gerade entdeckt, geilomatenmäßig, da bin ich wieder mit im Boot

Hallo Sigi, das ist ja super! Freut mich sehr, dich wieder an Bord zu haben!

 

Gerade hat mich eine Erkältung dahingerafft, deshalb hängt es etwas. Sobald das überstanden ist, werde ich einen neuen Snapshot mit vielen Verbesserungen abschließen und hier zum Testen veröffentlichen.

 

@Timo: Dann werde ich auch einen kleinen Screencast machen, der die Bedienung veranschaulicht.

Link zu diesem Kommentar
Share on other sites

Hallo omiT

 

wenn du den Masterbrick über USB an den Raspi angeschlossen hast, solltest eigentlich die loop-IP (127.0.0.1) funktionieren. Ich kann jetzt nicht sagen welche ich nutze (entweder die 127.0.0.1 oder die IP die der Raspi im Netz hat).

 

Ich hatte ursprünglich auch das Problem mit der IP, aber dann stellte sich heraus dass ich einfach den Tinkerforge Brick-Dämon für das openhabian noch nicht installiert hatte (war etwas verwirrend denn im PaperUI wurde ja BrickD angezeigt, war ja aber die Konfigurations-Info für das Binding, nachdem ich den Dämon nachinstallierte wurden mir die angeschlossenen Bricklets angezeigt und ich konnte sie den Item zuweisen)

 

@Theo, auch von mir nochmals viele Dank für Deine Tolle Unterstützung

Link zu diesem Kommentar
Share on other sites

Hier sind meine Testergebnisse:

 

Hardware: VirtualBox VM auf Debian 9

 

Software: Zulu openjdk version "1.8.0_202", openHAB Snapshot 2.4 Stable, TF Snapshot 2.5.0-7

 

Tinkerforge: 2 x Masterbrick mit jeweils einer Ethernet Extension im lokalen Netzwerk, Authentifizierung ausgeschaltet

Nr. 1 mit 192.168.2.240:4223, angeschlossen Industrial Digital IN 4 und Industrial Quad Relay

Nr. 2 mit 192.168.2.241:4222, angeschlossen Industrial Quad Relay, Barometer, Remote Switch

 

Beide Master werden gefunden, beide sind online.

Das Industrial Quad Relay am Master Nr. 1 wird autodiscovered, alle Bricklets am Master Nr. 2 nicht.

Nach manuellem Hinzufügen der beiden Bricklets für Master Nr. 2 gehen beide (Industrial Quad und Barometer) Bricklets nicht online.

 

Da Master Nr. 1 auf dem Default Port 4223 läuft, Master Nr. 2 aber auf 4222, habe ich jeweils an die IP Adresse den Port angefügt, keine Veränderung.

Das temporäre Herunterfahren des Produktivsystems (mit Tinkerforge 1.x Binding) verändert das Testergebnis nicht.

 

Ein weiterer Test mit der aktuellen openHAB Snapshot # 1512 hat zu dem gleichen Ergebnis geführt.

 

So sieht es visuell aus:

 

35023728yc.png

Link zu diesem Kommentar
Share on other sites

Hallo omiT

 

wenn du den Masterbrick über USB an den Raspi angeschlossen hast, solltest eigentlich die loop-IP (127.0.0.1) funktionieren. Ich kann jetzt nicht sagen welche ich nutze (entweder die 127.0.0.1 oder die IP die der Raspi im Netz hat).

 

Ich hatte ursprünglich auch das Problem mit der IP, aber dann stellte sich heraus dass ich einfach den Tinkerforge Brick-Dämon für das openhabian noch nicht installiert hatte (war etwas verwirrend denn im PaperUI wurde ja BrickD angezeigt, war ja aber die Konfigurations-Info für das Binding, nachdem ich den Dämon nachinstallierte wurden mir die angeschlossenen Bricklets angezeigt und ich konnte sie den Item zuweisen

 

Hallo StefanOHAN,

 

Ich habe die 127 IP zugewiesen. Danke für den Hinweis mit dem daemon brick. Dazu meine Frage wie installiert man diesen brick daemon? Der ist ja in den bindings von Theo und nicht dabei. danke schön

 

Lg

Link zu diesem Kommentar
Share on other sites

Dazu meine Frage wie installiert man diesen brick daemon?

 

Der Brick Daemon ist vereinfacht gesagt der Treiber für dein Betriebsystem wenn du den Masterbrick per USB an deinen PC anschließt. Näheres zur Installation und die verschiedenen Betriebssysteme findest du hier:

 

https://www.tinkerforge.com/de/doc/Software/Brickd.html#brickd

 

Um die korrekte Funktion lokal (ohne openHAB) erst einmal zu testen empfiehlt sich ebenfalls die Installation des Brick Viewers. Erst wenn du dort Daten von deinen Bricklets empfangen kannst solltest du die Einbindung in openHAB vornehmen.

 

https://www.tinkerforge.com/de/doc/Software/Brickv.html#brickv

Link zu diesem Kommentar
Share on other sites

Hallo sihui, hallo omiT

 

wie omiT hab ich auch openhabian auf dem Raspi laufen, soweit mir bekannt ist, ist keine grafische Oberfläche in der Standart Konfiguration installiert, daher könnte es mit dem Brick Viewers ein Problem beim starten geben.

 

Irgendwo in der Tinkerforge online Dokumentation hab ich eine Installations Anleitung für den Brick-Dämon auf dem Raspi (wird hier unter den Embedded Boards geführt) mit Debian Linux gefunden. Die darin beschriebene Vorgehensweise funktioniert auch bei openhabian (ist ja auch Debian).

 

https://www.tinkerforge.com/de/doc/Embedded/Raspberry_Pi.html

 

omiT, Du musst nur ab dem Punkt

>> Brick Daemon installieren

  >>Raspbian (armhf)

 

>>sudo apt-get install libusb-1.0-0 libudev0 pm-utils

>>wget http://download.tinkerforge.com/tools/........

>>sudo dpkg -i brickd_linux_latest_armhf.deb

 

die 3 Punkte für die Installation ausführen. Bei mir hat es nur beim dem

"wget http://download.tinkerforge.com/tools........" Befehl Probleme gegeben, als ich aber ein sudo vor dem Befehl setzte ging es Problemlos. Es kann sein, dass es an meiner  Konfiguration lag, probiere es einfach aus.

 

der Punkt

>>Soft-Float Debian (armel)

ist schon nicht mehr relevant für Dich

 

Ich hoffe es klappt :-)

 

 

Link zu diesem Kommentar
Share on other sites

Hallo Theo

 

anbei meine ersten Testergebnisse

 

Aufbau :

1x Raspberry Pi 3b, OS=Openhabian V1.4.1 , openhab2-Tinkerforge-Binding = 2.5.0-7

Die Item‘s hab ich über einen Konfigfile .items angelegt, jedoch keine Verlinkung zu den TF Komponenten im dem File hinterlegt.

 

Tinkerforge Komponenten

 

Stapel-1 mit 2xMasterbrick (v2.1, FW 2.4.9) angeschlossen über USB

Stapel-2 mit 1xMasterbrick (v2.1, FW 2.4.9) angeschlossen über USB

 

angebundene Bricklets

 

Stapel-1

2 x Industrialquadrelay V2 (über paperui/index.html#/inbox erkannt)

1 x HumidityV2 (über paperui/index.html#/inbox erkannt)

1 x HumidityV1 (über paperui/index.html#/inbox erkannt)

1 x Temperature V1 (über paperui/index.html#/inbox erkannt)

2 x IO-16 Bricklet V1 (über paperui/index.html#/inbox NICHT erkannt, ich hoffe in Deiner Nächsten Version werden sie erkannt)

 

Stapel-2

1 x  MotionDetector V1 (über paperui/index.html#/inbox erkannt)

 

Alle erkannten Tinkerforge Sensoren lieferten Daten an die verlinkten Items und wurden auf der basicui/app Website dargestellt.

Alle 8 Relais der beiden Quadrelais  wurden auf der basicui/app Website dargestellt und konnten bedient werden. Die entsprechenden LED der Bricklets konnten somit ein und ausgeschaltet werden.

 

2 Punkte haben nicht wie erwartet gearbeitet

 

1) das Heater Element des Humidity V2 konnte  über paperui/index.html#/configuration/things/view/tinkerforge:humidityV2 nur mit einem contact Item verlinkt werden. Auf der basicui/app Website wurde nichts dargestellt (weder open noch closed). Ich hätte erwartet dass, das heater Element als switch konfiguriert wird.

 

2) das MotionDetector V1 kann im paperui/index.html#/configuration/things/ nur mit einem switch-Item verlinkt werden. Ich hätte erwartet dass es mit einem contact verlinkt wird. Beim betätigen des switch-Item über basicui/app führte es zu einer Warnmeldung

 

„2019-02-10 16:21:23.048 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler MotionDetectorBrickletHandler of thing tinkerforge:motiondetector:3d4ec881:BYG tried updating channel motiondetected although the handler was already disposed“

 

Weiter hat bei Bewegung zu keiner Veränderung des Item-Zustand auf der basicui/app-Website geführt. Ich hab über den Brickviewer das MotionDetector Bricklet geprüft und es war OK.

 

 

Ich werde die Tage noch ein paar weiter Bricklets bestellen (Outdoor Weather Bricklet & NFC Bricklet  ) um diese dann in meine Testreihe aufnehmen zu können.

Link zu diesem Kommentar
Share on other sites

Hallo zusammen,

 

es hat nun geklappt: Im Paper UI sind nun alle Bricks der Wetterstation als "Things" online. Das mit der Daemon Installation war ein wichtiger Hinweis!

 

@Theo Unter Control im PaperUI liefern alle Bricks ihre Daten. Das BrickletBarometer zeigt allerdings bei Temperatur -NaN an.

 

Und um es nochmal beieinander zu haben:

[*]Openhabian auf dem PI installieren. Am besten so:

[*]In der Console über Putty wie auch im youtube Tutorial schon genutzt folgende Befehle eingeben, um den Brick Daemon Treiber zu installieren:

wget http://download.tinkerforge.com/tools/brickd/linux/brickd_linux_latest_armhf.deb

sudo dpkg -i brickd_linux_latest_armhf.deb

Quelle: https://www.tinkerforge.com/de/doc/Software/Brickd_Install_Linux.html#brickd-install-linux

 

[*]im Windows Explorer mit \\OPENHABIANPI\openHAB-share (BN: openhabian und PW: openhabian) das Verzeichnis aufrufen und in den Ordner openhab-addons die Datei org.openhab.binding.tinkerforge-2.5.0-7-SNAPSHOT.jar legen.

[*]Im Paper UI unter Inbox auf + gehen, Tinkerforge Binding wählen und dann den Brickd hinzufügen. Als IP-Adresse 127.0.0.1 eingeben. Dann auf die gleiche Weise weitere Bricks auswählen und hinzufügen und jeweils die Bricklet uid eingeben.

[*]Wetterstation anschließen oder ist schon dann leuchten alle Bricks unter Configuration/Things als ONLINE auf. Unter Control zeigt es die ankommenden Daten an.

 

 

Link zu diesem Kommentar
Share on other sites

Hallo Kirill,

Hallo Sigi,

 

das stimmt nur noch fast. Ich hab den Branch gewechselt, jetzt ist es tinkerforge3:

https://github.com/theoweiss/openhab2-addons/tree/tinkerforge3

 

Der größte Teil der Entwicklung findet aber hier statt:

https://github.com/theoweiss/tinkerforge-client-codegen

Der Code für die Devices/Bricklets wird von mir nicht mit der Hand geschrieben, sondern Anhand einer Konfiguration aus Templates generiert.

Das Codegenerieren erzeugt einerseits Code in diesem Projekt:

https://github.com/theoweiss/tinkerforge-client

Das ist eine higher level TinkerForge Client Bibliothek, die auch vom openHAB-Binding verwendet wird.

Andererseits im openHAB-Binding die DeviceHandler und Thing-Konfiguration.

 

Um neue Geräte hinzuzufügen muss man also im codegen-Projekt ansetzen.

 

Gruß,

Theo

 

 

Link zu diesem Kommentar
Share on other sites

Es gibt einen neuen Snapshot: https://bintray.com/theoweiss/generic/download_file?file_path=org.openhab.binding.tinkerforge-2.5.0-8-SNAPSHOT.jar

 

Verbesserungen:


  • Die Konfiguration wird jetzt ausgewertet und an die Bricklets übergeben.
     

  • Mehr Konfigurationsmöglichkeiten in der jeweiligen Thing-Konfiguration.
     

  • Thing-Namen bei Discovery sind jetzt konsinstent mit den Namen beim manuellen Anlegen.
     

  • Thing-Namen bei Discovery enthalten die Uid.
     
  • Brickd Port kann jetzt konfiguriert werden.
     
  • Der Brickd-Status wird jetzt besser erkannt.
     

  • Verbesserungen der Vorgehen beim Hinzufügen unde Entfernen von Things und beim Link und Unlink von Channels.
     
  • Verbesserungen beim Setzen der Initialen Werte nach dem Initialisieren eines Things.
     

u.v.m.

 

@duaw: Vielen Dank für die vielen Hinweise (https://www.tinkerunity.org/forum/index.php/topic,1769.msg26578.html#msg26578). Ich denke das meiste sollte jetzt gefixt sein.

 

@sihui: der Brickd Port ist jetzt konfigurierbar und der Brickd-Status sollte sich auch vernünftiger verhalten.

 

@StefanOHAN: ich hab noch nicht überprüft ob deine zwei Punkte jetzt funktionieren, kommt aber noch.

 

Neue Bricklets:

 

AirQuality,

AmbientLight V3

DistanceIR

DistanceIR V2

Temperature V2

TemperatureIR

TemperatureIR V2

UVLight

UVLight V2

 

Link zu diesem Kommentar
Share on other sites

Es gibt einen neuen Snapshot

 

Nach dem ersten Test ist das wohl eine Punktlandung, Respekt!

 

35068905au.png

 

Alle drei bis jetzt (bei mir) unterstützten Bricklets wurden sofort erkannt, alle Statuswerte werden übertragen, die Relais lassen sich schalten.

Logfile ist sauber, keinerlei Fehlermeldungen.

 

Ports lassen sich zuordnen, auch mein nicht default Port 4222 funktioniert.

 

Ich habe mal bei den sehr geschwätzigen Luftdruckwerten die CallBack Period geändert, wird ebenfalls sauber umgesetzt.

 

Dann können wir demnächst ja wieder ohne Sorgen Tinkerforge Produkte kaufen  :)

 

Link zu diesem Kommentar
Share on other sites

Hallo Theo

 

Test mit neuem Binding (openhab.binding.tinkerforge-2.5.0-8-SNAPSHOT.jar )

Technisch habe ich die gleiche Konfiguration wir bei meinem Ersten Test vom „Reply #385 on: February 10, 2019, 19:11:37“ genutzt.

Bei diesem Test habe mit zwei verschieden Methoden  die Things mit dem Item verknüpft, einmal über „Item Linking“ = Simple Mode = on (wie Du in deinem Clip) und einmal mit Simple Mode = off (hier habe ich die Things dann mit dem Item aus meiner *.items Date verknüpft).

Bei beiden Versionen hat es geklappt und ich konnte keine Unterschiede feststellen.

 

Zum Testen habe ich dann im laufenden Betrieb den Masterbrick mit dem angeschlossenen MotionDetector V1 (war über USB angeschlossen) aus gesteckt. Im Log wurde diese sauber dokumentiert mit .

 

„2019-02-16 18:17:27.852 [hingStatusInfoChangedEvent] - 'tinkerforge:motiondetector:2b2a158d:BYG' changed from ONLINE to OFFLINE (GONE)“

 

Nach dem Einstecken wurde das Bricklet gleich wieder online genommen und funktionierte.

 

Im Vergleich zur 2.5.0.7 Version wird jetzt beim MotionDetector V1 auch Switch zum verlinken angeboten (nicht ein Contact wir bei der Vorversion), was mich erfreute :-)

 

Das „Heater“-Element des Humidity V2 Bricklet kann weiterhin nur mit einem contact verlinkt werden. Theo Du hat ja bereits geschrieben dass Du das Thema mit dem Heater noch mal anschauen wirst. Ansonsten hat bei mir alles gut geklappt.

 

@Theo, zwei Fragen

>> muss man immer beim Austausch eines Binding auch über die „openhab-cli console“ das Binding erst entfernen (ich war mir nicht sicher ob es da einen anderen Weg gibt)?

 

>> Wann meinst Du dass Du das 16-Fach I/O in einer  Binding-Version integriert hast ? (hab gesehen da gibt‘s jetzt auch schon V1 & V1, ich nutzte momentan nur 4x die V1 Version, ist beim mir ein wichtiger Bestandteil meiner beiden Konfigurationen)

 

 

@ Sihui, du hast geschrieben dass Du das Polling verändert hast, wo finde ich die Einstellung (Things ?).

Link zu diesem Kommentar
Share on other sites

@StefanOHAN, danke für das Testen.

 

>> muss man immer beim Austausch eines Binding auch über die „openhab-cli console“ das Binding erst entfernen (ich war mir nicht sicher ob es da einen anderen Weg gibt)?

Ehrlich gesagt bin ich mir da auch nicht so sicher. Ich vermute es könnte auch über das PaperUI funktioneren. Ich denke hier ist @sihui der Fachmann, oder Sigi?

 

>> Wann meinst Du dass Du das 16-Fach I/O in einer  Binding-Version integriert hast ?

 

Ok ich nehme mir jetzt das IO16 Bricklet vor. Auch wenn ich es nicht so mag, da es schwieriger ist das in OH zu modellieren, da die Konfiguration bestimmt ob ein Pin ein Sensor oder ein Aktor ist: billige Hardware => teuere Software.

Link zu diesem Kommentar
Share on other sites

Ich denke hier ist @sihui der Fachmann, oder Sigi?

 

Fachmann ist vielleicht etwas hoch gegriffen  :)

Da ich eine manuelle Installation fahre habe ich noch nicht einmal Zugriff auf die CLI ...

 

Fakt jedoch ist: man muss nach einem Binding Wechsel im addons Folder das tmp und cache Verzeichnis löschen. Wenn ich mich nicht täusche wir das über den genannten Befehl in der CLI dann automatisch erledigt.

Dies hat eine lange Zeit bei einer Development Version des Zwave Bindings zu vielen Irritationen geführt. Allerding blieb dabei der Dateiname immer gleich. Bei Theo ändert sich der Dateiname durch die angehängte Versionsnummer.

 

Lange Rede, kurzer Sinn: die Überreste eines älteren Bindings müssen aus den temporären Verzeichnissen raus, entweder über die CLI oder manuell die Inhalte der beiden Verzeichnisse löschen.

 

IO16 finde ich übrigens auch gut, wenn ich in meinem Bastelkarton das Teil wiederfinde wird es sofort an einen freien Port angeschlossen :-)

Link zu diesem Kommentar
Share on other sites

Hallo Theo

 

ich hab als erstes "SmartHome"-Projekt ein kleines Wochenende Haus zu 100% auf Smart umgestellt. Jeder Lichttaster im Gebäude, jeder Schalter (Taster) zum einschalten des Gartenlicht / Gartensteckdosen / Wasserpumpe ...  sind mit einem 16fach-IO verbunden. Das komplette Gebäude läuft jetzt mit 100% Tinkerforge Komponenten, ob Abluftsteuerung, Luftenfeuchtung oder Frostwächter für die Pflanzen, auch die Alarmkontakte für Glasbruch sind an TF 16-Fach angeschlossen. Statusmeldungen rufe ich über das 20x4 Display ab, und mit dem Multi-touch werden Parameter wie Temperatur angepasst. Mit dem Industrial-IN wird geprüft ob die luftklappen offen oder geschlossen sind oder ob am Rauchmelder ein Alarm anliegt.

Somit kann ich alle funktionen ohne "PC" nutzen. Das Ganze läuft jetzt seit fast 3 Jahren mit Openhab 1.8 echt super. Ich würde gerne diese Projekt auf Openhab2 umstellten daher wäre es echt super wenn das 16-Fach IO auch in der neuen Binding enthalten wäre.

 

Ich könnte auch damit leben wenn das 16 Fach IO ausschließlich als "16-Fach IN" im Binding integriert wäre, dass ich die ganzen Taster und Endschalter weiter wie gehabt nutzen kann.

 

In meinem Zweiten Projekt (Abluftsteuerung Keller & Alarmmeldung-Heizung) das sich gerade in Entwicklung befindet benötige ich auch einige Eingänge (z.B. Wenn Therme aktive dann Ablauf aus .....)

 

Daher würde ich mich extrem freuen wenn es mit dem 16-Fach IO klappt, denn ich wüsste auch spontan nicht wie ich diese Eingänge ersetzen sollte. (mir fehlt der Platz im Verteiler um zwei weiter Masterbrick samt 8 x "Industrial-In"

als Ersatz für 2x 16fach I/O ein zu bauen)

Link zu diesem Kommentar
Share on other sites

Hallo StefanOHAN,

 

das klingt ja sehr cool! Hast du irgendwo einen Blog oder sowas über das Projekt? Die Details würden mich schon sehr interessieren, da könnte ich sicher auch noch was lernen.

Und ja, dass IO16 kommt, ich habe schon angefangen. Danach ist das 20x4 dran, dann sollte für dein Projekt alles beieinander sein, oder?

 

Gruß,

Theo

 

Link zu diesem Kommentar
Share on other sites

Hallo Theo,

 

leider habe ich keinen Blog oder eine andere über das Web verfügbare Seite. Es ist für mich auch das erste mal dass ich aktiv in einem Forum mitwirke (hier).

 

Ich kann gerne mal eine grob Zusammenfassung erstellen und Sie hier rein stellen oder Dir senden. Dann kannst ja sagen was Dich interessieren könnte und was nicht. Aktuell ist es so dass meine Rule in Openhab1.8 so oft groß ist dass mein RaspPi3 gut 10 min braucht um nach einem Neustart alles zu laden (ich vermute die Grösse der Rule können man reduzieren wenn man das Konzept komplett neu aufsetzt).

Ich mach mir am Wochenende mal ein paar Gedanken wie ich es sinnvoll darstellen kann.

 

Ob ich natürlich immer die elegante Lösung umgesetzt habe glaub ich nicht ;-)

Einiges wie z.B. die Berechnung der absoluten Luftfeuchte hab ich im KNX Forum gefunden ....

 

viele Grüsse

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