Seite 2 von 3

Re: Wasserzähler

Verfasst: 14. Apr 2020 13:25
von Boxana
Du benutzt folgende Syntax:

Code: Alles auswählen

(Bewaesserungsautomatik.state == ON || Regen_Sensor_1.state == ON)
ist dass das gleiche ?

Code: Alles auswählen

(Bewaesserungsautomatik.state == ON) && (Regen_Sensor_1.state == ON)

Wenn ich die Begegnung abhängig vom Sonnenuntergang / Aufgang machen möchte, und ich z.B. 3 Stunden nach Sonnenuntergang starten möchte.

Kann ich das im trigger der regel einbauen in der Art Sonnenuntergang + 3 stunden oder muss ich das global mit dem Offset im Binding definieren.

Re: Wasserzähler

Verfasst: 14. Apr 2020 13:47
von peter-pan
Boxana hat geschrieben: 14. Apr 2020 13:25 Du benutzt folgende Syntax:
...nicht ganz. "||" ist ODER, "&&" ist UND. Im ersten Fall muss eine der beiden Bedingungen erfüllt sein. Im zweiten Fall müssen beide zutreffen.

Da es sich um ein "Event" handelt, denke ich, dass du mit einem Offset triggern musst.

Re: Wasserzähler

Verfasst: 14. Apr 2020 14:20
von Boxana
könnte ich dann auch das schreiben:

Code: Alles auswählen

(Bewaesserungsautomatik.state == ON && Regen_Sensor_1.state == ON)
Ich habe jetzt nr noch eine ().

Dann habe ich so ein beispiel gefunden.

Code: Alles auswählen

Channel 'astro:sun:37f6fe1d:set#event' triggered START
then
createTimer(now.plusMinutes(30))
das würde ja funktionieren. Hat das Nachteile? Ist dann diese rule für 30 Minuten quasi offen?

Und dann habe ich noch gelesen das es einen trigger im Astro Binding gibt der die Nacht als Event nutzt. Wann ist Nacht definiert?

Code: Alles auswählen

Channel 'astro:sun:2e6bba0c:night#event' triggered START

Re: Wasserzähler

Verfasst: 14. Apr 2020 18:04
von peter-pan
Die Bedingung sollte so m.E. auch funktionieren.
Was den Timer angeht, bin ich auch kein Spezialist. Aber ich denke die Regel mit dem Timer könnte funktionieren. So wie ich das verstehe, ist die Regel aber nicht mehr offen, da sie ganz normal abgearbeitet wird. Das ist ja der Unterschied zu "sleep".

Astro-Binding:
Heute startet die Nacht um 22:10 Uhr (bei mir ;) ). Das ist aber je nach Wohnort unterschiedlich.

Ich gehe mal davon aus, dass du das Astro-Binding installiert hast und auch zwei Things (sun + moon) angelegt hast. Dann kannst du für dein Offset zusätzlich ein weiteres Thing mit entsprechenden Channels anlegen.

Ein Beispiel:

Code: Alles auswählen

//    Astro - Binding Geo-Position  geolocation="48.887211,9.87612,502"

Thing astro:sun:local     "Sonnen Daten"    [geolocation="41.32145,7.65890,123", interval=300]
Thing astro:moon:local    "Mond Daten"      [geolocation="41.32145,7.65890,123", interval=300]
                                        

Thing astro:sun:plus30   "Offset 30"        [geolocation="41.32145,7.65890,123", interval=300]{
  Channels:
    Type rangeEvent : set#event [
      offset=30
    ]
    Type rangeEvent : noon#event[
      offset=30
    ]
    Type start : set#start [
      offset=30
    ]
    Type end : set#end [
      offset=30
    ]
  }

Ich habe dem Thing der Einfachheit halber den Namen "plus30" gegeben. Es hat zwei Event-Channels (Trigger-Channels) und zwei normale Channels für die Nutzung in Verbindung mit einem Item.

.items

Code: Alles auswählen

DateTime  Sunset_Time  "Sonnenuntergang [%1$ta, %1$td.%1$tm.%1$ty,  %1$tH:%1$tM]" <sunset> (gAstro) {channel="astro:sun:plus30:set#start"}
Vielleicht hilft dir das weiter.Allerdings weiss ich nicht, wie das mit PaperUI geht.

Re: Wasserzähler

Verfasst: 14. Apr 2020 19:26
von udo1toni
In Paper UI kannst Du den Offset einfach in den entsprechenden Channels eintragen. Wenn Du die Channel zusätzlich noch ohne Offset nutzen möchtest, musst Du auch ein zweites Thing anlegen, wie von @peter-pan per Text-Datei beschrieben, das geht genauso auch über die UI :)

Re: Wasserzähler

Verfasst: 15. Apr 2020 09:12
von Boxana
Darum ging es mir, das ich an einer anderen Stelle schon ein Offset nutze und wenn es nur ein weiteres thing benötigt um das zu umgehen ist das gut.

Könntest du vielleicht noch einmal über deine Script Vorlage schauen?
{
"resource": "/share/MD0_DATA/.qpkg/OpenHab/conf/rules/garten.rules",
"owner": "_generated_diagnostic_collection_name_#0",
"code": "org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types",
"severity": 8,
"message": "Type mismatch: cannot convert from boolean to Number",
"startLineNumber": 18,
"startColumn": 21,
"endLineNumber": 18,
"endColumn": 75
}

Code: Alles auswählen

    nWasseruhrAlt = (Rasen_Zaehlerstand_Wasseruhr.state instanceof Number)  

Code: Alles auswählen

logInfo("sprinkling","Zählerstand bei Start: {} cm³", nWasseruhrAlt ) 
2020-04-14 13:39:57.056 [INFO ] [se.smarthome.model.script.sprinkling] - Zählerstand bei Start: true cm³

Re: Wasserzähler

Verfasst: 15. Apr 2020 10:57
von Boxana
Unbenannt.png
den Fehler in der zeile 18 konnte ich beheben glaube ich .

Re: Wasserzähler

Verfasst: 15. Apr 2020 12:08
von Boxana
habe es am laufen bis auf diese abfrage.

Code: Alles auswählen

    /*if(!(Rasen_Zaehlerstand_Wasseruhr.state as Number )) {                          // Zählerstand ist keine gültige Zahl
        logWarn("sprinkling","Beregnungsstop - Zählerstand kann nicht abgerufen werden!")  // Warnmeldung
        return;                                                                            // Und Abbruch der Rule
    }*/
was macht der teil? so wie ich es interpretiert soll es überprüfen ob da überhaupt eine zahl abgelegt

Re: Wasserzähler

Verfasst: 15. Apr 2020 14:03
von udo1toni
Nein, der Code ist so nicht richtig. Kannst Du bitte Deinen Code nicht als Screenshot posten, sondern als Text (markiert mit Code-Tags und vollständig)? So sieht man nur einen Teil des Codes und kann auch nicht darauf zitieren oder den Code überprüfen lassen (also ohne ihn von Hand abzutippen).

Ich habe in Zeile 13 einen Copy&Paste Fehler drin. Ich habe das oben korrigiert.

if() ist eine Boolean Funktion. Das heißt, der Inhalt der Klammern muss true oder false ergeben.
! ist die Boolean Funktion NOT !true = false, !false = true
instanceof ist eine Funktion, die true oder false liefert, je nachdem, ob der angegebene wert eine Instanz vom angegebenen Typ ist.

Code: Alles auswählen

if(!(Rasen_Zaehlerstand_Wasseruhr.state instanceof Number ))
bedeutet also: Falls der Status des Items Rasen_Zaehlerstand_Wasseruhr nicht vom Typ Number ist.

Du hast aus dem instanceof ein as gemacht. Lustigerweise habe ich in meinem Code an der anderen Stelle aus Versehen instanceof stehen lassen, womit die Zeile

Code: Alles auswählen

    nWasseruhrAlt = (Rasen_Zaehlerstand_Wasseruhr.state instanceof Number)                 // alten Zählerstand retten
also versucht, einer Number Variablen einen Boolean Wert zuzuweisen. In dieser Zeile gehört also ein as statt des instanceof:

Code: Alles auswählen

    nWasseruhrAlt = (Rasen_Zaehlerstand_Wasseruhr.state as Number)                         // alten Zählerstand retten

Re: Wasserzähler

Verfasst: 15. Apr 2020 23:07
von Boxana
Sorry das mit dem Screenshot,
wollte nur zeigen welcher wert in dem Item abgelegt ist.