Hi Ralph,

I think your suggestion is the closest to what I was envisaging, so I had a 
bit of a stab at it this morning.

Created a ReadMqttScript.py file, copied your script into it and made it 
executable. Changed your IP address to the one I'm using (192.168.1.130) 
and gave it a try:

weewx@raspberrypi:~ $ ./ReadMqttScript.py
Connected with result code 0
^CTraceback (most recent call last):
  File "./ReadMqttScript.py", line 46, in <module>
    client.loop_forever()
  File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 
1578, in loop_forever
    rc = self.loop(timeout, max_packets)
  File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 
1057, in loop
    socklist = select.select(rlist, wlist, [], timeout)
KeyboardInterrupt


It will sit at "Connected with result code 0" for as long as I leave it 
there.  I assume it's something to do with the IP address I'm telling it to 
connect to - I have tried "localhost" and "127.0.0.1" (the broker and weewx 
run on the same RPi) but to no avail either. Certainly no filepile is being 
produced in the /var/tmp directory.

The broker is working - I am able to see the sensor post to it via the PC 
I'm working from.

If anyone has some time to provide some advice it would be most appreciated 
- I'm most definitely at the lower end of competence when it comes to doing 
much more than following guides.

On Sunday, 7 April 2019 02:52:06 UTC+13, Ralph Underwood wrote:
>
> I have a small python program that subscribes to mqtt and writes a text 
> file. I then use the filepile as a service to get the data into WeeWx. The 
> "main" data comes from a Ultimeter station via the driver.
>
> I came up with this approach while I was modifing/testing using the 
> WeeWxMQTT driver a service.  It works and I put the conversion to a service 
> on the back burner.
>
> #!/usr/bin/python
> import syslog
> import time
> import ftplib
> import time
> import logging
> import paho.mqtt.client as mqtt
>  
> MQTT_SERVER = "10.0.1.47"
> MQTT_TOPIC = "weather"
>
>  # The callback for when the client receives a CONNACK response from the 
> server.
> def on_connect(client, userdata, flags, rc):
>     print("Connected with result code "+str(rc))
>  
>     # Subscribing in on_connect() means that if we lose the connection and
>     # reconnect then subscriptions will be renewed.
>     client.subscribe(MQTT_TOPIC)
>  
> # The callback for when a PUBLISH message is received from the server.
> def on_message(client, userdata, msg):
>     
>     #print(msg.topic+" "+str(msg.payload))
>     #print(str(msg.payload))
>    
>     m1 = (msg.payload).replace(':',' = ')
>     m2 = m1.split(",")
>     m3 = m2[1]
>     m4 = "soilTemp4 = 32"
>     file = open('/var/tmp/filepile.txt' , 'w')
>     file.write(str(m3)+'\n')
>     file.write(str(m4)+'\n')
>     #print(m3)  
>     #print (m4)       
>     #print("file stent")
>     file.close()
>  
>
>    
> client = mqtt.Client()
> client.on_connect = on_connect
> client.on_message = on_message
>  
> client.connect(MQTT_SERVER, 1883, 60)
>  
> client.loop_forever()
>
>
> There are some print lines which are commented out for debugging. I also 
> use this to set soilTemp4 to 32 degrees - that's so I can easily add a 
> freezing level line on charts.
>
>
> from weewx.conf:
>
> # Options for extension 'filepile'
> [FilePile]
>     # Where to find the incoming new data:
>     filename = /var/tmp/filepile.txt
>     # What unit system they will be in.
>     # Choices are 'US', 'METRIC', or 'METRICWX'
>     unit_system = US
>     # Map from incoming names, to WeeWX names.
>     [[label_map]]
>         # Example: incoming observation 'filelabel1' will be mapped to 
> 'extraTemp4'
>         INTE = extraTemp2
>         
>
>
>
>
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to weewx-user+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to