FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

Für Geräte von froggit
Benutzeravatar
olicat
Offline
Beiträge: 2389
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 42 mal
Danksagung erhalten: 480 mal
Kontaktdaten:

FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#1

Beitrag von olicat »

Hi!
Ich würde gerne mit dem Homematic IP Regensensor das srain_piezo des (nicht vorhandenen) WS90 bzw. der Konsole an FOSHKplugin nachstellen um die Regendauer besser zu erfassen, da der (vorhandene) WH40H systembedingt zu träge reagiert.
Es ist ueberhaupt kein Problem, Werte externer Datenquellen in FOSHKplugin zu verarbeiten oder Ecowitt-Sensoren zu emulieren, sofern man diese Werte hat (darauf zugreifen kann).
Siehe dazu die Exec-Funktion sowie die Script-Funktion.

Wie kannst Du denn den Status Deines Sensors abfragen? Geht das irgendwie per http?
Der hinzuzufuegende Key waere dann tatsaechlich srain_piezo - wobei 0=es regnet nicht und 1=es regnet:

Code: Alles auswählen

#!/bin/bash
# make script executable - chmod ug+x addScript.sh
# use in config file as Export\ADD_SCRIPT = ./addScript.sh

# the original output data from FOSHKplugin
instr="$@"

# if sensor outputs 0 for no rain and 1 for is raining via http call
state=`curl -s http://192.168.15.186/rainstate`
if [ ! -z "${state}" ]; then statestring="&srain_piezo=${state}"; fi

# merge the original string with the new components
echo "${instr}${statestring}"
Oliver
rsgaf
Offline
Beiträge: 17
Registriert: 16 Aug 2021, 15:32
Hat sich bedankt: 3 mal

Re: FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#2

Beitrag von rsgaf »

Hi Oliver,

vielen Dank die Eröffnung des neuen Themas.

Was ich bis jetzt herausgefunden habe, müsste die Homeassistant Abfrage per http über REST API möglich sein:
https://developers.home-assistant.io/docs/api/rest/
Die Abfrage erfolgt anscheinend per Script.

Andere Alternative wäre die Abfrage aus Homematic CCU3 per http:
Die Abfrage mit

Code: Alles auswählen

http://[IP-Adresse der CCU]/addons/xmlapi/state.cgi?sid=INSERTTOKEN&datapoint_id=HmIP-RF.002762698ABB74:1.RAINING
ergibt die Antwort

Code: Alles auswählen

-<state>
<datapoint ise_id="HmIP-RF.002762698ABB74:1.RAINING" value="false"/>
</state>
Bei Regen müsste dann enstprechend "true" ausgegeben werden.

Ich hoffe, das hilft weiter.
HP2550, GW3000A, WH2650A
WS68, WN31, WN32-EP, WN32P, WN34L, WH40H, WH41, WH46D, WH51, WH55, WH57, LDS01
SIAP SMarTCELLino
WeeWX 5.1, FOSHKplugin
Fischer Typ 104, Greisinger G 1110, Starpath USB Baro
Benutzeravatar
olicat
Offline
Beiträge: 2389
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 42 mal
Danksagung erhalten: 480 mal
Kontaktdaten:

Re: FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#3

Beitrag von olicat »

Hi!

Dann wuerde ich das wohl so versuchen:

Code: Alles auswählen

#!/bin/bash
# name this script addScript.sh and place it in the FOSHKplugin directory
# make script executable - chmod ug+x addScript.sh
# use in config file as Export\ADD_SCRIPT = ./addScript.sh

# the original output data from FOSHKplugin
instr="$@"

# address to gather the state from
address="http://foshkplugin.phantasoft.de/temp/rsgaf.html?sid=INSERTTOKEN&datapoint_id=HmIP-RF.002762698ABB74:1.RAINING

# if sensor outputs 0 for no rain and 1 for is raining via http call
statetext=`curl -s $address`

if [ ! -z "${statetext}" ]; then 
  if [[ $statetext == *"value=\"true\""* ]]; then
    statestring="&srain_piezo=1"
  else
    statestring="&srain_piezo=0"
  fi
fi

# merge the original string with the new components
echo "${instr}${statestring}"
Du musst address natuerlich passend mit Deiner URL fuellen.
Wird der String value="true" gefunden, wird srain_piezo=1 an den eingehenden String der Konsole angehaengt. Ansonsten ein srain_piezo=0.

Oliver
Zuletzt geändert von olicat am 15 Jun 2025, 20:40, insgesamt 2-mal geändert.
rsgaf
Offline
Beiträge: 17
Registriert: 16 Aug 2021, 15:32
Hat sich bedankt: 3 mal

Re: FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#4

Beitrag von rsgaf »

Ich habe die addScript.sh erstellt und die URL für die CCU3 Abfrage ergänzt.

Code: Alles auswählen

http://[IP-Adresse der CCU]/addons/xmlapi/state.cgi?sid=INSERTTOKEN&datapoint_id=HmIP-RF.002762698ABB74:1.RAINING
Leider funktioniert die Abfrage nicht, bekomme folgende Meldung:

Code: Alles auswählen

Jun 15 13:44:17 raspberrypi foshkplugin[20735]: curl: no URL specified!
Muss bei der URL zwingend das .html dahinter?
Die Ausgabe im Browser funktioniert nämlich nur ohne.
HP2550, GW3000A, WH2650A
WS68, WN31, WN32-EP, WN32P, WN34L, WH40H, WH41, WH46D, WH51, WH55, WH57, LDS01
SIAP SMarTCELLino
WeeWX 5.1, FOSHKplugin
Fischer Typ 104, Greisinger G 1110, Starpath USB Baro
Benutzeravatar
Werner
Offline
Beiträge: 165
Registriert: 07 Dez 2020, 18:23
Wohnort: Lackenhäuser
Hat sich bedankt: 1 mal
Danksagung erhalten: 45 mal
Kontaktdaten:

Re: FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#5

Beitrag von Werner »

Grenze den kompletten String mit Anführungszeichen ein:

Code: Alles auswählen

"http://[IP-Adresse der CCU]/addons/xmlapi/state.cgi?sid=INSERTTOKEN&datapoint_id=HmIP-RF.002762698ABB74:1.RAINING"
Curl scheitert sonst am "&"
rsgaf
Offline
Beiträge: 17
Registriert: 16 Aug 2021, 15:32
Hat sich bedankt: 3 mal

Re: FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#6

Beitrag von rsgaf »

Das war's, vielen Dank Werner.
Jetzt wird der Regenstatus in Weewx angezeigt.

Vielen Dank Oliver für die Hilfe und das Script!

Jetzt warte ich mal auf den nächsten Regen :D
HP2550, GW3000A, WH2650A
WS68, WN31, WN32-EP, WN32P, WN34L, WH40H, WH41, WH46D, WH51, WH55, WH57, LDS01
SIAP SMarTCELLino
WeeWX 5.1, FOSHKplugin
Fischer Typ 104, Greisinger G 1110, Starpath USB Baro
rsgaf
Offline
Beiträge: 17
Registriert: 16 Aug 2021, 15:32
Hat sich bedankt: 3 mal

Re: FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#7

Beitrag von rsgaf »

Die ersten Regenschauer sind durchgezogen, der Regenstatus in Weewx ändert sich aber leider nicht.
Der Ausgabestring der CCU3 ändert sich auf

Code: Alles auswählen

<state>
<datapoint ise_id="HmIP-RF.002762698ABB74:1.RAINING" value="true"/>
</state>
das Script gibt aber dauerhaft srain_piezo=0 aus.

Kann es sein, dass der Status aus der URL nicht erkannt wird?
HP2550, GW3000A, WH2650A
WS68, WN31, WN32-EP, WN32P, WN34L, WH40H, WH41, WH46D, WH51, WH55, WH57, LDS01
SIAP SMarTCELLino
WeeWX 5.1, FOSHKplugin
Fischer Typ 104, Greisinger G 1110, Starpath USB Baro
Benutzeravatar
olicat
Offline
Beiträge: 2389
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 42 mal
Danksagung erhalten: 480 mal
Kontaktdaten:

Re: FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#8

Beitrag von olicat »

Hm,

in meiner Versuchsdatei unter

Code: Alles auswählen

address="http://foshkplugin.phantasoft.de/temp/rsgaf.html?sid=INSERTTOKEN&datapoint_id=HmIP-RF.002762698ABB74:1.RAINING
klappt das tadellos.
Es wird im Script ja auch nur geprueft, ob der Substring value="true" in der Ausgabe von curl enthalten ist. Falls ja wird srain_piezo=1 gesetzt.

Oliver
rsgaf
Offline
Beiträge: 17
Registriert: 16 Aug 2021, 15:32
Hat sich bedankt: 3 mal

Re: FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#9

Beitrag von rsgaf »

Kann es eventuell daran liegen, dass die Ausgabe in XML erfolgt?
HP2550, GW3000A, WH2650A
WS68, WN31, WN32-EP, WN32P, WN34L, WH40H, WH41, WH46D, WH51, WH55, WH57, LDS01
SIAP SMarTCELLino
WeeWX 5.1, FOSHKplugin
Fischer Typ 104, Greisinger G 1110, Starpath USB Baro
Benutzeravatar
olicat
Offline
Beiträge: 2389
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 42 mal
Danksagung erhalten: 480 mal
Kontaktdaten:

Re: FOSHKplugin: Einbinden externer Datenquellen - Sensoren emulieren

#10

Beitrag von olicat »

Hi!
Kann es eventuell daran liegen, dass die Ausgabe in XML erfolgt?
Dem Script sollte eigentlich egal sein, welches Format die Ausgabe hat sofern es sich um ASCII handelt, das geparsed werden kann.
Fuege bitte mal vor dem ersten if-Befehl also hinter der statetext-Deklaration) folgende Zeile ein:

Code: Alles auswählen

echo *"$statetext"*
und starte das Script manuell auf der Konsole:

Code: Alles auswählen

addScript.sh dies=das&jenes=nix
und poste das Ergebnis.
Danke!

Oliver
Antworten