OWServer / OWDevice

Begonnen von Martin Fischer, 11 Januar 2013, 00:16:17

Vorheriges Thema - Nächstes Thema

Martin Fischer

OWServer:

- neues Attribut "nonblocking".[1]
- Dokumentation der get und set Befehle ergänzt.

[1] Die Abfrage der Werte kann dazu führen, das FHEM bis zur Antwort des owservers geblockt ist. Dies bewegt sich in der Regel im Milisekunden-Bereich. Für zeitkritische Module wie z.B. CUL_HM ist dies Kontraproduktiv. Über das Attribut "nonblocking" werden die Abfragen in einem Hintergrundprozess vorgenommen, so dass FHEM an dieser Stelle nicht blockiert ist.

Viel Spaß damit!

Gruß Martin
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

eppi

Hallo zusammen
Könnte mir bitte jemand einen Tipp geben?

Ich habe für meine iButton folgende Routine angelegt:

sub ibutton01_bus1{
  my $ibutton = ReadingsVal("ibutton01","present","off");
  my $bus = ReadingsVal("ibutton01","location","off");
  if($ibutton eq "1" && $bus eq "bus.1" && OldValue("ibutton01") ne "present: 1"){
    fhem "set dummy6 on";
  }
}


und über nachfolgenden Notify wird getriggert:
define ibutton01_test notify (ibutton01) { ibutton01_bus1() }

Sobald ich den entsprechenden iButton am entsprechenden Bus anschliesse wird auch getriggert, jedoch 4x nacheinander!
Log:
2013.01.15 06:50:47 2: dummy set dummy6 on
2013.01.15 06:50:47 2: dummy set dummy6 on
2013.01.15 06:50:48 2: dummy set dummy6 on
2013.01.15 06:50:49 2: dummy set dummy6 on


Da ich den "OldValue" abfrage, sollte doch nur ein notify getriggert werden? Wie kann man das noch besser verriegeln, dass nur einmal getriggert wird?
Danke vielmals, Gruess Dani

PS: Entschuldigt das Double-Posting...

sweetie-pie

Zitat von: Martin Fischer schrieb am Do, 17 Januar 2013 11:55- neues Attribut "nonblocking".[1]
---8<------8<------8<------8<------8<---
Über das Attribut "nonblocking" werden die Abfragen in einem Hintergrundprozess vorgenommen...

Dazu mal eine Frage:
attr myowserver nonblocking 1 verhindert auch, dass fhem total hängt, wenn der OWServer mal weg ist? Ich hatte vermutlich gerade den Fall mit einer Version vom 15.01.2012: Ich hatte den OWServer runtergefahren, rumgebastelt und neu hochgefahren. Dann habe ich kurze Zeit später festgestellt, dass fhem total hing. Nur ein kill -9 half da noch... Danach war alles wieder i.O....

Gruß
 Holger

Dr. Boris Neubert

Zitat von: rudolfkoenig schrieb am Mi, 16 Januar 2013 22:27Ein Beweis koennte man fuehren, indem man in readingsBulkUpdate Log-Ausgaben einbaut, und diese mit den Daten in der Plot-Logfile vergleicht.

Ich habe es mir angesehen und ich verstehe nicht, wie es dazu kommt.

Bitte poste mal die Ausgabe von list für das in Rede stehende Device und ersetze bitte außerdem in fhem.pl in der sub readingsBulkUpdate (ca. ab Zeile 3065) den Code am Ende durch


  my $rv = "$reading: $value";
  Debug "$name: $rv";
  if($changed) {
    $rv = "$value" if($reading eq "state");
    Debug "$name: event $rv";
    addEvent($hash, $rv);
  }
  return $rv;


und poste den Output, und zwar bitte nur den, der sich auf das kritische Device bezieht.

Danke
Boris



Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

det.

Hallo Boris,

das betraf glaube ich meine Frage. Den Code in die FHEM.pl baue ich asap ein (sobald im im Büro bin und direkten Zugriff auf den RaspbPi habe), oder geht das über die Web Oberfläche?
 hier nun die Ausgabe nach list:
Internals:
   DEF        26.E8B804000000 60
   IODev      OWServer
   NAME       M1
   NR         21
   STATE      H: 37.3 T: 19.5°C
   TYPE       OWDevice
   Readings:
     2013-01-19 17:17:32   HIH4000/humidity 37.2745
     2013-01-19 10:17:25   VAD             1.79
     2013-01-19 10:17:25   VDD             4.62
     2013-01-19 17:17:32   state           VAD: 1.79  VDD: 4.62  temperature: 19.4688
     2013-01-19 10:17:25   temperature     19.4688
     2013-01-18 21:33:46   udate           1
   Fhem:
     address    26.E8B804000000
     alerting   0
     bus        bus.0
     interfaces multisensor
     interval   60
     getters:
       B1-R1-A/gain
       B1-R1-A/offset
       B1-R1-A/pressure
       CA
       DATANAB/humidity
       EE
       HIH4000/humidity
       HTM1735/humidity
       IAD
       MultiSensor/type
       S3-R1-A/current
       S3-R1-A/gain
       S3-R1-A/illumination
       VAD
       VDD
       address
       crc8
       date
       disconnect/date
       disconnect/udate
       endcharge/date
       endcharge/udate
       family
       humidity
       id
       locator
       offset
       pages/page.0
       pages/page.1
       pages/page.2
       pages/page.3
       pages/page.4
       pages/page.5
       pages/page.6
       pages/page.7
       pages/page.ALL
       r_address
       r_id
       r_locator
       temperature
       type
       udate
       vis
     polls:
       HIH4000/humidity
     setters:
       B1-R1-A/gain
       B1-R1-A/offset
       CA
       DATANAB/reset
       EE
       IAD
       S3-R1-A/gain
       date
       disconnect/date
       disconnect/udate
       endcharge/date
       endcharge/udate
       offset
       pages/page.0
       pages/page.1
       pages/page.2
       pages/page.3
       pages/page.4
       pages/page.5
       pages/page.6
       pages/page.7
       pages/page.ALL
       udate
     state:
       VAD
       VDD
       temperature
Attributes:
   IODev      OWServer
   model      DS2438
   polls      HIH4000/humidity
   room       Server
   stateFormat {sprintf("H: %.1f T: %.1f°C",ReadingsVal("M1","HIH4000/humidity",0), ReadingsVal("M1","temperature",0))}

LG
det.

Dr. Boris Neubert

Zitat von: det. schrieb am Sa, 19 Januar 2013 17:28hier nun die Ausgabe nach list:
Internals:
...
     polls:
       HIH4000/humidity
...
Attributes:
   polls      HIH4000/humidity
...
   stateFormat {sprintf("H: %.1f T: %.1f°C",ReadingsVal("M1","HIH4000/humidity",0), ReadingsVal("M1","temperature",0))}


Moment mal, da steht, daß nur HIH4000/humidity gepollt wird. Dann werden andere Readings natürlich nicht mehr aktualisiert. Bitte setze bei den polls auch M1, also


attr ... polls HIH4000/humidity,M1


Das hat gar nichts mit dem stateFormat zu tun.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

det.

Hallo Boris,

danke für die Hilfe. Jetzt geht es mit

attr ... polls HIH4000/humidity,temperature


und dank Reinerlein aus einem Post von heute früh klappt auch das LOG:

[code][REGEXP
M1:.*HIH4000/humidity:.*|M1:temperature:\s*-{0,1}\d+[\.\d]*$
/code]

LG
det.

Martin Fischer

hallo holger,

> attr myowserver nonblocking 1 verhindert auch, dass fhem total hängt, wenn der OWServer mal weg ist?

leider nein. es gäbe einen weg, den wir allerdings im moment noch nicht umsetzen, da ein direkter dialog mit den owfs entwicklern steht. der fehler kommt zustande, da in dem entspr. ownet.pm keine rückmeldung kommt, wenn ein abbruch erfolgt ist.

das wollen sie nun fixen. wenn es aber länger dauert, werden boris und ich "plan b" umsetzen, der das ebenfalls verhindert und nicht sonderlich aufwendig ist.

aber der erstere weg ist halt der elegantere, wenn es am ursprung gefixed wird.

gruss martin
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

Martin Fischer

OWDevice:

- neuer set Befehl "interval" [1]

[1] Über den neuen set Befehl "interval" kann während der Laufzeit der Intervall zum Auslesen der Daten geändert werden. Beispiel:
set mySens interval 30
Der geänderte Wert wird nicht gespeichert. Nach einem Neustart gilt der während des define gesetzte Intervall.

Viel Spaß

Martin
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

Tobias

Zitat von: Martin Fischer schrieb am Do, 24 Januar 2013 16:01OWDevice:

- neuer set Befehl "interval" [1]

[1] Über den neuen set Befehl "interval" kann während der Laufzeit der Intervall zum Auslesen der Daten geändert werden. Beispiel:
set mySens interval 30
Der geänderte Wert wird nicht gespeichert. Nach einem Neustart gilt der während des define gesetzte Intervall.

Sehr schön.... so kann - wenn die Alarmanlage scharf ist - das Abfrageintervall der DS2406 Fensterkontakte von zb. 15sek auf 3sek erhöht werden.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

dougie


Auch von mir ein Dankeschön!

Kurzes Feedback: der Eintrag wird bei mir aber nirgendwo im Device angezeigt (taucht aber als STATE auf) und den Eintrag im Log vermag ich nicht zu interpretieren :-)

2013.01.25 10:46:19 3: set OW_TankSensor interval 1800 : 1359108979
2013.01.25 10:46:19 3: 1359108979


VG
Ralf

Martin Fischer

> Kurzes Feedback: der Eintrag wird bei mir aber nirgendwo im Device angezeigt

beim aufruf von
fhem> list OW_TankSensor

siehst du es im abschnitt "Fhem:"

> (taucht aber als STATE auf) und den Eintrag im Log vermag ich nicht zu interpretieren :-)
> 2013.01.25 10:46:19 3: set OW_TankSensor interval 1800 : 1359108979
> 2013.01.25 10:46:19 3: 1359108979[/code]

ich kann das nicht nachstellen, weiss im moment auch nicht woher der eintrag ": 1359108979" kommt.

kann das noch wer bestätigen?

gruss martin
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

MNeugebauer

Hallo,
zunächst möchte ich mich bei den Entwicklern bedanken für die Arbeit. Ich nutze FEHM seit einem Jahr und mache jetzt die ersten Gehversuche mit 1-wire.
Ich habe einen Temperatur/Luftdrucksensor EDS0066 und habe diesen mit folgendem Code in OWDevice eingebunden:

$owdevice{"7E"} = {
# EDS0066 - Multisensor temperature Pressure
"read" => [ qw(EDS0066/temperature),
         qw(EDS0066/pressure)],
"write" => [],
"poll" => [ qw(EDS0066/temperature EDS0066/pressure) ],
"state" => [ qw(EDS0066/temperature EDS0066/pressure) ],
"interface" => "multisensor",
   };


Für mich reichen diese Minimal-Daten. Ist es möglich diesen Code in die Quelle zu übernehmen, damit nicht nach jedem Update eine manuelle Erweiterung notwendig ist ?

Ohne Erweiterung kommt folgende Fehlermeldung:
"myLocalOWServer: Autocreate: unknown familycode '7E' found. Please report this!"

Dr. Boris Neubert

Zitat von: MNeugebauer schrieb am Mo, 28 Januar 2013 18:33Für mich reichen diese Minimal-Daten. Ist es möglich diesen Code in die Quelle zu übernehmen, damit nicht nach jedem Update eine manuelle Erweiterung notwendig ist

Mit einer Modifikation eingecheckt.

Danke und Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Schorsch

Moin!

Erstmal großes Kompliment: Steige gerade auf OWServer/OWDevice um und alle meine Devices werden problemlos erkannt! Die meisten Ausgaben habe ich dank fhemwiki mit stateFormat anpassen können.

Ein Problem habe ich nur mit den Zählern, denn hier muss ich mit userReadings arbeiten und obwohl ich Boris Ankündigung und commandref gelesen habe, hakt es wegen meiner unzureichenden Perl-Kenntnisse.

Vom Zähler kommt dieses state:

counters.A:881591 counters.B:1

Behandeln muss ich es wie folgt:

  • nur counters.A verwenden
  • Wert counters.A mit Faktor 0.01 versehen (1 Impuls = 0,01 m3, ich möchte m3)
  • Ergebnis von Schritt 2. erhöhen um 1394735 (Stand des Gaszählers in m3, als ich den DS2423 mit Stand "0" dran gehängt habe

Wenn ich jetzt die Erklärung von Boris aus http://forum.fhem.de/index.php?t=msg&goto=58918&rid=0&srch=userReadings#msg_58918 herannehme (in der commandref steht eher weniger) und beginne, das für mich anzupassen, komme ich auf das hier:

attr myGasMeter userReadings erdgas { (ReadingsVal("myGasMeter","counters.A",0)+AttrVal("myGasMeter","myBasis",0))/100.0;; }

Darin steckt schon der Faktor 0.01. Unklar ist mir aber "myBasis" - kommt hier der Offset um 1394735 rein? Oder wofür steht myBasis? Dazu habe ich nichts gefunden. Wo würde man den Offset addieren?

Danke!
Georg