I have a simple linux/bash command line program that reads an analogue port and outputs the voltage. I would like this voltage available inside fhem. I have tried a number of combinations of the shell commands in the FHEM Command types entry but can't get anything to work :-[. For example
set ADC "/opt/fhem/scripts/analog.py"
or
{ fhem `/opt/fhem/scripts/analog_with_set_cmd_output_as_well.py` }
But these just set ADC to the string "/opt/fhem/scripts/analog.py" or similar!
The only way I can make this happen is to create a bash script containing
echo set ADC `/opt/fhem/scripts/analog.py` | ncat localhost 7072
This seems quite cumbersome requiring the telnet port to be enabled/open and ncat to be installed on the system.
As this seems to be an obvious thing to want to do I am hoping that someone can provide some simple fhem examples to get me going.
Any help would be appreciated.
Hi jacko,
there would be a way directly with python https://wiki.fhem.de/wiki/CsrfToken-HowTo#Python
Or there would be a way over HTTP https://github.com/heinz-otto/fhemcl
That prevents you from define telnet port 7072 - but not really easier ;)
Otto
What about MQTT? On the client, you can install mosquitto-client (https://mosquitto.org/) and send any value as JSON string to your FHEM MQTT broker (https://fhem.de/commandref.html#MQTT2_SERVER) and save it in device (https://fhem.de/commandref.html#MQTT2_DEVICE).
The JSON string can be generated through a bash script as well - and via cronjob executed regularly. I use it to send some pi values to (another) FHEM pi:
#!/bin/bash
mqtt_host="FHEM-IP"
mqtt_port="FHEM-MQTT-SERVER-PORT"
mqtt_user="FHEM-MQTT-CLIENT-USER"
mqtt_pass="FHEM-MQTT-CLIENT-PSWD"
mqtt_clientid="ID_of_your_client" #give it a name
mqtt_topicid="TOPICID" # the topic ID you want to react on in FHEM
jsontxt='{'
#date date +%FT%T
jsontxt+='"time":"'
jsontxt+=$(date +%FT%T)
jsontxt+='",'
#host name
jsontxt+='"hostname":"'
jsontxt+=$(hostname)
jsontxt+='",'
#kernel version
jsontxt+='"kernel_version":"'
jsontxt+=$(uname -r)
jsontxt+='",'
#[...]
jsontxt+='}'
mosquitto_pub -h $mqtt_host -p $mqtt_port -u $mqtt_user -P $mqtt_pass -i $mqtt_clientid -t tele/$mqtt_topicid/sysstat -m "$jsontxt"
The FHEM MQTT Device (https://fhem.de/commandref.html#MQTT2_DEVICE) will have an attribute readingList like
ID_of_your_client:tele/TOPICID/sysstat:.* { json2nameValue($EVENT) }
and converts all JSON elements into readings.
Thank you for the excellent solutions. I am relieved that I hadn't missed something in the FHEM Command Reference that would enable me to do this directly :).
Although I use mqtt extensively to communicate between my IOT systems I am using the fhemcl solution as this is local and doesn't rely on my mqtt broker.
The rapid response, as always, is greatly appreciated.